On 07/18/14 04:11, Shuai Meng wrote:



2014-07-17 11:11 GMT+08:00 Dmitry Timoshkov <dmitry@baikal.ru>:
Shuai Meng <mengshuaicalendr@gmail.com> wrote:

> +        switch(V_VT(arg)) {
> +        case VT_UI1:
> +        case VT_I2:
> +        case VT_I4:
> +        case VT_I8:
> +        case VT_R4:
> +        case VT_R8:
> +        case VT_BOOL:
> +        case VT_EMPTY:
> +        case VT_CY:
> +            V_BOOL(res) = VARIANT_TRUE;
> +            break;

This list is far from being complete. It seems that it should also
contain at least VT_UI2, VT_UI4, VT_UI8, VT_I1, VT_INT, VT_UINT.
VT_VECTOR, VT_ARRAY and VT_BYREF modifers probably also should be
taken into account.

--
Dmitry.
Hi, I think over it again. Let's face the fact: what are all the possible results of  switch(V_VT(arg)) ? Will VT_UI2, VT_UI4, VT_UI8, VT_I1, VT_INT, VT_UINT and so on exist? My answer is no. arg comes from users' input, which means it only belongs to the  subtypes of variant, see here:

No, your answer is wrong. VBScript code may be called from non-VBScript (and the other way around) and then any type of VARIANT may be passed around. Also, please add a test with an object having default value, which is of numeric type. I have a feeling that the right thing to do here is to call to_double and see if it fails or not, but this needs tests to confirm.

Jacek