oleaut32: typelib - fix regression in MSFT typelib parsing.
authorAlex Villacís Lasso <a_villacis@palosanto.com>
Thu, 9 Nov 2006 00:33:46 +0000 (19:33 -0500)
committerAlexandre Julliard <julliard@winehq.org>
Thu, 9 Nov 2006 09:44:13 +0000 (10:44 +0100)
dlls/oleaut32/typelib.c

index 92532f5..a12deb1 100644 (file)
@@ -1173,7 +1173,7 @@ static void dump_TLBFuncDescOne(const TLBFuncDesc * pfd)
   dump_FUNCDESC(&(pfd->funcdesc));
 
   MESSAGE("\thelpstring: %s\n", debugstr_w(pfd->HelpString));
-  MESSAGE("\tentry: %s\n", debugstr_w(pfd->Entry));
+  MESSAGE("\tentry: %s\n", (pfd->Entry == (void *)-1) ? "invalid" : debugstr_w(pfd->Entry));
 }
 static void dump_TLBFuncDesc(const TLBFuncDesc * pfd)
 {
@@ -1813,7 +1813,9 @@ MSFT_DoFuncs(TLBContext*     pcx,
                 {
                     if ( pFuncRec->FKCCIC & 0x2000 )
                     {
-                       (*pptfd)->Entry = SysAllocString((WCHAR*)pFuncRec->OptAttr[2]);
+                       if (HIWORD(pFuncRec->OptAttr[2]) != 0)
+                           ERR("ordinal 0x%08x invalid, HIWORD != 0\n", pFuncRec->OptAttr[2]);
+                       (*pptfd)->Entry = (BSTR)pFuncRec->OptAttr[2];
                     }
                     else
                     {
@@ -1832,6 +1834,10 @@ MSFT_DoFuncs(TLBContext*     pcx,
                         }
                     }
                 }
+                else
+                {
+                    (*pptfd)->Entry = (BSTR)-1;
+                }
             }
         }
 
@@ -4437,7 +4443,8 @@ static ULONG WINAPI ITypeInfo_fnRelease(ITypeInfo2 *iface)
               pCustDataNext = pCustData->next;
               TLB_Free(pCustData);
           }
-          SysFreeString(pFInfo->Entry);
+          if (HIWORD(pFInfo->Entry) != 0 && pFInfo->Entry != (BSTR)-1) 
+              SysFreeString(pFInfo->Entry);
           SysFreeString(pFInfo->HelpString);
           SysFreeString(pFInfo->Name);