ID:              29733
 User updated by: bugs dot php dot net at bluetwanger dot de
 Reported By:     bugs dot php dot net at bluetwanger dot de
 Status:          Open
-Bug Type:        Unknown/Other Function
+Bug Type:        Strings related
 PHP Version:     5.0.1
 New Comment:

Here's a patch:

--- ext/standard/formatted_print.c.orig 2004-07-18 19:28:04.000000000
+0200
+++ ext/standard/formatted_print.c      2004-08-27 14:23:07.580732341
+0200
@@ -537,12 +537,6 @@
                        php_sprintf_appendchar(&result, &outpos, &size,
'%' TSRMLS_CC);
                        inpos += 2;
                } else {
-                       if (currarg >= argc && format[inpos + 1] !=
'%') {
-                               efree(result);
-                               efree(args);
-                               php_error_docref(NULL TSRMLS_CC,
E_WARNING, "Too few arguments");
-                               return NULL;
-                       }
                        /* starting a new format specifier, reset
variables */
                        alignment = ALIGN_RIGHT;
                        adjusting = 0;
@@ -574,13 +568,6 @@
  
                                argnum += format_offset;
  
-                               if (argnum >= argc) {
-                                       efree(result);
-                                       efree(args);
-                                       php_error_docref(NULL
TSRMLS_CC, E_WARNING, "Too few arguments");
-                                       return NULL;
-                               }
-
                                /* after argnum comes modifiers */
                                PRINTF_DEBUG(("sprintf: looking for
modifiers\n"
                                                          "sprintf: now
looking at '%c', inpos=%d\n",
@@ -635,6 +622,13 @@
                                argnum = currarg++ + format_offset;
                        }
  

+            if (argnum >= argc) {
+                efree(result);
+                efree(args);
+                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too few
arguments");
+                return NULL;
+            }
+
                        if (format[inpos] == 'l') {
                                inpos++;
                        }

Let's see if the line breaks survive.

It basically removes the bogus (format[inpos + 1] != '%' will always be
true there) arg number check and moves the right one outside the special
case for "complicated" format specifiers.


Previous Comments:
------------------------------------------------------------------------

[2004-08-18 14:46:41] bugs dot php dot net at bluetwanger dot de

Description:
------------
printf('%s - %s %s %3$s %2$s', 1, 2, 3);

complains:

Warning: printf(): Too few arguments in /home/bertheau/printf.php on
line 2

printf('%s - %s %s %3$s %2$s', 1, 2, 3, 4);

does not complain and prints:

1 - 2 3 3 2

I expect the first version to not complain and print what the second
version prints.




------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=29733&edit=1

Reply via email to