[v2 PATCH] oledb32: Coerce Variant to VT_DATE when converting data

Huw Davies huw at codeweavers.com
Tue Jan 2 02:59:24 CST 2018


On Tue, Jan 02, 2018 at 12:21:03AM +0000, Alistair Leslie-Hughes wrote:
> v2: Correct Parameters passed to VariantChangeType.
> 
> Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
> ---
>  dlls/oledb32/convert.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
> index 267de1b..22609ae 100644
> --- a/dlls/oledb32/convert.c
> +++ b/dlls/oledb32/convert.c
> @@ -475,10 +475,13 @@ static HRESULT WINAPI convert_DataConvert(IDataConvert* iface,
>          }
>          break;
>          case DBTYPE_VARIANT:
> -            if( V_VT((VARIANT*)src) == VT_DATE)
> +        {
> +            VariantInit(&tmp);
> +
> +            if ((hr = VariantChangeType(&tmp, (VARIANT*)src, 0, VT_DATE)) == S_OK)
>              {
>                  SYSTEMTIME st;
> -                hr = (VariantTimeToSystemTime( V_DATE((VARIANT*)src), &st) ? S_OK : E_FAIL);
> +                hr = (VariantTimeToSystemTime( V_DATE(&tmp), &st) ? S_OK : E_FAIL);
>                  d->year = st.wYear;
>                  d->month = st.wMonth;
>                  d->day = st.wDay;
> @@ -489,6 +492,7 @@ static HRESULT WINAPI convert_DataConvert(IDataConvert* iface,
>                  return E_NOTIMPL;
>              }
>              break;
> +        }
>          default: FIXME("Unimplemented conversion %04x -> DBDATE\n", src_type); return  E_NOTIMPL;
>          }
>          break;

Adding a test of say a VT_R8 variant -> DBDATE would be nice.

Huw.



More information about the wine-devel mailing list