소스 검색

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;
 }