summaryrefslogtreecommitdiff
path: root/ext/standard/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/file.c')
-rw-r--r--ext/standard/file.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/ext/standard/file.c b/ext/standard/file.c
index 6f29343d9f..224e69ffdd 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -942,14 +942,17 @@ PHP_FUNCTION(popen)
mode_len--;
}
}
+#endif
/* Musl only partially validates the mode. Manually check it to ensure consistent behavior. */
- if (mode_len != 1 || (*posix_mode != 'r' && *posix_mode != 'w')) {
- php_error_docref2(NULL, command, posix_mode, E_WARNING, "Invalid mode");
+ if (mode_len > 2 ||
+ (mode_len == 1 && (*posix_mode != 'r' && *posix_mode != 'w')) ||
+ (mode_len == 2 && (memcmp(posix_mode, "rb", 2) && memcmp(posix_mode, "wb", 2)))
+ ) {
+ zend_argument_value_error(2, "must be one of \"r\", \"rb\", \"w\", or \"wb\"");
efree(posix_mode);
- RETURN_FALSE;
+ RETURN_THROWS();
}
-#endif
fp = VCWD_POPEN(command, posix_mode);
if (!fp) {
@@ -1816,7 +1819,7 @@ PHP_FUNCTION(fputcsv)
zend_argument_value_error(3, "must be a single character");
RETURN_THROWS();
} else if (delimiter_str_len > 1) {
- php_error_docref(NULL, E_NOTICE, "delimiter must be a single character");
+ php_error_docref(NULL, E_WARNING, "Argument #3 ($delimiter) must be a single character");
}
/* use first character from string */
@@ -1828,7 +1831,7 @@ PHP_FUNCTION(fputcsv)
zend_argument_value_error(4, "must be a single character");
RETURN_THROWS();
} else if (enclosure_str_len > 1) {
- php_error_docref(NULL, E_NOTICE, "enclosure must be a single character");
+ php_error_docref(NULL, E_WARNING, "Argument #4 ($enclosure) must be a single character");
}
/* use first character from string */
enclosure = *enclosure_str;
@@ -1836,7 +1839,7 @@ PHP_FUNCTION(fputcsv)
if (escape_str != NULL) {
if (escape_str_len > 1) {
- php_error_docref(NULL, E_NOTICE, "escape must be empty or a single character");
+ php_error_docref(NULL, E_WARNING, "Argument #5 ($escape) must be empty or a single character");
}
if (escape_str_len < 1) {
escape_char = PHP_CSV_NO_ESCAPE;
@@ -1954,7 +1957,7 @@ PHP_FUNCTION(fgetcsv)
zend_argument_value_error(3, "must be a single character");
RETURN_THROWS();
} else if (delimiter_str_len > 1) {
- php_error_docref(NULL, E_NOTICE, "delimiter must be a single character");
+ php_error_docref(NULL, E_WARNING, "Argument #3 ($delimiter) must be a single character");
}
/* use first character from string */
@@ -1966,7 +1969,7 @@ PHP_FUNCTION(fgetcsv)
zend_argument_value_error(4, "must be a single character");
RETURN_THROWS();
} else if (enclosure_str_len > 1) {
- php_error_docref(NULL, E_NOTICE, "enclosure must be a single character");
+ php_error_docref(NULL, E_WARNING, "Argument #4 ($enclosure) must be a single character");
}
/* use first character from string */
@@ -1975,7 +1978,7 @@ PHP_FUNCTION(fgetcsv)
if (escape_str != NULL) {
if (escape_str_len > 1) {
- php_error_docref(NULL, E_NOTICE, "escape must be empty or a single character");
+ php_error_docref(NULL, E_WARNING, "Argument #5 ($enclosure) must be empty or a single character");
}
if (escape_str_len < 1) {