Commit fb625847 authored by Marc-André Lemburg's avatar Marc-André Lemburg

Fix to a bug found by Florian Weimer:

The UTF-8 decoder is still buggy (i.e. it doesn't pass Markus Kuhn's
stress test), mainly due to the following construct:

    #define UTF8_ERROR(details)  do {                       \
        if (utf8_decoding_error(&s, &p, errors, details))   \
            goto onError;                                   \
        continue;                                           \
    } while (0)

(The "continue" statement is supposed to exit from the outer loop,
but of course, it doesn't.  Indeed, this is a marvelous example of
the dangers of the C programming language and especially of the C
preprocessor.)
parent 7e474022
......@@ -634,7 +634,7 @@ int utf8_decoding_error(const char **source,
#define UTF8_ERROR(details) do { \
if (utf8_decoding_error(&s, &p, errors, details)) \
goto onError; \
continue; \
goto nextChar; \
} while (0)
PyObject *PyUnicode_DecodeUTF8(const char *s,
......@@ -731,6 +731,7 @@ PyObject *PyUnicode_DecodeUTF8(const char *s,
UTF8_ERROR("unsupported Unicode code range");
}
s += n;
nextChar:
}
/* Adjust length */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment