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

Reply via email to