scottmac                Fri Dec 12 23:17:44 2008 UTC

  Modified files:              
    /php-src/ext/json   json.c 
    /php-src/ext/json/tests     001.phpt bug41504.phpt bug42090.phpt 
                                fail001.phpt 
  Log:
  Fix bug #45989 - json_decode() doesn't return NULL on certain invalid strings
  
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/json/json.c?r1=1.42&r2=1.43&diff_format=u
Index: php-src/ext/json/json.c
diff -u php-src/ext/json/json.c:1.42 php-src/ext/json/json.c:1.43
--- php-src/ext/json/json.c:1.42        Mon Nov 17 11:26:21 2008
+++ php-src/ext/json/json.c     Fri Dec 12 23:17:44 2008
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: json.c,v 1.42 2008/11/17 11:26:21 felipe Exp $ */
+/* $Id: json.c,v 1.43 2008/12/12 23:17:44 scottmac Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -544,13 +544,7 @@
                                RETURN_DOUBLE(d);
                        }
                }
-               if (str_len > 1 && *str.s == '"' && str.s[str_len-1] == '"') {
-                       RETURN_STRINGL(str.s+1, str_len-2, 1);
-               } else if (*str.s == '{' || *str.s == '[') { /* invalid JSON 
string */
-                       RETURN_NULL();
-               } else {
-                       RETURN_STRINGL(str.s, str_len, 1);
-               }
+               RETURN_NULL();
        }
        else
        {
@@ -577,13 +571,7 @@
                                RETURN_DOUBLE(d);
                        }
                }
-               if (str_len > 1 && *str.u == 0x22 /*'"'*/ && str.u[str_len-1] 
== 0x22 /*'"'*/) {
-                       RETURN_UNICODEL(str.u+1, str_len-2, 1);
-               } else if (*str.u == 0x7b /*'{'*/ || *str.u == 0x5b /*'['*/ ) { 
/* invalid JSON string */
-                       RETURN_NULL();
-               } else {
-                       RETURN_UNICODEL(str.u, str_len, 1);
-               }
+               RETURN_NULL();
        }
 }
 /* }}} */
http://cvs.php.net/viewvc.cgi/php-src/ext/json/tests/001.phpt?r1=1.5&r2=1.6&diff_format=u
Index: php-src/ext/json/tests/001.phpt
diff -u php-src/ext/json/tests/001.phpt:1.5 php-src/ext/json/tests/001.phpt:1.6
--- php-src/ext/json/tests/001.phpt:1.5 Tue May 27 18:16:03 2008
+++ php-src/ext/json/tests/001.phpt     Fri Dec 12 23:17:44 2008
@@ -31,12 +31,12 @@
 NULL
 NULL
 NULL
-unicode(1) "."
-unicode(1) "."
-unicode(3) "<?>"
-unicode(1) ";"
-unicode(6) "руссиш"
-unicode(4) "blah"
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
 NULL
 object(stdClass)#%d (1) {
   [u"test"]=>
@@ -66,6 +66,6 @@
     unicode(0) ""
   }
 }
-unicode(16) "{ "": { "": "" }"
-unicode(16) "{ "": "": "" } }"
+NULL
+NULL
 Done
http://cvs.php.net/viewvc.cgi/php-src/ext/json/tests/bug41504.phpt?r1=1.2&r2=1.3&diff_format=u
Index: php-src/ext/json/tests/bug41504.phpt
diff -u php-src/ext/json/tests/bug41504.phpt:1.2 
php-src/ext/json/tests/bug41504.phpt:1.3
--- php-src/ext/json/tests/bug41504.phpt:1.2    Tue Jul 22 14:14:31 2008
+++ php-src/ext/json/tests/bug41504.phpt        Fri Dec 12 23:17:44 2008
@@ -13,19 +13,19 @@
 ?>
 --EXPECT--     
 array(1) {
-  [""]=>
-  string(5) "value"
+  [u""]=>
+  unicode(5) "value"
 }
 array(2) {
-  [""]=>
-  string(5) "value"
-  ["key"]=>
-  string(5) "value"
+  [u""]=>
+  unicode(5) "value"
+  [u"key"]=>
+  unicode(5) "value"
 }
 array(2) {
-  ["key"]=>
-  string(5) "value"
-  [""]=>
-  string(5) "value"
+  [u"key"]=>
+  unicode(5) "value"
+  [u""]=>
+  unicode(5) "value"
 }
 Done
http://cvs.php.net/viewvc.cgi/php-src/ext/json/tests/bug42090.phpt?r1=1.3&r2=1.4&diff_format=u
Index: php-src/ext/json/tests/bug42090.phpt
diff -u php-src/ext/json/tests/bug42090.phpt:1.3 
php-src/ext/json/tests/bug42090.phpt:1.4
--- php-src/ext/json/tests/bug42090.phpt:1.3    Tue May 27 18:16:03 2008
+++ php-src/ext/json/tests/bug42090.phpt        Fri Dec 12 23:17:44 2008
@@ -16,10 +16,9 @@
 ?>
 --EXPECT--
 unicode(0) ""
