summaryrefslogtreecommitdiff
path: root/source3/libsmb/asn1.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/libsmb/asn1.c')
-rw-r--r--source3/libsmb/asn1.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/source3/libsmb/asn1.c b/source3/libsmb/asn1.c
index b7cfca41fb..b4ad3ad0b8 100644
--- a/source3/libsmb/asn1.c
+++ b/source3/libsmb/asn1.c
@@ -174,16 +174,6 @@ BOOL asn1_write_BOOLEAN(ASN1_DATA *data, BOOL v)
return !data->has_error;
}
-/* write a BOOLEAN - hmm, I suspect this one is the correct one, and the
- above boolean is bogus. Need to check */
-BOOL asn1_write_BOOLEAN2(ASN1_DATA *data, BOOL v)
-{
- asn1_push_tag(data, ASN1_BOOLEAN);
- asn1_write_uint8(data, v);
- asn1_pop_tag(data);
- return !data->has_error;
-}
-
/* check a BOOLEAN */
BOOL asn1_check_BOOLEAN(ASN1_DATA *data, BOOL v)
{
@@ -254,12 +244,15 @@ BOOL asn1_start_tag(ASN1_DATA *data, uint8 tag)
asn1_read_uint8(data, &b);
if (b & 0x80) {
int n = b & 0x7f;
+ if (n > 2) {
+ data->has_error = True;
+ return False;
+ }
asn1_read_uint8(data, &b);
nesting->taglen = b;
- while (n > 1) {
+ if (n == 2) {
asn1_read_uint8(data, &b);
nesting->taglen = (nesting->taglen << 8) | b;
- n--;
}
} else {
nesting->taglen = b;
@@ -373,7 +366,6 @@ BOOL asn1_read_GeneralString(ASN1_DATA *data, char **s)
BOOL asn1_read_OctetString(ASN1_DATA *data, DATA_BLOB *blob)
{
int len;
- ZERO_STRUCTP(blob);
if (!asn1_start_tag(data, ASN1_OCTET_STRING)) return False;
len = asn1_tag_remaining(data);
*blob = data_blob(NULL, len);
@@ -390,8 +382,7 @@ BOOL asn1_read_Integer(ASN1_DATA *data, int *i)
if (!asn1_start_tag(data, ASN1_INTEGER)) return False;
while (asn1_tag_remaining(data)>0) {
- asn1_read_uint8(data, &b);
- *i = (*i << 8) + b;
+ *i = (*i << 8) + asn1_read_uint8(data, &b);
}
return asn1_end_tag(data);