diff --git a/rtl/inc/sstrings.inc b/rtl/inc/sstrings.inc index e7a435dec7..200d30b78a 100644 --- a/rtl/inc/sstrings.inc +++ b/rtl/inc/sstrings.inc @@ -907,46 +907,46 @@ begin flags:=0; sign:=1; while (code<=length(s)) and (s[code] in [' ',#9]) do - inc(code); - case s[code] of - '+' : inc(code); - '-' : begin - sign:=-1; - inc(code); - end; - end; + inc(code); + if code<=length(s) then + case s[code] of + '+' : inc(code); + '-' : begin + sign:=-1; + inc(code); + end; + end; while (Code<=Length(s)) and (s[code] in ['0'..'9']) do - begin + begin { Read integer part } flags:=flags or 1; - -fpc_Val_Real_ShortStr:=fpc_Val_Real_ShortStr*10+(ord(s[code])-ord('0')); + fpc_Val_Real_ShortStr:=fpc_Val_Real_ShortStr*10+(ord(s[code])-ord('0')); inc(code); - end; + end; { Decimal ? } if (length(s)>=code) and (s[code]='.') then - begin + begin hd:=1.0; inc(code); while (length(s)>=code) and (s[code] in ['0'..'9']) do begin { Read fractional part. } - flags:=flags or 2; - fpc_Val_Real_ShortStr:=fpc_Val_Real_ShortStr*10+(ord(s[code])-ord('0')); - hd:=hd*10.0; - inc(code); + flags:=flags or 2; + fpc_Val_Real_ShortStr:=fpc_Val_Real_ShortStr*10+(ord(s[code])-ord('0')); + hd:=hd*10.0; + inc(code); end; fpc_Val_Real_ShortStr:=fpc_Val_Real_ShortStr/hd; end; { Again, read integer and fractional part} if flags=0 then - begin + begin fpc_Val_Real_ShortStr:=0.0; exit; - end; + end; { Exponent ? } if (length(s)>=code) and (upcase(s[code])='E') then - begin + begin inc(code); if Length(s) >= code then if s[code]='+' then @@ -959,16 +959,16 @@ fpc_Val_Real_ShortStr:=fpc_Val_Real_ShortStr*10+(ord(s[code])-ord('0')); end; if (length(s)=code) and (s[code] in ['0'..'9']) do begin - exponent:=exponent*10; - exponent:=exponent+ord(s[code])-ord('0'); - inc(code); + exponent:=exponent*10; + exponent:=exponent+ord(s[code])-ord('0'); + inc(code); end; - end; + end; { evaluate sign } { (before exponent, because the exponent may turn it into a denormal) } fpc_Val_Real_ShortStr:=fpc_Val_Real_ShortStr*sign; @@ -999,10 +999,10 @@ fpc_Val_Real_ShortStr:=fpc_Val_Real_ShortStr*10+(ord(s[code])-ord('0')); { Not all characters are read ? } if length(s)>=code then - begin - fpc_Val_Real_ShortStr:=0.0; - exit; - end; + begin + fpc_Val_Real_ShortStr:=0.0; + exit; + end; { success ! } code:=0; end;