ID:               38322
 User updated by:  heintz at hotmail dot com
 Reported By:      heintz at hotmail dot com
-Status:           Feedback
+Status:           Open
 Bug Type:         Strings related
 Operating System: all
 PHP Version:      5.1.4
 New Comment:

the checkformat function checks the invalid numbers
by subtracting one but the scanning function doesnt
so seems to me the only problem here is that someone has forgotten to
subract 1
code from scanf.c line 737

} else if ( isdigit(UCHAR(*ch))) { 
                value = strtoul(format-1, &end, 10); 
                if (*end == '$') {
                    format = end+1;
                    ch = format++;
                    objIndex = varStart + value;
                }
         }

i think just by putting making a objIndex = varStart + value -1;

it would be secure and keep the functionality. though the if-s wont
hurt if you subract one so they can stay for insurance if performance
is not that big of a issue.


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

[2006-08-04 09:28:06] [EMAIL PROTECTED]

Please check out this patch:
http://tony2001.phpclub.net/dev/tmp/bug38322.diff

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

[2006-08-04 00:36:21] heintz at hotmail dot com

Description:
------------
ext/standard/scanf.c line ~887
  ---
  if (numVars) {
                    current = args[objIndex++];                
  ---
  
  objIndex points past the end of array in other format cases too





Reproduce code:
---------------
sscanf('foo ','$1s',$str);

http://www.plain-text.info/sscanf_bug.txt - full description

Actual result:
--------------
will try to dereference a pointer to pointer which usually causes
segmentation fault


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


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

Reply via email to