ZEND_GET_MODULE(sodium)
#endif
-static zend_object *sodium_exception_create_object(zend_class_entry *ce) {
- zend_object *obj = zend_ce_exception->create_object(ce);
+/* Remove argument information from backtrace to prevent information leaks */
+static void sodium_remove_param_values_from_backtrace(zend_object *obj) {
zval obj_zv, rv, *trace;
- /* Remove argument information from backtrace to prevent information leaks */
ZVAL_OBJ(&obj_zv, obj);
- trace = zend_read_property(zend_ce_exception, &obj_zv, "trace", sizeof("trace")-1, 0, &rv);
+ trace = zend_read_property(zend_get_exception_base(&obj_zv), &obj_zv, "trace", sizeof("trace")-1, 0, &rv);
if (trace && Z_TYPE_P(trace) == IS_ARRAY) {
zval *frame;
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(trace), frame) {
}
} ZEND_HASH_FOREACH_END();
}
+}
+static zend_object *sodium_exception_create_object(zend_class_entry *ce) {
+ zend_object *obj = zend_ce_exception->create_object(ce);
+ sodium_remove_param_values_from_backtrace(obj);
return obj;
}
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(),
"z", &buf_zv) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
ZVAL_DEREF(buf_zv);
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(),
"z", &val_zv) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
ZVAL_DEREF(val_zv);
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(),
"zs", &val_zv, &addv, &addv_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
ZVAL_DEREF(val_zv);
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&buf1, &len1,
&buf2, &len2) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (len1 != len2) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&msg, &msg_len,
&key, &key_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (key_len != crypto_shorthash_KEYBYTES) {
&msg, &msg_len,
&nonce, &nonce_len,
&key, &key_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (nonce_len != crypto_secretbox_NONCEBYTES) {
&ciphertext, &ciphertext_len,
&nonce, &nonce_len,
&key, &key_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (nonce_len != crypto_secretbox_NONCEBYTES) {
&msg, &msg_len,
&key, &key_len,
&hash_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (hash_len < crypto_generichash_BYTES_MIN ||
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|sl",
&key, &key_len,
&hash_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (hash_len < crypto_generichash_BYTES_MIN ||
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "zs",
&state_zv, &msg, &msg_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
ZVAL_DEREF(state_zv);
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "z|l",
&state_zv, &hash_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
ZVAL_DEREF(state_zv);
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&seed, &seed_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (seed_len != crypto_box_SEEDBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&secretkey, &secretkey_len,
&publickey, &publickey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (secretkey_len != crypto_box_SECRETKEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&keypair, &keypair_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (keypair_len !=
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&keypair, &keypair_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (keypair_len !=
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (secretkey_len != crypto_box_SECRETKEYBYTES) {
&msg, &msg_len,
&nonce, &nonce_len,
&keypair, &keypair_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (nonce_len != crypto_box_NONCEBYTES) {
&ciphertext, &ciphertext_len,
&nonce, &nonce_len,
&keypair, &keypair_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (nonce_len != crypto_box_NONCEBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&msg, &msg_len,
&publickey, &publickey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (publickey_len != crypto_box_PUBLICKEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&ciphertext, &ciphertext_len,
&keypair, &keypair_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (keypair_len != crypto_box_SECRETKEYBYTES + crypto_box_PUBLICKEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&seed, &seed_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (seed_len != crypto_sign_SEEDBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&secretkey, &secretkey_len,
&publickey, &publickey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (secretkey_len != crypto_sign_SECRETKEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (secretkey_len != crypto_sign_SECRETKEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&keypair, &keypair_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (keypair_len !=
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&keypair, &keypair_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (keypair_len !=
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&msg, &msg_len,
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (secretkey_len != crypto_sign_SECRETKEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&msg_signed, &msg_signed_len,
&publickey, &publickey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (publickey_len != crypto_sign_PUBLICKEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&msg, &msg_len,
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (secretkey_len != crypto_sign_SECRETKEYBYTES) {
&signature, &signature_len,
&msg, &msg_len,
&publickey, &publickey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (signature_len != crypto_sign_BYTES) {
&ciphertext_len,
&nonce, &nonce_len,
&key, &key_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (ciphertext_len <= 0 || ciphertext_len >= SIZE_MAX) {
&msg, &msg_len,
&nonce, &nonce_len,
&key, &key_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (nonce_len != crypto_stream_NONCEBYTES) {
&hash_len,
&passwd, &passwd_len,
&salt, &salt_len,
- &opslimit, &memlimit) == FAILURE ||
- hash_len <= 0 || hash_len >= SIZE_MAX || hash_len > 0x1fffffffe0ULL ||
+ &opslimit, &memlimit) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
+ return;
+ }
+ if (hash_len <= 0 || hash_len >= SIZE_MAX || hash_len > 0x1fffffffe0ULL ||
opslimit <= 0 || memlimit <= 0 || memlimit > SIZE_MAX) {
zend_throw_exception(sodium_exception_ce, "invalid parameters", 0);
return;
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "sll",
&passwd, &passwd_len,
- &opslimit, &memlimit) == FAILURE ||
- opslimit <= 0 || memlimit <= 0 || memlimit > SIZE_MAX) {
- zend_throw_exception(sodium_exception_ce,
- "invalid parameters",
- 0);
+ &opslimit, &memlimit) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
+ return;
+ }
+ if (opslimit <= 0 || memlimit <= 0 || memlimit > SIZE_MAX) {
+ zend_throw_exception(sodium_exception_ce, "invalid parameters", 0);
return;
}
if (passwd_len <= 0) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&hash_str, &hash_str_len,
&passwd, &passwd_len) == FAILURE) {
- zend_throw_exception(sodium_exception_ce,
- "invalid parameters",
- 0);
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (passwd_len <= 0) {
&hash_len,
&passwd, &passwd_len,
&salt, &salt_len,
- &opslimit, &memlimit, &alg) == FAILURE ||
- hash_len <= 0 || hash_len >= 0xffffffff ||
+ &opslimit, &memlimit, &alg) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
+ return;
+ }
+ if (hash_len <= 0 || hash_len >= 0xffffffff ||
passwd_len >= 0xffffffff ||
opslimit <= 0 || memlimit <= 0 || memlimit > SIZE_MAX) {
zend_throw_exception(sodium_exception_ce, "invalid parameters", 0);
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "sll",
&passwd, &passwd_len,
- &opslimit, &memlimit) == FAILURE ||
- opslimit <= 0 || memlimit <= 0 || memlimit > SIZE_MAX ||
+ &opslimit, &memlimit) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
+ return;
+ }
+ if (opslimit <= 0 || memlimit <= 0 || memlimit > SIZE_MAX ||
passwd_len >= 0xffffffff) {
- zend_throw_exception(sodium_exception_ce,
- "invalid parameters", 0);
+ zend_throw_exception(sodium_exception_ce, "invalid parameters", 0);
return;
}
if (passwd_len <= 0) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&hash_str, &hash_str_len,
&passwd, &passwd_len) == FAILURE) {
- zend_throw_exception(sodium_exception_ce,
- "invalid parameters", 0);
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (passwd_len >= 0xffffffff) {
&ad, &ad_len,
&npub, &npub_len,
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (npub_len != crypto_aead_aes256gcm_NPUBBYTES) {
&ad, &ad_len,
&npub, &npub_len,
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (npub_len != crypto_aead_aes256gcm_NPUBBYTES) {
&ad, &ad_len,
&npub, &npub_len,
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (npub_len != crypto_aead_chacha20poly1305_NPUBBYTES) {
&ad, &ad_len,
&npub, &npub_len,
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (npub_len != crypto_aead_chacha20poly1305_NPUBBYTES) {
&ad, &ad_len,
&npub, &npub_len,
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (npub_len != crypto_aead_chacha20poly1305_IETF_NPUBBYTES) {
&ad, &ad_len,
&npub, &npub_len,
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (npub_len != crypto_aead_chacha20poly1305_IETF_NPUBBYTES) {
&ad, &ad_len,
&npub, &npub_len,
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (npub_len != crypto_aead_xchacha20poly1305_IETF_NPUBBYTES) {
&ad, &ad_len,
&npub, &npub_len,
&secretkey, &secretkey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (npub_len != crypto_aead_xchacha20poly1305_IETF_NPUBBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&bin, &bin_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (bin_len >= SIZE_MAX / 2U) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s|s",
&hex, &hex_len,
&ignore, &ignore_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
bin_len = hex_len / 2;
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&n, &n_len, &p, &p_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (n_len != crypto_scalarmult_SCALARBYTES ||
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&seed, &seed_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (seed_len != crypto_kx_SEEDBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&keypair, &keypair_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (keypair_len !=
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&keypair, &keypair_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (keypair_len !=
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&keypair, &keypair_len,
&server_pk, &server_pk_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (keypair_len != crypto_kx_SECRETKEYBYTES + crypto_kx_PUBLICKEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&keypair, &keypair_len,
&client_pk, &client_pk_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (keypair_len != crypto_kx_SECRETKEYBYTES + crypto_kx_PUBLICKEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&msg, &msg_len,
&key, &key_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (key_len != crypto_auth_KEYBYTES) {
&mac, &mac_len,
&msg, &msg_len,
&key, &key_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (key_len != crypto_auth_KEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&eddsakey, &eddsakey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (eddsakey_len != crypto_sign_SECRETKEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s",
&eddsakey, &eddsakey_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (eddsakey_len != crypto_sign_PUBLICKEYBYTES) {
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "ss",
&buf1, &len1,
&buf2, &len2) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (len1 != len2) {
&subkey_id,
&ctx, &ctx_len,
&key, &key_len) == FAILURE) {
+ sodium_remove_param_values_from_backtrace(EG(exception));
return;
}
if (subkey_len < crypto_kdf_BYTES_MIN) {