]> granicus.if.org Git - php/commitdiff
Fix a memory leak on openssl_decrypt()
authorHenrique do Nascimento Angelo <hnangelo@php.net>
Sat, 28 Jun 2008 09:24:18 +0000 (09:24 +0000)
committerHenrique do Nascimento Angelo <hnangelo@php.net>
Sat, 28 Jun 2008 09:24:18 +0000 (09:24 +0000)
ext/openssl/openssl.c

index 920a5fc3c6240eac03e4603e879e13b3c32e50aa..4f653921c1f55b723737c365c0207fc1bc03a3b1 100644 (file)
@@ -4691,10 +4691,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);
@@ -4703,6 +4702,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);