<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hello OpenSSL Team,<div class=""><br class=""></div><div class=""><p class="" style="margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 15px; clear: both; color: rgb(34, 36, 38); font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;">I did write function which changes PKCS12 passphrase. I noticed that PKCS12_newpass function leaks memory. Memory leak disappears when commenting out line where is PKCS12_newpass func.</p><div class="">Below I posted this code which I am using.</div></div><div class="">I am using OpneSSL 1.0.2g version.</div><div class=""><br class=""></div><div class="">Could you please give me information what I am doing wrong? Or it is known issue?</div><div class=""><br class=""></div><div class="">Bets regards,</div><div class="">Ramunas</div><div class=""><br class=""></div><div class=""><pre class="lang-c prettyprint prettyprinted" style="margin-top: 0px; padding: 5px; border: 0px; overflow: auto; width: auto; max-height: 600px; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; color: rgb(57, 51, 24); word-wrap: normal;"><code class="" style="margin: 0px; padding: 0px; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit;"><font size="1" class=""><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">-</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">(</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; color: rgb(43, 145, 175);">NSData</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">*)</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">changePKCS12</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">:(</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; color: rgb(43, 145, 175);">NSData</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">*)</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">p12Data
          oldPassphrase</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">:(</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; color: rgb(43, 145, 175);">NSString</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">*)</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">oldPassphrase
          newPassphrase</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">:(</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; color: rgb(43, 145, 175);">NSString</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">*)</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">newPassphrase </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">{</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
    </span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; color: rgb(43, 145, 175);">OpenSSL_add_all_algorithms</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">();</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
    BIO </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">*</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">bp </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> NULL</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">;</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
    PKCS12 </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">*</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">p12 </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> NULL</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">;</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
    </span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; color: rgb(43, 145, 175);">int</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> status </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="lit" style="margin: 0px; padding: 0px; border: 0px; color: maroon;">0</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">;</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
    </span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">do</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">{</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
        bp </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> BIO_new_mem_buf</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">((</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">void</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">*)[</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">p12Data bytes</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">],</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">(</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; color: rgb(43, 145, 175);">int</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">)[</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">p12Data length</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">]);</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">

        p12 </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> d2i_PKCS12_bio</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">(</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">bp</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">,</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> NULL</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">);</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">

</span><span class="com" style="margin: 0px; padding: 0px; border: 0px; color: gray;">// MEMORY LEAK in PKCS12_newpass</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
        status </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> PKCS12_newpass</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">(</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">p12</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">,</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">(</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">char</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">*)[</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">oldPassphrase UTF8String</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">],</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">(</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">char</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">*)[</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">newPassphrase UTF8String</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">]);</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
    </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">}</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">while</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">(</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">false</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">);</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">

    </span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">if</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">(</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">p12</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">)</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">{</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
        PKCS12_free</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">(</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">p12</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">);</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
        p12 </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> NULL</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">;</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
    </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">}</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
    </span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">if</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">(</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">bp</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">)</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">{</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
        BIO_free_all</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">(</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">bp</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">);</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
        bp </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> NULL</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">;</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
    </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">}</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
    EVP_cleanup</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">();</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
    </span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 139);">return</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;"> NULL</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">;</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; color: black;">
</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; color: black;">}</span></font></code></pre></div><div class=""><br class=""></div></body></html>