Memory leak fix in client test mode
authorMichael Rash <mbr@cipherdyne.org>
Fri, 3 Aug 2012 02:46:52 +0000 (22:46 -0400)
committerMichael Rash <mbr@cipherdyne.org>
Fri, 3 Aug 2012 02:46:52 +0000 (22:46 -0400)
This commit fixes the following memory leak found with the test suite running
in valgrind mode:

HEAP SUMMARY:
    in use at exit: 217 bytes in 3 blocks
  total heap usage: 27 allocs, 24 frees, 5,260 bytes allocated

44 bytes in 1 blocks are definitely lost in loss record 1 of 3
   at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x50CB861: strndup (strndup.c:46)
   by 0x4E3A4D4: fko_verify_hmac (fko_hmac.c:54)
   by 0x4E394DD: fko_new_with_data (fko_funcs.c:220)
   by 0x10B3A7: main (fwknop.c:408)

44 bytes in 1 blocks are definitely lost in loss record 2 of 3
   at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x50CB801: strdup (strdup.c:43)
   by 0x4E3A3FC: fko_calculate_hmac (fko_hmac.c:162)
   by 0x4E3A552: fko_verify_hmac (fko_hmac.c:86)
   by 0x4E394DD: fko_new_with_data (fko_funcs.c:220)
   by 0x10B3A7: main (fwknop.c:408)

129 bytes in 1 blocks are definitely lost in loss record 3 of 3
   at 0x4C2B7B2: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x4E36A03: add_salted_str (cipher_funcs.c:298)
   by 0x4E3A587: fko_verify_hmac (fko_hmac.c:75)
   by 0x4E394DD: fko_new_with_data (fko_funcs.c:220)
   by 0x10B3A7: main (fwknop.c:408)

LEAK SUMMARY:
   definitely lost: 217 bytes in 3 blocks
   indirectly lost: 0 bytes in 0 blocks
     possibly lost: 0 bytes in 0 blocks
   still reachable: 0 bytes in 0 blocks
        suppressed: 0 bytes in 0 blocks

lib/fko_funcs.c

index f6a352a..e767d51 100644 (file)
@@ -190,7 +190,7 @@ fko_new_with_data(fko_ctx_t *r_ctx, const char *enc_msg,
         free(ctx);
         return(FKO_ERROR_INVALID_DATA);
     }
-    
+
     /* First, add the data to the context.
     */
     ctx->encrypted_msg     = strdup(enc_msg);
@@ -216,7 +216,7 @@ fko_new_with_data(fko_ctx_t *r_ctx, const char *enc_msg,
     /* Check HMAC if the access stanza had an HMAC key
     */
     ctx->initval = FKO_CTX_INITIALIZED;
-    if(hmac_key != NULL)
+    if(hmac_key_len > 0 && hmac_key != NULL)
         res = fko_verify_hmac(ctx, hmac_key, hmac_key_len);
     ctx->initval = 0;
     if(res != FKO_SUCCESS)