mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-25 16:55:43 +01:00
Correctly handle leap year in x509_date_is_valid()
This patch ensures that invalid dates on leap years with 100 or 400 years intervals are handled correctly.
This commit is contained in:
parent
b0f148c0ab
commit
735b37eeef
@ -14,6 +14,9 @@ Bugfix
|
|||||||
* Parse signature algorithm extension when renegotiating. Previously,
|
* Parse signature algorithm extension when renegotiating. Previously,
|
||||||
renegotiated handshakes would only accept signatures using SHA-1
|
renegotiated handshakes would only accept signatures using SHA-1
|
||||||
regardless of the peer's preferences, or fail if SHA-1 was disabled.
|
regardless of the peer's preferences, or fail if SHA-1 was disabled.
|
||||||
|
* Fix leap year calculation in x509_date_is_valid() to ensure that invalid
|
||||||
|
dates on leap years with 100 and 400 intervals are handled correctly. Found
|
||||||
|
by Nicholas Wilson. #694
|
||||||
|
|
||||||
= mbed TLS 2.6.0 branch released 2017-08-10
|
= mbed TLS 2.6.0 branch released 2017-08-10
|
||||||
|
|
||||||
|
@ -496,9 +496,10 @@ static int x509_parse_int( unsigned char **p, size_t n, int *res )
|
|||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int x509_date_is_valid(const mbedtls_x509_time *t)
|
static int x509_date_is_valid(const mbedtls_x509_time *t )
|
||||||
{
|
{
|
||||||
int ret = MBEDTLS_ERR_X509_INVALID_DATE;
|
int ret = MBEDTLS_ERR_X509_INVALID_DATE;
|
||||||
|
int month_len;
|
||||||
|
|
||||||
CHECK_RANGE( 0, 9999, t->year );
|
CHECK_RANGE( 0, 9999, t->year );
|
||||||
CHECK_RANGE( 0, 23, t->hour );
|
CHECK_RANGE( 0, 23, t->hour );
|
||||||
@ -508,17 +509,22 @@ static int x509_date_is_valid(const mbedtls_x509_time *t)
|
|||||||
switch( t->mon )
|
switch( t->mon )
|
||||||
{
|
{
|
||||||
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
|
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
|
||||||
CHECK_RANGE( 1, 31, t->day );
|
month_len = 31;
|
||||||
break;
|
break;
|
||||||
case 4: case 6: case 9: case 11:
|
case 4: case 6: case 9: case 11:
|
||||||
CHECK_RANGE( 1, 30, t->day );
|
month_len = 30;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
CHECK_RANGE( 1, 28 + (t->year % 4 == 0), t->day );
|
if( ( !( t->year % 4 ) && t->year % 100 ) ||
|
||||||
|
!( t->year % 400 ) )
|
||||||
|
month_len = 29;
|
||||||
|
else
|
||||||
|
month_len = 28;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
CHECK_RANGE( 1, month_len, t->day );
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
@ -1670,3 +1670,18 @@ X509 Get time (UTC invalid character in sec)
|
|||||||
depends_on:MBEDTLS_X509_USE_C
|
depends_on:MBEDTLS_X509_USE_C
|
||||||
x509_get_time:MBEDTLS_ASN1_UTC_TIME:"0011302359n0Z":MBEDTLS_ERR_X509_INVALID_DATE:0:0:0:0:0:0
|
x509_get_time:MBEDTLS_ASN1_UTC_TIME:"0011302359n0Z":MBEDTLS_ERR_X509_INVALID_DATE:0:0:0:0:0:0
|
||||||
|
|
||||||
|
X509 Get time (Generalized Time invalid leap year multiple of 4 and 100)
|
||||||
|
depends_on:MBEDTLS_X509_USE_C
|
||||||
|
x509_get_time:MBEDTLS_ASN1_GENERALIZED_TIME:"19000229000000Z":MBEDTLS_ERR_X509_INVALID_DATE:0:0:0:0:0:0
|
||||||
|
|
||||||
|
X509 Get time (Generalized Time year multiple of 4 and not multiple of 100)
|
||||||
|
depends_on:MBEDTLS_X509_USE_C
|
||||||
|
x509_get_time:MBEDTLS_ASN1_GENERALIZED_TIME:"19920229000000Z":0:1992:2:29:0:0:0
|
||||||
|
|
||||||
|
X509 Get time (Generalized Time year multiple of 400)
|
||||||
|
depends_on:MBEDTLS_X509_USE_C
|
||||||
|
x509_get_time:MBEDTLS_ASN1_GENERALIZED_TIME:"20000229000000Z":0:2000:2:29:0:0:0
|
||||||
|
|
||||||
|
X509 Get time (Generalized Time invalid leap year not multiple of 4, 100 or 400)
|
||||||
|
depends_on:MBEDTLS_X509_USE_C
|
||||||
|
x509_get_time:MBEDTLS_ASN1_GENERALIZED_TIME:"19910229000000Z":MBEDTLS_ERR_X509_INVALID_DATE:0:0:0:0:0:0
|
||||||
|
Loading…
Reference in New Issue
Block a user