Module: wine Branch: master Commit: 808c47cecba0fcd4a9a62b69183e88d20cabbe19 URL: http://source.winehq.org/git/wine.git/?a=commit;h=808c47cecba0fcd4a9a62b6918...
Author: Andrew Eikum aeikum@codeweavers.com Date: Mon Sep 9 09:17:23 2013 -0500
oleaut32: Typelib strings of size -1 are NULL.
---
dlls/oleaut32/typelib.c | 29 +++++++++++------------------ 1 files changed, 11 insertions(+), 18 deletions(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index 18c1e19..476f089 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -2258,24 +2258,17 @@ static void MSFT_ReadValue( VARIANT * pVar, int offset, TLBContext *pcx ) case VT_BSTR :{ char * ptr; MSFT_ReadLEDWords(&size, sizeof(INT), pcx, DO_NOT_SEEK ); - if(size < 0) { - char next; - DWORD origPos = MSFT_Tell(pcx), nullPos; - - do { - MSFT_Read(&next, 1, pcx, DO_NOT_SEEK); - } while (next); - nullPos = MSFT_Tell(pcx); - size = nullPos - origPos; - MSFT_Seek(pcx, origPos); - } - ptr = heap_alloc_zero(size);/* allocate temp buffer */ - MSFT_Read(ptr, size, pcx, DO_NOT_SEEK);/* read string (ANSI) */ - V_BSTR(pVar)=SysAllocStringLen(NULL,size); - /* FIXME: do we need a AtoW conversion here? */ - V_UNION(pVar, bstrVal[size])='\0'; - while(size--) V_UNION(pVar, bstrVal[size])=ptr[size]; - heap_free(ptr); + if(size == -1){ + V_BSTR(pVar) = NULL; + }else{ + ptr = heap_alloc_zero(size); + MSFT_Read(ptr, size, pcx, DO_NOT_SEEK); + V_BSTR(pVar)=SysAllocStringLen(NULL,size); + /* FIXME: do we need a AtoW conversion here? */ + V_UNION(pVar, bstrVal[size])='\0'; + while(size--) V_UNION(pVar, bstrVal[size])=ptr[size]; + heap_free(ptr); + } } size=-4; break; /* FIXME: this will not work AT ALL when the variant contains a pointer */