Kaydet (Commit) 0dd06f40 authored tarafından Alexander Belopolsky's avatar Alexander Belopolsky

Fixed error handling branches. Thanks

Victor Stinner for pointing this out.
üst b8bb4664
......@@ -308,13 +308,24 @@ class TestDontAccept2Year(TestAccept2Year):
def test_invalid(self):
pass
class TestAccept2YearBad(TestAccept2Year):
class X:
def __bool__(self):
raise RuntimeError('boo')
accept2dyear = X()
def test_2dyear(self):
pass
def test_invalid(self):
self.assertRaises(RuntimeError, self.yearstr, 200)
class TestDontAccept2YearBool(TestDontAccept2Year):
accept2dyear = False
def test_main():
support.run_unittest(TimeTestCase, TestLocale,
TestAccept2Year, TestAccept2YearBool,
TestAccept2Year, TestAccept2YearBool, TestAccept2YearBad,
TestDontAccept2Year, TestDontAccept2YearBool)
if __name__ == "__main__":
......
......@@ -332,23 +332,27 @@ gettmarg(PyObject *args, struct tm *p)
if (y < 1000) {
PyObject *accept = PyDict_GetItemString(moddict,
"accept2dyear");
int acceptval = accept != NULL && PyObject_IsTrue(accept);
if (acceptval == -1)
return 0;
if (acceptval) {
if (0 <= y && y < 69)
y += 2000;
else if (69 <= y && y < 100)
y += 1900;
else {
PyErr_SetString(PyExc_ValueError,
"year out of range");
if (accept != NULL) {
int acceptval = PyObject_IsTrue(accept);
if (acceptval == -1)
return 0;
if (acceptval) {
if (0 <= y && y < 69)
y += 2000;
else if (69 <= y && y < 100)
y += 1900;
else {
PyErr_SetString(PyExc_ValueError,
"year out of range");
return 0;
}
if (PyErr_WarnEx(PyExc_DeprecationWarning,
"Century info guessed for a 2-digit year.", 1) != 0)
return 0;
}
if (PyErr_WarnEx(PyExc_DeprecationWarning,
"Century info guessed for a 2-digit year.", 1) != 0)
return 0;
}
else
return 0;
}
p->tm_year = y - 1900;
p->tm_mon--;
......@@ -477,6 +481,7 @@ time_strftime(PyObject *self, PyObject *args)
PyErr_Format(PyExc_ValueError, "year=%d is before 1900; "
"the strftime() method requires year >= 1900",
buf.tm_year + 1900);
return NULL;
}
/* Normalize tm_isdst just in case someone foolishly implements %Z
......
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