Issue31293
Created on 2017-08-28 14:36 by Oren Milman, last changed 2017-09-19 14:01 by serhiy.storchaka. This issue is now closed.
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 3227 | merged | Oren Milman, 2017-08-28 15:35 | |
| PR 3654 | merged | python-dev, 2017-09-19 12:58 | |
| Messages (7) | |||
|---|---|---|---|
| msg300954 - (view) | Author: Oren Milman (Oren Milman) * | Date: 2017-08-28 14:36 | |
both of the following true division and multiplication operations crash the
interpreter:
import datetime
class BadFloat(float):
def as_integer_ratio(self):
return (1 << 1000) - 1
datetime.timedelta() / BadFloat()
datetime.timedelta() * BadFloat()
this is because both multiply_float_timedelta() and truedivide_timedelta_float()
(in Modules/_datetimemodule.c) assume as_integer_ratio() returns tuple.
|
|||
| msg300955 - (view) | Author: Oren Milman (Oren Milman) * | Date: 2017-08-28 14:43 | |
i am working on a patch. BTW, is there anywhere a list of what counts as an extension module, and what counts as the interpreter core? |
|||
| msg300956 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2017-08-28 15:24 | |
I don't know if there is a list, but definitely the parser, the compiler, the evaluation loop, builtin types and few builtin modules (like builtins and sys) are interpreter core. The _datetime module is an accelerator of the datetime module. It is optional and definitely is not in the core. |
|||
| msg300957 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2017-08-28 17:57 | |
Please check if there is similar issue with Decimal. |
|||
| msg300958 - (view) | Author: Oren Milman (Oren Milman) * | Date: 2017-08-28 18:23 | |
I guess you meant for me to check whether the following has any problem:
import decimal
class BadFloat(float):
def as_integer_ratio(self):
return 1 << 1000
decimal.Decimal.from_float(BadFloat())
so it doesn't crash.
if IIUC, this is because the C implementation of Decimal.from_float()
is PyDecType_FromFloat(), while the relevant part of it is a call to
PyDecType_FromFloatExact().
But PyDecType_FromFloatExact() uses float.as_integer_ratio(), and thus
ISTM that the issue doesn't exist there.
(also, the following doesn't raise an exception, as expected:
import decimal
class BadFloat(float):
def as_integer_ratio(self):
raise RuntimeError
decimal.Decimal.from_float(BadFloat())
)
|
|||
| msg302520 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2017-09-19 12:58 | |
New changeset 865e4b4f630e2ae91e61239258abb58b488f1d65 by Serhiy Storchaka (Oren Milman) in branch 'master': bpo-31293: Fix crashes in truediv and mul of a timedelta by a float with a bad as_integer_ratio() method. (#3227) https://github.com/python/cpython/commit/865e4b4f630e2ae91e61239258abb58b488f1d65 |
|||
| msg302528 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2017-09-19 14:00 | |
New changeset f37dd11f0d4832c15d49c2ddc83d533ddaa36e74 by Serhiy Storchaka (Miss Islington (bot)) in branch '3.6': [3.6] bpo-31293: Fix crashes in truediv and mul of a timedelta by a float with a bad as_integer_ratio() method. (GH-3227) (#3654) https://github.com/python/cpython/commit/f37dd11f0d4832c15d49c2ddc83d533ddaa36e74 |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2017-09-19 14:01:15 | serhiy.storchaka | set | status: open -> closed stage: patch review -> resolved resolution: fixed versions: + Python 3.6 |
| 2017-09-19 14:00:46 | serhiy.storchaka | set | messages: + msg302528 |
| 2017-09-19 12:58:25 | python-dev | set | keywords:
+ patch stage: needs patch -> patch review pull_requests: + pull_request3647 |
| 2017-09-19 12:58:13 | serhiy.storchaka | set | messages: + msg302520 |
| 2017-08-28 18:23:30 | Oren Milman | set | messages: + msg300958 |
| 2017-08-28 17:57:52 | serhiy.storchaka | set | messages: + msg300957 |
| 2017-08-28 15:35:57 | Oren Milman | set | pull_requests: + pull_request3270 |
| 2017-08-28 15:24:47 | serhiy.storchaka | set | messages: + msg300956 |
| 2017-08-28 14:43:56 | Oren Milman | set | messages: + msg300955 |
| 2017-08-28 14:42:04 | serhiy.storchaka | set | components: + Extension Modules, - Interpreter Core |
| 2017-08-28 14:41:55 | serhiy.storchaka | set | nosy:
+ belopolsky, serhiy.storchaka stage: needs patch |
| 2017-08-28 14:36:40 | Oren Milman | create | |