diff --git a/src/http-parser/AUTHORS b/src/http-parser/AUTHORS index c0d2fe4..590d808 100644 --- a/src/http-parser/AUTHORS +++ b/src/http-parser/AUTHORS @@ -35,3 +35,4 @@ Simon Zimmermann Erik Dubbelboer Martell Malone Bertrand Paquet +BogDan Vatra diff --git a/src/http-parser/README.md b/src/http-parser/README.md index 3815e36..ef1bf6e 100644 --- a/src/http-parser/README.md +++ b/src/http-parser/README.md @@ -36,7 +36,7 @@ using `http_parser_init()` and set the callbacks. That might look something like this for a request parser: http_parser_settings settings; - settings.on_path = my_path_callback; + settings.on_url = my_url_callback; settings.on_header_field = my_header_field_callback; /* ... */ diff --git a/src/http-parser/http_parser.c b/src/http-parser/http_parser.c index d48f7f6..ea37406 100644 --- a/src/http-parser/http_parser.c +++ b/src/http-parser/http_parser.c @@ -51,18 +51,10 @@ # define ELEM_AT(a, i, v) ((unsigned int) (i) < ARRAY_SIZE(a) ? (a)[(i)] : (v)) #endif -#if HTTP_PARSER_DEBUG -#define SET_ERRNO(e) \ -do { \ - parser->http_errno = (e); \ - parser->error_lineno = __LINE__; \ -} while (0) -#else #define SET_ERRNO(e) \ do { \ parser->http_errno = (e); \ } while(0) -#endif /* Run the notify callback FOR, returning ER if it fails */ diff --git a/src/http-parser/http_parser.gyp b/src/http-parser/http_parser.gyp index c6eada7..ef34eca 100644 --- a/src/http-parser/http_parser.gyp +++ b/src/http-parser/http_parser.gyp @@ -12,6 +12,7 @@ # RuntimeLibrary MUST MATCH across the entire project 'Debug': { 'defines': [ 'DEBUG', '_DEBUG' ], + 'cflags': [ '-Wall', '-Wextra', '-O0', '-g', '-ftrapv' ], 'msvs_settings': { 'VCCLCompilerTool': { 'RuntimeLibrary': 1, # static debug @@ -20,6 +21,7 @@ }, 'Release': { 'defines': [ 'NDEBUG' ], + 'cflags': [ '-Wall', '-Wextra', '-O3' ], 'msvs_settings': { 'VCCLCompilerTool': { 'RuntimeLibrary': 0, # static release @@ -51,6 +53,7 @@ 'type': 'static_library', 'include_dirs': [ '.' ], 'direct_dependent_settings': { + 'defines': [ 'HTTP_PARSER_STRICT=0' ], 'include_dirs': [ '.' ], }, 'defines': [ 'HTTP_PARSER_STRICT=0' ], @@ -69,11 +72,40 @@ }, { - 'target_name': 'test', + 'target_name': 'http_parser_strict', + 'type': 'static_library', + 'include_dirs': [ '.' ], + 'direct_dependent_settings': { + 'defines': [ 'HTTP_PARSER_STRICT=1' ], + 'include_dirs': [ '.' ], + }, + 'defines': [ 'HTTP_PARSER_STRICT=1' ], + 'sources': [ './http_parser.c', ], + 'conditions': [ + ['OS=="win"', { + 'msvs_settings': { + 'VCCLCompilerTool': { + # Compile as C++. http_parser.c is actually C99, but C++ is + # close enough in this case. + 'CompileAs': 2, + }, + }, + }] + ], + }, + + { + 'target_name': 'test-nonstrict', 'type': 'executable', 'dependencies': [ 'http_parser' ], 'sources': [ 'test.c' ] + }, + + { + 'target_name': 'test-strict', + 'type': 'executable', + 'dependencies': [ 'http_parser_strict' ], + 'sources': [ 'test.c' ] } ] } - diff --git a/src/http-parser/http_parser.h b/src/http-parser/http_parser.h index d3f60f9..4f20396 100644 --- a/src/http-parser/http_parser.h +++ b/src/http-parser/http_parser.h @@ -24,7 +24,7 @@ extern "C" { #endif -#define HTTP_PARSER_VERSION_MAJOR 1 +#define HTTP_PARSER_VERSION_MAJOR 2 #define HTTP_PARSER_VERSION_MINOR 0 #include @@ -51,14 +51,6 @@ typedef SSIZE_T ssize_t; # define HTTP_PARSER_STRICT 1 #endif -/* Compile with -DHTTP_PARSER_DEBUG=1 to add extra debugging information to - * the error reporting facility. - */ -#ifndef HTTP_PARSER_DEBUG -# define HTTP_PARSER_DEBUG 0 -#endif - - /* Maximium header size allowed */ #define HTTP_MAX_HEADER_SIZE (80*1024) @@ -77,7 +69,7 @@ typedef struct http_parser_settings http_parser_settings; * chunked' headers that indicate the presence of a body. * * http_data_cb does not return data chunks. It will be call arbitrarally - * many times for each string. E.G. you might get 10 callbacks for "on_path" + * many times for each string. E.G. you might get 10 callbacks for "on_url" * each providing just a few characters more data. */ typedef int (*http_data_cb) (http_parser*, const char *at, size_t length); @@ -196,13 +188,6 @@ enum http_errno { /* Get an http_errno value from an http_parser */ #define HTTP_PARSER_ERRNO(p) ((enum http_errno) (p)->http_errno) -/* Get the line number that generated the current error */ -#if HTTP_PARSER_DEBUG -#define HTTP_PARSER_ERRNO_LINE(p) ((p)->error_lineno) -#else -#define HTTP_PARSER_ERRNO_LINE(p) 0 -#endif - struct http_parser { /** PRIVATE **/ @@ -229,10 +214,6 @@ struct http_parser { */ unsigned char upgrade : 1; -#if HTTP_PARSER_DEBUG - uint32_t error_lineno; -#endif - /** PUBLIC **/ void *data; /* A pointer to get hook to the "connection" or "socket" object */ }; diff --git a/src/http-parser/test.c b/src/http-parser/test.c index d205c0d..0caea24 100644 --- a/src/http-parser/test.c +++ b/src/http-parser/test.c @@ -1954,8 +1954,7 @@ upgrade_message_fix(char *body, const size_t nread, const size_t nmsgs, ...) { static void print_error (const char *raw, size_t error_location) { - fprintf(stderr, "\n*** %s:%d -- %s ***\n\n", - "http_parser.c", HTTP_PARSER_ERRNO_LINE(parser), + fprintf(stderr, "\n*** %s ***\n\n", http_errno_description(HTTP_PARSER_ERRNO(parser))); int this_line = 0, char_len = 0;