summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrique do Nascimento Angelo <hnangelo@php.net>2008-06-28 09:17:39 +0000
committerHenrique do Nascimento Angelo <hnangelo@php.net>2008-06-28 09:17:39 +0000
commit4776dfb296704b666dd155de944356233c393d25 (patch)
tree4dcf75b65fb9ff591e6b36ecd025ea2a6bf4790e
parente59bfcffa07e60c0c5a40fb7e0d60a0b23fcd296 (diff)
downloadphp-git-4776dfb296704b666dd155de944356233c393d25.tar.gz
Fix a memory leak on openssl_decrypt()
-rw-r--r--ext/openssl/openssl.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
index ed7a516a1e..e27dd7c273 100644
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
@@ -4653,10 +4653,9 @@ PHP_FUNCTION(openssl_decrypt)
return;
}
- if (!raw_input) {
- base64_str = (char*)php_base64_decode((unsigned char*)data, data_len, &base64_str_len);
- data_len = base64_str_len;
- data = base64_str;
+ if (!method_len) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown cipher algorithm");
+ RETURN_FALSE;
}
cipher_type = EVP_get_cipherbyname(method);
@@ -4665,6 +4664,12 @@ PHP_FUNCTION(openssl_decrypt)
RETURN_FALSE;
}
+ if (!raw_input) {
+ base64_str = (char*)php_base64_decode((unsigned char*)data, data_len, &base64_str_len);
+ data_len = base64_str_len;
+ data = base64_str;
+ }
+
keylen = EVP_CIPHER_key_length(cipher_type);
if (keylen > password_len) {
key = emalloc(keylen);