From 574745643fe53d606d5c78eefb7aaaafa8395281 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Sat, 31 Jan 2026 21:14:39 +0530 Subject: [PATCH 1/7] posix: validate mode argument in posix_mkfifo() --- ext/posix/posix.c | 8 ++++++++ ext/standard/tests/file/filetype_variation.phpt | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/ext/posix/posix.c b/ext/posix/posix.c index b7acf8c751270..0b528183b026b 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -621,6 +621,14 @@ PHP_FUNCTION(posix_mkfifo) RETURN_FALSE; } + if (mode < 0 || (mode & ~0777)) { + zend_argument_value_error( + 2, + "must be a valid file permission mode" + ); + RETURN_THROWS(); + } + result = mkfifo(ZSTR_VAL(path), mode); if (result < 0) { POSIX_G(last_error) = errno; diff --git a/ext/standard/tests/file/filetype_variation.phpt b/ext/standard/tests/file/filetype_variation.phpt index 43945078681c8..190f4d533db71 100644 --- a/ext/standard/tests/file/filetype_variation.phpt +++ b/ext/standard/tests/file/filetype_variation.phpt @@ -47,6 +47,12 @@ posix_mkfifo( $file3, 0755); print( filetype( $file3) )."\n"; unlink($file3); +try { + posix_mkfifo('zz.txt', 1000 ); +} catch (\ValueError $e) { + echo $e->getMessage() . PHP_EOL; +} + /* Checking with block in file */ /* To test this PEAR package should be installed */ @@ -65,5 +71,6 @@ link dir -- Checking with fifo -- fifo +posix_mkfifo(): Argument #2 ($permissions) must be a valid file permission mode *** Done *** From b6d1927ee89a67b2a0a7d6a15bdb5be320f901c4 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Sat, 31 Jan 2026 22:38:19 +0530 Subject: [PATCH 2/7] posix: validate mode argument in posix_mkfifo() --- ext/posix/posix.c | 2 +- ext/standard/tests/file/filetype_variation.phpt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/posix/posix.c b/ext/posix/posix.c index 0b528183b026b..2ad3283a8e475 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -624,7 +624,7 @@ PHP_FUNCTION(posix_mkfifo) if (mode < 0 || (mode & ~0777)) { zend_argument_value_error( 2, - "must be a valid file permission mode" + "must be between 0 and 07777" ); RETURN_THROWS(); } diff --git a/ext/standard/tests/file/filetype_variation.phpt b/ext/standard/tests/file/filetype_variation.phpt index 190f4d533db71..a5cff58c8d5b8 100644 --- a/ext/standard/tests/file/filetype_variation.phpt +++ b/ext/standard/tests/file/filetype_variation.phpt @@ -71,6 +71,6 @@ link dir -- Checking with fifo -- fifo -posix_mkfifo(): Argument #2 ($permissions) must be a valid file permission mode +posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 07777 *** Done *** From 73d18adc45709f8152272851c8a5187051c182c3 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Sat, 31 Jan 2026 22:44:43 +0530 Subject: [PATCH 3/7] posix: validate mode argument in posix_mkfifo() --- ext/posix/posix.c | 2 +- ext/standard/tests/file/filetype_variation.phpt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/posix/posix.c b/ext/posix/posix.c index 2ad3283a8e475..928538469eb5c 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -624,7 +624,7 @@ PHP_FUNCTION(posix_mkfifo) if (mode < 0 || (mode & ~0777)) { zend_argument_value_error( 2, - "must be between 0 and 07777" + "must be between 0 and 0777" ); RETURN_THROWS(); } diff --git a/ext/standard/tests/file/filetype_variation.phpt b/ext/standard/tests/file/filetype_variation.phpt index a5cff58c8d5b8..bc546827dcea3 100644 --- a/ext/standard/tests/file/filetype_variation.phpt +++ b/ext/standard/tests/file/filetype_variation.phpt @@ -71,6 +71,6 @@ link dir -- Checking with fifo -- fifo -posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 07777 +posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 0777 *** Done *** From 1efc0fa46e65650c594a554eade56d5f670fb578 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Sat, 31 Jan 2026 22:55:06 +0530 Subject: [PATCH 4/7] posix: validate mode argument in posix_mkfifo() --- ext/posix/posix.c | 4 ++-- ext/standard/tests/file/filetype_variation.phpt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/posix/posix.c b/ext/posix/posix.c index 928538469eb5c..81346a2b266e7 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -621,10 +621,10 @@ PHP_FUNCTION(posix_mkfifo) RETURN_FALSE; } - if (mode < 0 || (mode & ~0777)) { + if (mode < 0 || (mode & ~07777)) { zend_argument_value_error( 2, - "must be between 0 and 0777" + "must be between 0 and 07777" ); RETURN_THROWS(); } diff --git a/ext/standard/tests/file/filetype_variation.phpt b/ext/standard/tests/file/filetype_variation.phpt index bc546827dcea3..026ef5fec4a51 100644 --- a/ext/standard/tests/file/filetype_variation.phpt +++ b/ext/standard/tests/file/filetype_variation.phpt @@ -48,7 +48,7 @@ print( filetype( $file3) )."\n"; unlink($file3); try { - posix_mkfifo('zz.txt', 1000 ); + posix_mkfifo('zz.txt', 10000 ); } catch (\ValueError $e) { echo $e->getMessage() . PHP_EOL; } @@ -71,6 +71,6 @@ link dir -- Checking with fifo -- fifo -posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 0777 +posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 07777 *** Done *** From 7b8d4314280a83c3cfe7b338a2b6a618cf353d3f Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Sat, 31 Jan 2026 23:00:16 +0530 Subject: [PATCH 5/7] posix: validate mode argument in posix_mkfifo() --- .../tests/file/filetype_variation.phpt | 7 ----- .../tests/file/posix_mkfifo_invalid_mode.phpt | 30 +++++++++++++++++++ 2 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 ext/standard/tests/file/posix_mkfifo_invalid_mode.phpt diff --git a/ext/standard/tests/file/filetype_variation.phpt b/ext/standard/tests/file/filetype_variation.phpt index 026ef5fec4a51..43945078681c8 100644 --- a/ext/standard/tests/file/filetype_variation.phpt +++ b/ext/standard/tests/file/filetype_variation.phpt @@ -47,12 +47,6 @@ posix_mkfifo( $file3, 0755); print( filetype( $file3) )."\n"; unlink($file3); -try { - posix_mkfifo('zz.txt', 10000 ); -} catch (\ValueError $e) { - echo $e->getMessage() . PHP_EOL; -} - /* Checking with block in file */ /* To test this PEAR package should be installed */ @@ -71,6 +65,5 @@ link dir -- Checking with fifo -- fifo -posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 07777 *** Done *** diff --git a/ext/standard/tests/file/posix_mkfifo_invalid_mode.phpt b/ext/standard/tests/file/posix_mkfifo_invalid_mode.phpt new file mode 100644 index 0000000000000..f09321e62434b --- /dev/null +++ b/ext/standard/tests/file/posix_mkfifo_invalid_mode.phpt @@ -0,0 +1,30 @@ +--TEST-- +posix_mkfifo(): invalid mode argument +--FILE-- +getMessage(), "\n"; +} + +// Too large mode +try { + posix_mkfifo(__DIR__ . "/testfifo2", 010000); // > 07777 +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} + +// Garbage bits +try { + posix_mkfifo(__DIR__ . "/testfifo3", 020000); // S_IFCHR bit +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} +?> +--EXPECTF-- +posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 07777 +posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 07777 +posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 07777 From c97376f45f7162987b2e69a31d8af0478563a1be Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Sat, 31 Jan 2026 23:43:27 +0530 Subject: [PATCH 6/7] posix: validate mode argument in posix_mkfifo() --- ext/standard/tests/file/posix_mkfifo_invalid_mode.phpt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ext/standard/tests/file/posix_mkfifo_invalid_mode.phpt b/ext/standard/tests/file/posix_mkfifo_invalid_mode.phpt index f09321e62434b..5aa6c68a515f1 100644 --- a/ext/standard/tests/file/posix_mkfifo_invalid_mode.phpt +++ b/ext/standard/tests/file/posix_mkfifo_invalid_mode.phpt @@ -1,5 +1,11 @@ --TEST-- posix_mkfifo(): invalid mode argument +--SKIPIF-- + --FILE-- Date: Sun, 1 Feb 2026 11:28:56 +0530 Subject: [PATCH 7/7] posix: validate mode argument in posix_mkfifo() --- .../tests/file => posix/tests}/posix_mkfifo_invalid_mode.phpt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ext/{standard/tests/file => posix/tests}/posix_mkfifo_invalid_mode.phpt (100%) diff --git a/ext/standard/tests/file/posix_mkfifo_invalid_mode.phpt b/ext/posix/tests/posix_mkfifo_invalid_mode.phpt similarity index 100% rename from ext/standard/tests/file/posix_mkfifo_invalid_mode.phpt rename to ext/posix/tests/posix_mkfifo_invalid_mode.phpt