From 1dab102d31e002cbffee7755526ba7ad42fa524f Mon Sep 17 00:00:00 2001 From: michael Date: Tue, 9 Mar 2021 11:56:08 +0000 Subject: * Allow BOM check git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@48926 3ad0048d-3df7-0310-abae-a5850022a9f2 --- packages/fcl-json/src/jsonconf.pp | 2 +- packages/fcl-json/src/jsonscanner.pp | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/fcl-json/src/jsonconf.pp b/packages/fcl-json/src/jsonconf.pp index 794c796e99..b0bccbf575 100644 --- a/packages/fcl-json/src/jsonconf.pp +++ b/packages/fcl-json/src/jsonconf.pp @@ -31,7 +31,7 @@ uses SysUtils, Classes, fpjson, jsonscanner, jsonparser; Const - DefaultJSONOptions = [joUTF8,joComments]; + DefaultJSONOptions = [joUTF8,joComments,joBOMCheck]; type EJSONConfigError = class(Exception); diff --git a/packages/fcl-json/src/jsonscanner.pp b/packages/fcl-json/src/jsonscanner.pp index 5294e02ac6..c81f543bcb 100644 --- a/packages/fcl-json/src/jsonscanner.pp +++ b/packages/fcl-json/src/jsonscanner.pp @@ -51,7 +51,7 @@ type EScannerError = class(EParserError); - TJSONOption = (joUTF8,joStrict,joComments,joIgnoreTrailingComma,joIgnoreDuplicates); + TJSONOption = (joUTF8,joStrict,joComments,joIgnoreTrailingComma,joIgnoreDuplicates,joBOMCheck); TJSONOptions = set of TJSONOption; Const @@ -141,10 +141,26 @@ end; constructor TJSONScanner.Create(Source: TStream; AOptions: TJSONOptions); + procedure SkipStreamBOM; + Var + OldPos : integer; + Header : array[0..3] of byte; + begin + OldPos := Source.Position; + FillChar(Header, SizeOf(Header), 0); + if Source.Read(Header, 3) = 3 then + if (Header[0]=$EF) and (Header[1]=$BB) and (Header[2]=$BF) then + exit; + Source.Position := OldPos; + end; + + Var S : RawByteString; begin + if (joBOMCheck in aOptions) then + SkipStreamBom; S:=''; SetLength(S,Source.Size-Source.Position); if Length(S)>0 then -- cgit v1.2.1