Module: wine Branch: master Commit: 21246938c4ce4442e9e5ed59efd4fa721b42166a URL: http://source.winehq.org/git/wine.git/?a=commit;h=21246938c4ce4442e9e5ed59ef...
Author: Juan Lang juan.lang@gmail.com Date: Mon Sep 17 17:08:52 2007 -0700
crypt32: 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 @@ static BOOL WINAPI CRYPT_AsnDecodeEnumerated(DWORD dwCertEncodingType, 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; }