ref: 31866874906a28f87022f1a40efce79a3c8742b7
parent: af8dcc9a336971600f8fb1527a31586d39975c2b
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sat Nov 25 11:00:06 EST 2023
Allow longer strings in evalString.
--- a/src/runtime/eval.c
+++ b/src/runtime/eval.c
@@ -1624,16 +1624,21 @@
char *
evalstring(NODEPTR n)
{- size_t sz = 10000;
- char *p, *name = malloc(sz);
+ size_t sz = 1000;
+ size_t offs;
+ char *name = malloc(sz);
value_t c;
NODEPTR x;
if (!name)
memerr();
- for (p = name;;) {- if (p >= name + sz)
- ERR("evalstring too long");+ for (offs = 0;;) {+ if (offs >= sz - 1) {+ sz *= 2;
+ name = realloc(name, sz);
+ if (!name)
+ memerr();
+ }
n = evali(n);
if (GETTAG(n) == T_K) /* Nil */
break;
@@ -1641,13 +1646,13 @@
c = evalint(ARG(x));
if (c < 0 || c > 127)
ERR("invalid char"); /* Only allow ASCII */- *p++ = (char)c;
+ name[offs++] = (char)c;
n = ARG(n);
} else { ERR("evalstring not Nil/Cons");}
}
- *p = 0;
+ name[offs] = 0;
return name;
}
--
⑨