From a31d17fb0dbce3a26d1b6fca425ef06bab7b28a5 Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Mon, 17 Sep 2007 17:08:52 -0700 Subject: [PATCH] Don't use exception handler when decoding time zone, caller already does --- dlls/crypt32/decode.c | 72 +++++++++++++++++++++---------------------------- 1 files changed, 31 insertions(+), 41 deletions(-) diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index e96757f..77265c3 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -3443,65 +3443,55 @@ #define CRYPT_TIME_GET_DIGITS(pbEncoded, static BOOL CRYPT_AsnDecodeTimeZone(const BYTE *pbEncoded, DWORD len, SYSTEMTIME *sysTime) { - BOOL ret; + BOOL ret = TRUE; - __TRY + if (len >= 3 && (*pbEncoded == '+' || *pbEncoded == '-')) { - ret = TRUE; - if (len >= 3 && (*pbEncoded == '+' || *pbEncoded == '-')) - { - WORD hours, minutes = 0; - BYTE sign = *pbEncoded++; + WORD hours, minutes = 0; + BYTE sign = *pbEncoded++; - len--; - CRYPT_TIME_GET_DIGITS(pbEncoded, len, 2, hours); - if (ret && hours >= 24) + len--; + CRYPT_TIME_GET_DIGITS(pbEncoded, len, 2, hours); + if (ret && hours >= 24) + { + SetLastError(CRYPT_E_ASN1_CORRUPT); + ret = FALSE; + } + else if (len >= 2) + { + CRYPT_TIME_GET_DIGITS(pbEncoded, len, 2, minutes); + if (ret && minutes >= 60) { SetLastError(CRYPT_E_ASN1_CORRUPT); ret = FALSE; } - else if (len >= 2) + } + if (ret) + { + if (sign == '+') { - CRYPT_TIME_GET_DIGITS(pbEncoded, len, 2, minutes); - if (ret && minutes >= 60) - { - SetLastError(CRYPT_E_ASN1_CORRUPT); - ret = FALSE; - } + sysTime->wHour += hours; + sysTime->wMinute += minutes; } - if (ret) + else { - if (sign == '+') + if (hours > sysTime->wHour) { - sysTime->wHour += hours; - sysTime->wMinute += minutes; + sysTime->wDay--; + sysTime->wHour = 24 - (hours - sysTime->wHour); } else + sysTime->wHour -= hours; + if (minutes > sysTime->wMinute) { - if (hours > sysTime->wHour) - { - sysTime->wDay--; - sysTime->wHour = 24 - (hours - sysTime->wHour); - } - else - sysTime->wHour -= hours; - if (minutes > sysTime->wMinute) - { - sysTime->wHour--; - sysTime->wMinute = 60 - (minutes - sysTime->wMinute); - } - else - sysTime->wMinute -= minutes; + sysTime->wHour--; + sysTime->wMinute = 60 - (minutes - sysTime->wMinute); } + else + sysTime->wMinute -= minutes; } } } - __EXCEPT_PAGE_FAULT - { - SetLastError(STATUS_ACCESS_VIOLATION); - ret = FALSE; - } - __ENDTRY return ret; } -- 1.4.1