From 574745643fe53d606d5c78eefb7aaaafa8395281 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Sat, 31 Jan 2026 21:14:39 +0530 Subject: [PATCH 01/10] 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 02/10] 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 03/10] 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 04/10] 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 05/10] 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 06/10] 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 07/10] 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 From 6df80dfd722745d9e5a0594e9ce29b63febaf2a3 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Wed, 4 Feb 2026 10:30:35 +0530 Subject: [PATCH 08/10] posix: validate mode argument in posix_mkfifo() --- ext/posix/posix.c | 2 +- ext/posix/tests/posix_mkfifo_invalid_mode.phpt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/posix/posix.c b/ext/posix/posix.c index 81346a2b266e7..b23d880a2853d 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -624,7 +624,7 @@ PHP_FUNCTION(posix_mkfifo) if (mode < 0 || (mode & ~07777)) { zend_argument_value_error( 2, - "must be between 0 and 07777" + "must be between 0 and 0o7777" ); RETURN_THROWS(); } diff --git a/ext/posix/tests/posix_mkfifo_invalid_mode.phpt b/ext/posix/tests/posix_mkfifo_invalid_mode.phpt index 5aa6c68a515f1..5c9f251adfcac 100644 --- a/ext/posix/tests/posix_mkfifo_invalid_mode.phpt +++ b/ext/posix/tests/posix_mkfifo_invalid_mode.phpt @@ -31,6 +31,6 @@ try { } ?> --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 +posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 0o7777 +posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 0o7777 +posix_mkfifo(): Argument #2 ($permissions) must be between 0 and 0o7777 From 4f219e9edf980a456c718652978bdce35587a50b Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Fri, 6 Feb 2026 11:33:21 +0530 Subject: [PATCH 09/10] =?UTF-8?q?ext/posix:=20Add=20error=20message=20for?= =?UTF-8?q?=20mode=20range=20(0=E2=80=9307777)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ext/posix/posix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/posix/posix.c b/ext/posix/posix.c index b23d880a2853d..81346a2b266e7 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -624,7 +624,7 @@ PHP_FUNCTION(posix_mkfifo) if (mode < 0 || (mode & ~07777)) { zend_argument_value_error( 2, - "must be between 0 and 0o7777" + "must be between 0 and 07777" ); RETURN_THROWS(); } From d15154c652fcd8c2d999574963cba17e13158703 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Fri, 6 Feb 2026 11:34:13 +0530 Subject: [PATCH 10/10] =?UTF-8?q?ext/posix:=20Add=20error=20message=20for?= =?UTF-8?q?=20mode=20range=20(0=E2=80=9307777)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ext/posix/posix.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ext/posix/posix.c b/ext/posix/posix.c index 81346a2b266e7..7563e467089a0 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -622,10 +622,7 @@ PHP_FUNCTION(posix_mkfifo) } if (mode < 0 || (mode & ~07777)) { - zend_argument_value_error( - 2, - "must be between 0 and 07777" - ); + zend_argument_value_error(2, "must be between 0 and 0o7777"); RETURN_THROWS(); }