]> granicus.if.org Git - php/commitdiff
catch date conversion errors
authorHarald Radi <phanto@php.net>
Mon, 20 Aug 2001 08:53:18 +0000 (08:53 +0000)
committerHarald Radi <phanto@php.net>
Mon, 20 Aug 2001 08:53:18 +0000 (08:53 +0000)
ext/com/conversion.c
ext/rpc/com/conversion.c

index 87250943b58c7a588dbb006453d9c9b7940750a0..a6b79f5350957a6e81459ed8394c6fb313d8218f 100644 (file)
@@ -614,27 +614,32 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS
                        break;
 
                case VT_DATE: {
+                               BOOL success;
                                SYSTEMTIME wintime;
                                struct tm phptime;
 
                                if (V_ISBYREF(var_arg)) {
-                                       VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime);
+                                       success = VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime);
                                } else {
-                                       VariantTimeToSystemTime(V_DATE(var_arg), &wintime);
+                                       success = VariantTimeToSystemTime(V_DATE(var_arg), &wintime);
                                }
 
-                               memset(&phptime, 0, sizeof(phptime));
+                               if (success) {
+                                       memset(&phptime, 0, sizeof(phptime));
 
-                               phptime.tm_year  = wintime.wYear - 1900;
-                               phptime.tm_mon   = wintime.wMonth - 1;
-                               phptime.tm_mday  = wintime.wDay;
-                               phptime.tm_hour  = wintime.wHour;
-                               phptime.tm_min   = wintime.wMinute;
-                               phptime.tm_sec   = wintime.wSecond;
-                               phptime.tm_isdst = -1;
+                                       phptime.tm_year  = wintime.wYear - 1900;
+                                       phptime.tm_mon   = wintime.wMonth - 1;
+                                       phptime.tm_mday  = wintime.wDay;
+                                       phptime.tm_hour  = wintime.wHour;
+                                       phptime.tm_min   = wintime.wMinute;
+                                       phptime.tm_sec   = wintime.wSecond;
+                                       phptime.tm_isdst = -1;
 
-                               tzset();
-                               ZVAL_LONG(pval_arg, mktime(&phptime));
+                                       tzset();
+                                       ZVAL_LONG(pval_arg, mktime(&phptime));
+                               } else {
+                                       ret = FAILURE;
+                               }
                        }
                        break;
 
index 87250943b58c7a588dbb006453d9c9b7940750a0..a6b79f5350957a6e81459ed8394c6fb313d8218f 100644 (file)
@@ -614,27 +614,32 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS
                        break;
 
                case VT_DATE: {
+                               BOOL success;
                                SYSTEMTIME wintime;
                                struct tm phptime;
 
                                if (V_ISBYREF(var_arg)) {
-                                       VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime);
+                                       success = VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime);
                                } else {
-                                       VariantTimeToSystemTime(V_DATE(var_arg), &wintime);
+                                       success = VariantTimeToSystemTime(V_DATE(var_arg), &wintime);
                                }
 
-                               memset(&phptime, 0, sizeof(phptime));
+                               if (success) {
+                                       memset(&phptime, 0, sizeof(phptime));
 
-                               phptime.tm_year  = wintime.wYear - 1900;
-                               phptime.tm_mon   = wintime.wMonth - 1;
-                               phptime.tm_mday  = wintime.wDay;
-                               phptime.tm_hour  = wintime.wHour;
-                               phptime.tm_min   = wintime.wMinute;
-                               phptime.tm_sec   = wintime.wSecond;
-                               phptime.tm_isdst = -1;
+                                       phptime.tm_year  = wintime.wYear - 1900;
+                                       phptime.tm_mon   = wintime.wMonth - 1;
+                                       phptime.tm_mday  = wintime.wDay;
+                                       phptime.tm_hour  = wintime.wHour;
+                                       phptime.tm_min   = wintime.wMinute;
+                                       phptime.tm_sec   = wintime.wSecond;
+                                       phptime.tm_isdst = -1;
 
-                               tzset();
-                               ZVAL_LONG(pval_arg, mktime(&phptime));
+                                       tzset();
+                                       ZVAL_LONG(pval_arg, mktime(&phptime));
+                               } else {
+                                       ret = FAILURE;
+                               }
                        }
                        break;