bjori Tue Jul 24 22:54:26 2007 UTC Added files: /php-src/ext/json/tests bug42090.phpt
Modified files: /php-src/ext/json json.c Log: Fixed bug#42090 (json_decode causes segmentation fault) http://cvs.php.net/viewvc.cgi/php-src/ext/json/json.c?r1=1.27&r2=1.28&diff_format=u Index: php-src/ext/json/json.c diff -u php-src/ext/json/json.c:1.27 php-src/ext/json/json.c:1.28 --- php-src/ext/json/json.c:1.27 Wed Jun 13 17:10:06 2007 +++ php-src/ext/json/json.c Tue Jul 24 22:54:26 2007 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: json.c,v 1.27 2007/06/13 17:10:06 iliaa Exp $ */ +/* $Id: json.c,v 1.28 2007/07/24 22:54:26 bjori Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -485,7 +485,7 @@ RETURN_DOUBLE(d); } } - if (*str.s == '"' || str.s[str_len] == '"') { + if (str_len > 1 && *str.s == '"' && str.s[str_len-1] == '"') { RETURN_STRINGL(str.s+1, str_len-2, 1); } else { RETURN_STRINGL(str.s, str_len, 1); @@ -514,7 +514,7 @@ RETURN_DOUBLE(d); } } - if (*str.u == 0x22 /*'"'*/ || str.u[str_len] == 0x22 /*'"'*/) { + if (str_len > 1 && *str.u == 0x22 /*'"'*/ && str.u[str_len-1] == 0x22 /*'"'*/) { RETURN_UNICODEL(str.u+1, str_len-2, 1); } else { RETURN_UNICODEL(str.u, str_len, 1); http://cvs.php.net/viewvc.cgi/php-src/ext/json/tests/bug42090.phpt?view=markup&rev=1.1 Index: php-src/ext/json/tests/bug42090.phpt +++ php-src/ext/json/tests/bug42090.phpt --TEST-- Bug#42090 (json_decode causes segmentation fault) --SKIPIF-- <?php if (!extension_loaded("json")) print "skip"; ?> --FILE-- <?php var_dump( json_decode('""'), json_decode('"..".'), json_decode('"'), json_decode('""""'), json_encode('"'), json_decode(json_encode('"')), json_decode(json_encode('""')) ); ?> --EXPECT-- string(0) "" string(5) "".."." string(1) """ string(2) """" string(4) ""\""" string(1) """ string(2) """" --UEXPECT-- unicode(0) "" unicode(5) "".."." unicode(1) """ unicode(2) """" string(4) ""\""" unicode(1) """ unicode(2) """" -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php