Browse Source

* Fix bug #38618

git-svn-id: trunk@48965 -
(cherry picked from commit 0d1fb4190172c974f3be79c8045932f3b2a74292)
michael 4 years ago
parent
commit
9f3ebf47e0

+ 2 - 1
packages/fcl-json/src/jsonscanner.pp

@@ -254,7 +254,7 @@ var
   I : Integer;
   I : Integer;
   OldLength, SectionLength,  tstart,tcol, u1,u2: Integer;
   OldLength, SectionLength,  tstart,tcol, u1,u2: Integer;
   C , c2: char;
   C , c2: char;
-  S : String[4];
+  S : String[8];
   Line : String;
   Line : String;
   IsStar,EOC: Boolean;
   IsStar,EOC: Boolean;
 
 
@@ -274,6 +274,7 @@ var
     FCurTokenString:=FCurTokenString+U;
     FCurTokenString:=FCurTokenString+U;
     OldLength:=Length(FCurTokenString);
     OldLength:=Length(FCurTokenString);
     u1:=0;
     u1:=0;
+    u2:=0;
     end;
     end;
   end;
   end;
 
 

+ 2 - 0
packages/fcl-json/tests/testjsondata.pp

@@ -4037,6 +4037,7 @@ procedure TTestJSONString.TestJSONStringToString;
 Const
 Const
   // Glowing star in UTF8
   // Glowing star in UTF8
   GlowingStar = #$F0#$9F#$8C#$9F;
   GlowingStar = #$F0#$9F#$8C#$9F;
+  Chinese = #$95e8#$88ab#$8111#$5b50#$6324#$574f#$4e86;
 
 
 begin
 begin
   TestFrom('','');
   TestFrom('','');
@@ -4080,6 +4081,7 @@ begin
   TestFrom('\u0041\u0042','AB');   //issue #0038622
   TestFrom('\u0041\u0042','AB');   //issue #0038622
   TestFrom('\u0041\u0042\u0043','ABC');
   TestFrom('\u0041\u0042\u0043','ABC');
   TestFrom('\u0041\u0042\u0043\u0044','ABCD');
   TestFrom('\u0041\u0042\u0043\u0044','ABCD');
+  TestFrom('\u95e8\u88ab\u8111\u5b50\u6324\u574f\u4e86',Utf8Encode(Chinese));
 end;
 end;
 
 
 procedure TTestJSONString.TestStringToJSONString;
 procedure TTestJSONString.TestStringToJSONString;

+ 12 - 0
packages/fcl-json/tests/testjsonreader.pp

@@ -314,10 +314,22 @@ end;
 
 
 procedure TBaseTestReader.TestString;
 procedure TBaseTestReader.TestString;
 
 
+const
+  GlowingStar = #$F0#$9F#$8C#$9F;
+  Chinese = #$95e8#$88ab#$8111#$5b50#$6324#$574f#$4e86;
+
 begin
 begin
   DoTestString('A string');
   DoTestString('A string');
   DoTestString('');
   DoTestString('');
   DoTestString('\"','"');
   DoTestString('\"','"');
+  DoTestString('\u00f8','ø'); // this is ø
+  DoTestString('\u00f8\"','ø"'); // this is ø"
+  DoTestString('\ud83c\udf1f',GlowingStar);
+  DoTestString('\u0041\u0042','AB');   //issue #0038622
+  DoTestString('\u0041\u0042\u0043','ABC');
+  DoTestString('\u0041\u0042\u0043\u0044','ABCD');
+  DoTestString('\u95e8\u88ab\u8111\u5b50\u6324\u574f\u4e86',Utf8Encode(Chinese));
+  
 end;
 end;