Robert Shearman : oleaut32: MSFT_DoFuncs: "reclength" of the function information record is stored
Module: wine Branch: refs/heads/master Commit: 688c6a78f1d14055917b6eef634891cdbfb21829 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=688c6a78f1d14055917b6eef... Author: Robert Shearman <rob(a)codeweavers.com> Date: Sat Jul 8 11:54:40 2006 +0100 oleaut32: MSFT_DoFuncs: "reclength" of the function information record is stored in a 16 bit int and not in a 8 bit int as previously supposed, using a 0x1ff mask. Upper 16 bits contains the ordinal number of the function. Allocation of the "recbuf" must be modified, to support larger data (based on a patch by White Snake <whitesnake78(a)mail.com>). --- dlls/oleaut32/typelib.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index 080e25b..ce3a1dc 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -1721,7 +1721,7 @@ MSFT_DoFuncs(TLBContext* pcx, int infolen, nameoffset, reclength, nrattributes, i; int recoffset = offset + sizeof(INT); - char recbuf[512]; + char *recbuf = HeapAlloc(GetProcessHeap(), 0, 0xffff); MSFT_FuncRecord * pFuncRec=(MSFT_FuncRecord *) recbuf; TLBFuncDesc *ptfd_prev = NULL; @@ -1747,7 +1747,7 @@ MSFT_DoFuncs(TLBContext* pcx, /* read the function information record */ MSFT_ReadLEDWords(&reclength, sizeof(INT), pcx, recoffset); - reclength &= 0x1ff; + reclength &= 0xffff; MSFT_ReadLEDWords(pFuncRec, reclength - sizeof(INT), pcx, DO_NOT_SEEK); @@ -1892,6 +1892,7 @@ MSFT_DoFuncs(TLBContext* pcx, pptfd = & ((*pptfd)->next); recoffset += reclength; } + HeapFree(GetProcessHeap(), 0, recbuf); } static void MSFT_DoVars(TLBContext *pcx, ITypeInfoImpl *pTI, int cFuncs,
participants (1)
-
Alexandre Julliard