]> 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:17:39 +0000 (09:17 +0000)
committerHenrique do Nascimento Angelo <hnangelo@php.net>
Sat, 28 Jun 2008 09:17:39 +0000 (09:17 +0000)
ext/openssl/openssl.c

index ed7a516a1eb4f955ae81e3b34acaa6cea673d271..e27dd7c27385f14a88b4d3dcf1fd6d3ea1e31ee4 100644 (file)
@@ -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);