Browse Source

* Fixed cleanroom implementation of DoVarClearArray. It fixes tw9098.

git-svn-id: trunk@10647 -
yury 17 years ago
parent
commit
4341b18461
1 changed files with 5 additions and 3 deletions
  1. 5 3
      rtl/inc/variants.pp

+ 5 - 3
rtl/inc/variants.pp

@@ -2035,8 +2035,10 @@ begin
 end;
 end;
 
 
 {
 {
-  Clears variant array. If array element type is varVariant, then
-  clear each element individually first.
+  This procedure is needed to destroy and clear non-standard variant type array elements,
+  which can not be handled by SafeArrayDestroy.
+  If array element type is varVariant, then clear each element individually before
+  calling VariantClear for array. VariantClear just calls SafeArrayDestroy.
 }
 }
 procedure DoVarClearArray(var VArray: TVarData);
 procedure DoVarClearArray(var VArray: TVarData);
 var
 var
@@ -2058,7 +2060,7 @@ begin
       { Clearing each element }
       { Clearing each element }
       for i:=1 to cnt do begin
       for i:=1 to cnt do begin
         DoVarClear(data^);
         DoVarClear(data^);
-        Inc(data);
+        Inc(pointer(data), arr^.ElementSize);
       end;
       end;
     finally
     finally
       VarResultCheck(SafeArrayUnaccessData(arr));
       VarResultCheck(SafeArrayUnaccessData(arr));