classification
Title: int overflow in datetime causes seg fault from datetime.ctime()
Type: crash Stage:
Components: None Versions: Python 2.6
process
Status: closed Resolution: out of date
Dependencies: Superseder: datetime operations spanning MINYEAR give bad results
View: 7150
Assigned To: Nosy List: amaury.forgeotdarc, barry, belopolsky, bernie9998, mark.dickinson, pitrou, r.david.murray
Priority: normal Keywords:

Created on 2010-09-17 18:18 by bernie9998, last changed 2010-09-23 22:31 by amaury.forgeotdarc. This issue is now closed.

Files
File name Uploaded Description Edit
segfault.py bernie9998, 2010-09-17 18:17 sample code as a simple script, when executed segmentation fault occurs
segfault.py bernie9998, 2010-09-17 21:31 updated demonstration script relative to current date, shows all edge cases until segmentation fault.
Messages (5)
msg116700 - (view) Author: Brian Bernstein (bernie9998) Date: 2010-09-17 18:17
When creating an int overflow via a subtraction operation with a datetime object and a timedelta object, the resulting datetime object can cause a segmentation fault when the ctime method is called.

Segmentation Fault occurred on python 2.6.5 on 64 bit ubuntu lucid.

Code as follows:

from datetime import datetime, timedelta
(datetime.now() - timedelta(734395)).ctime()
msg116712 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2010-09-17 19:09
This does not reproduce for me on python2.6.5 gentoo linux; however, gentoo linux does have some additional post 2.6.5 patches applied.
It also does not reproduce on 2.7.
msg116723 - (view) Author: Brian Bernstein (bernie9998) Date: 2010-09-17 21:31
After further investigation, it appears the cause is the ability to overflow the datetime object by almost a year.  I've modified the test to demonstrate this relative to the current date:

from datetime import date, datetime, timedelta
(datetime.now()-timedelta((date.today()-date(1,1,1)).days+364)).ctime()

It seems the date can be overflowed by up to a year without throwing an Exception.  The result of which is a seg fault when calling the bound ctime method.

Note that anything above 364 results in OverFlowError.  Below 18 still overflows, but does not seg fault, instead resulting in a weird result,e.g.:
'Tue (null) 240 17:25:37 0001'

I'll update the script to demonstrate the edge cases where this occurs.
msg116767 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2010-09-18 12:11
Apparently it has been fixed somewhere between 2.6.5 and 2.6.6. I get a segmentation fault in 2.6.5, but an OverflowError in all of {2.6.6, 2.7, 3.1, 3.2}.
msg117243 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2010-09-23 22:31
yes, this was fixed by issue7150.
History
Date User Action Args
2010-09-23 22:31:45amaury.forgeotdarcsetstatus: open -> closed

nosy: + amaury.forgeotdarc
messages: + msg117243

superseder: datetime operations spanning MINYEAR give bad results
resolution: out of date
2010-09-18 12:11:51pitrousetnosy: + pitrou
messages: + msg116767
2010-09-17 21:31:56bernie9998setfiles: + segfault.py

messages: + msg116723
2010-09-17 19:32:21belopolskysetnosy: + mark.dickinson
2010-09-17 19:09:04r.david.murraysetnosy: + barry, r.david.murray
messages: + msg116712
2010-09-17 19:05:19r.david.murraysetnosy: + belopolsky
2010-09-17 18:18:00bernie9998create