numbers.patch (3,076 bytes)
Index: packages/fcl-json/src/jsonscanner.pp
===================================================================
--- packages/fcl-json/src/jsonscanner.pp (Revision 47001)
+++ packages/fcl-json/src/jsonscanner.pp (Arbeitskopie)
@@ -396,37 +395,54 @@
'0'..'9','.','-':
begin
TokenStart := FTokenStr;
+ if FTokenStr^ = '-' then inc(FTokenStr);
+ case FTokenStr^ of
+ '1'..'9': Inc(FTokenStr);
+ '0': begin
+ Inc(FTokenStr);
+ if (joStrict in Options) and (FTokenStr^ in ['0'..'9']) then
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
+ end;
+ '.': if joStrict in Options then
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
+ else
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
+ end;
while true do
begin
- Inc(FTokenStr);
case FTokenStr^ of
+ '0'..'9': inc(FTokenStr);
'.':
begin
- if FTokenStr[1] in ['0'..'9', 'e', 'E'] then
- begin
- Inc(FTokenStr);
- repeat
+ case FTokenStr[1] of
+ '0'..'9': Inc(FTokenStr, 2);
+ 'e', 'E': begin
+ if joStrict in Options then
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
Inc(FTokenStr);
- until not (FTokenStr^ in ['0'..'9', 'e', 'E','-','+']);
+ end;
+ else Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
end;
- break;
- end;
- '0'..'9': ;
- 'e', 'E':
- begin
- Inc(FTokenStr);
- if FTokenStr^ in ['-','+'] then
- Inc(FTokenStr);
while FTokenStr^ in ['0'..'9'] do
- Inc(FTokenStr);
+ inc(FTokenStr);
break;
end;
else
- if {(FTokenStr<>FEOL) and }not (FTokenStr^ in [#13,#10,#0,'}',']',',',#9,' ']) then
- Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
break;
end;
end;
+ if FTokenStr^ in ['e', 'E'] then begin
+ Inc(FTokenStr);
+ if FTokenStr^ in ['-','+'] then
+ Inc(FTokenStr);
+ if not (FTokenStr^ in ['0'..'9']) then
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
+ repeat
+ Inc(FTokenStr);
+ until not (FTokenStr^ in ['0'..'9']);
+ end;
+ if {(FTokenStr<>FEOL) and }not (FTokenStr^ in [#13,#10,#0,'}',']',',',#9,' ']) then
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
SectionLength := FTokenStr - TokenStart;
FCurTokenString:='';
SetString(FCurTokenString, TokenStart, SectionLength);
benito@hostname:~/opt/fpc-trunk$