Browse Source

Ignore negative metadata size in extended handshake

Tatsuhiro Tsujikawa 11 years ago
parent
commit
4c2ad69a75
1 changed files with 9 additions and 3 deletions
  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"));
   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;
   return msg;
 }
 }