From 812a07f2a3ec81e20ba77469056edf0446de00bb Mon Sep 17 00:00:00 2001 From: lacatoire Date: Mon, 9 Nov 2026 15:56:47 +0100 Subject: [PATCH 1/2] Fix argument number in sodium_crypto_stream_xchacha20_xor_ic() key length error --- ext/sodium/libsodium.c | 2 +- ...pto_stream_xchacha20_xor_ic_key_length.phpt | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 ext/sodium/tests/crypto_stream_xchacha20_xor_ic_key_length.phpt diff --git a/ext/sodium/libsodium.c b/ext/sodium/libsodium.c index 57a34d5ec841..7c80de9cbf16 100644 --- a/ext/sodium/libsodium.c +++ b/ext/sodium/libsodium.c @@ -1391,7 +1391,7 @@ PHP_FUNCTION(sodium_crypto_stream_xchacha20_xor_ic) RETURN_THROWS(); } if (key_len != crypto_stream_xchacha20_KEYBYTES) { - zend_argument_error(sodium_exception_ce, 3, "must be SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES bytes long"); + zend_argument_error(sodium_exception_ce, 4, "must be SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES bytes long"); RETURN_THROWS(); } ciphertext_len = msg_len; diff --git a/ext/sodium/tests/crypto_stream_xchacha20_xor_ic_key_length.phpt b/ext/sodium/tests/crypto_stream_xchacha20_xor_ic_key_length.phpt new file mode 100644 index 000000000000..12b25c9f357d --- /dev/null +++ b/ext/sodium/tests/crypto_stream_xchacha20_xor_ic_key_length.phpt @@ -0,0 +1,18 @@ +--TEST-- +sodium_crypto_stream_xchacha20_xor_ic(): key length error names the $key argument +--EXTENSIONS-- +sodium +--SKIPIF-- + +--FILE-- +getMessage(), "\n"; +} +--EXPECT-- +SodiumException: sodium_crypto_stream_xchacha20_xor_ic(): Argument #4 ($key) must be SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES bytes long From 21c9f66a9235558eeb8f6bd8c14a3a970cd6bf3e Mon Sep 17 00:00:00 2001 From: lacatoire Date: Tue, 10 Nov 2026 11:04:18 +0100 Subject: [PATCH 2/2] Move xor_ic key length test into crypto_stream_xchacha20.phpt --- ext/sodium/tests/crypto_stream_xchacha20.phpt | 6 ++++++ ...pto_stream_xchacha20_xor_ic_key_length.phpt | 18 ------------------ 2 files changed, 6 insertions(+), 18 deletions(-) delete mode 100644 ext/sodium/tests/crypto_stream_xchacha20_xor_ic_key_length.phpt diff --git a/ext/sodium/tests/crypto_stream_xchacha20.phpt b/ext/sodium/tests/crypto_stream_xchacha20.phpt index 466734853d70..08d81b0ed18b 100644 --- a/ext/sodium/tests/crypto_stream_xchacha20.phpt +++ b/ext/sodium/tests/crypto_stream_xchacha20.phpt @@ -75,6 +75,11 @@ try { } catch (SodiumException $ex) { echo $ex->getMessage(), "\n"; } +try { + sodium_crypto_stream_xchacha20_xor_ic($stream, $nonce, 0, substr($key, 1)); +} catch (Throwable $ex) { + echo $ex::class, ': ', $ex->getMessage(), "\n"; +} ?> --EXPECT-- @@ -94,3 +99,4 @@ sodium_crypto_stream_xchacha20(): Argument #2 ($nonce) must be SODIUM_CRYPTO_STR sodium_crypto_stream_xchacha20(): Argument #3 ($key) must be SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES bytes long sodium_crypto_stream_xchacha20_xor(): Argument #2 ($nonce) must be SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES bytes long sodium_crypto_stream_xchacha20_xor(): Argument #3 ($key) must be SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES bytes long +SodiumException: sodium_crypto_stream_xchacha20_xor_ic(): Argument #4 ($key) must be SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES bytes long diff --git a/ext/sodium/tests/crypto_stream_xchacha20_xor_ic_key_length.phpt b/ext/sodium/tests/crypto_stream_xchacha20_xor_ic_key_length.phpt deleted file mode 100644 index 12b25c9f357d..000000000000 --- a/ext/sodium/tests/crypto_stream_xchacha20_xor_ic_key_length.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -sodium_crypto_stream_xchacha20_xor_ic(): key length error names the $key argument ---EXTENSIONS-- -sodium ---SKIPIF-- - ---FILE-- -getMessage(), "\n"; -} ---EXPECT-- -SodiumException: sodium_crypto_stream_xchacha20_xor_ic(): Argument #4 ($key) must be SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES bytes long