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