New submission from Thomas Wouters <tho...@python.org>:

The fix for issue #31752 (changeset 5ef883b096895a84123760859f0f34ad37bf2277 
for 2.7, as I ran into this while upgrading to 2.7.15) includes assertions that 
are easily triggered from user code:

>>> import datetime, numpy
>>> datetime.timedelta(seconds=numpy.int64(0))
python: .../Modules/datetimemodule.c:1859: accum: Assertion 
`_PyAnyInt_CheckExact(prod)' failed.
Aborted (core dumped)

The code asserts that the product of a known type and an unknown type is a 
known type, which is not a valid assumption. Pure-python reproducer (requires a 
build with assertions enabled, like a --with-pydebug build).

>>> import datetime
>>> class C(int):
...     def __rmul__(self, other):
...         return self
...
>>> datetime.timedelta(seconds=C())
python: .../Modules/datetimemodule.c:1859: accum: Assertion 
`_PyAnyInt_CheckExact(prod)' failed.
Aborted (core dumped)

(It fails in a similar way in at least Python 3.7, and since the fix was 
backported I'm going to assume 3.6 as well.)

Please do not use assertions for things that aren't guaranteed by the code 
making the assertions. These should either not be assertions, or the input 
types should be validated beforehand. I do not know why these assertions are 
being made in the first place. What do they guard against?

----------
assignee: serhiy.storchaka
components: Interpreter Core
keywords: 3.6regression, 3.7regression
messages: 327989
nosy: gregory.p.smith, serhiy.storchaka, twouters
priority: high
severity: normal
stage: needs patch
status: open
title: Assertion failures in datetimemodule.c.
type: crash
versions: Python 2.7, Python 3.6, Python 3.7, Python 3.8

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue35021>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to