[Pkg] The Trunk: Kernel-bf.744.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Mar 4 14:26:53 UTC 2013


Bert Freudenberg uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-bf.744.mcz

==================== Summary ====================

Name: Kernel-bf.744
Author: bf
Time: 4 March 2013, 3:25:12.024 pm
UUID: e3c35ac4-6571-4bcc-86d4-ccb613a8e631
Ancestors: Kernel-nice.743

Sanitize Time class>>readFrom: to not read beyond the time. Use that to sanitize DateAndTime class>>readFrom:, too, avoiding the only known use of PositionableStream>>last. Time tests are still green.

=============== Diff against Kernel-nice.743 ===============

Item was changed:
  ----- Method: DateAndTime class>>readFrom: (in category 'squeak protocol') -----
  readFrom: aStream
  
  	| offset date time ch |
  
  	date := Date readFrom: aStream.
  	[aStream peek isDigit]
  		whileFalse: [aStream next].
  	time := Time readFrom: aStream.
+ 	(aStream atEnd or: [('+-Z' includes: aStream peek) not])
+ 		ifTrue: [offset := self localOffset]
+ 		ifFalse: [(aStream peekFor: $Z)
+ 			ifTrue: [offset := Duration zero]
+ 			ifFalse: [
+ 				ch := aStream next.
+ 				ch = $+ ifTrue: [ch := Character space].
+ 				offset := Duration fromString: ch asString, '0:', aStream upToEnd, ':0']].
- 	aStream atEnd
- 		ifTrue: [ (aStream last = $Z) ifTrue: [offset := Duration zero] ifFalse: [ offset := self localOffset ]]
- 		ifFalse: [
- 			ch := aStream next.
- 			ch = $+ ifTrue: [ch := Character space].
- 			offset := Duration fromString: ch asString, '0:', aStream upToEnd, ':0'].
- 		
  	^ 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 
   	"!

Item was changed:
  ----- Method: Time class>>readFrom: (in category 'smalltalk-80') -----
  readFrom: aStream
  	"Read a Time from the stream in the form:
  		<hour>:<minute>:<second> <am/pm>
  
  	<minute>, <second> or <am/pm> may be omitted.  e.g. 1:59:30 pm; 8AM; 15:30"
  
  	| hour minute second ampm nanos nanosBuffer |
  	hour := Integer readFrom: aStream.
  	minute := 0.
  	second := 0.
  	nanosBuffer := '000000000' copy.
  	nanos := WriteStream on: nanosBuffer.
  	(aStream peekFor: $:) 
  		ifTrue: [
  			minute := Integer readFrom: aStream.
  			(aStream peekFor: $:) 
  				ifTrue: [
+ 					second := Integer readFrom: aStream.
- 					second := Integer readFrom: aStream].
  					(aStream peekFor: $.)
  						ifTrue: [
  							[aStream atEnd not and: [aStream peek isDigit]]
+ 								whileTrue: [nanos nextPut: aStream next]]]].
- 								whileTrue: [nanos nextPut: aStream next]]].
  	aStream skipSeparators.
+ 	(aStream atEnd not and: ['PApa' includes: aStream peek]) ifTrue: 
- 	(aStream atEnd not and: [aStream peek isLetter]) ifTrue: 
  		[ampm := aStream next asLowercase.
+ 		(ampm = $p and: [hour < 12]) ifTrue: [hour := hour + 12].
- 	
- 	(ampm = $p and: [hour < 12]) ifTrue: [hour := hour + 12].
  		(ampm = $a and: [hour = 12]) ifTrue: [hour := 0].
+ 		(aStream peekFor: $m) ifFalse: [aStream peekFor: $M ]].
- 	
- 	(aStream peekFor: $m) ifFalse: [aStream peekFor: $M ]].
  	^ self 
  		hour: hour 
  		minute: minute 
  		second: second 
  		nanoSecond: nanosBuffer asInteger
  
  	"Time readFrom: (ReadStream on: '2:23:09 pm')"!



More information about the Packages mailing list