diff --git a/packages/rtl-objpas/src/inc/rtti.pp b/packages/rtl-objpas/src/inc/rtti.pp
index 84aee238bb..baf7a22c92 100644
--- a/packages/rtl-objpas/src/inc/rtti.pp
+++ b/packages/rtl-objpas/src/inc/rtti.pp
@@ -614,7 +614,7 @@ function TValue.GetDataSize: SizeInt;
 begin
   if IsEmpty then
     Result := 0
-  else if Assigned(FData.FValueData) then
+  else if Assigned(FData.FValueData) and (Kind <> tkSString) then
     Result := FData.FValueData.GetDataSize
   else begin
     Result := 0;
@@ -660,7 +660,8 @@ begin
         { ? }
         Result := SizeOf(TMethod);
       tkSString:
-        Result := SizeOf(ShortString);
+        { ShortString can hold max. 254 characters as [0] is Length and [255] is #0 }
+        Result := SizeOf(ShortString) - 2;
       tkVariant:
         Result := SizeOf(Variant);
       tkProcVar: