소스 검색

* initialise temporary variants using fillchar instead of using varclearproc
(the latter assumes the variant has already been initialised at least
once). Thanks to Yury.

git-svn-id: trunk@12783 -

Jonas Maebe 16 년 전
부모
커밋
3884a9b065
2개의 변경된 파일4개의 추가작업 그리고 2개의 파일을 삭제
  1. 2 1
      rtl/objpas/classes/reader.inc
  2. 2 1
      rtl/objpas/classes/writer.inc

+ 2 - 1
rtl/objpas/classes/reader.inc

@@ -1081,10 +1081,11 @@ type
     i: int64;
   end;
 begin
+  { Ensure that a Variant manager is installed }
   if not Assigned(VarClearProc) then
     raise EReadError.Create(SErrNoVariantSupport);
 
-  VarClearProc(Result);
+  FillChar(Result,sizeof(Result),0);
   Read(Result.vtype,sizeof(Result.vtype));
 
   case Result.vtype of

+ 2 - 1
rtl/objpas/classes/writer.inc

@@ -991,6 +991,7 @@ begin
       end;
     tkVariant:
       begin
+        { Ensure that a Variant manager is installed }
         if not assigned(VarClearProc) then
           raise EWriteError.Create(SErrNoVariantSupport);
 
@@ -998,7 +999,7 @@ begin
         if HasAncestor then
           DefVarValue := tvardata(GetVariantProp(Ancestor, PropInfo))
         else
-          VarClearProc(DefVarValue);
+          FillChar(DefVarValue,sizeof(DefVarValue),0);
 
         if (CompareByte(VarValue,DefVarValue,sizeof(VarValue)) <> 0) then
           begin