From 25de15d0a49d4211534ce13442b31656b9058ea9 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Fri, 5 Mar 2021 20:20:36 +1100 Subject: [PATCH] parsergen: fix some problems with choose_sym() This would sometimes give wrong result, particularly bad when it is larger than body_size. Signed-off-by: NeilBrown --- csrc/parsergen.mdc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/csrc/parsergen.mdc b/csrc/parsergen.mdc index 9156c63..ad20195 100644 --- a/csrc/parsergen.mdc +++ b/csrc/parsergen.mdc @@ -2204,7 +2204,7 @@ transformed, and will cause an error when the code is compiled. c = *name; } if (namlen == 0) { - if (name == *namep) + if (name == *namep || n > p->body_size) return -1; *namep = name; return n; @@ -2213,8 +2213,10 @@ transformed, and will cause an error when the code is compiled. for (i = 0; i < p->body_size; i++) { if (!subseq_match(nam, namlen, p->body[i]->name)) continue; - if (slen == 0 || p->body[i]->name.len < slen) + if (slen == 0 || p->body[i]->name.len < slen) { s = i; + slen = p->body[i]->name.len; + } if (s >= 0 && p->body[i] != p->body[s] && p->body[i]->name.len == p->body[s]->name.len) /* not unique, so s cannot be used */ @@ -2222,7 +2224,7 @@ transformed, and will cause an error when the code is compiled. } if (s < 0) return -1; - if (n == 0); + if (n == 0) n = 1; for (i = 0; i < p->body_size; i++) if (p->body[i] == p->body[s]) { @@ -2230,7 +2232,7 @@ transformed, and will cause an error when the code is compiled. if (n == 0) break; } - if (n > 1) + if (n > 0 || i == p->body_size) return -1; *namep = name; return i + 1; -- 2.43.0