]> granicus.if.org Git - php/commitdiff
MFH: - Fixed bug #42107 (sscanf broken when using %2$s type format parameters)
authorJani Taskinen <jani@php.net>
Thu, 26 Jul 2007 15:24:06 +0000 (15:24 +0000)
committerJani Taskinen <jani@php.net>
Thu, 26 Jul 2007 15:24:06 +0000 (15:24 +0000)
NEWS
ext/standard/scanf.c
ext/standard/tests/strings/bug42107.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 5672033d9de3e2e1535c52a1cc3eac472dce7e17..85129b5aa7a752e906686f77bcfcf99224fb5ad6 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -70,6 +70,7 @@ PHP                                                                        NEWS
 - Fixed PECL bug #11216 (crash in ZipArchive::addEmptyDir when a directory 
   already exists). (Pierre)
 
+- Fixed Bug #42107 (sscanf broken when using %2$s format parameters). (Jani)
 - Fixed bug #42090 (json_decode causes segmentation fault). (Hannes)
 - Fixed bug #42072 (No warning message for clearstatcache() with arguments).
   (Ilia)
index b299a3ed1d7154cd6bb1c9557f11f3a7760cc29d..b711522e4c47ab671ad1e8c9f63b36f914264ebf 100644 (file)
@@ -649,6 +649,7 @@ PHPAPI int php_sscanf_internal( char *string, char *format,
                                return FAILURE;
                        }
                }
+               varStart = 0; /* Array index starts from 0 */
        }
 
        baseString = string;
diff --git a/ext/standard/tests/strings/bug42107.phpt b/ext/standard/tests/strings/bug42107.phpt
new file mode 100644 (file)
index 0000000..d97f891
--- /dev/null
@@ -0,0 +1,47 @@
+--TEST--
+Bug #42107 (sscanf() broken when using %2$s type format parameters)
+--FILE--
+<?php
+
+var_dump(sscanf('one two', '%1$s %2$s'));
+var_dump(sscanf('one two', '%2$s %1$s'));
+echo "--\n";
+sscanf('one two', '%1$s %2$s', $foo, $bar);
+var_dump($foo, $bar);
+sscanf('one two', '%2$s %1$s', $foo, $bar);
+var_dump($foo, $bar);
+echo "--\n";
+var_dump(sscanf('one two', '%1$d %2$d'));
+var_dump(sscanf('one two', '%1$d'));
+echo "Done\n";
+?>
+--EXPECTF--
+array(2) {
+  [0]=>
+  string(3) "one"
+  [1]=>
+  string(3) "two"
+}
+array(2) {
+  [0]=>
+  string(3) "two"
+  [1]=>
+  string(3) "one"
+}
+--
+string(3) "one"
+string(3) "two"
+string(3) "two"
+string(3) "one"
+--
+array(2) {
+  [0]=>
+  NULL
+  [1]=>
+  NULL
+}
+array(1) {
+  [0]=>
+  NULL
+}
+Done