Skip to content

Commit acf13f8

Browse files
author
Harald Radi
committed
catch date conversion errors
1 parent 3d0ab12 commit acf13f8

File tree

2 files changed

+34
-24
lines changed

2 files changed

+34
-24
lines changed

ext/com/conversion.c

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -614,27 +614,32 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS
614614
break;
615615

616616
case VT_DATE: {
617+
BOOL success;
617618
SYSTEMTIME wintime;
618619
struct tm phptime;
619620

620621
if (V_ISBYREF(var_arg)) {
621-
VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime);
622+
success = VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime);
622623
} else {
623-
VariantTimeToSystemTime(V_DATE(var_arg), &wintime);
624+
success = VariantTimeToSystemTime(V_DATE(var_arg), &wintime);
624625
}
625626

626-
memset(&phptime, 0, sizeof(phptime));
627+
if (success) {
628+
memset(&phptime, 0, sizeof(phptime));
627629

628-
phptime.tm_year = wintime.wYear - 1900;
629-
phptime.tm_mon = wintime.wMonth - 1;
630-
phptime.tm_mday = wintime.wDay;
631-
phptime.tm_hour = wintime.wHour;
632-
phptime.tm_min = wintime.wMinute;
633-
phptime.tm_sec = wintime.wSecond;
634-
phptime.tm_isdst = -1;
630+
phptime.tm_year = wintime.wYear - 1900;
631+
phptime.tm_mon = wintime.wMonth - 1;
632+
phptime.tm_mday = wintime.wDay;
633+
phptime.tm_hour = wintime.wHour;
634+
phptime.tm_min = wintime.wMinute;
635+
phptime.tm_sec = wintime.wSecond;
636+
phptime.tm_isdst = -1;
635637

636-
tzset();
637-
ZVAL_LONG(pval_arg, mktime(&phptime));
638+
tzset();
639+
ZVAL_LONG(pval_arg, mktime(&phptime));
640+
} else {
641+
ret = FAILURE;
642+
}
638643
}
639644
break;
640645

ext/rpc/com/conversion.c

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -614,27 +614,32 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS
614614
break;
615615

616616
case VT_DATE: {
617+
BOOL success;
617618
SYSTEMTIME wintime;
618619
struct tm phptime;
619620

620621
if (V_ISBYREF(var_arg)) {
621-
VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime);
622+
success = VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime);
622623
} else {
623-
VariantTimeToSystemTime(V_DATE(var_arg), &wintime);
624+
success = VariantTimeToSystemTime(V_DATE(var_arg), &wintime);
624625
}
625626

626-
memset(&phptime, 0, sizeof(phptime));
627+
if (success) {
628+
memset(&phptime, 0, sizeof(phptime));
627629

628-
phptime.tm_year = wintime.wYear - 1900;
629-
phptime.tm_mon = wintime.wMonth - 1;
630-
phptime.tm_mday = wintime.wDay;
631-
phptime.tm_hour = wintime.wHour;
632-
phptime.tm_min = wintime.wMinute;
633-
phptime.tm_sec = wintime.wSecond;
634-
phptime.tm_isdst = -1;
630+
phptime.tm_year = wintime.wYear - 1900;
631+
phptime.tm_mon = wintime.wMonth - 1;
632+
phptime.tm_mday = wintime.wDay;
633+
phptime.tm_hour = wintime.wHour;
634+
phptime.tm_min = wintime.wMinute;
635+
phptime.tm_sec = wintime.wSecond;
636+
phptime.tm_isdst = -1;
635637

636-
tzset();
637-
ZVAL_LONG(pval_arg, mktime(&phptime));
638+
tzset();
639+
ZVAL_LONG(pval_arg, mktime(&phptime));
640+
} else {
641+
ret = FAILURE;
642+
}
638643
}
639644
break;
640645

0 commit comments

Comments
 (0)