summaryrefslogtreecommitdiff
path: root/source3/libsmb/asn1.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2006-06-16 22:25:17 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:17:32 -0500
commit3a8bf11ae341c34db61ef35cbdba6ff835940c79 (patch)
tree96960c268f21808027355ee4f08a3c2de99f83e3 /source3/libsmb/asn1.c
parenteb41bfb91ba754458bfb9bd68bf38992995c0d01 (diff)
downloadsamba-3a8bf11ae341c34db61ef35cbdba6ff835940c79.tar.gz
samba-3a8bf11ae341c34db61ef35cbdba6ff835940c79.tar.bz2
samba-3a8bf11ae341c34db61ef35cbdba6ff835940c79.zip
r16306: Error handling in this asn1 code *sucks*. Fix a generic
class of memory leak bugs on error found by Klocwork (#123). Many of these functions didn't free allocated memory on error exit. Jeremy. (This used to be commit 8ef11a7c6de74024b7d535d959db2d462662a86f)
Diffstat (limited to 'source3/libsmb/asn1.c')
-rw-r--r--source3/libsmb/asn1.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/source3/libsmb/asn1.c b/source3/libsmb/asn1.c
index 8c986c9588..544ee78d40 100644
--- a/source3/libsmb/asn1.c
+++ b/source3/libsmb/asn1.c
@@ -393,20 +393,30 @@ BOOL asn1_check_OID(ASN1_DATA *data, const char *OID)
BOOL asn1_read_GeneralString(ASN1_DATA *data, char **s)
{
int len;
- if (!asn1_start_tag(data, ASN1_GENERAL_STRING)) return False;
+ char *str;
+
+ *s = NULL;
+
+ if (!asn1_start_tag(data, ASN1_GENERAL_STRING)) {
+ return False;
+ }
len = asn1_tag_remaining(data);
if (len < 0) {
data->has_error = True;
return False;
}
- *s = SMB_MALLOC(len+1);
- if (! *s) {
+ str = SMB_MALLOC(len+1);
+ if (!str) {
data->has_error = True;
return False;
}
- asn1_read(data, *s, len);
- (*s)[len] = 0;
+ asn1_read(data, str, len);
+ str[len] = 0;
asn1_end_tag(data);
+
+ if (!data->has_error) {
+ *s = str;
+ }
return !data->has_error;
}