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 { \
|
#define UTF8_ERROR(details) do { \
|
||||||
if (utf8_decoding_error(&s, &p, errors, details)) \
|
if (utf8_decoding_error(&s, &p, errors, details)) \
|
||||||
goto onError; \
|
goto onError; \
|
||||||
continue; \
|
goto nextChar; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
PyObject *PyUnicode_DecodeUTF8(const char *s,
|
PyObject *PyUnicode_DecodeUTF8(const char *s,
|
||||||
|
@ -731,6 +731,7 @@ PyObject *PyUnicode_DecodeUTF8(const char *s,
|
||||||
UTF8_ERROR("unsupported Unicode code range");
|
UTF8_ERROR("unsupported Unicode code range");
|
||||||
}
|
}
|
||||||
s += n;
|
s += n;
|
||||||
|
nextChar:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Adjust length */
|
/* Adjust length */
|
||||||
|
|
Loading…
Reference in New Issue