Переглянути джерело

Ignore negative metadata size in extended handshake

Tatsuhiro Tsujikawa 11 роки тому
батько
коміт
4c2ad69a75
1 змінених файлів з 9 додано та 3 видалено
  1. 9 3
      src/HandshakeExtensionMessage.cc

+ 9 - 3
src/HandshakeExtensionMessage.cc

@@ -199,9 +199,15 @@ HandshakeExtensionMessage::create(const unsigned char* data, size_t length)
     }
   }
   const Integer* metadataSize = downcast<Integer>(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;
 }