summaryrefslogtreecommitdiff
path: root/packages/fcl-json
diff options
context:
space:
mode:
authormichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-06-30 10:35:04 +0000
committermichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-06-30 10:35:04 +0000
commit60e7f97a7ad8a84e3dcf13252e118dee7f6cb5ba (patch)
tree474f94adae9f166b458008471c1de7c4f6b195d5 /packages/fcl-json
parent34105e2039c72c5ddd866839f669fca29f276677 (diff)
downloadfpc-60e7f97a7ad8a84e3dcf13252e118dee7f6cb5ba.tar.gz
* Patches for bugs 16815 and 16807 (double type and access violation when accessing non-existent member
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@15495 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-json')
-rw-r--r--packages/fcl-json/src/fpjson.pp6
-rw-r--r--packages/fcl-json/tests/testjsondata.pp25
-rw-r--r--packages/fcl-json/tests/testjsonparser.pp6
3 files changed, 30 insertions, 7 deletions
diff --git a/packages/fcl-json/src/fpjson.pp b/packages/fcl-json/src/fpjson.pp
index caf6ac678b..7fb93cf24d 100644
--- a/packages/fcl-json/src/fpjson.pp
+++ b/packages/fcl-json/src/fpjson.pp
@@ -27,7 +27,7 @@ uses
type
TJSONtype = (jtUnknown, jtNumber, jtString, jtBoolean, jtNull, jtArray, jtObject);
- TJSONFloat = Extended;
+ TJSONFloat = Double;
TJSONStringType = AnsiString;
TJSONCharType = AnsiChar;
PJSONCharType = ^TJSONCharType;
@@ -422,7 +422,7 @@ Resourcestring
SErrPointerNotNil = 'Cannot add non-nil pointer to JSON%s';
SErrOddNumber = 'TJSONObject must be constructed with name,value pairs';
SErrNameMustBeString = 'TJSONObject constructor element name at pos %d is not a string';
-
+ SErrNonexistentElement = 'Unknown object member: "%s"';
Function StringToJSONString(S : TJSONStringType) : TJSONStringType;
@@ -1473,6 +1473,8 @@ end;
function TJSONObject.GetElements(AName: string): TJSONData;
begin
Result:=TJSONData(FHash.Find(AName));
+ If (Result=Nil) then
+ Raise EJSON.CreateFmt(SErrNonexistentElement,[AName]);
end;
function TJSONObject.GetFloats(AName : String): TJSONFloat;
diff --git a/packages/fcl-json/tests/testjsondata.pp b/packages/fcl-json/tests/testjsondata.pp
index cfc189561f..3e7fbe3a90 100644
--- a/packages/fcl-json/tests/testjsondata.pp
+++ b/packages/fcl-json/tests/testjsondata.pp
@@ -157,6 +157,7 @@ type
TTestObject = class(TTestJSON)
private
procedure TestAddBoolean(B : Boolean);
+ Procedure TestAccessError;
published
Procedure TestCreate;
Procedure TestCreateString;
@@ -184,6 +185,7 @@ type
procedure TestRemove;
procedure TestClone;
procedure TestExtract;
+ Procedure TestNonExistingAccessError;
end;
@@ -998,7 +1000,7 @@ end;
procedure TTestArray.TestCreateFloat;
Const
- S = 1.2;
+ S : double = 1.2;
Var
J : TJSONArray;
@@ -1564,6 +1566,20 @@ begin
end;
+procedure TTestObject.TestAccessError;
+
+Var
+ J : TJSONObject;
+
+begin
+ J:=TJSonObject.Create;
+ try
+ J.Strings['NonExist'];
+ finally
+ FreeAndNil(J);
+ end;
+end;
+
procedure TTestObject.TestAddBooleanTrue;
begin
@@ -1812,6 +1828,11 @@ begin
end;
+procedure TTestObject.TestNonExistingAccessError;
+begin
+ AssertException(EJSON,@TestAccessError);
+end;
+
procedure TTestObject.TestCreateString;
@@ -1907,7 +1928,7 @@ procedure TTestObject.TestCreateFloat;
Const
A = 'A';
- S = 1.2;
+ S : double = 1.2;
Var
J : TJSONObject;
diff --git a/packages/fcl-json/tests/testjsonparser.pp b/packages/fcl-json/tests/testjsonparser.pp
index 46b1579b61..3542e212d9 100644
--- a/packages/fcl-json/tests/testjsonparser.pp
+++ b/packages/fcl-json/tests/testjsonparser.pp
@@ -209,9 +209,9 @@ begin
DoTestArray('[1234567890123456]',1);
DoTestArray('[1234567890123456, 2234567890123456]',2);
DoTestArray('[1234567890123456, 2234567890123456, 3234567890123456]',3);
- Str(1.2,S1);
- Str(2.3,S2);
- Str(3.4,S3);
+ Str(Double(1.2),S1);
+ Str(Double(2.3),S2);
+ Str(Double(3.4),S3);
DoTestArray('['+S1+']',1);
DoTestArray('['+S1+', '+S2+']',2);
DoTestArray('['+S1+', '+S2+', '+S3+']',3);