summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuan Yuan <yyuanam@amazon.com>2023-05-30 19:20:09 +0000
committerMergify <37929162+mergify[bot]@users.noreply.github.com>2023-06-01 19:31:31 +0000
commit97b193574876db5f75150558a31fe6d14879ca08 (patch)
treeae2eeb9b4809ea124932f875e15e7d3d7f7f8679
parent8b6859d2e2409e746910bb1e46fca5e7cddc456a (diff)
lib: fix vtysh core when handling questionmark
When issue vtysh command with ?, the initial buf size for the element is 16. Then it would loop through each element in the cmd output vector. If the required size for printing out the next element is larger than the current buf size, realloc the buf memory by doubling the current buf size regardless of the actual size that's needed. This would cause vtysh core when the doubled size is not enough for the next element. Signed-off-by: Yuan Yuan <yyuanam@amazon.com> (cherry picked from commit f8aa257997a6a6f69ec5d5715ab04d7cbfae1d1c)
-rw-r--r--lib/command.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/command.c b/lib/command.c
index 6d023142ab..9359f9bf36 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -742,9 +742,13 @@ char *cmd_variable_comp2str(vector comps, unsigned short cols)
char *item = vector_slot(comps, j);
itemlen = strlen(item);
- if (cs + itemlen + AUTOCOMP_INDENT + 3 >= bsz)
- buf = XREALLOC(MTYPE_TMP, buf, (bsz *= 2));
+ size_t next_sz = cs + itemlen + AUTOCOMP_INDENT + 3;
+ if (next_sz > bsz) {
+ /* Make sure the buf size is large enough */
+ bsz = next_sz;
+ buf = XREALLOC(MTYPE_TMP, buf, bsz);
+ }
if (lc + itemlen + 1 >= cols) {
cs += snprintf(&buf[cs], bsz - cs, "\n%*s",
AUTOCOMP_INDENT, "");