diff options
Diffstat (limited to 'libsodium-php7.patch')
-rw-r--r-- | libsodium-php7.patch | 1035 |
1 files changed, 0 insertions, 1035 deletions
diff --git a/libsodium-php7.patch b/libsodium-php7.patch deleted file mode 100644 index 3f4b50b..0000000 --- a/libsodium-php7.patch +++ /dev/null @@ -1,1035 +0,0 @@ -From 4b5dc6986beb959bd08abda4f48aa149b04bd9ce Mon Sep 17 00:00:00 2001 -From: Remi Collet <fedora@famillecollet.com> -Date: Thu, 2 Apr 2015 18:40:41 +0200 -Subject: [PATCH 1/9] fix PHP 7 compatibility - ---- - libsodium.c | 224 +++++++++++++++++++++++++++++--------------------------- - package.xml | 1 - - php_libsodium.h | 12 +++ - run-tests.php | 25 ++++--- - 4 files changed, 143 insertions(+), 119 deletions(-) - -diff --git a/libsodium.c b/libsodium.c -index 0a090d3..97af7d2 100644 ---- a/libsodium.c -+++ b/libsodium.c -@@ -279,7 +279,7 @@ PHP_MINFO_FUNCTION(libsodium) - - PHP_METHOD(Sodium, sodium_version_string) - { -- RETURN_STRING(sodium_version_string(), 1); -+ _RETURN_STRING(sodium_version_string()); - } - - PHP_METHOD(Sodium, sodium_library_version_major) -@@ -296,12 +296,18 @@ PHP_METHOD(Sodium, sodium_memzero) - { - zval *zv; - char *buf; -- int len; -+ strsize_t len; - -- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, -- "z", &zv) == FAILURE || -- Z_TYPE_P(zv) != IS_STRING) { -- zend_error(E_ERROR, "sodium_memzero: a PHP string is required"); -+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zv) == FAILURE) { -+ return; -+ } -+#if PHP_MAJOR_VERSION >= 7 -+ if (Z_TYPE_P(zv) == IS_REFERENCE) { -+ ZVAL_DEREF(zv); -+ } -+#endif -+ if (Z_TYPE_P(zv) != IS_STRING) { -+ zend_error(E_ERROR, "sodium_memzero: a PHP string is required") ; - } - buf = Z_STRVAL(*zv); - len = Z_STRLEN(*zv); -@@ -315,8 +321,8 @@ PHP_METHOD(Sodium, sodium_memcmp) - { - char *buf1; - char *buf2; -- int len1; -- int len2; -+ strsize_t len1; -+ strsize_t len2; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", - &buf1, &len1, -@@ -335,7 +341,7 @@ PHP_METHOD(Sodium, sodium_memcmp) - PHP_METHOD(Sodium, randombytes_buf) - { - char *buf; -- long len; -+ zend_long len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", - &len) == FAILURE || -@@ -346,7 +352,7 @@ PHP_METHOD(Sodium, randombytes_buf) - randombytes_buf(buf, (size_t) len); - buf[len] = 0U; - -- RETURN_STRINGL(buf, (int) len, 0); -+ _RETURN_STRINGL(buf, (int) len); - } - - PHP_METHOD(Sodium, randombytes_random16) -@@ -356,7 +362,7 @@ PHP_METHOD(Sodium, randombytes_random16) - - PHP_METHOD(Sodium, randombytes_uniform) - { -- long upper_bound; -+ zend_long upper_bound; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", - &upper_bound) == FAILURE || -@@ -371,8 +377,8 @@ PHP_METHOD(Sodium, crypto_shorthash) - unsigned char *hash; - unsigned char *key; - unsigned char *msg; -- int key_len; -- int msg_len; -+ strsize_t key_len; -+ strsize_t msg_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", - &msg, &msg_len, -@@ -391,7 +397,7 @@ PHP_METHOD(Sodium, crypto_shorthash) - } - hash[crypto_shorthash_BYTES] = 0U; - -- RETURN_STRINGL((char *) hash, crypto_shorthash_BYTES, 0); -+ _RETURN_STRINGL((char *) hash, crypto_shorthash_BYTES); - } - - PHP_METHOD(Sodium, crypto_secretbox) -@@ -400,9 +406,9 @@ PHP_METHOD(Sodium, crypto_secretbox) - unsigned char *key; - unsigned char *msg; - unsigned char *nonce; -- int key_len; -- int msg_len; -- int nonce_len; -+ strsize_t key_len; -+ strsize_t msg_len; -+ strsize_t nonce_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", - &msg, &msg_len, -@@ -432,7 +438,7 @@ PHP_METHOD(Sodium, crypto_secretbox) - } - ciphertext[msg_len + crypto_secretbox_MACBYTES] = 0U; - -- RETURN_STRINGL((char *) ciphertext, msg_len + crypto_secretbox_MACBYTES, 0); -+ _RETURN_STRINGL((char *) ciphertext, msg_len + crypto_secretbox_MACBYTES); - } - - PHP_METHOD(Sodium, crypto_secretbox_open) -@@ -441,9 +447,9 @@ PHP_METHOD(Sodium, crypto_secretbox_open) - unsigned char *ciphertext; - unsigned char *msg; - unsigned char *nonce; -- int key_len; -- int ciphertext_len; -- int nonce_len; -+ strsize_t key_len; -+ strsize_t ciphertext_len; -+ strsize_t nonce_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", - &ciphertext, &ciphertext_len, -@@ -474,8 +480,8 @@ PHP_METHOD(Sodium, crypto_secretbox_open) - RETURN_FALSE; - } else { - msg[ciphertext_len - crypto_secretbox_MACBYTES] = 0U; -- RETURN_STRINGL((char *) msg, -- ciphertext_len - crypto_secretbox_MACBYTES, 0); -+ _RETURN_STRINGL((char *) msg, -+ ciphertext_len - crypto_secretbox_MACBYTES); - } - } - -@@ -484,9 +490,9 @@ PHP_METHOD(Sodium, crypto_generichash) - unsigned char *hash; - unsigned char *key = NULL; - unsigned char *msg; -- long hash_len = crypto_generichash_BYTES; -- int key_len = 0; -- int msg_len; -+ zend_long hash_len = crypto_generichash_BYTES; -+ strsize_t key_len = 0; -+ strsize_t msg_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|sl", - &msg, &msg_len, -@@ -512,7 +518,7 @@ PHP_METHOD(Sodium, crypto_generichash) - } - hash[hash_len] = 0U; - -- RETURN_STRINGL((char *) hash, (int) hash_len, 0); -+ _RETURN_STRINGL((char *) hash, (int) hash_len); - } - - PHP_METHOD(Sodium, crypto_box_keypair) -@@ -529,7 +535,7 @@ PHP_METHOD(Sodium, crypto_box_keypair) - } - keypair[keypair_len] = 0U; - -- RETURN_STRINGL((char *) keypair, (int) keypair_len, 0); -+ _RETURN_STRINGL((char *) keypair, (int) keypair_len); - } - - PHP_METHOD(Sodium, crypto_box_keypair_from_secretkey_and_publickey) -@@ -538,8 +544,8 @@ PHP_METHOD(Sodium, crypto_box_keypair_from_secretkey_and_publickey) - char *publickey; - char *secretkey; - size_t keypair_len; -- int publickey_len; -- int secretkey_len; -+ strsize_t publickey_len; -+ strsize_t secretkey_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", - &secretkey, &secretkey_len, -@@ -563,14 +569,14 @@ PHP_METHOD(Sodium, crypto_box_keypair_from_secretkey_and_publickey) - crypto_box_PUBLICKEYBYTES); - keypair[keypair_len] = 0U; - -- RETURN_STRINGL(keypair, (int) keypair_len, 0); -+ _RETURN_STRINGL(keypair, (int) keypair_len); - } - - PHP_METHOD(Sodium, crypto_box_secretkey) - { - unsigned char *keypair; - char *secretkey; -- int keypair_len; -+ strsize_t keypair_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", - &keypair, &keypair_len) == FAILURE) { -@@ -586,14 +592,14 @@ PHP_METHOD(Sodium, crypto_box_secretkey) - memcpy(secretkey, keypair, crypto_box_SECRETKEYBYTES); - secretkey[crypto_box_SECRETKEYBYTES] = 0U; - -- RETURN_STRINGL((char *) secretkey, crypto_box_SECRETKEYBYTES, 0); -+ _RETURN_STRINGL((char *) secretkey, crypto_box_SECRETKEYBYTES); - } - - PHP_METHOD(Sodium, crypto_box_publickey) - { - unsigned char *keypair; - char *publickey; -- int keypair_len; -+ strsize_t keypair_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", - &keypair, &keypair_len) == FAILURE) { -@@ -610,14 +616,14 @@ PHP_METHOD(Sodium, crypto_box_publickey) - crypto_box_PUBLICKEYBYTES); - publickey[crypto_box_PUBLICKEYBYTES] = 0U; - -- RETURN_STRINGL((char *) publickey, crypto_box_PUBLICKEYBYTES, 0); -+ _RETURN_STRINGL((char *) publickey, crypto_box_PUBLICKEYBYTES); - } - - PHP_METHOD(Sodium, crypto_box_publickey_from_secretkey) - { - unsigned char *publickey; - unsigned char *secretkey; -- int secretkey_len; -+ strsize_t secretkey_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", - &secretkey, &secretkey_len) == FAILURE) { -@@ -636,7 +642,7 @@ PHP_METHOD(Sodium, crypto_box_publickey_from_secretkey) - crypto_scalarmult_base(publickey, secretkey); - publickey[crypto_box_PUBLICKEYBYTES] = 0U; - -- RETURN_STRINGL((char *) publickey, crypto_box_PUBLICKEYBYTES, 0); -+ _RETURN_STRINGL((char *) publickey, crypto_box_PUBLICKEYBYTES); - } - - PHP_METHOD(Sodium, crypto_box) -@@ -647,9 +653,9 @@ PHP_METHOD(Sodium, crypto_box) - unsigned char *nonce; - unsigned char *publickey; - unsigned char *secretkey; -- int keypair_len; -- int msg_len; -- int nonce_len; -+ strsize_t keypair_len; -+ strsize_t msg_len; -+ strsize_t nonce_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", - &msg, &msg_len, -@@ -680,7 +686,7 @@ PHP_METHOD(Sodium, crypto_box) - } - ciphertext[msg_len + crypto_box_MACBYTES] = 0U; - -- RETURN_STRINGL((char *) ciphertext, msg_len + crypto_box_MACBYTES, 0); -+ _RETURN_STRINGL((char *) ciphertext, msg_len + crypto_box_MACBYTES); - } - - PHP_METHOD(Sodium, crypto_box_open) -@@ -691,9 +697,9 @@ PHP_METHOD(Sodium, crypto_box_open) - unsigned char *nonce; - unsigned char *publickey; - unsigned char *secretkey; -- int ciphertext_len; -- int keypair_len; -- int nonce_len; -+ strsize_t ciphertext_len; -+ strsize_t keypair_len; -+ strsize_t nonce_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", - &ciphertext, &ciphertext_len, -@@ -726,8 +732,8 @@ PHP_METHOD(Sodium, crypto_box_open) - RETURN_FALSE; - } else { - msg[ciphertext_len - crypto_box_MACBYTES] = 0U; -- RETURN_STRINGL((char *) msg, -- ciphertext_len - crypto_box_MACBYTES, 0); -+ _RETURN_STRINGL((char *) msg, -+ ciphertext_len - crypto_box_MACBYTES); - } - } - -@@ -745,7 +751,7 @@ PHP_METHOD(Sodium, crypto_sign_keypair) - } - keypair[keypair_len] = 0U; - -- RETURN_STRINGL((char *) keypair, keypair_len, 0); -+ _RETURN_STRINGL((char *) keypair, keypair_len); - } - - PHP_METHOD(Sodium, crypto_sign_seed_keypair) -@@ -753,7 +759,7 @@ PHP_METHOD(Sodium, crypto_sign_seed_keypair) - unsigned char *keypair; - unsigned char *seed; - size_t keypair_len; -- int seed_len; -+ strsize_t seed_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", - &seed, &seed_len) == FAILURE) { -@@ -773,7 +779,7 @@ PHP_METHOD(Sodium, crypto_sign_seed_keypair) - } - keypair[keypair_len] = 0U; - -- RETURN_STRINGL((char *) keypair, keypair_len, 0); -+ _RETURN_STRINGL((char *) keypair, keypair_len); - } - - PHP_METHOD(Sodium, crypto_sign_keypair_from_secretkey_and_publickey) -@@ -782,8 +788,8 @@ PHP_METHOD(Sodium, crypto_sign_keypair_from_secretkey_and_publickey) - char *publickey; - char *secretkey; - size_t keypair_len; -- int publickey_len; -- int secretkey_len; -+ strsize_t publickey_len; -+ strsize_t secretkey_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", - &secretkey, &secretkey_len, -@@ -807,14 +813,14 @@ PHP_METHOD(Sodium, crypto_sign_keypair_from_secretkey_and_publickey) - crypto_sign_PUBLICKEYBYTES); - keypair[keypair_len] = 0U; - -- RETURN_STRINGL(keypair, keypair_len, 0); -+ _RETURN_STRINGL(keypair, keypair_len); - } - - PHP_METHOD(Sodium, crypto_sign_secretkey) - { - unsigned char *keypair; - char *secretkey; -- int keypair_len; -+ strsize_t keypair_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", - &keypair, &keypair_len) == FAILURE) { -@@ -830,14 +836,14 @@ PHP_METHOD(Sodium, crypto_sign_secretkey) - memcpy(secretkey, keypair, crypto_sign_SECRETKEYBYTES); - secretkey[crypto_sign_SECRETKEYBYTES] = 0U; - -- RETURN_STRINGL((char *) secretkey, crypto_sign_SECRETKEYBYTES, 0); -+ _RETURN_STRINGL((char *) secretkey, crypto_sign_SECRETKEYBYTES); - } - - PHP_METHOD(Sodium, crypto_sign_publickey) - { - unsigned char *keypair; - char *publickey; -- int keypair_len; -+ strsize_t keypair_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", - &keypair, &keypair_len) == FAILURE) { -@@ -854,7 +860,7 @@ PHP_METHOD(Sodium, crypto_sign_publickey) - crypto_sign_PUBLICKEYBYTES); - publickey[crypto_sign_PUBLICKEYBYTES] = 0U; - -- RETURN_STRINGL((char *) publickey, crypto_sign_PUBLICKEYBYTES, 0); -+ _RETURN_STRINGL((char *) publickey, crypto_sign_PUBLICKEYBYTES); - } - - PHP_METHOD(Sodium, crypto_sign) -@@ -863,9 +869,9 @@ PHP_METHOD(Sodium, crypto_sign) - unsigned char *msg_signed; - unsigned char *secretkey; - unsigned long long msg_signed_real_len; -- int msg_len; -- int msg_signed_len; -- int secretkey_len; -+ strsize_t msg_len; -+ strsize_t msg_signed_len; -+ strsize_t secretkey_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", - &msg, &msg_len, -@@ -894,7 +900,7 @@ PHP_METHOD(Sodium, crypto_sign) - } - msg_signed[msg_signed_real_len] = 0U; - -- RETURN_STRINGL((char *) msg_signed, (int) msg_signed_real_len, 0); -+ _RETURN_STRINGL((char *) msg_signed, (int) msg_signed_real_len); - } - - PHP_METHOD(Sodium, crypto_sign_open) -@@ -903,9 +909,9 @@ PHP_METHOD(Sodium, crypto_sign_open) - unsigned char *msg_signed; - unsigned char *publickey; - unsigned long long msg_real_len; -- int msg_len; -- int msg_signed_len; -- int publickey_len; -+ strsize_t msg_len; -+ strsize_t msg_signed_len; -+ strsize_t publickey_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", - &msg_signed, &msg_signed_len, -@@ -935,7 +941,7 @@ PHP_METHOD(Sodium, crypto_sign_open) - } - msg[msg_real_len] = 0U; - -- RETURN_STRINGL((char *) msg, (int) msg_real_len, 0); -+ _RETURN_STRINGL((char *) msg, (int) msg_real_len); - } - - PHP_METHOD(Sodium, crypto_sign_detached) -@@ -944,8 +950,8 @@ PHP_METHOD(Sodium, crypto_sign_detached) - unsigned char *signature; - unsigned char *secretkey; - unsigned long long signature_real_len; -- int msg_len; -- int secretkey_len; -+ strsize_t msg_len; -+ strsize_t secretkey_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", - &msg, &msg_len, -@@ -969,7 +975,7 @@ PHP_METHOD(Sodium, crypto_sign_detached) - } - signature[signature_real_len] = 0U; - -- RETURN_STRINGL((char *) signature, (int) signature_real_len, 0); -+ _RETURN_STRINGL((char *) signature, (int) signature_real_len); - } - - PHP_METHOD(Sodium, crypto_sign_verify_detached) -@@ -977,9 +983,9 @@ PHP_METHOD(Sodium, crypto_sign_verify_detached) - unsigned char *msg; - unsigned char *publickey; - unsigned char *signature; -- int msg_len; -- int publickey_len; -- int signature_len; -+ strsize_t msg_len; -+ strsize_t publickey_len; -+ strsize_t signature_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", - &signature, &signature_len, -@@ -1010,9 +1016,9 @@ PHP_METHOD(Sodium, crypto_stream) - unsigned char *ciphertext; - unsigned char *key; - unsigned char *nonce; -- long ciphertext_len; -- int key_len; -- int nonce_len; -+ zend_long ciphertext_len; -+ strsize_t key_len; -+ strsize_t nonce_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lss", - &ciphertext_len, -@@ -1037,7 +1043,7 @@ PHP_METHOD(Sodium, crypto_stream) - } - ciphertext[ciphertext_len] = 0U; - -- RETURN_STRINGL((char *) ciphertext, ciphertext_len, 0); -+ _RETURN_STRINGL((char *) ciphertext, ciphertext_len); - } - - PHP_METHOD(Sodium, crypto_stream_xor) -@@ -1046,9 +1052,9 @@ PHP_METHOD(Sodium, crypto_stream_xor) - unsigned char *key; - unsigned char *msg; - unsigned char *nonce; -- int key_len; -- int msg_len; -- int nonce_len; -+ strsize_t key_len; -+ strsize_t msg_len; -+ strsize_t nonce_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", - &msg, &msg_len, -@@ -1070,7 +1076,7 @@ PHP_METHOD(Sodium, crypto_stream_xor) - } - ciphertext[msg_len] = 0U; - -- RETURN_STRINGL((char *) ciphertext, msg_len, 0); -+ _RETURN_STRINGL((char *) ciphertext, msg_len); - } - - PHP_METHOD(Sodium, crypto_pwhash_scryptsalsa208sha256) -@@ -1078,11 +1084,11 @@ PHP_METHOD(Sodium, crypto_pwhash_scryptsalsa208sha256) - unsigned char *hash; - unsigned char *salt; - char *passwd; -- long hash_len; -- long memlimit; -- long opslimit; -- int passwd_len; -- int salt_len; -+ zend_long hash_len; -+ zend_long memlimit; -+ zend_long opslimit; -+ strsize_t passwd_len; -+ strsize_t salt_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lssll", - &hash_len, -@@ -1118,16 +1124,16 @@ PHP_METHOD(Sodium, crypto_pwhash_scryptsalsa208sha256) - } - hash[hash_len] = 0U; - -- RETURN_STRINGL((char *) hash, hash_len, 0); -+ _RETURN_STRINGL((char *) hash, hash_len); - } - - PHP_METHOD(Sodium, crypto_pwhash_scryptsalsa208sha256_str) - { - char *hash_str; - char *passwd; -- long memlimit; -- long opslimit; -- int passwd_len; -+ zend_long memlimit; -+ zend_long opslimit; -+ strsize_t passwd_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sll", - &passwd, &passwd_len, -@@ -1157,16 +1163,16 @@ PHP_METHOD(Sodium, crypto_pwhash_scryptsalsa208sha256_str) - } - hash_str[crypto_pwhash_scryptsalsa208sha256_STRBYTES] = 0U; - -- RETURN_STRINGL((char *) hash_str, -- crypto_pwhash_scryptsalsa208sha256_STRBYTES - 1, 0); -+ _RETURN_STRINGL((char *) hash_str, -+ crypto_pwhash_scryptsalsa208sha256_STRBYTES - 1); - } - - PHP_METHOD(Sodium, crypto_pwhash_scryptsalsa208sha256_str_verify) - { - char *hash_str; - char *passwd; -- int hash_str_len; -- int passwd_len; -+ strsize_t hash_str_len; -+ strsize_t passwd_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", - &hash_str, &hash_str_len, -@@ -1196,11 +1202,11 @@ PHP_METHOD(Sodium, crypto_aead_chacha20poly1305_encrypt) - unsigned char *npub; - unsigned char *secretkey; - unsigned long long ciphertext_real_len; -- int ad_len; -- int ciphertext_len; -- int msg_len; -- int npub_len; -- int secretkey_len; -+ strsize_t ad_len; -+ strsize_t ciphertext_len; -+ strsize_t msg_len; -+ strsize_t npub_len; -+ strsize_t secretkey_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", - &msg, &msg_len, -@@ -1239,7 +1245,7 @@ PHP_METHOD(Sodium, crypto_aead_chacha20poly1305_encrypt) - } - ciphertext[ciphertext_real_len] = 0U; - -- RETURN_STRINGL((char *) ciphertext, (int) ciphertext_real_len, 0); -+ _RETURN_STRINGL((char *) ciphertext, (int) ciphertext_real_len); - } - - PHP_METHOD(Sodium, crypto_aead_chacha20poly1305_decrypt) -@@ -1250,11 +1256,11 @@ PHP_METHOD(Sodium, crypto_aead_chacha20poly1305_decrypt) - unsigned char *npub; - unsigned char *secretkey; - unsigned long long msg_real_len; -- int ad_len; -- int ciphertext_len; -- int msg_len; -- int npub_len; -- int secretkey_len; -+ strsize_t ad_len; -+ strsize_t ciphertext_len; -+ strsize_t msg_len; -+ strsize_t npub_len; -+ strsize_t secretkey_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", - &ciphertext, &ciphertext_len, -@@ -1293,15 +1299,15 @@ PHP_METHOD(Sodium, crypto_aead_chacha20poly1305_decrypt) - } - msg[msg_real_len] = 0U; - -- RETURN_STRINGL((char *) msg, (int) msg_real_len, 0); -+ _RETURN_STRINGL((char *) msg, (int) msg_real_len); - } - - PHP_METHOD(Sodium, sodium_bin2hex) - { - unsigned char *bin; - char *hex; -- int bin_len; -- int hex_len; -+ strsize_t bin_len; -+ strsize_t hex_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", - &bin, &bin_len) == FAILURE) { -@@ -1314,7 +1320,7 @@ PHP_METHOD(Sodium, sodium_bin2hex) - hex = safe_emalloc((size_t) hex_len + 1U, 1U, 0U); - sodium_bin2hex(hex, hex_len + 1U, bin, bin_len); - -- RETURN_STRINGL(hex, hex_len, 0); -+ _RETURN_STRINGL(hex, hex_len); - } - - PHP_METHOD(Sodium, sodium_hex2bin) -@@ -1324,8 +1330,8 @@ PHP_METHOD(Sodium, sodium_hex2bin) - char *ignore = NULL; - size_t bin_real_len; - size_t bin_len; -- int hex_len; -- int ignore_len = 0; -+ strsize_t hex_len; -+ strsize_t ignore_len = 0; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", - &hex, &hex_len, -@@ -1341,7 +1347,7 @@ PHP_METHOD(Sodium, sodium_hex2bin) - } - bin[bin_real_len] = 0U; - -- RETURN_STRINGL((char *) bin, (int) bin_real_len, 0); -+ _RETURN_STRINGL((char *) bin, (int) bin_real_len); - } - - PHP_METHOD(Sodium, crypto_scalarmult) -diff --git a/php_libsodium.h b/php_libsodium.h -index 77c3e4b..d837bef 100644 ---- a/php_libsodium.h -+++ b/php_libsodium.h -@@ -70,6 +70,18 @@ PHP_METHOD(Sodium, sodium_version_string); - #define LIBSODIUM_G(v) (libsodium_globals.v) - #endif - -+#if PHP_MAJOR_VERSION < 7 -+typedef long zend_long; -+typedef int strsize_t; -+#define _RETURN_STRING(a) RETURN_STRING(a,1) -+#define _RETURN_STRINGL(a,l) RETURN_STRINGL(a,l,0) -+#else -+typedef size_t strsize_t; -+#define TSRMLS_CC -+#define _RETURN_STRING(a) RETURN_STRING(a) -+#define _RETURN_STRINGL(a,l) { RETVAL_STRINGL(a, l); efree(a); return; } -+#endif -+ - #endif /* PHP_LIBSODIUM_H */ - - /* -From b0278abcf057b9303530b2537f76316facff317a Mon Sep 17 00:00:00 2001 -From: Remi Collet <fedora@famillecollet.com> -Date: Thu, 2 Apr 2015 19:29:32 +0200 -Subject: [PATCH 3/9] avoid double allocation - ---- - libsodium.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/libsodium.c b/libsodium.c -index 97af7d2..f14ed27 100644 ---- a/libsodium.c -+++ b/libsodium.c -@@ -340,7 +340,11 @@ PHP_METHOD(Sodium, sodium_memcmp) - - PHP_METHOD(Sodium, randombytes_buf) - { -+#if PHP_MAJOR_VERSION < 7 - char *buf; -+#else -+ zend_string *result; -+#endif - zend_long len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", -@@ -348,11 +352,19 @@ PHP_METHOD(Sodium, randombytes_buf) - len <= 0 || len >= INT_MAX) { - zend_error(E_ERROR, "randombytes_buf(): invalid length"); - } -+#if PHP_MAJOR_VERSION < 7 - buf = safe_emalloc((size_t) len + 1U, 1U, 0U); - randombytes_buf(buf, (size_t) len); - buf[len] = 0U; - - _RETURN_STRINGL(buf, (int) len); -+#else -+ result = zend_string_alloc(len, 0); -+ randombytes_buf(result->val, result->len); -+ result->val[result->len] = '\0'; -+ -+ RETURN_NEW_STR(result); -+#endif - } - - PHP_METHOD(Sodium, randombytes_random16) - -From 8ca9879884b991df15d3b69443015fe95a531b6e Mon Sep 17 00:00:00 2001 -From: Remi Collet <fedora@famillecollet.com> -Date: Fri, 10 Apr 2015 18:34:51 +0200 -Subject: [PATCH 4/9] provide more compat. stuff, and make code more PHP-7-like - ---- - libsodium.c | 12 ------------ - php_libsodium.h | 23 +++++++++++++++++++++++ - 2 files changed, 23 insertions(+), 12 deletions(-) - -diff --git a/libsodium.c b/libsodium.c -index f14ed27..f18905f 100644 ---- a/libsodium.c -+++ b/libsodium.c -@@ -340,11 +340,7 @@ PHP_METHOD(Sodium, sodium_memcmp) - - PHP_METHOD(Sodium, randombytes_buf) - { --#if PHP_MAJOR_VERSION < 7 -- char *buf; --#else - zend_string *result; --#endif - zend_long len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", -@@ -352,19 +348,11 @@ PHP_METHOD(Sodium, randombytes_buf) - len <= 0 || len >= INT_MAX) { - zend_error(E_ERROR, "randombytes_buf(): invalid length"); - } --#if PHP_MAJOR_VERSION < 7 -- buf = safe_emalloc((size_t) len + 1U, 1U, 0U); -- randombytes_buf(buf, (size_t) len); -- buf[len] = 0U; -- -- _RETURN_STRINGL(buf, (int) len); --#else - result = zend_string_alloc(len, 0); - randombytes_buf(result->val, result->len); - result->val[result->len] = '\0'; - - RETURN_NEW_STR(result); --#endif - } - - PHP_METHOD(Sodium, randombytes_random16) -diff --git a/php_libsodium.h b/php_libsodium.h -index d837bef..50e5134 100644 ---- a/php_libsodium.h -+++ b/php_libsodium.h -@@ -71,13 +71,36 @@ PHP_METHOD(Sodium, sodium_version_string); - #endif - - #if PHP_MAJOR_VERSION < 7 -+struct _zend_string { -+ char *val; -+ int len; -+}; -+typedef struct _zend_string zend_string; - typedef long zend_long; - typedef int strsize_t; -+ -+static zend_always_inline zend_string *zend_string_alloc(int len, int persistent) -+{ -+ /* single alloc, so free the bug, will also free the struct */ -+ char *buf = safe_emalloc(sizeof(zend_string)+len+1,1,0); -+ zend_string *str = (zend_string *)(buf+len+1); -+ -+ str->val = buf; -+ str->len = len; -+ -+ return str; -+} -+/* compatibility macros */ - #define _RETURN_STRING(a) RETURN_STRING(a,1) - #define _RETURN_STRINGL(a,l) RETURN_STRINGL(a,l,0) -+/* new macros */ -+#define RETURN_NEW_STR(s) RETURN_STRINGL(s->val,s->len,0); -+ - #else - typedef size_t strsize_t; -+/* removed/uneeded macros */ - #define TSRMLS_CC -+/* compatibility macros */ - #define _RETURN_STRING(a) RETURN_STRING(a) - #define _RETURN_STRINGL(a,l) { RETVAL_STRINGL(a, l); efree(a); return; } - #endif - -From 458d30b0b6070487a209b810d1f7b5ae695ef37b Mon Sep 17 00:00:00 2001 -From: Remi Collet <fedora@famillecollet.com> -Date: Fri, 10 Apr 2015 18:49:44 +0200 -Subject: [PATCH 5/9] improve crypto_shorthash - ---- - libsodium.c | 10 +++++----- - php_libsodium.h | 2 +- - 2 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/libsodium.c b/libsodium.c -index f18905f..4181f09 100644 ---- a/libsodium.c -+++ b/libsodium.c -@@ -374,7 +374,7 @@ PHP_METHOD(Sodium, randombytes_uniform) - - PHP_METHOD(Sodium, crypto_shorthash) - { -- unsigned char *hash; -+ zend_string *hash; - unsigned char *key; - unsigned char *msg; - strsize_t key_len; -@@ -390,14 +390,14 @@ PHP_METHOD(Sodium, crypto_shorthash) - "crypto_shorthash(): key size should be " - "CRYPTO_SHORTHASH_KEYBYTES bytes"); - } -- hash = safe_emalloc(crypto_shorthash_BYTES + 1U, 1U, 0U); -- if (crypto_shorthash(hash, msg, (unsigned long long) msg_len, key) != 0) { -+ hash = zend_string_alloc(crypto_shorthash_BYTES, 0U); -+ if (crypto_shorthash((unsigned char *)hash->val, msg, (unsigned long long) msg_len, key) != 0) { - efree(hash); - zend_error(E_ERROR, "crypto_shorthash()"); - } -- hash[crypto_shorthash_BYTES] = 0U; -+ hash->val[crypto_shorthash_BYTES] = 0U; - -- _RETURN_STRINGL((char *) hash, crypto_shorthash_BYTES); -+ RETURN_NEW_STR(hash); - } - - PHP_METHOD(Sodium, crypto_secretbox) -diff --git a/php_libsodium.h b/php_libsodium.h -index 50e5134..5c22c31 100644 ---- a/php_libsodium.h -+++ b/php_libsodium.h -@@ -81,7 +81,7 @@ typedef int strsize_t; - - static zend_always_inline zend_string *zend_string_alloc(int len, int persistent) - { -- /* single alloc, so free the bug, will also free the struct */ -+ /* single alloc, so free the buf, will also free the struct */ - char *buf = safe_emalloc(sizeof(zend_string)+len+1,1,0); - zend_string *str = (zend_string *)(buf+len+1); - - -From dc78bceedfaba33af1886f305ada8b01260acd41 Mon Sep 17 00:00:00 2001 -From: Remi Collet <fedora@famillecollet.com> -Date: Fri, 10 Apr 2015 18:59:53 +0200 -Subject: [PATCH 6/9] improve crypto_secretbox - ---- - libsodium.c | 11 +++++------ - 1 file changed, 5 insertions(+), 6 deletions(-) - -diff --git a/libsodium.c b/libsodium.c -index 4181f09..5a7e594 100644 ---- a/libsodium.c -+++ b/libsodium.c -@@ -402,7 +402,7 @@ PHP_METHOD(Sodium, crypto_shorthash) - - PHP_METHOD(Sodium, crypto_secretbox) - { -- unsigned char *ciphertext; -+ zend_string *ciphertext; - unsigned char *key; - unsigned char *msg; - unsigned char *nonce; -@@ -429,16 +429,15 @@ PHP_METHOD(Sodium, crypto_secretbox) - if (INT_MAX - msg_len <= crypto_secretbox_MACBYTES) { - zend_error(E_ERROR, "arithmetic overflow"); - } -- ciphertext = safe_emalloc((size_t) msg_len + crypto_secretbox_MACBYTES + 1U, -- 1U, 0U); -- if (crypto_secretbox_easy(ciphertext, msg, (unsigned long long) msg_len, -+ ciphertext = zend_string_alloc(msg_len + crypto_secretbox_MACBYTES, 0U); -+ if (crypto_secretbox_easy((unsigned char *)ciphertext->val, msg, (unsigned long long) msg_len, - nonce, key) != 0) { - efree(ciphertext); - zend_error(E_ERROR, "crypto_secretbox()"); - } -- ciphertext[msg_len + crypto_secretbox_MACBYTES] = 0U; -+ ciphertext->val[msg_len + crypto_secretbox_MACBYTES] = 0U; - -- _RETURN_STRINGL((char *) ciphertext, msg_len + crypto_secretbox_MACBYTES); -+ RETURN_NEW_STR(ciphertext); - } - - PHP_METHOD(Sodium, crypto_secretbox_open) - -From 4c3c1b9ff87a0b774a4df103f3938a177c4252e7 Mon Sep 17 00:00:00 2001 -From: Remi Collet <fedora@famillecollet.com> -Date: Fri, 10 Apr 2015 19:12:00 +0200 -Subject: [PATCH 7/9] make persitent option for consitency (not needed) - ---- - php_libsodium.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/php_libsodium.h b/php_libsodium.h -index 5c22c31..7f8e02a 100644 ---- a/php_libsodium.h -+++ b/php_libsodium.h -@@ -82,7 +82,7 @@ typedef int strsize_t; - static zend_always_inline zend_string *zend_string_alloc(int len, int persistent) - { - /* single alloc, so free the buf, will also free the struct */ -- char *buf = safe_emalloc(sizeof(zend_string)+len+1,1,0); -+ char *buf = safe_pemalloc(sizeof(zend_string)+len+1,1,0,persistent); - zend_string *str = (zend_string *)(buf+len+1); - - str->val = buf; - -From 268fc84c3f7e8b228768822f2f4cc931277a96d6 Mon Sep 17 00:00:00 2001 -From: Remi Collet <fedora@famillecollet.com> -Date: Sat, 11 Apr 2015 17:32:27 +0200 -Subject: [PATCH 8/9] add zend_string_free and use it for zend_str - ---- - libsodium.c | 4 ++-- - php_libsodium.h | 6 ++++++ - 2 files changed, 8 insertions(+), 2 deletions(-) - -diff --git a/libsodium.c b/libsodium.c -index 5a7e594..474327b 100644 ---- a/libsodium.c -+++ b/libsodium.c -@@ -392,7 +392,7 @@ PHP_METHOD(Sodium, crypto_shorthash) - } - hash = zend_string_alloc(crypto_shorthash_BYTES, 0U); - if (crypto_shorthash((unsigned char *)hash->val, msg, (unsigned long long) msg_len, key) != 0) { -- efree(hash); -+ zend_string_free(hash); - zend_error(E_ERROR, "crypto_shorthash()"); - } - hash->val[crypto_shorthash_BYTES] = 0U; -@@ -432,7 +432,7 @@ PHP_METHOD(Sodium, crypto_secretbox) - ciphertext = zend_string_alloc(msg_len + crypto_secretbox_MACBYTES, 0U); - if (crypto_secretbox_easy((unsigned char *)ciphertext->val, msg, (unsigned long long) msg_len, - nonce, key) != 0) { -- efree(ciphertext); -+ zend_string_free(ciphertext); - zend_error(E_ERROR, "crypto_secretbox()"); - } - ciphertext->val[msg_len + crypto_secretbox_MACBYTES] = 0U; -diff --git a/php_libsodium.h b/php_libsodium.h -index 7f8e02a..8d00ea3 100644 ---- a/php_libsodium.h -+++ b/php_libsodium.h -@@ -74,6 +74,7 @@ PHP_METHOD(Sodium, sodium_version_string); - struct _zend_string { - char *val; - int len; -+ int persistent; - }; - typedef struct _zend_string zend_string; - typedef long zend_long; -@@ -87,9 +88,14 @@ static zend_always_inline zend_string *zend_string_alloc(int len, int persistent - - str->val = buf; - str->len = len; -+ str->persistent = persistent; - - return str; - } -+static zend_always_inline void zend_string_free(zend_string *s) -+{ -+ pefree(s->val, s->persistent); -+} - /* compatibility macros */ - #define _RETURN_STRING(a) RETURN_STRING(a,1) - #define _RETURN_STRINGL(a,l) RETURN_STRINGL(a,l,0) - -From c243a17622e22ba4ccd6e2979470bf6eeeeacff2 Mon Sep 17 00:00:00 2001 -From: Remi Collet <fedora@famillecollet.com> -Date: Wed, 15 Apr 2015 16:17:36 +0200 -Subject: [PATCH 9/9] fix crypto_scalarmult for PHP 7 - ---- - libsodium.c | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - -diff --git a/libsodium.c b/libsodium.c -index 474327b..43eaeb3 100644 ---- a/libsodium.c -+++ b/libsodium.c -@@ -1353,9 +1353,9 @@ PHP_METHOD(Sodium, crypto_scalarmult) - { - unsigned char *n; - unsigned char *p; -- unsigned char *q; -- int n_len; -- int p_len; -+ zend_string *q; -+ strsize_t n_len; -+ strsize_t p_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", - &n, &n_len, &p, &p_len) == FAILURE) { -@@ -1366,11 +1366,11 @@ PHP_METHOD(Sodium, crypto_scalarmult) - zend_error(E_ERROR, "crypto_scalarmult(): scalar and point must be " - "CRYPTO_SCALARMULT_SCALARBYTES bytes"); - } -- q = safe_emalloc(crypto_scalarmult_BYTES + 1U, 1U, 0U); -- if (crypto_scalarmult(q, n, p) != 0) { -+ q = zend_string_alloc(crypto_scalarmult_BYTES, 0); -+ if (crypto_scalarmult((unsigned char *)q->val, n, p) != 0) { - zend_error(E_ERROR, "crypto_scalarmult(): internal error"); - } -- q[crypto_scalarmult_BYTES] = 0; -+ q->val[crypto_scalarmult_BYTES] = 0; - -- RETURN_STRINGL((char *) q, crypto_scalarmult_BYTES, 0); -+ RETURN_NEW_STR(q); - } |