From e541c9b64b829761fae3389d1759a72b1d3ccc94 Mon Sep 17 00:00:00 2001 From: Phil Turnbull Date: Tue, 7 Aug 2018 12:29:06 -0400 Subject: [PATCH] Avoid integer cast issues when deserializing tags `buffer` contains signed chars, so if a tag length is greater than 128 then it is treated as a negative value when deserializing. The negative signed char is then implicitly cast to a large unsigned integer. Explicitly cast the values to signed chars Co-authored-by: Rahul Zhade --- src/scanner.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scanner.cc b/src/scanner.cc index 0077c98..69e595b 100644 --- a/src/scanner.cc +++ b/src/scanner.cc @@ -60,7 +60,7 @@ struct Scanner { Tag &tag = tags[j]; tag.type = static_cast(buffer[i++]); if (tag.type == CUSTOM) { - unsigned name_length = buffer[i++]; + unsigned name_length = (unsigned char)buffer[i++]; tag.custom_tag_name.assign(&buffer[i], &buffer[i + name_length]); i += name_length; }