Do not free zero-length integer
authorAndreas Steffen <andreas.steffen@strongswan.org>
Sat, 2 Nov 2013 01:11:32 +0000 (02:11 +0100)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Sat, 2 Nov 2013 01:11:32 +0000 (02:11 +0100)
src/libstrongswan/asn1/asn1.c

index d860ad9..bbde452 100644 (file)
@@ -781,10 +781,17 @@ chunk_t asn1_integer(const char *mode, chunk_t content)
        chunk_t object;
        size_t len;
        u_char *pos;
+       bool move;
+
 
        if (content.len == 0)
        {       /* make sure 0 is encoded properly */
                content = chunk_from_chars(0x00);
+               move = FALSE;
+       }
+       else
+       {
+               move = (*mode == 'm');
        }
 
        /* ASN.1 integers must be positive numbers in two's complement */
@@ -794,11 +801,9 @@ chunk_t asn1_integer(const char *mode, chunk_t content)
        {
                *pos++ = 0x00;
        }
-       if (len)
-       {
-               memcpy(pos, content.ptr, content.len);
-       }
-       if (*mode == 'm')
+       memcpy(pos, content.ptr, content.len);
+
+       if (move)
        {
                free(content.ptr);
        }