https://pharo.fogbugz.com/f/cases/12923/DateAndTime-gets-into-infinite-loop-when-a-time-is-missing

fix/slice submitted.

On 19 Feb 2014, at 15:21, Diego Lont <[email protected]> wrote:

> I think a zero time would be best, as I did so in my proposed fix.
> 
>> Thanks for the report.
>> 
>> Yes, an issue, a unit test and a slice to fix it would be cool ;-)
>> 
>> BTW, what do you propose: throw an error or use a zero time ?
>> 
>> On 19 Feb 2014, at 10:27, Diego Lont <[email protected]> wrote:
>> 
>>> Hi all,
>>> 
>>> I probably should make an issue out of this, and follow the workflow, but I 
>>> found a bug in the DateAndTime class in the method readFrom:
>>> 
>>> This method comes in an infinite loop, if there is only a date specified: 
>>> it tried to do aStream next while aStream peek is not a digit. And since 
>>> aStream peek returns nil when the stream is at the end, this will result in 
>>> an infinite loop. Here is the fixed method.
>>> 
>>> Cheers,
>>> Diego
>>> 
>>> readFrom: aStream
>>>     "Parse and return a new DateAndTime instance from stream, 
>>>     as a Date, a Time and a TimeZone offset."
>>>     "self readFrom: ' 2013-03-04T23:47:52.876+01:00' readStream"
>>> 
>>>     | offset date time |
>>>     date := Date readFrom: aStream.
>>>     [ aStream peek isDigit or: [ aStream atEnd ] ] whileFalse: [ aStream 
>>> next ].
>>>     aStream atEnd
>>>             ifTrue: [ time := Time midnight ]
>>>             ifFalse: [ time := Time readFrom: aStream ].
>>>     aStream skipSeparators.
>>>     offset := self readTimezoneOffsetFrom: aStream.
>>>     ^ self
>>>             year: date year
>>>             month: date monthIndex
>>>             day: date dayOfMonth
>>>             hour: time hour
>>>             minute: time minute
>>>             second: time second
>>>             nanoSecond: time nanoSecond
>>>             offset: offset
>>> 
>>>     "       '-1199-01-05T20:33:14.321-05:00' asDateAndTime
>>>             ' 2002-05-16T17:20:45.1+01:01' asDateAndTime
>>> 
>>>             ' 2002-05-16T17:20:45.02+01:01' asDateAndTime
>>> 
>>>             ' 2002-05-16T17:20:45.003+01:01' asDateAndTime
>>> 
>>>             ' 2002-05-16T17:20:45.0004+01:01' asDateAndTime
>>>             ' 2002-05-16T17:20:45.00005' asDateAndTime
>>>             ' 2002-05-16T17:20:45.000006+01:01' asDateAndTime
>>> 
>>>             ' 2002-05-16T17:20:45.0000007+01:01' asDateAndTime
>>>             ' 2002-05-16T17:20:45.00000008-01:01' asDateAndTime   
>>>             ' 2002-05-16T17:20:45.000000009+01:01' asDateAndTime  
>>>             ' 2002-05-16T17:20:45.0000000001+01:01' asDateAndTime  
>>> 
>>>             ' 2002-05-16T17:20' asDateAndTime
>>>             ' 2002-05-16T17:20:45' asDateAndTime
>>>             ' 2002-05-16T17:20:45+01:57' asDateAndTime
>>>             ' 2002-05-16T17:20:45-02:34' asDateAndTime
>>>             ' 2002-05-16T17:20:45+00:00' asDateAndTime
>>>             ' 1997-04-26T01:02:03+01:02:3' asDateAndTime 
>>>     "
>> 
>> 
> 
> 


Reply via email to