From f0fa75e0d8f7e7a7f24799baac9446727a83316b Mon Sep 17 00:00:00 2001 From: michael Date: Sun, 23 Aug 2020 09:50:41 +0000 Subject: [PATCH] * Merging revisions r45792 from trunk: ------------------------------------------------------------------------ r45792 | michael | 2020-07-15 16:33:51 +0200 (Wed, 15 Jul 2020) | 1 line * Better fix for bug ID #0037352 ------------------------------------------------------------------------ git-svn-id: branches/fixes_3_2@46630 - --- packages/fcl-json/src/jsonscanner.pp | 7 +++--- packages/fcl-json/tests/testjsonparser.pp | 30 +++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/packages/fcl-json/src/jsonscanner.pp b/packages/fcl-json/src/jsonscanner.pp index b14db3188f..fc3f7429ae 100644 --- a/packages/fcl-json/src/jsonscanner.pp +++ b/packages/fcl-json/src/jsonscanner.pp @@ -212,7 +212,8 @@ function TJSONScanner.FetchToken: TJSONToken; While Not (FCurPos^ in [#0,#10,#13]) do Inc(FCurPos); FEOL:=FCurPos; - While (FCurPos^<>#0) and (FCurPos^ in [#10,#13]) do + If (FCurPos^<>#0) then +// While (FCurPos^<>#0) and (FCurPos^ in [#10,#13]) do begin if (FCurPos^=#13) and (FCurPos[1]=#10) then Inc(FCurPos); // Skip CR-LF @@ -471,7 +472,7 @@ begin TokenStart:=FTokenStr; SectionLength := PChar(FEOL)-TokenStart; SetString(FCurTokenString, TokenStart, SectionLength); - FTokenStr:=FCurPos; + FetchLine; end; '*' : begin @@ -479,7 +480,7 @@ begin Inc(FTokenStr); TokenStart:=FTokenStr; Repeat - if (FTokenStr^=#0) then + if (FTokenStr=FEOL) then begin SectionLength := (FTokenStr - TokenStart); S:=''; diff --git a/packages/fcl-json/tests/testjsonparser.pp b/packages/fcl-json/tests/testjsonparser.pp index 73c718c314..9178fab487 100644 --- a/packages/fcl-json/tests/testjsonparser.pp +++ b/packages/fcl-json/tests/testjsonparser.pp @@ -73,6 +73,7 @@ type Procedure TestStartEmptyLine; Procedure TestObjectEmptyLine; Procedure TestCommentLine; + Procedure TestFirstLineComment; end; implementation @@ -651,6 +652,35 @@ begin end; end; +procedure TTestParser.TestFirstLineComment; + +// New case +const + ENDLINE = #$0d#$0a; + + +Const + MyJSON = + '//comment1'+ENDLINE+ + '{'+ENDLINE+ + '"version":100, //comment2'+ENDLINE+ + '"value":200'+ENDLINE+ + '}'+ENDLINE; + +var + J : TJSONData; + +begin + With TJSONParser.Create(MyJSON,[joComments]) do + Try + J:=Parse; + J.Free; + Finally + Free; + end; + +end; + procedure TTestParser.DoTestError(S : String; Options : TJSONOptions = DefaultOpts); Var