Parse unsupported TLS Hello extensions properly

This commit is contained in:
Martin Willi
2010-09-06 15:37:51 +02:00
parent 6cf85b35a4
commit 0f89143b84
+6 -10
View File
@@ -220,29 +220,25 @@ static status_t process_client_hello(private_tls_server_t *this,
extensions = tls_reader_create(ext); extensions = tls_reader_create(ext);
while (extensions->remaining(extensions)) while (extensions->remaining(extensions))
{ {
if (!extensions->read_uint16(extensions, &extension)) if (!extensions->read_uint16(extensions, &extension) ||
!extensions->read_data16(extensions, &ext))
{ {
DBG1(DBG_TLS, "received invalid ClientHello Extensions"); DBG1(DBG_TLS, "received invalid ClientHello Extensions");
this->alert->add(this->alert, TLS_FATAL, TLS_DECODE_ERROR); this->alert->add(this->alert, TLS_FATAL, TLS_DECODE_ERROR);
extensions->destroy(extensions); extensions->destroy(extensions);
return NEED_MORE; return NEED_MORE;
} }
DBG1(DBG_TLS, "received TLS %N extension", DBG1(DBG_TLS, "received TLS '%N' extension",
tls_extension_names, extension); tls_extension_names, extension);
DBG3(DBG_TLS, "%B", &ext);
switch (extension) switch (extension)
{ {
case TLS_EXT_SIGNATURE_ALGORITHMS: case TLS_EXT_SIGNATURE_ALGORITHMS:
if (extensions->read_data16(extensions, &ext)) this->hashsig = chunk_clone(ext);
{
this->hashsig = chunk_clone(ext);
}
break; break;
case TLS_EXT_ELLIPTIC_CURVES: case TLS_EXT_ELLIPTIC_CURVES:
this->curves_received = TRUE; this->curves_received = TRUE;
if (extensions->read_data16(extensions, &ext)) this->curves = chunk_clone(ext);
{
this->curves = chunk_clone(ext);
}
break; break;
default: default:
break; break;