aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/builtin_string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/builtin_string.cpp')
-rw-r--r--src/builtin_string.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/builtin_string.cpp b/src/builtin_string.cpp
index a35903cb..ab864e88 100644
--- a/src/builtin_string.cpp
+++ b/src/builtin_string.cpp
@@ -792,8 +792,8 @@ public:
uint32_t options = opts.all ? PCRE2_SUBSTITUTE_GLOBAL : 0;
size_t arglen = wcslen(arg);
- PCRE2_SIZE outlen = (arglen == 0) ? 16 : 2 * arglen;
- wchar_t *output = (wchar_t *)malloc(sizeof(wchar_t) * outlen);
+ PCRE2_SIZE bufsize = (arglen == 0) ? 16 : 2 * arglen;
+ wchar_t *output = (wchar_t *)malloc(sizeof(wchar_t) * bufsize);
if (output == 0)
{
DIE_MEM();
@@ -801,6 +801,7 @@ public:
int pcre2_rc = 0;
for (;;)
{
+ PCRE2_SIZE outlen = bufsize;
pcre2_rc = pcre2_substitute(
regex.code,
PCRE2_SPTR(arg),
@@ -816,10 +817,10 @@ public:
if (pcre2_rc == PCRE2_ERROR_NOMEMORY)
{
- if (outlen < MAX_REPLACE_SIZE)
+ if (bufsize < MAX_REPLACE_SIZE)
{
- outlen = std::min(2 * outlen, MAX_REPLACE_SIZE);
- output = (wchar_t *)realloc(output, sizeof(wchar_t) * outlen);
+ bufsize = std::min(2 * bufsize, MAX_REPLACE_SIZE);
+ output = (wchar_t *)realloc(output, sizeof(wchar_t) * bufsize);
if (output == 0)
{
DIE_MEM();