shithub: MicroHs

Download patch

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;
 }
 
--