scottmac Thu May 14 00:13:57 2009 UTC Modified files: /php-src/ext/json JSON_parser.c JSON_parser.h json.c Log: Allow the json_decode() depth to be any size, but keep the static one around for now. It might make sense to allow an unbound depth. http://cvs.php.net/viewvc.cgi/php-src/ext/json/JSON_parser.c?r1=1.25&r2=1.26&diff_format=u Index: php-src/ext/json/JSON_parser.c diff -u php-src/ext/json/JSON_parser.c:1.25 php-src/ext/json/JSON_parser.c:1.26 --- php-src/ext/json/JSON_parser.c:1.25 Thu Mar 19 19:25:42 2009 +++ php-src/ext/json/JSON_parser.c Thu May 14 00:13:57 2009 @@ -247,6 +247,11 @@ jp->top = -1; jp->error_code = PHP_JSON_ERROR_NONE; jp->stack = (int*)ecalloc(depth, sizeof(int)); + if (depth > JSON_PARSER_DEFAULT_DEPTH) { + jp->the_zstack = (zval **)safe_emalloc(depth, sizeof(zval), 0); + } else { + jp->the_zstack = &jp->the_static_zstack[0]; + } push(jp, MODE_DONE); return jp; } @@ -258,6 +263,9 @@ free_JSON_parser(JSON_parser jp) { efree((void*)jp->stack); + if (jp->the_zstack != &jp->the_static_zstack[0]) { + efree(jp->the_zstack); + } efree((void*)jp); return false; } http://cvs.php.net/viewvc.cgi/php-src/ext/json/JSON_parser.h?r1=1.4&r2=1.5&diff_format=u Index: php-src/ext/json/JSON_parser.h diff -u php-src/ext/json/JSON_parser.h:1.4 php-src/ext/json/JSON_parser.h:1.5 --- php-src/ext/json/JSON_parser.h:1.4 Fri Dec 19 02:00:59 2008 +++ php-src/ext/json/JSON_parser.h Thu May 14 00:13:57 2009 @@ -6,7 +6,7 @@ #include "php.h" #include "ext/standard/php_smart_str.h" -#define JSON_PARSER_MAX_DEPTH 512 +#define JSON_PARSER_DEFAULT_DEPTH 512 typedef struct JSON_parser_struct { int state; @@ -14,8 +14,8 @@ int top; int error_code; int* stack; - zval *the_zstack[JSON_PARSER_MAX_DEPTH]; - + zval **the_zstack; + zval *the_static_zstack[JSON_PARSER_DEFAULT_DEPTH]; } * JSON_parser; enum error_codes { http://cvs.php.net/viewvc.cgi/php-src/ext/json/json.c?r1=1.50&r2=1.51&diff_format=u Index: php-src/ext/json/json.c diff -u php-src/ext/json/json.c:1.50 php-src/ext/json/json.c:1.51 --- php-src/ext/json/json.c:1.50 Tue Mar 17 23:25:39 2009 +++ php-src/ext/json/json.c Thu May 14 00:13:57 2009 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: json.c,v 1.50 2009/03/17 23:25:39 scottmac Exp $ */ +/* $Id: json.c,v 1.51 2009/05/14 00:13:57 scottmac Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -507,7 +507,7 @@ int str_len, utf16_len; zend_uchar str_type; zend_bool assoc = 0; /* return JS objects as PHP objects by default */ - long depth = JSON_PARSER_MAX_DEPTH; + long depth = JSON_PARSER_DEFAULT_DEPTH; zval *z; unsigned short *utf16; JSON_parser jp; @@ -535,9 +535,8 @@ } } - /* can be removed once we remove the max depth limit */ - if (depth <= 0 || depth > JSON_PARSER_MAX_DEPTH) { - depth = JSON_PARSER_MAX_DEPTH; + if (depth <= 0) { + depth = JSON_PARSER_DEFAULT_DEPTH; } ALLOC_INIT_ZVAL(z);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php