[PATCH] vbscript: Implemented String
Shuai Meng
mengshuaicalendr at gmail.com
Mon Oct 20 10:58:01 CDT 2014
Thank you very much for commenting on this patch.
2014-10-20 0:06 GMT+08:00 Nikolay Sivov <bunglehead at gmail.com>:
> + str = SysAllocStringLen(NULL, 1023);
>> + newstr = SysAllocStringLen(NULL, 1023);
>>
> Where this length comes from?
> Well, I tested String on windows xp, and found that 1023 was the limit,
> when given a number bigger than that, the output kept the length of 1023.
>
>> + switch(V_VT(arg + 1)) {
>> + case VT_NULL:
>> + return MAKE_VBSERROR(VBSE_ILLEGAL_NULL_USE);
>> + case VT_BSTR:
>> + str = V_BSTR(arg + 1);
>> + break;
>> + case VT_ARRAY|VT_BYREF|VT_VARIANT:
>> + return DISP_E_TYPEMISMATCH;
>> + default:
>> + hres = to_short(arg + 1, &tmp);
>> + if(FAILED(hres))
>> + return hres;
>> + str[0] = (char)tmp;
>> + break;
>> + }
>>
> You only need first character, right? Then why do you need a full BSTR
> pointer in VT_BSTR case? And assigning it
> to 'str' you leak a previously allocated buffer.
So how do I get the first character of (arg + 1)? How about this: str[0] =
* V_BSTR(arg + 1)
In fact I don't quite understand how SysAllocStringLen work, but I see it
is used in the former function, so I think maybe it is necessary.
> Why cast to (char)tmp?
>
I think the type of str[0] is WCHAR, and tmp is an integer, shouldn't we
make a cast?
>
> + else if(len == 0)
>> + newstr = '\0';
>>
> Same way you're losing pointer to allocated buffer.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20141020/cd48649d/attachment.html>
More information about the wine-devel
mailing list