Browse Source

Add HandleScope to http-parser binding

Fixes production crashes. We were not able to reproduce in the test suite.
v0.7.4-release
Ryan Dahl 13 years ago
parent
commit
73cf8e82e7
  1. 16
      src/node_http_parser.cc

16
src/node_http_parser.cc

@ -120,6 +120,7 @@ static size_t current_buffer_len;
#define HTTP_CB(name) \ #define HTTP_CB(name) \
static int name(http_parser* p_) { \ static int name(http_parser* p_) { \
HandleScope scope; \
Parser* self = container_of(p_, Parser, parser_); \ Parser* self = container_of(p_, Parser, parser_); \
return self->name##_(); \ return self->name##_(); \
} \ } \
@ -128,6 +129,7 @@ static size_t current_buffer_len;
#define HTTP_DATA_CB(name) \ #define HTTP_DATA_CB(name) \
static int name(http_parser* p_, const char* at, size_t length) { \ static int name(http_parser* p_, const char* at, size_t length) { \
HandleScope scope; \
Parser* self = container_of(p_, Parser, parser_); \ Parser* self = container_of(p_, Parser, parser_); \
return self->name##_(at, length); \ return self->name##_(at, length); \
} \ } \
@ -212,10 +214,12 @@ struct StringPtr {
Handle<String> ToString() const { Handle<String> ToString() const {
if (str_) HandleScope scope;
return String::New(str_, size_); if (str_) {
else return scope.Close(String::New(str_, size_));
return String::Empty(); } else {
return scope.Close(String::Empty());
}
} }
@ -513,6 +517,8 @@ public:
private: private:
Local<Array> CreateHeaders() { Local<Array> CreateHeaders() {
HandleScope scope;
// num_values_ is either -1 or the entry # of the last header // num_values_ is either -1 or the entry # of the last header
// so num_values_ == 0 means there's a single header // so num_values_ == 0 means there's a single header
Local<Array> headers = Array::New(2 * (num_values_ + 1)); Local<Array> headers = Array::New(2 * (num_values_ + 1));
@ -522,7 +528,7 @@ private:
headers->Set(2 * i + 1, values_[i].ToString()); headers->Set(2 * i + 1, values_[i].ToString());
} }
return headers; return scope.Close(headers);
} }

Loading…
Cancel
Save