diff --git a/src/HandshakeExtensionMessage.cc b/src/HandshakeExtensionMessage.cc index 69d840b1..b94669ba 100644 --- a/src/HandshakeExtensionMessage.cc +++ b/src/HandshakeExtensionMessage.cc @@ -199,9 +199,15 @@ HandshakeExtensionMessage::create(const unsigned char* data, size_t length) } } const Integer* metadataSize = downcast(dict->get("metadata_size")); - // Only accept metadata smaller than 1MiB - if(metadataSize && metadataSize->i() <= 1024*1024) { - msg->metadataSize_ = metadataSize->i(); + + if(metadataSize) { + auto size = metadataSize->i(); + + // Only accept metadata smaller than 1MiB. Be aware that broken + // clinet can send negative size! + if(size > 0 && size <= 1024*1024) { + msg->metadataSize_ = size; + } } return msg; }