Skip to content

Commit e66b5e6

Browse files
committed
forbids flags combinations.
1 parent d8aa7b9 commit e66b5e6

File tree

3 files changed

+78
-32
lines changed

3 files changed

+78
-32
lines changed

ext/standard/string.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,6 +1592,11 @@ PHP_FUNCTION(pathinfo)
15921592
RETURN_THROWS();
15931593
}
15941594

1595+
if (opt < PHP_PATHINFO_ALL && (opt & (opt - 1))) {
1596+
zend_argument_value_error(2, "must be only one of the PATHINFO_* constants");
1597+
RETURN_THROWS();
1598+
}
1599+
15951600
have_basename = (opt & PHP_PATHINFO_BASENAME);
15961601

15971602
array_init(&tmp);

ext/standard/tests/file/pathinfo_variation3.phpt

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,37 @@ var_dump(pathinfo($testfile, PATHINFO_BASENAME));
1515
var_dump(pathinfo($testfile, PATHINFO_FILENAME));
1616
var_dump(pathinfo($testfile, PATHINFO_EXTENSION));
1717
var_dump(pathinfo($testfile, PATHINFO_DIRNAME));
18-
var_dump(pathinfo($testfile, PATHINFO_EXTENSION|PATHINFO_FILENAME|PATHINFO_DIRNAME));
19-
var_dump(pathinfo($testfile, PATHINFO_EXTENSION|PATHINFO_FILENAME|PATHINFO_BASENAME));
20-
var_dump(pathinfo($testfile, PATHINFO_EXTENSION|PATHINFO_FILENAME));
21-
var_dump(pathinfo($testfile, PATHINFO_EXTENSION|PATHINFO_BASENAME));
22-
var_dump(pathinfo($testfile, PATHINFO_FILENAME|PATHINFO_DIRNAME));
23-
var_dump(pathinfo($testfile, PATHINFO_FILENAME|PATHINFO_BASENAME));
24-
var_dump(pathinfo($testfile, PATHINFO_DIRNAME|PATHINFO_EXTENSION));
25-
var_dump(pathinfo($testfile, PATHINFO_DIRNAME|PATHINFO_BASENAME));
2618

19+
try {
20+
pathinfo($testfile, PATHINFO_EXTENSION|PATHINFO_FILENAME|PATHINFO_DIRNAME);
21+
} catch (\ValueError $e) {
22+
echo $e->getMessage(), PHP_EOL;
23+
}
24+
try {
25+
pathinfo($testfile, PATHINFO_EXTENSION|PATHINFO_FILENAME);
26+
} catch (\ValueError $e) {
27+
echo $e->getMessage(), PHP_EOL;
28+
}
29+
try {
30+
pathinfo($testfile, PATHINFO_EXTENSION|PATHINFO_DIRNAME);
31+
} catch (\ValueError $e) {
32+
echo $e->getMessage(), PHP_EOL;
33+
}
34+
try {
35+
pathinfo($testfile, PATHINFO_FILENAME|PATHINFO_BASENAME);
36+
} catch (\ValueError $e) {
37+
echo $e->getMessage(), PHP_EOL;
38+
}
39+
try {
40+
pathinfo($testfile, PATHINFO_DIRNAME|PATHINFO_EXTENSION);
41+
} catch (\ValueError $e) {
42+
echo $e->getMessage(), PHP_EOL;
43+
}
44+
try {
45+
pathinfo($testfile, PATHINFO_DIRNAME|PATHINFO_BASENAME);
46+
} catch (\ValueError $e) {
47+
echo $e->getMessage(), PHP_EOL;
48+
}
2749

2850
?>
2951
--EXPECTF--
@@ -62,11 +84,9 @@ string(6) "inet.h"
6284
string(4) "inet"
6385
string(1) "h"
6486
string(17) "/usr/include/arpa"
65-
string(17) "/usr/include/arpa"
66-
string(6) "inet.h"
67-
string(1) "h"
68-
string(6) "inet.h"
69-
string(17) "/usr/include/arpa"
70-
string(6) "inet.h"
71-
string(17) "/usr/include/arpa"
72-
string(17) "/usr/include/arpa"
87+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants
88+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants
89+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants
90+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants
91+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants
92+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants

