Fix memory leaks, tiny patch from Christian Grothoff <christian@grothoff.org>.
authorSimon Josefsson <simon@josefsson.org>
Mon, 25 Aug 2008 11:20:44 +0000 (13:20 +0200)
committerSimon Josefsson <simon@josefsson.org>
Mon, 25 Aug 2008 11:20:44 +0000 (13:20 +0200)
lib/element.c

index 752b40d..703276c 100644 (file)
@@ -420,7 +420,10 @@ asn1_write_value (ASN1_TYPE node_root, const char *name,
       asn1_length_der (len - k, NULL, &len2);
       temp = (unsigned char *) _asn1_malloc (len - k + len2);
       if (temp == NULL)
-       return ASN1_MEM_ALLOC_ERROR;
+       {
+         _asn1_free (value_temp);
+         return ASN1_MEM_ALLOC_ERROR;
+       }
 
       asn1_octet_der (value_temp + k, len - k, temp, &len2);
       _asn1_set_value (node, temp, len2);
@@ -438,7 +441,10 @@ asn1_write_value (ASN1_TYPE node_root, const char *name,
              default_temp =
                (unsigned char *) _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
              if (default_temp == NULL)
-               return ASN1_MEM_ALLOC_ERROR;
+               {
+                 _asn1_free (value_temp);
+                 return ASN1_MEM_ALLOC_ERROR;
+               }
 
              _asn1_convert_integer (p->value, default_temp,
                                     SIZEOF_UNSIGNED_LONG_INT, &len2);
@@ -446,7 +452,10 @@ asn1_write_value (ASN1_TYPE node_root, const char *name,
          else
            {                   /* is an identifier like v1 */
              if (!(node->type & CONST_LIST))
-               return ASN1_VALUE_NOT_VALID;
+               {
+                 _asn1_free (value_temp);
+                 return ASN1_VALUE_NOT_VALID;
+               }
              p2 = node->down;
              while (p2)
                {
@@ -458,7 +467,10 @@ asn1_write_value (ASN1_TYPE node_root, const char *name,
                            (unsigned char *)
                            _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
                          if (default_temp == NULL)
-                           return ASN1_MEM_ALLOC_ERROR;
+                           {
+                             _asn1_free (value_temp);
+                             return ASN1_MEM_ALLOC_ERROR;
+                           }
 
                          _asn1_convert_integer (p2->value,
                                                 default_temp,
@@ -470,7 +482,10 @@ asn1_write_value (ASN1_TYPE node_root, const char *name,
                  p2 = p2->right;
                }
              if (p2 == NULL)
-               return ASN1_VALUE_NOT_VALID;
+               {
+                 _asn1_free (value_temp);
+                 return ASN1_VALUE_NOT_VALID;
+               }
            }