Hello,
I am using openssl_0.9.6a.
Following code has been used to convert a PKCS 12 cert to PEM format. But I am getting
some memory leaks reported. The report is listed at the end also.
Anyone has any ideas? I ran the same piece of code through Purify, same leak
reported. From there, I can see that the leak is coming from PKCS12_parse(). Besides
freeing the PKCS12 object, what else do I need to free here after calling
PKCS12_parse()?
Thanks for any help,
Kate
Here is my code:
========================================
Source code
========================================
EVP_CIPHER *g_pEncAlg = NULL;
ESMTRESULT OsPEMCredConvert(FILE *fIn, char *pszP12Password, char *pszPassword, char
*pszFilename,
BOOL fMakeCertChain)
{
ESMTRESULT hr = NF_S_OK;
PKCS12 *p12 = NULL;
EVP_PKEY *pPkey = NULL;
X509 *pCert = NULL;
BIO *pBIO = NULL;
STACK_OF(X509) *pCaCerts=NULL;
char abFilename[MAXPATHLEN] = "";
FILE *fOut = NULL;
int fCerts = INFO;
NfCtx nfCtx;
nfCtx.fIn = fIn;
nfCtx.fOut = stdout;
CRYPTO_malloc_debug_init();
MemCheck_start();
do
{
if (fMakeCertChain && g_fOutputCaCerts)
{
hr = CRED_E_INCOMPATIBLE_FLAGS;
break;
}
if (fMakeCertChain)
fCerts |= CLCERTS;
else if (g_fOutputCaCerts)
fCerts |= CACERTS | NOKEYS;
if ((pBIO = BIO_new(NfBIO())) == NULL)
{
hr = CRED_E_BIO;
break;
}
BIO_ctrl(pBIO, BIO_CTRL_SET, BIO_NOCLOSE, (char *)&nfCtx);
if ((p12 = d2i_PKCS12_bio(pBIO, &p12)) == NULL)
{
hr = CRED_E_P12_OPEN;
break;
}
if (PKCS12_parse(p12, pszP12Password ? pszP12Password : "", &pPkey, &pCert, (STACK
**)&pCaCerts) <= 0)
{
hr = CRED_E_P12_PARSE;
break;
}
if (pszP12Password == NULL)
{
if (!PKCS12_verify_mac(p12, NULL, 0))
{
hr = CRED_E_P12_BAD_PWD;
break;
}
}
else if (!PKCS12_verify_mac(p12, pszP12Password, -1))
{
hr = CRED_E_P12_BAD_PWD;
break;
}
/* Encrypt private key with 3DES if required */
g_pEncAlg = pszPassword != NULL ? EVP_des_ede3_cbc() : NULL;
if (!dump_certs_keys_p12 (pBIO, p12, pszP12Password, -1, fCerts, pszPassword))
{
hr = CRED_E_P12_PARSE;
break;
}
} while (0);
if (fOut) fclose(fOut);
if (pCaCerts) sk_X509_free(pCaCerts);
if (pCert) X509_free(pCert);
if (pPkey)EVP_PKEY_free(pPkey);
if (p12) PKCS12_free(p12);
if (pBIO) BIO_free(pBIO);
ERR_free_strings();
ERR_remove_state(0);
EVP_cleanup();
MemCheck_stop();
CRYPTO_mem_leaks(stdout);
return (hr);
}
==========================================
Memory Leak Report
==========================================
380 file=asn1_lib.c, line=371, number=16, address=0028FA18
363 file=asn1_lib.c, line=371, number=16, address=0028D200
412 file=x_name.c, line=235, number=16, address=002946B8
254 file=stack.c, line=124, number=32, address=00286BC8
262 file=a_int.c, line=232, number=2, address=0027EE68
422 file=x_name.c, line=235, number=16, address=00295E70
425 file=a_object.c, line=242, number=3, address=00296598
415 file=a_object.c, line=242, number=3, address=00294DE0
306 file=asn1_lib.c, line=371, number=16, address=00284AA8
332 file=a_object.c, line=242, number=9, address=00288928
329 file=a_bytes.c, line=114, number=15, address=00288140
402 file=a_object.c, line=242, number=3, address=00292E40
286 file=a_bytes.c, line=114, number=12, address=00282B08
274 file=a_object.c, line=268, number=24, address=00280AA8
408 file=asn1_lib.c, line=371, number=16, address=00293D50
302 file=a_object.c, line=268, number=24, address=00284140
244 file=x_algor.c, line=102, number=8, address=0027C3E0
348 file=a_object.c, line=242, number=9, address=0028AF60
391 file=a_object.c, line=268, number=24, address=00291418
253 file=stack.c, line=122, number=20, address=0027D928
446 file=a_object.c, line=268, number=24, address=00299870
374 file=a_int.c, line=232, number=2, address=0028EC00
304 file=a_bytes.c, line=114, number=3, address=002845F8
246 file=stack.c, line=122, number=20, address=0027C898
321 file=asn1_lib.c, line=371, number=16, address=00286E40
276 file=a_bytes.c, line=114, number=11, address=00280F60
350 file=a_bitstr.c, line=190, number=64, address=0028B418
393 file=a_bytes.c, line=114, number=12, address=002918D0
356 file=x_algor.c, line=102, number=8, address=0028C178
310 file=x_name.c, line=235, number=16, address=00285418
419 file=a_object.c, line=268, number=24, address=00295750
386 file=a_object.c, line=268, number=24, address=00290840
448 file=a_bytes.c, line=222, number=23, address=00299D28
346 file=a_bytes.c, line=222, number=39, address=0028AA80
438 file=a_object.c, line=268, number=24, address=00298540
339 file=a_object.c, line=268, number=24, address=002899F0
313 file=a_object.c, line=242, number=3, address=00285B40
278 file=asn1_lib.c, line=371, number=16, address=00281418
451 file=a_object.c, line=268, number=24, address=0029A450
352 file=buffer.c, line=110, number=268, address=0028B900
326 file=asn1_lib.c, line=371, number=16, address=00287A20
405 file=a_bytes.c, line=222, number=14, address=00293630
395 file=asn1_lib.c, line=371, number=16, address=00291D88
421 file=a_bytes.c, line=114, number=27, address=00295C08
296 file=a_bytes.c, line=114, number=18, address=00283238
288 file=asn1_lib.c, line=371, number=16, address=002550A8
365 file=stack.c, line=122, number=20, address=0028D6C0
388 file=a_bytes.c, line=114, number=11, address=00290CF8
414 file=a_object.c, line=268, number=24, address=00294B78
299 file=a_bytes.c, line=222, number=14, address=00283A20
358 file=stack.c, line=122, number=20, address=0028C630
427 file=x_name.c, line=235, number=16, address=00296B18
315 file=x_name.c, line=235, number=16, address=00285FF8
270 file=a_object.c, line=242, number=3, address=00280148
257 file=x_algor.c, line=102, number=8, address=0027E298
424 file=a_object.c, line=268, number=24, address=00296330
401 file=a_object.c, line=268, number=24, address=00292BD8
331 file=a_object.c, line=268, number=24, address=002886C0
453 file=a_bytes.c, line=222, number=6, address=0029A908
250 file=asn1_lib.c, line=371, number=16, address=0027D208
443 file=stack.c, line=124, number=16, address=00299150
267 file=x_name.c, line=235, number=16, address=0027FA20
283 file=asn1_lib.c, line=371, number=16, address=00281FF8
318 file=a_object.c, line=242, number=3, address=00286720
347 file=a_object.c, line=268, number=24, address=0028ACF8
430 file=a_object.c, line=242, number=3, address=00297180
263 file=a_int.c, line=232, number=2, address=0027F0B8
390 file=asn1_lib.c, line=371, number=16, address=002911B0
426 file=a_bytes.c, line=114, number=12, address=002967E8
416 file=a_bytes.c, line=114, number=11, address=00295030
293 file=asn1_lib.c, line=371, number=16, address=00255C88
259 file=x_algor.c, line=102, number=8, address=0027E750
343 file=asn1_lib.c, line=371, number=16, address=0028A360
403 file=a_bytes.c, line=114, number=48, address=00293090
406 file=a_bytes.c, line=222, number=14, address=00293890
327 file=a_object.c, line=268, number=24, address=00287C80
242 file=x_cinf.c, line=171, number=40, address=0027BFC8
396 file=a_object.c, line=268, number=24, address=00291FE8
336 file=stack.c, line=124, number=16, address=002892D0
303 file=a_object.c, line=242, number=3, address=002843A8
432 file=x_name.c, line=235, number=16, address=00297638
255 file=buffer.c, line=67, number=12, address=0027DDE8
297 file=buffer.c, line=110, number=220, address=00283498
289 file=a_object.c, line=268, number=24, address=00255308
275 file=a_object.c, line=242, number=3, address=00280D10
399 file=x_name.c, line=235, number=16, address=0025A188
287 file=x_name.c, line=235, number=16, address=00252BF8
441 file=a_bitstr.c, line=190, number=74, address=00298C58
248 file=buffer.c, line=67, number=12, address=0027CD58
300 file=x_name.c, line=235, number=16, address=00283C80
265 file=a_object.c, line=242, number=9, address=0027F570
369 file=x_algor.c, line=102, number=8, address=0028E030
379 file=x_name.c, line=235, number=16, address=0028F7B8
316 file=asn1_lib.c, line=371, number=16, address=00286258
435 file=a_object.c, line=242, number=9, address=00297D60
428 file=asn1_lib.c, line=371, number=16, address=00296CB8
392 file=a_object.c, line=242, number=3, address=00291680
362 file=asn1_lib.c, line=371, number=16, address=0028CFA0
444 file=x_exten.c, line=123, number=20, address=002993B0
251 file=asn1_lib.c, line=371, number=16, address=0027D468
261 file=asn1_lib.c, line=371, number=16, address=0027EC08
447 file=a_object.c, line=242, number=3, address=00299AD8
372 file=asn1_lib.c, line=371, number=16, address=0028E740
281 file=a_bytes.c, line=114, number=27, address=00281B30
268 file=asn1_lib.c, line=371, number=16, address=0027FC80
382 file=a_object.c, line=242, number=3, address=0028FEE0
457 file=a_bitstr.c, line=190, number=128, address=0029B278
284 file=a_object.c, line=268, number=24, address=00282258
312 file=a_object.c, line=268, number=24, address=002858D8
437 file=buffer.c, line=110, number=220, address=00298218
375 file=a_int.c, line=232, number=2, address=0028EE50
368 file=x_pubkey.c, line=101, number=12, address=0028DDD8
305 file=x_name.c, line=235, number=16, address=00284848
440 file=a_type.c, line=277, number=8, address=00298A00
398 file=a_bytes.c, line=114, number=27, address=002924A0
361 file=x_val.c, line=95, number=8, address=0028CD48
341 file=a_bytes.c, line=222, number=3, address=00289EB0
371 file=x_algor.c, line=102, number=8, address=0028E4E8
378 file=a_type.c, line=277, number=8, address=0028F560
291 file=a_bytes.c, line=114, number=24, address=002557C0
410 file=a_object.c, line=242, number=3, address=00294218
334 file=a_bitstr.c, line=190, number=74, address=00288DD8
273 file=asn1_lib.c, line=371, number=16, address=00280848
308 file=a_object.c, line=242, number=3, address=00284F70
420 file=a_object.c, line=242, number=3, address=002959B8
384 file=x_name.c, line=235, number=16, address=00290380
387 file=a_object.c, line=242, number=3, address=00290AA8
344 file=a_object.c, line=268, number=24, address=0028A5C0
243 file=asn1_lib.c, line=371, number=16, address=0027C180
407 file=x_name.c, line=235, number=16, address=00293AF0
354 file=x_cinf.c, line=171, number=40, address=0028BD60
456 file=a_type.c, line=277, number=8, address=0029B020
439 file=a_object.c, line=242, number=9, address=002987A8
337 file=x_exten.c, line=123, number=20, address=00289530
433 file=asn1_lib.c, line=371, number=16, address=00297898
367 file=buffer.c, line=67, number=12, address=0028DB80
377 file=a_object.c, line=242, number=9, address=0028F308
449 file=x_exten.c, line=123, number=20, address=00299F90
353 file=x_x509.c, line=117, number=84, address=0028BC58
340 file=a_object.c, line=242, number=9, address=00289C58
452 file=a_object.c, line=242, number=3, address=0029A6B8
301 file=asn1_lib.c, line=371, number=16, address=00283EE0
314 file=a_bytes.c, line=114, number=27, address=00285D90
360 file=buffer.c, line=67, number=12, address=0028CAF0
294 file=a_object.c, line=268, number=24, address=00282E38
317 file=a_object.c, line=268, number=24, address=002864B8
333 file=a_type.c, line=277, number=8, address=00288B80
429 file=a_object.c, line=268, number=24, address=00296F18
455 file=a_object.c, line=242, number=9, address=0029ADC8
252 file=x_name.c, line=221, number=16, address=0027D6C8
320 file=x_name.c, line=235, number=16, address=00286CA0
445 file=asn1_lib.c, line=371, number=16, address=00299610
269 file=a_object.c, line=268, number=24, address=0027FEE0
373 file=asn1_lib.c, line=371, number=16, address=0028E9A0
245 file=x_name.c, line=221, number=16, address=0027C638
247 file=stack.c, line=124, number=32, address=00282D60
323 file=a_object.c, line=242, number=3, address=00287308
349 file=a_type.c, line=277, number=8, address=0028B1B8
271 file=a_bytes.c, line=114, number=3, address=00280398
418 file=asn1_lib.c, line=371, number=16, address=002954F0
385 file=asn1_lib.c, line=371, number=16, address=002905E0
319 file=a_bytes.c, line=114, number=12, address=00286970
431 file=a_bytes.c, line=114, number=24, address=002973D0
264 file=a_object.c, line=268, number=24, address=0027F308
277 file=x_name.c, line=235, number=16, address=002811B8
338 file=asn1_lib.c, line=371, number=16, address=00289790
355 file=asn1_lib.c, line=371, number=16, address=0028BF18
434 file=a_object.c, line=268, number=24, address=00297AF8
450 file=asn1_lib.c, line=371, number=16, address=0029A1F0
325 file=x_name.c, line=235, number=16, address=002877C0
280 file=a_object.c, line=242, number=3, address=002818E0
381 file=a_object.c, line=268, number=24, address=0028FC78
394 file=x_name.c, line=235, number=16, address=00291B28
328 file=a_object.c, line=242, number=9, address=00287EE8
364 file=x_name.c, line=221, number=16, address=0028D460
404 file=buffer.c, line=110, number=208, address=00293310
413 file=asn1_lib.c, line=371, number=16, address=00294918
298 file=a_bytes.c, line=222, number=14, address=002837C0
357 file=x_name.c, line=221, number=16, address=0028C3D0
397 file=a_object.c, line=242, number=3, address=00292250
423 file=asn1_lib.c, line=371, number=16, address=002960D0
400 file=asn1_lib.c, line=371, number=16, address=00292978
290 file=a_object.c, line=242, number=3, address=00255570
307 file=a_object.c, line=268, number=24, address=00284D08
442 file=stack.c, line=122, number=20, address=00298EF0
383 file=a_bytes.c, line=114, number=3, address=00290130
330 file=buffer.c, line=110, number=212, address=002883A0
282 file=x_name.c, line=235, number=16, address=00281D98
409 file=a_object.c, line=268, number=24, address=00293FB0
285 file=a_object.c, line=242, number=3, address=002824C0
359 file=stack.c, line=124, number=32, address=00292708
376 file=a_object.c, line=268, number=24, address=0028F0A0
389 file=x_name.c, line=235, number=16, address=00290F50
241 file=x_x509.c, line=117, number=84, address=00249690
292 file=x_name.c, line=235, number=16, address=00255A28
258 file=asn1_lib.c, line=371, number=16, address=0027E4F0
342 file=x_exten.c, line=123, number=20, address=0028A100
411 file=a_bytes.c, line=114, number=3, address=00294468
345 file=a_object.c, line=242, number=9, address=0028A828
454 file=a_object.c, line=268, number=24, address=0029AB60
309 file=a_bytes.c, line=114, number=11, address=002851C0
335 file=stack.c, line=122, number=20, address=00289070
322 file=a_object.c, line=268, number=24, address=002870A0
417 file=x_name.c, line=235, number=16, address=00295288
366 file=stack.c, line=124, number=32, address=00296A40
260 file=asn1_lib.c, line=371, number=16, address=0027E9A8
311 file=asn1_lib.c, line=371, number=16, address=00285678
295 file=a_object.c, line=242, number=9, address=00282FE0
459 file=buffer.c, line=110, number=268, address=0029B7A0
324 file=a_bytes.c, line=114, number=21, address=00287558
266 file=a_type.c, line=277, number=8, address=0027F7C8
279 file=a_object.c, line=268, number=24, address=00281678
370 file=asn1_lib.c, line=371, number=16, address=0028E288
256 file=x_pubkey.c, line=101, number=12, address=0027E040
436 file=a_bytes.c, line=114, number=18, address=00297FB8
249 file=x_val.c, line=95, number=8, address=0027CFB0
272 file=x_name.c, line=235, number=16, address=002805E8
5056 bytes leaked in 217 chunks
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]