-unicode(5) "".."."
-unicode(1) """
-unicode(2) """"
+NULL
+NULL
+NULL
 string(4) ""\"""
 unicode(1) """
 unicode(2) """"
-
http://cvs.php.net/viewvc.cgi/php-src/ext/json/tests/fail001.phpt?r1=1.7&r2=1.8&diff_format=u
Index: php-src/ext/json/tests/fail001.phpt
diff -u php-src/ext/json/tests/fail001.phpt:1.7 
php-src/ext/json/tests/fail001.phpt:1.8
--- php-src/ext/json/tests/fail001.phpt:1.7     Thu Jul 31 11:49:19 2008
+++ php-src/ext/json/tests/fail001.phpt Fri Dec 12 23:17:44 2008
@@ -50,116 +50,116 @@
 unicode(58) "A JSON payload should be an object or array, not a string."
 Testing: ["Unclosed array"
 AS OBJECT
-unicode(17) "["Unclosed array""
+NULL
 AS ARRAY
-unicode(17) "["Unclosed array""
+NULL
 Testing: {unquoted_key: "keys must be quoted}
 AS OBJECT
-unicode(36) "{unquoted_key: "keys must be quoted}"
+NULL
 AS ARRAY
-unicode(36) "{unquoted_key: "keys must be quoted}"
+NULL
 Testing: ["extra comma",]
 AS OBJECT
-unicode(16) "["extra comma",]"
+NULL
 AS ARRAY
-unicode(16) "["extra comma",]"
+NULL
 Testing: ["double extra comma",,]
 AS OBJECT
-unicode(24) "["double extra comma",,]"
+NULL
 AS ARRAY
-unicode(24) "["double extra comma",,]"
+NULL
 Testing: [   , "<-- missing value"]
 AS OBJECT
-unicode(26) "[   , "<-- missing value"]"
+NULL
 AS ARRAY
-unicode(26) "[   , "<-- missing value"]"
+NULL
 Testing: ["Comma after the close"],
 AS OBJECT
-unicode(26) "["Comma after the close"],"
+NULL
 AS ARRAY
-unicode(26) "["Comma after the close"],"
+NULL
 Testing: ["Extra close"]]
 AS OBJECT
-unicode(16) "["Extra close"]]"
+NULL
 AS ARRAY
-unicode(16) "["Extra close"]]"
+NULL
 Testing: {"Extra comma": true,}
 AS OBJECT
-unicode(22) "{"Extra comma": true,}"
+NULL
 AS ARRAY
-unicode(22) "{"Extra comma": true,}"
+NULL
 Testing: {"Extra value after close": true} "misplaced quoted value"
 AS OBJECT
-unicode(58) "{"Extra value after close": true} "misplaced quoted value""
+NULL
 AS ARRAY
-unicode(58) "{"Extra value after close": true} "misplaced quoted value""
+NULL
 Testing: {"Illegal expression": 1 + 2}
 AS OBJECT
-unicode(29) "{"Illegal expression": 1 + 2}"
+NULL
 AS ARRAY
-unicode(29) "{"Illegal expression": 1 + 2}"
+NULL
 Testing: {"Illegal invocation": alert()}
 AS OBJECT
-unicode(31) "{"Illegal invocation": alert()}"
+NULL
 AS ARRAY
-unicode(31) "{"Illegal invocation": alert()}"
+NULL
 Testing: {"Numbers cannot have leading zeroes": 013}
 AS OBJECT
-unicode(43) "{"Numbers cannot have leading zeroes": 013}"
+NULL
 AS ARRAY
-unicode(43) "{"Numbers cannot have leading zeroes": 013}"
+NULL
 Testing: {"Numbers cannot be hex": 0x14}
 AS OBJECT
-unicode(31) "{"Numbers cannot be hex": 0x14}"
+NULL
 AS ARRAY
-unicode(31) "{"Numbers cannot be hex": 0x14}"
+NULL
 Testing: ["Illegal backslash escape: \x15"]
 AS OBJECT
-unicode(34) "["Illegal backslash escape: \x15"]"
+NULL
 AS ARRAY
-unicode(34) "["Illegal backslash escape: \x15"]"
+NULL
 Testing: ["Illegal backslash escape: \'"]
 AS OBJECT
-unicode(32) "["Illegal backslash escape: \'"]"
+NULL
 AS ARRAY
-unicode(32) "["Illegal backslash escape: \'"]"
+NULL
 Testing: ["Illegal backslash escape: \017"]
 AS OBJECT
-unicode(34) "["Illegal backslash escape: \017"]"
+NULL
 AS ARRAY
-unicode(34) "["Illegal backslash escape: \017"]"
+NULL
 Testing: 
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too
 
deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]!
 ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
 AS OBJECT
-unicode(266) 
"[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too
 
deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]!
 ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]"
+NULL
 AS ARRAY
-unicode(266) 
"[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too
 
deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]!
 ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]"
+NULL
 Testing: {"Missing colon" null}
 AS OBJECT
-unicode(22) "{"Missing colon" null}"
+NULL
 AS ARRAY
-unicode(22) "{"Missing colon" null}"
+NULL
 Testing: {"Double colon":: null}
 AS OBJECT
-unicode(23) "{"Double colon":: null}"
+NULL
 AS ARRAY
-unicode(23) "{"Double colon":: null}"
+NULL
 Testing: {"Comma instead of colon", null}
 AS OBJECT
-unicode(32) "{"Comma instead of colon", null}"
+NULL
 AS ARRAY
-unicode(32) "{"Comma instead of colon", null}"
+NULL
 Testing: ["Colon instead of comma": false]
 AS OBJECT
-unicode(33) "["Colon instead of comma": false]"
+NULL
 AS ARRAY
-unicode(33) "["Colon instead of comma": false]"
+NULL
 Testing: ["Bad value", truth]
 AS OBJECT
-unicode(20) "["Bad value", truth]"
+NULL
 AS ARRAY
-unicode(20) "["Bad value", truth]"
+NULL
 Testing: ['single quote']
 AS OBJECT
-unicode(16) "['single quote']"
+NULL
 AS ARRAY
-unicode(16) "['single quote']"
+NULL

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to