ext/standard/tests/strings/pathinfo.phpt

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,37 @@ var_dump(pathinfo(__FILE__, PATHINFO_BASENAME));
1414
var_dump(pathinfo(__FILE__, PATHINFO_FILENAME));
1515
var_dump(pathinfo(__FILE__, PATHINFO_EXTENSION));
1616
var_dump(pathinfo(__FILE__, PATHINFO_DIRNAME));
17-
var_dump(pathinfo(__FILE__, PATHINFO_EXTENSION|PATHINFO_FILENAME|PATHINFO_DIRNAME));
18-
var_dump(pathinfo(__FILE__, PATHINFO_EXTENSION|PATHINFO_FILENAME|PATHINFO_BASENAME));
19-
var_dump(pathinfo(__FILE__, PATHINFO_EXTENSION|PATHINFO_FILENAME));
20-
var_dump(pathinfo(__FILE__, PATHINFO_EXTENSION|PATHINFO_BASENAME));
21-
var_dump(pathinfo(__FILE__, PATHINFO_FILENAME|PATHINFO_DIRNAME));
22-
var_dump(pathinfo(__FILE__, PATHINFO_FILENAME|PATHINFO_BASENAME));
23-
var_dump(pathinfo(__FILE__, PATHINFO_DIRNAME|PATHINFO_EXTENSION));
24-
var_dump(pathinfo(__FILE__, PATHINFO_DIRNAME|PATHINFO_BASENAME));
17+
18+
try {
19+
pathinfo(__FILE__, PATHINFO_EXTENSION|PATHINFO_FILENAME|PATHINFO_DIRNAME);
20+
} catch (\ValueError $e) {
21+
echo $e->getMessage(), PHP_EOL;
22+
}
23+
try {
24+
pathinfo(__FILE__, PATHINFO_EXTENSION|PATHINFO_FILENAME);
25+
} catch (\ValueError $e) {
26+
echo $e->getMessage(), PHP_EOL;
27+
}
28+
try {
29+
pathinfo(__FILE__, PATHINFO_EXTENSION|PATHINFO_DIRNAME);
30+
} catch (\ValueError $e) {
31+
echo $e->getMessage(), PHP_EOL;
32+
}
33+
try {
34+
pathinfo(__FILE__, PATHINFO_FILENAME|PATHINFO_BASENAME);
35+
} catch (\ValueError $e) {
36+
echo $e->getMessage(), PHP_EOL;
37+
}
38+
try {
39+
pathinfo(__FILE__, PATHINFO_DIRNAME|PATHINFO_EXTENSION);
40+
} catch (\ValueError $e) {
41+
echo $e->getMessage(), PHP_EOL;
42+
}
43+
try {
44+
pathinfo(__FILE__, PATHINFO_DIRNAME|PATHINFO_BASENAME);
45+
} catch (\ValueError $e) {
46+
echo $e->getMessage(), PHP_EOL;
47+
}
2548

2649
try {
2750
pathinfo(__FILE__, PATHINFO_DIRNAME-1);
@@ -105,14 +128,12 @@ string(12) "pathinfo.php"
105128
string(8) "pathinfo"
106129
string(3) "php"
107130
string(%d) "%s%estrings"
108-
string(%d) "%s%estrings"
109-
string(12) "pathinfo.php"
110-
string(3) "php"
111-
string(12) "pathinfo.php"
112-
string(%d) "%s%estrings"
113-
string(12) "pathinfo.php"
114-
string(%d) "%s%estrings"
115-
string(%d) "%s%estrings"
131+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants
132+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants
133+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants
134+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants
135+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants
136+
pathinfo(): Argument #2 ($flags) must be only one of the PATHINFO_* constants
116137
pathinfo(): Argument #2 ($flags) must be one of the PATHINFO_* constants
117138
pathinfo(): Argument #2 ($flags) must be one of the PATHINFO_* constants
118139
Done

0 commit comments

Comments
 (0)