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.)
This commit is contained in:
parent
7e47402264
commit
fb625847bf
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue