aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2006-07-27 08:33:59 +0000
committerRob Austein <sra@hactrn.net>2006-07-27 08:33:59 +0000
commitba2d3e4eb211d6317110642df33523e1e5660f18 (patch)
treec1dcc8a62d2981d973c2e398f82f8f5ca3afbaff
parentd469b54e4ba5856493feb465eacfc0b5d2fae33d (diff)
Clean up memory leaks. Get unused bit calculation right in range
generator. svn path=/openssl/trunk/crypto/x509v3/v3_addr.c; revision=101
-rw-r--r--openssl/trunk/crypto/x509v3/v3_addr.c50
1 files changed, 31 insertions, 19 deletions
diff --git a/openssl/trunk/crypto/x509v3/v3_addr.c b/openssl/trunk/crypto/x509v3/v3_addr.c
index 8e8a6c0e..c35520f8 100644
--- a/openssl/trunk/crypto/x509v3/v3_addr.c
+++ b/openssl/trunk/crypto/x509v3/v3_addr.c
@@ -354,9 +354,9 @@ static int make_addressPrefix(IPAddressOrRange **result,
if (aor == NULL)
return 0;
aor->type = IPAddressOrRange_addressPrefix;
- if ((aor->u.addressPrefix = ASN1_BIT_STRING_new()) == NULL)
+ if (aor->u.addressPrefix == NULL &&
+ (aor->u.addressPrefix = ASN1_BIT_STRING_new()) == NULL)
goto err;
-
if (!ASN1_BIT_STRING_set(aor->u.addressPrefix, addr, bytelen))
goto err;
aor->u.addressPrefix->flags &= ~7;
@@ -393,11 +393,14 @@ static int make_addressRange(IPAddressOrRange **result,
if ((aor = IPAddressOrRange_new()) == NULL)
return 0;
aor->type = IPAddressOrRange_addressRange;
+ assert(aor->u.addressRange == NULL);
if ((aor->u.addressRange = IPAddressRange_new()) == NULL)
goto err;
- aor->u.addressRange->min = ASN1_BIT_STRING_new();
- aor->u.addressRange->max = ASN1_BIT_STRING_new();
- if (aor->u.addressRange->min == NULL || aor->u.addressRange->max == NULL)
+ if (aor->u.addressRange->min == NULL &&
+ (aor->u.addressRange->min = ASN1_BIT_STRING_new()) == NULL)
+ goto err;
+ if (aor->u.addressRange->max == NULL &&
+ (aor->u.addressRange->max = ASN1_BIT_STRING_new()) == NULL)
goto err;
for (i = length; i > 0 && min[i - 1] == 0x00; --i)
@@ -409,10 +412,9 @@ static int make_addressRange(IPAddressOrRange **result,
if (i > 0) {
unsigned char b = min[i - 1];
int j = 1;
- while (j < 8 && (b & (0xFF >> j)) != 0)
+ while ((b & (0xFFU >> j)) != 0)
++j;
- assert(j < 8);
- aor->u.addressRange->min->flags |= j;
+ aor->u.addressRange->min->flags |= 8 - j;
}
for (i = length; i > 0 && max[i - 1] == 0xFF; --i)
@@ -424,10 +426,9 @@ static int make_addressRange(IPAddressOrRange **result,
if (i > 0) {
unsigned char b = max[i - 1];
int j = 1;
- while (j < 8 && (b & (0xFF >> j)) != (0xFF >> j))
+ while ((b & (0xFFU >> j)) != (0xFFU >> j))
++j;
- assert(j < 8);
- aor->u.addressRange->max->flags |= j;
+ aor->u.addressRange->max->flags |= 8 - j;
}
*result = aor;
@@ -466,13 +467,22 @@ static IPAddressFamily *make_IPAddressFamily(IPAddrBlocks *addr,
return f;
}
- if ((f = IPAddressFamily_new()) != NULL &&
- (f->ipAddressChoice = IPAddressChoice_new()) != NULL &&
- (f->addressFamily = ASN1_OCTET_STRING_new()) != NULL &&
- ASN1_OCTET_STRING_set(f->addressFamily, key, keylen) &&
- sk_IPAddressFamily_push(addr, f))
- return f;
+ if ((f = IPAddressFamily_new()) == NULL)
+ goto err;
+ if (f->ipAddressChoice == NULL &&
+ (f->ipAddressChoice = IPAddressChoice_new()) == NULL)
+ goto err;
+ if (f->addressFamily == NULL &&
+ (f->addressFamily = ASN1_OCTET_STRING_new()) == NULL)
+ goto err;
+ if (!ASN1_OCTET_STRING_set(f->addressFamily, key, keylen))
+ goto err;
+ if (!sk_IPAddressFamily_push(addr, f))
+ goto err;
+
+ return f;
+ err:
IPAddressFamily_free(f);
return NULL;
}
@@ -485,14 +495,16 @@ static int addr_add_inherit(IPAddrBlocks *addr,
const unsigned *safi)
{
IPAddressFamily *f = make_IPAddressFamily(addr, afi, safi);
- if (f == NULL || f->ipAddressChoice == NULL ||
+ if (f == NULL ||
+ f->ipAddressChoice == NULL ||
(f->ipAddressChoice->type == IPAddressChoice_addressesOrRanges &&
f->ipAddressChoice->u.addressesOrRanges != NULL))
return 0;
if (f->ipAddressChoice->type == IPAddressChoice_inherit &&
f->ipAddressChoice->u.inherit != NULL)
return 1;
- if ((f->ipAddressChoice->u.inherit = ASN1_NULL_new()) == NULL)
+ if (f->ipAddressChoice->u.inherit == NULL &&
+ (f->ipAddressChoice->u.inherit = ASN1_NULL_new()) == NULL)
return 0;
f->ipAddressChoice->type = IPAddressChoice_inherit;
return 1;