Kaydet (Commit) 41525e31 authored tarafından Serhiy Storchaka's avatar Serhiy Storchaka

Issue #23466: Raised OverflowError if %c argument is out of range.

üst 45ec3288
......@@ -358,12 +358,12 @@ class FormatTest(unittest.TestCase):
"not all arguments converted during bytes formatting")
test_exc(b'no format', bytearray(b'1'), TypeError,
"not all arguments converted during bytes formatting")
test_exc(b"%c", -1, TypeError,
"%c requires an integer in range(256) or a single byte")
test_exc(b"%c", 256, TypeError,
"%c requires an integer in range(256) or a single byte")
test_exc(b"%c", 2**128, TypeError,
"%c requires an integer in range(256) or a single byte")
test_exc(b"%c", -1, OverflowError,
"%c arg not in range(256)")
test_exc(b"%c", 256, OverflowError,
"%c arg not in range(256)")
test_exc(b"%c", 2**128, OverflowError,
"%c arg not in range(256)")
test_exc(b"%c", b"Za", TypeError,
"%c requires an integer in range(256) or a single byte")
test_exc(b"%c", "Y", TypeError,
......
......@@ -496,11 +496,16 @@ byte_converter(PyObject *arg, char *p)
ival = PyLong_AsLongAndOverflow(iobj, &overflow);
Py_DECREF(iobj);
}
if (!overflow && 0 <= ival && ival <= 255) {
if (!overflow && ival == -1 && PyErr_Occurred())
goto onError;
if (overflow || !(0 <= ival && ival <= 255)) {
PyErr_SetString(PyExc_OverflowError,
"%c arg not in range(256)");
return 0;
}
*p = (char)ival;
return 1;
}
}
onError:
PyErr_SetString(PyExc_TypeError,
"%c requires an integer in range(256) or a single byte");
......
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