summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2014-08-17 18:26:08 +0100
committerJeremy Harris <jgh146exb@wizmail.org>2014-08-17 18:32:07 +0100
commite8e86723959ffd4ab6d6b320538ec0e86f828798 (patch)
treee2202b31f7758f128c8790986bbc463e699f72ac /src
parent770feb2f08f38dc1ac8e484659c60c8dd76d370c (diff)
Unbreak utf8clean testcase.
Broken by my compile quitening; the issue was a variable declared local in a loop body and used for carrying data from one iteration to the next. I'd blindly added an initialiser, destroying the data. However, I *think* that compilers might be at liberty to not use the same location for separate iterations; if so the code was broken (and only worked by chance). Fix by moving the declaration outside the loop.
Diffstat (limited to 'src')
-rw-r--r--src/src/expand.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/src/expand.c b/src/src/expand.c
index ba2c6f7cd..b0e76ba27 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -6376,16 +6376,14 @@ while (*s != 0)
{
int seq_len = 0, index = 0;
int bytes_left = 0;
+ long codepoint = -1;
uschar seq_buff[4]; /* accumulate utf-8 here */
while (*sub != 0)
{
- int complete;
- long codepoint = 0;
- uschar c;
+ int complete = 0;
+ uschar c = *sub++;
- complete = 0;
- c = *sub++;
if (bytes_left)
{
if ((c & 0xc0) != 0x80)
@@ -6400,7 +6398,7 @@ while (*s != 0)
if (--bytes_left == 0) /* codepoint complete */
{
if(codepoint > 0x10FFFF) /* is it too large? */
- complete = -1; /* error */
+ complete = -1; /* error (RFC3629 limit) */
else
{ /* finished; output utf-8 sequence */
yield = string_cat(yield, &size, &ptr, seq_buff, seq_len);