From 0b4c4d74344613a15791e61179a441d80803d67a Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 25 Nov 2022 22:30:56 +0100 Subject: [PATCH] Don't use GC_STRNDUP It calls strlen() on the input (rather than simply copying at most `size` bytes), which can fail if the input is not zero-terminated and is inefficient in any case. Fixes #7347. --- src/libexpr/eval.cc | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index 563f24e48..6ba44cc1d 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -69,15 +69,11 @@ static char * dupString(const char * s) // empty string. static const char * makeImmutableStringWithLen(const char * s, size_t size) { - char * t; if (size == 0) return ""; -#if HAVE_BOEHMGC - t = GC_STRNDUP(s, size); -#else - t = strndup(s, size); -#endif - if (!t) throw std::bad_alloc(); + auto t = allocString(size + 1); + memcpy(t, s, size); + t[size] = 0; return t; }