From 73b10be4adc645d6fea4d8f98a1aedae5aef92be Mon Sep 17 00:00:00 2001 From: Monk-Liu <1152761042@qq.com> Date: Mon, 6 Feb 2023 13:20:00 +0800 Subject: [PATCH] [CP] [parser][asan]: avoid heap-buffer-overflow while parser hex with odd number(e.g., 0xaaa); --- src/sql/parser/parse_node.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/sql/parser/parse_node.c b/src/sql/parser/parse_node.c index b45c307903..65f25574cc 100644 --- a/src/sql/parser/parse_node.c +++ b/src/sql/parser/parse_node.c @@ -505,17 +505,24 @@ void ob_parse_binary(const char *src, int64_t len, char *dest) if (OB_UNLIKELY(NULL == src || len <= 0 || NULL == dest)) { //do nothing } else { + bool is_odd = false; if (len > 0 && len % 2 != 0) { *dest = char_int(src[0]); ++src; ++dest; + is_odd = true; } - const char *end = src + len -1; - for (; src <= end; src += 2) - { - *dest = (char)(16*char_int(src[0]) + char_int(src[1])); - ++dest; + if (len == 1) { + //do nothing. + } else { + //for odd number, we have copy the first char, so we should minus 2; + const char *end = src + len - (is_odd ? 2 : 1); + for (; src <= end; src += 2) + { + *dest = (char)(16*char_int(src[0]) + char_int(src[1])); + ++dest; + } } } } -- GitLab