Forbid setting max_frag_len > MAX_CONTENT_LEN
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index 9a1590c..d6be987 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -3119,29 +3119,35 @@
int ssl_set_max_frag_len( ssl_context *ssl, unsigned char mfl_code )
{
+ uint16_t max_frag_len;
+
switch( mfl_code )
{
case SSL_MAX_FRAG_LEN_512:
- ssl->max_frag_len = 512;
+ max_frag_len = 512;
break;
case SSL_MAX_FRAG_LEN_1024:
- ssl->max_frag_len = 1024;
+ max_frag_len = 1024;
break;
case SSL_MAX_FRAG_LEN_2048:
- ssl->max_frag_len = 2048;
+ max_frag_len = 2048;
break;
case SSL_MAX_FRAG_LEN_4096:
- ssl->max_frag_len = 4096;
+ max_frag_len = 4096;
break;
default:
return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
}
+ if( max_frag_len > SSL_MAX_CONTENT_LEN )
+ return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
+
ssl->mfl_code = mfl_code;
+ ssl->max_frag_len = max_frag_len;
return( 0 );
}