LCL: Read a streamed WideString CollectionItem property correctly. Issue #34561, patch from Anton Kavalenka.

git-svn-id: trunk@59586 -
This commit is contained in:
juha 2018-11-18 10:34:29 +00:00
parent 95d0c815b2
commit a3b056875f

View File

@ -374,8 +374,8 @@ type
procedure HandleAlphaNum; procedure HandleAlphaNum;
procedure HandleNumber; procedure HandleNumber;
procedure HandleHexNumber; procedure HandleHexNumber;
function HandleQuotedString : string; function HandleQuotedString: string;
function HandleDecimalString(var IsWideString: Boolean): string; function HandleDecimalString: string;
procedure HandleString; procedure HandleString;
procedure HandleMinus; procedure HandleMinus;
procedure HandleUnknown; procedure HandleUnknown;
@ -5628,8 +5628,9 @@ begin
end; end;
end; end;
function TUTF8Parser.HandleDecimalString(var IsWideString: Boolean): string; function TUTF8Parser.HandleDecimalString: string;
var i : integer; var
i: integer;
begin begin
Result:=''; Result:='';
inc(fPos); inc(fPos);
@ -5642,13 +5643,7 @@ begin
end; end;
if not TryStrToInt(Result,i) then if not TryStrToInt(Result,i) then
i:=0; i:=0;
if i > 255 then begin Result:=UnicodeToUTF8(i); // widestring
Result:=UnicodeToUTF8(i); // widestring
IsWideString:=true;
end else if i > 127 then
Result:=SysToUTF8(chr(i)) // windows codepage
else
Result:=chr(i); // ascii, does not happen
end; end;
procedure TUTF8Parser.HandleString; procedure TUTF8Parser.HandleString;
@ -5660,12 +5655,15 @@ begin
while true do begin while true do begin
case fBuf[fPos] of case fBuf[fPos] of
'''' : fLastTokenStr:=fLastTokenStr+HandleQuotedString; '''' : fLastTokenStr:=fLastTokenStr+HandleQuotedString;
'#' : fLastTokenStr:=fLastTokenStr+HandleDecimalString(IsWideString); '#' : begin
fLastTokenStr:=fLastTokenStr+HandleDecimalString;
IsWideString:=true;
end;
else break; else break;
end; end;
end; end;
if IsWideString then if IsWideString then
fToken:=toWString fToken:=Classes.toWString
else else
fToken:=Classes.toString; fToken:=Classes.toString;
end; end;