mirror of
https://github.com/python/cpython.git
synced 2025-12-04 08:34:25 +00:00
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
1 changed files with 2 additions and 1 deletions
|
|
@ -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…
Add table
Add a link
Reference in a new issue