diff --git a/packages/fcl-res/src/versionresource.pp b/packages/fcl-res/src/versionresource.pp
index 071730cc5f..73239ae12a 100644
--- a/packages/fcl-res/src/versionresource.pp
+++ b/packages/fcl-res/src/versionresource.pp
@@ -54,7 +54,7 @@ type
     function ReadStringFileInfo(toread : integer) : integer;
     function ReadVarFileInfo(toread : integer) : integer;
     function ReadStringTable(toread : integer;aName : string) : integer;
-    function ReadWideString: string;
+    function ReadWideString(toread: integer = -1): string;
     procedure WriteFixedBlockLength(const position : int64);
     procedure WriteData;
     procedure WriteFixedInfos;
@@ -300,7 +300,7 @@ begin
   begin
     before:=RawData.Position;
     ReadBlockHeader(block);
-    value:=ReadWideString;
+    value:=ReadWideString(block.vallength);
     AlignDWordReading;
     tmp:=RawData.Position-before;
     dec(toread,tmp); inc(Result,tmp);
@@ -308,20 +308,24 @@ begin
   end;
 end;
 
-function TVersionResource.ReadWideString: string;
+function TVersionResource.ReadWideString(toread: integer): string;
 var w : word;
     ws : widestring;
+    i: integer = 0;
 begin
   ws:='';
+  if toread=0 then
+    exit('');
   w:=0;
   repeat
     RawData.ReadBuffer(w,2);
-    if w = 0 then break;
+    if (toread=-1) and (w = 0) then break;
     {$IFDEF ENDIAN_BIG}
     w:=SwapEndian(w);
     {$ENDIF}
     ws:=ws+widechar(w);
-  until false;
+    inc(i);
+  until i = toread;
   Result:=ws;
 end;