Skip to content

Commit 6b17e19

Browse files
committed
Promote warnings to exceptions in *scanf() functions
1 parent 9563449 commit 6b17e19

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+907
-1870
lines changed

ext/standard/scanf.c

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ PHPAPI int ValidateFormat(char *format, int numVars, int *totalSubs)
387387
gotSequential = 1;
388388
if (gotXpg) {
389389
mixedXPG:
390-
php_error_docref(NULL, E_WARNING, "%s", "cannot mix \"%\" and \"%n$\" conversion specifiers");
390+
zend_value_error("%s", "cannot mix \"%\" and \"%n$\" conversion specifiers");
391391
goto error;
392392
}
393393

@@ -469,11 +469,11 @@ PHPAPI int ValidateFormat(char *format, int numVars, int *totalSubs)
469469
}
470470
break;
471471
badSet:
472-
php_error_docref(NULL, E_WARNING, "Unmatched [ in format string");
472+
zend_value_error("Unmatched [ in format string");
473473
goto error;
474474

475475
default: {
476-
php_error_docref(NULL, E_WARNING, "Bad scan conversion character \"%c\"", *ch);
476+
zend_value_error("Bad scan conversion character \"%c\"", *ch);
477477
goto error;
478478
}
479479
}
@@ -523,7 +523,7 @@ PHPAPI int ValidateFormat(char *format, int numVars, int *totalSubs)
523523
}
524524
for (i = 0; i < numVars; i++) {
525525
if (nassign[i] > 1) {
526-
php_error_docref(NULL, E_WARNING, "%s", "Variable is assigned by multiple \"%n$\" conversion specifiers");
526+
zend_value_error("%s", "Variable is assigned by multiple \"%n$\" conversion specifiers");
527527
goto error;
528528
} else if (!xpgSize && (nassign[i] == 0)) {
529529
/*
@@ -542,9 +542,9 @@ PHPAPI int ValidateFormat(char *format, int numVars, int *totalSubs)
542542

543543
badIndex:
544544
if (gotXpg) {
545-
php_error_docref(NULL, E_WARNING, "%s", "\"%n$\" argument index out of range");
545+
zend_value_error("%s", "\"%n$\" argument index out of range");
546546
} else {
547-
php_error_docref(NULL, E_WARNING, "Different numbers of variable names and field specifiers");
547+
zend_value_error("Different numbers of variable names and field specifiers");
548548
}
549549

550550
error:
@@ -598,10 +598,6 @@ PHPAPI int php_sscanf_internal( char *string, char *format,
598598
numVars = 0;
599599
}
600600

601-
#if 0
602-
zend_printf("<br>in sscanf_internal : <br> string is \"%s\", format = \"%s\"<br> NumVars = %d. VarStart = %d<br>-------------------------<br>",
603-
string, format, numVars, varStart);
604-
#endif
605601
/*
606602
* Check for errors in the format string.
607603
*/
@@ -618,7 +614,7 @@ PHPAPI int php_sscanf_internal( char *string, char *format,
618614
if (numVars) {
619615
for (i = varStart;i < argCount;i++){
620616
if ( ! Z_ISREF(args[ i ] ) ) {
621-
php_error_docref(NULL, E_WARNING, "Parameter %d must be passed by reference", i);
617+
ZEND_ASSERT(0 && "Parameter must be passed by reference");
622618
scan_set_error_return(numVars, return_value);
623619
return SCAN_ERROR_VAR_PASSED_BYVAL;
624620
}

ext/standard/tests/file/fscanf.phpt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@ fclose($fp);
3434
$v = array();
3535
$v1 = array();
3636
$fp = fopen($filename, "rt");
37-
var_dump(fscanf($fp, "%.a", $v, $v1));
37+
try {
38+
fscanf($fp, "%.a", $v, $v1);
39+
} catch (ValueError $exception) {
40+
echo $exception->getMessage() . "\n";
41+
}
3842
var_dump($v);
3943
var_dump($v1);
4044
fclose($fp);
@@ -50,7 +54,11 @@ fclose($fp);
5054
file_put_contents($filename, "data");
5155

5256
$fp = fopen($filename, "rt");
53-
var_dump(fscanf($fp, "%s%d", $v));
57+
try {
58+
var_dump(fscanf($fp, "%s%d", $v));
59+
} catch (ValueError $exception) {
60+
echo $exception->getMessage() . "\n";
61+
}
5462

5563
echo "Done\n";
5664
?>
@@ -76,17 +84,13 @@ array(0) {
7684
}
7785
array(0) {
7886
}
79-
80-
Warning: fscanf(): Bad scan conversion character "." in %s on line %d
81-
int(-1)
87+
Bad scan conversion character "."
8288
array(0) {
8389
}
8490
array(0) {
8591
}
8692
bool(false)
8793
array(0) {
8894
}
89-
90-
Warning: fscanf(): Different numbers of variable names and field specifiers in %s on line %d
91-
int(-1)
95+
Different numbers of variable names and field specifiers
9296
Done

ext/standard/tests/file/fscanf_error.phpt

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ fclose($file_handle);
1919

2020
// invalid file handle
2121
try {
22-
var_dump( fscanf($file_handle, "%s") );
22+
fscanf($file_handle, "%s");
2323
} catch (TypeError $e) {
2424
echo $e->getMessage(), "\n";
2525
}
@@ -28,7 +28,11 @@ try {
2828
$file_handle = fopen($filename, 'r');
2929
if ($file_handle == false)
3030
exit("Error:failed to open file $filename");
31-
var_dump( fscanf($file_handle, "%d%s%f", $int_var, $string_var) );
31+
try {
32+
fscanf($file_handle, "%d%s%f", $int_var, $string_var);
33+
} catch (ValueError $exception) {
34+
echo $exception->getMessage() . "\n";
35+
}
3236
fclose($file_handle);
3337

3438
// different invalid format strings
@@ -42,7 +46,11 @@ foreach($invalid_formats as $format) {
4246
$file_handle = fopen($filename, 'r');
4347
if ($file_handle == false)
4448
exit("Error:failed to open file $filename");
45-
var_dump( fscanf($file_handle, $format) );
49+
try {
50+
var_dump(fscanf($file_handle, $format));
51+
} catch (ValueError $exception) {
52+
echo $exception->getMessage() . "\n";
53+
}
4654
fclose($file_handle);
4755
}
4856

@@ -57,24 +65,14 @@ unlink($filename);
5765
--EXPECTF--
5866
*** Testing fscanf() for error conditions ***
5967
fscanf(): supplied resource is not a valid File-Handle resource
60-
61-
Warning: fscanf(): Different numbers of variable names and field specifiers in %s on line %d
62-
int(-1)
68+
Different numbers of variable names and field specifiers
6369

6470
Warning: Undefined variable: undefined_var in %s on line %d
6571
array(0) {
6672
}
67-
68-
Warning: fscanf(): Bad scan conversion character " in %s on line %d
69-
NULL
70-
71-
Warning: fscanf(): Bad scan conversion character " in %s on line %d
72-
NULL
73-
74-
Warning: fscanf(): Bad scan conversion character "." in %s on line %d
75-
NULL
76-
77-
Warning: fscanf(): Bad scan conversion character "m" in %s on line %d
78-
NULL
73+
Bad scan conversion character "
74+
Bad scan conversion character "
75+
Bad scan conversion character "."
76+
Bad scan conversion character "m"
7977

8078
*** Done ***

ext/standard/tests/file/fscanf_variation10.phpt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ foreach($float_formats as $float_format) {
6161
rewind($file_handle);
6262
echo "\n-- iteration $counter --\n";
6363
while( !feof($file_handle) ) {
64-
var_dump( fscanf($file_handle,$float_format) );
64+
try {
65+
var_dump( fscanf($file_handle,$float_format) );
66+
} catch (ValueError $exception) {
67+
echo $exception->getMessage() . "\n";
68+
}
6569
}
6670
$counter++;
6771
}
@@ -148,12 +152,8 @@ array(1) {
148152
bool(false)
149153

150154
-- iteration 7 --
151-
152-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
153-
NULL
154-
155-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
156-
NULL
155+
Bad scan conversion character " "
156+
Bad scan conversion character " "
157157
bool(false)
158158

159159
-- iteration 8 --

ext/standard/tests/file/fscanf_variation11.phpt

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ foreach($float_formats as $float_format) {
6666
rewind($file_handle);
6767
echo "\n-- iteration $counter --\n";
6868
while( !feof($file_handle) ) {
69-
var_dump( fscanf($file_handle,$float_format) );
69+
try {
70+
var_dump(fscanf($file_handle,$float_format));
71+
} catch (ValueError $exception) {
72+
echo $exception->getMessage() . "\n";
73+
}
7074
}
7175
$counter++;
7276
}
@@ -79,7 +83,7 @@ $file_path = __DIR__;
7983
$filename = "$file_path/fscanf_variation11.tmp";
8084
unlink($filename);
8185
?>
82-
--EXPECTF--
86+
--EXPECT--
8387
*** Test fscanf(): different float format types with arrays ***
8488

8589
-- iteration 1 --
@@ -389,42 +393,18 @@ array(1) {
389393
bool(false)
390394

391395
-- iteration 7 --
392-
393-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
394-
NULL
395-
396-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
397-
NULL
398-
399-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
400-
NULL
401-
402-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
403-
NULL
404-
405-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
406-
NULL
407-
408-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
409-
NULL
410-
411-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
412-
NULL
413-
414-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
415-
NULL
416-
417-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
418-
NULL
419-
420-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
421-
NULL
422-
423-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
424-
NULL
425-
426-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
427-
NULL
396+
Bad scan conversion character " "
397+
Bad scan conversion character " "
398+
Bad scan conversion character " "
399+
Bad scan conversion character " "
400+
Bad scan conversion character " "
401+
Bad scan conversion character " "
402+
Bad scan conversion character " "
403+
Bad scan conversion character " "
404+
Bad scan conversion character " "
405+
Bad scan conversion character " "
406+
Bad scan conversion character " "
407+
Bad scan conversion character " "
428408
bool(false)
429409

430410
-- iteration 8 --

ext/standard/tests/file/fscanf_variation12.phpt

Lines changed: 24 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,11 @@ foreach($float_formats as $float_format) {
6767
rewind($file_handle);
6868
echo "\n-- iteration $counter --\n";
6969
while( !feof($file_handle) ) {
70-
var_dump( fscanf($file_handle,$float_format) );
70+
try {
71+
var_dump(fscanf($file_handle,$float_format));
72+
} catch (ValueError $exception) {
73+
echo $exception->getMessage() . "\n";
74+
}
7175
}
7276
$counter++;
7377
}
@@ -80,7 +84,7 @@ $file_path = __DIR__;
8084
$filename = "$file_path/fscanf_variation12.tmp";
8185
unlink($filename);
8286
?>
83-
--EXPECTF--
87+
--EXPECT--
8488
*** Test fscanf(): different float format types with strings ***
8589

8690
-- iteration 1 --
@@ -498,60 +502,24 @@ array(1) {
498502
bool(false)
499503

500504
-- iteration 7 --
501-
502-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
503-
NULL
504-
505-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
506-
NULL
507-
508-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
509-
NULL
510-
511-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
512-
NULL
513-
514-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
515-
NULL
516-
517-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
518-
NULL
519-
520-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
521-
NULL
522-
523-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
524-
NULL
525-
526-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
527-
NULL
528-
529-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
530-
NULL
531-
532-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
533-
NULL
534-
535-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
536-
NULL
537-
538-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
539-
NULL
540-
541-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
542-
NULL
543-
544-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
545-
NULL
546-
547-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
548-
NULL
549-
550-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
551-
NULL
552-
553-
Warning: fscanf(): Bad scan conversion character " " in %s on line %d
554-
NULL
505+
Bad scan conversion character " "
506+
Bad scan conversion character " "
507+
Bad scan conversion character " "
508+
Bad scan conversion character " "
509+
Bad scan conversion character " "
510+
Bad scan conversion character " "
511+
Bad scan conversion character " "
512+
Bad scan conversion character " "
513+
Bad scan conversion character " "
514+
Bad scan conversion character " "
515+
Bad scan conversion character " "
516+
Bad scan conversion character " "
517+
Bad scan conversion character " "
518+
Bad scan conversion character " "
519+
Bad scan conversion character " "
520+
Bad scan conversion character " "
521+
Bad scan conversion character " "
522+
Bad scan conversion character " "
555523
bool(false)
556524

557525
-- iteration 8 --

0 commit comments

Comments
 (0)