Selaa lähdekoodia

fcl-db: base: TBlobField.GetAsString returns uninitialized Result for blob Size=0. Bug #28113

git-svn-id: trunk@30881 -
lacak 10 vuotta sitten
vanhempi
commit
5c9d5cf896
1 muutettua tiedostoa jossa 15 lisäystä ja 13 poistoa
  1. 15 13
      packages/fcl-db/src/base/fields.inc

+ 15 - 13
packages/fcl-db/src/base/fields.inc

@@ -2813,7 +2813,7 @@ function TBlobField.GetAsString: string;
 var
   Stream : TStream;
   Len    : Integer;
-  R : String;
+  S : String;
   
 begin
   Stream := GetBlobStream(bmRead);
@@ -2821,18 +2821,20 @@ begin
     with Stream do
       try
         Len := Size;
-        SetLength(R, Len);
+        SetLength(S, Len);
         if Len > 0 then
           begin
-          ReadBuffer(R[1], Len);
+          ReadBuffer(S[1], Len);
           if not Transliterate then
-            Result:=R
-          else  
+            Result := S
+          else
             begin
-            SetLength(Result,Len);
-            DataSet.Translate(@R[1],@Result[1],False);
+            SetLength(Result, Len);
+            DataSet.Translate(@S[1],@Result[1],False);
             end;
-          end;  
+          end
+        else
+          Result := '';
       finally
         Free;    
       end
@@ -2929,7 +2931,7 @@ end;
 procedure TBlobField.SetAsString(const AValue: string);
 var
   Len : Integer;
-  R : String;
+  S : String;
   
 begin
   with GetBlobStream(bmWrite) do
@@ -2938,13 +2940,13 @@ begin
       if (Len>0) then
         begin
         if Not Transliterate then
-          R:=AValue
+          S:=AValue
         else
           begin
-          SetLength(R,Len);
-          Len:=Dataset.Translate(@AValue[1],@R[1],True);
+          SetLength(S,Len);
+          Len:=DataSet.Translate(@AValue[1],@S[1],True);
           end;  
-        WriteBuffer(R[1], Len);
+        WriteBuffer(S[1], Len);
         end;
     finally
       Free;