summaryrefslogtreecommitdiffstats
path: root/crypto/asn1/a_strex.c
diff options
context:
space:
mode:
authorNils Larsch <nils@openssl.org>2006-01-29 23:12:22 +0000
committerNils Larsch <nils@openssl.org>2006-01-29 23:12:22 +0000
commit8c5a2bd6bb9a8c2bb3e1b63c03e57bb1115275d1 (patch)
tree6f47255125d6970ab07881a58be1e7df1e4e9490 /crypto/asn1/a_strex.c
parent25a58453ff5b73e7b4d5e2764d7924424694a82a (diff)
add additional checks + cleanup
Submitted by: David Hartman <david_hartman@symantec.com>
Diffstat (limited to 'crypto/asn1/a_strex.c')
-rw-r--r--crypto/asn1/a_strex.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/crypto/asn1/a_strex.c b/crypto/asn1/a_strex.c
index 45fe4bd150..fc743c2ad0 100644
--- a/crypto/asn1/a_strex.c
+++ b/crypto/asn1/a_strex.c
@@ -194,6 +194,8 @@ static int do_buf(unsigned char *buf, int buflen,
if(i < 0) return -1; /* Invalid UTF8String */
p += i;
break;
+ default:
+ return -1; /* invalid width */
}
if (p == q) orflags = CHARTYPE_LAST_ESC_2253;
if(type & BUF_TYPE_CONVUTF8) {
@@ -356,12 +358,13 @@ static int do_print_ex(char_io *io_ch, void *arg, unsigned long lflags, ASN1_STR
}
len = do_buf(str->data, str->length, type, flags, &quotes, io_ch, NULL);
- if(outlen < 0) return -1;
+ if(len < 0) return -1;
outlen += len;
if(quotes) outlen += 2;
if(!arg) return outlen;
if(quotes && !io_ch(arg, "\"", 1)) return -1;
- do_buf(str->data, str->length, type, flags, NULL, io_ch, arg);
+ if(do_buf(str->data, str->length, type, flags, NULL, io_ch, arg) < 0)
+ return -1;
if(quotes && !io_ch(arg, "\"", 1)) return -1;
return outlen;
}