From: Andrew Tridgell Date: Mon, 27 Jun 2005 07:02:39 +0000 (+0000) Subject: r7941: fixed handling of ASN.1 objects bigger than 64k X-Git-Tag: samba-misc-tags/initial-v4-0-unstable~8512 X-Git-Url: http://git.samba.org/samba.git/?p=ira%2Fwip.git;a=commitdiff_plain;h=f88a6018821163a52bdf384142c7d16f5011ab4e;ds=sidebyside r7941: fixed handling of ASN.1 objects bigger than 64k --- diff --git a/source/libcli/util/asn1.c b/source/libcli/util/asn1.c index 2a4c75d9394..6ca2221b1a9 100644 --- a/source/libcli/util/asn1.c +++ b/source/libcli/util/asn1.c @@ -87,7 +87,16 @@ BOOL asn1_pop_tag(struct asn1_data *data) /* yes, this is ugly. We don't know in advance how many bytes the length of a tag will take, so we assumed 1 byte. If we were wrong then we need to correct our mistake */ - if (len > 255) { + if (len > 0xFFFF) { + data->data[nesting->start] = 0x83; + if (!asn1_write_uint8(data, 0)) return False; + if (!asn1_write_uint8(data, 0)) return False; + if (!asn1_write_uint8(data, 0)) return False; + memmove(data->data+nesting->start+4, data->data+nesting->start+1, len); + data->data[nesting->start+1] = (len>>16) & 0xFF; + data->data[nesting->start+2] = (len>>8) & 0xFF; + data->data[nesting->start+3] = len&0xff; + } else if (len > 255) { data->data[nesting->start] = 0x82; if (!asn1_write_uint8(data, 0)) return False; if (!asn1_write_uint8(data, 0)) return False;