make more strict
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@18607 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -35,8 +35,6 @@
|
||||
|
||||
RCSID("$Id$");
|
||||
|
||||
#ifndef HAVE_TIMEGM
|
||||
|
||||
static int
|
||||
is_leap(unsigned y)
|
||||
{
|
||||
@@ -44,6 +42,12 @@ is_leap(unsigned y)
|
||||
return (y % 4) == 0 && ((y % 100) != 0 || (y % 400) == 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is a simplifed version of _der_timegm that doesn't accept out
|
||||
* of bound values that timegm(3) normally accepts but those are not
|
||||
* valid in asn1 encodings.
|
||||
*/
|
||||
|
||||
time_t
|
||||
_der_timegm (struct tm *tm)
|
||||
{
|
||||
@@ -53,10 +57,18 @@ _der_timegm (struct tm *tm)
|
||||
time_t res = 0;
|
||||
unsigned i;
|
||||
|
||||
/* XXX this is wrong, needs to handle out of range
|
||||
* months, days, hours, min, sec */
|
||||
if (tm->tm_year < 0)
|
||||
return -1;
|
||||
if (tm->tm_mon < 0 || tm->tm_mon > 11)
|
||||
return -1;
|
||||
if (tm->tm_mday < 1 || tm->tm_mday > ndays[is_leap(tm->tm_year)][tm->tm_mon])
|
||||
return -1;
|
||||
if (tm->tm_hour < 0 || tm->tm_hour > 23)
|
||||
return -1;
|
||||
if (tm->tm_min < 0 || tm->tm_min > 59)
|
||||
return -1;
|
||||
if (tm->tm_sec < 0 || tm->tm_sec > 59)
|
||||
return -1;
|
||||
|
||||
for (i = 70; i < tm->tm_year; ++i)
|
||||
res += is_leap(i) ? 366 : 365;
|
||||
@@ -72,5 +84,3 @@ _der_timegm (struct tm *tm)
|
||||
res += tm->tm_sec;
|
||||
return res;
|
||||
}
|
||||
|
||||
#endif /* HAVE_TIMEGM */
|
||||
|
Reference in New Issue
Block a user