Juan Lang : crypt32: Don't use exception handler when decoding time zone, caller already does.
Alexandre Julliard
julliard at winehq.org
Tue Sep 18 05:31:27 CDT 2007
Module: wine
Branch: master
Commit: 21246938c4ce4442e9e5ed59efd4fa721b42166a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=21246938c4ce4442e9e5ed59efd4fa721b42166a
Author: Juan Lang <juan.lang at 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;
}
More information about the wine-cvs
mailing list