mirror of
https://github.com/python/cpython.git
synced 2024-11-24 10:24:35 +08:00
Check for trailing backslash. Fixes #593656.
This commit is contained in:
parent
8a8da798a5
commit
eb3f00aeeb
@ -199,6 +199,7 @@ class AbstractPickleTests(unittest.TestCase):
|
||||
"'abc", # quote is not closed
|
||||
"'abc\"", # open quote and close quote don't match
|
||||
"'abc' ?", # junk after close quote
|
||||
"'\\'", # trailing backslash
|
||||
# some tests of the quoting rules
|
||||
#"'abc\"\''",
|
||||
#"'\\\\a\'\'\'\\\'\\\\\''",
|
||||
|
@ -546,6 +546,11 @@ PyObject *PyString_DecodeEscape(const char *s,
|
||||
continue;
|
||||
}
|
||||
s++;
|
||||
if (s==end) {
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"Trailing \\ in string");
|
||||
goto failed;
|
||||
}
|
||||
switch (*s++) {
|
||||
/* XXX This assumes ASCII! */
|
||||
case '\n': break;
|
||||
@ -594,10 +599,9 @@ PyObject *PyString_DecodeEscape(const char *s,
|
||||
break;
|
||||
}
|
||||
if (!errors || strcmp(errors, "strict") == 0) {
|
||||
Py_DECREF(v);
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"invalid \\x escape");
|
||||
return NULL;
|
||||
goto failed;
|
||||
}
|
||||
if (strcmp(errors, "replace") == 0) {
|
||||
*p++ = '?';
|
||||
@ -608,18 +612,17 @@ PyObject *PyString_DecodeEscape(const char *s,
|
||||
"decoding error; "
|
||||
"unknown error handling code: %.400s",
|
||||
errors);
|
||||
return NULL;
|
||||
goto failed;
|
||||
}
|
||||
#ifndef Py_USING_UNICODE
|
||||
case 'u':
|
||||
case 'U':
|
||||
case 'N':
|
||||
if (unicode) {
|
||||
Py_DECREF(v);
|
||||
com_error(com, PyExc_ValueError,
|
||||
"Unicode escapes not legal "
|
||||
"when Unicode disabled");
|
||||
return NULL;
|
||||
goto failed;
|
||||
}
|
||||
#endif
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user