From: Jeremy Allison Date: Tue, 24 May 2011 19:47:31 +0000 (-0700) Subject: Fix our asn.1 parser to handle negative numbers. X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=d210395a50b5d5043bdcfb75f670f8abab91f974;p=samba.git Fix our asn.1 parser to handle negative numbers. Autobuild-User: Jeremy Allison Autobuild-Date: Tue May 24 22:57:16 CEST 2011 on sn-devel-104 (cherry picked from commit e719dfd4dc178f001a5f804fb1ac4e587574415f) Fix bug #8163 (asn.1 library does not correctly read negative integers). (cherry picked from commit 859d13141cd831488b60e413f7141514ae4464b5) --- diff --git a/lib/util/asn1.c b/lib/util/asn1.c index 70c2c57450c..0d696c69978 100644 --- a/lib/util/asn1.c +++ b/lib/util/asn1.c @@ -716,10 +716,19 @@ bool asn1_read_ContextSimple(struct asn1_data *data, uint8_t num, DATA_BLOB *blo bool asn1_read_implicit_Integer(struct asn1_data *data, int *i) { uint8_t b; + bool first_byte = true; *i = 0; while (!data->has_error && asn1_tag_remaining(data)>0) { if (!asn1_read_uint8(data, &b)) return false; + if (first_byte) { + if (b & 0x80) { + /* Number is negative. + Set i to -1 for sign extend. */ + *i = -1; + } + first_byte = false; + } *i = (*i << 8) + b; } return !data->has_error;