From: Volker Lendecke Date: Tue, 21 Jul 2026 10:31:38 +0000 (+0200) Subject: lib: Make signed/unsigned conversion explicit in asn1_write() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c270e16eeb774d960696efde63a6ee07d854fef9;p=thirdparty%2Fsamba.git lib: Make signed/unsigned conversion explicit in asn1_write() Signed-off-by: Volker Lendecke Reviewed-by: Anoop C S --- diff --git a/lib/util/asn1.c b/lib/util/asn1.c index fa90442f0b9..6fb4d9ea812 100644 --- a/lib/util/asn1.c +++ b/lib/util/asn1.c @@ -80,22 +80,35 @@ off_t asn1_current_ofs(const struct asn1_data *data) } /* write to the ASN1 buffer, advancing the buffer pointer */ -bool asn1_write(struct asn1_data *data, const void *p, int len) +bool asn1_write(struct asn1_data *data, const void *p, int _len) { + size_t len, ofs, newlen; + if (data->has_error) return false; - if ((len < 0) || (data->ofs + (size_t)len < data->ofs)) { + if (_len < 0) { + goto error; + } + len = _len; + + if (data->ofs < 0) { + goto error; + } + ofs = data->ofs; + + newlen = ofs + len; + if (newlen < ofs) { goto error; } - if (data->length < data->ofs+len) { + if (data->length < newlen) { uint8_t *newp; - newp = talloc_realloc(data, data->data, uint8_t, data->ofs+len); + newp = talloc_realloc(data, data->data, uint8_t, newlen); if (!newp) { goto error; } data->data = newp; - data->length = data->ofs+len; + data->length = newlen; } if (len > 0) { memcpy(data->data + data->ofs, p, len);