This is an automated email from the ASF dual-hosted git repository.

masaori pushed a commit to branch quic-latest
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/quic-latest by this push:
     new f57ac7c  Fix Version Negotiation Packet handling
f57ac7c is described below

commit f57ac7ce13f259f3231b75e0452ce543ec6a4258
Author: Masaori Koshiba <[email protected]>
AuthorDate: Fri Jun 22 09:32:13 2018 +0900

    Fix Version Negotiation Packet handling
---
 iocore/net/quic/QUICPacket.cc             |  6 ++++++
 iocore/net/quic/QUICPacketReceiveQueue.cc | 11 +++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/iocore/net/quic/QUICPacket.cc b/iocore/net/quic/QUICPacket.cc
index bf738bb..67f9fa3 100644
--- a/iocore/net/quic/QUICPacket.cc
+++ b/iocore/net/quic/QUICPacket.cc
@@ -804,6 +804,12 @@ QUICPacket::unprotect_packet_number(uint8_t *packet, 
size_t packet_len, QUICPack
   QUICKeyPhase phase;
 
   if (QUICInvariants::is_long_header(packet)) {
+#ifdef DEBUG
+    QUICVersion version;
+    QUICPacketLongHeader::version(version, packet, packet_len);
+    ink_assert(version != 0x0);
+#endif
+
     QUICPacketType type;
     QUICPacketLongHeader::type(type, packet, packet_len);
     switch (type) {
diff --git a/iocore/net/quic/QUICPacketReceiveQueue.cc 
b/iocore/net/quic/QUICPacketReceiveQueue.cc
index fcb3184..e7b2e01 100644
--- a/iocore/net/quic/QUICPacketReceiveQueue.cc
+++ b/iocore/net/quic/QUICPacketReceiveQueue.cc
@@ -90,8 +90,9 @@ QUICPacketReceiveQueue::dequeue(QUICPacketCreationResult 
&result)
     }
   }
 
-  ats_unique_buf pkt = {nullptr, [](void *p) { ats_free(p); }};
-  size_t pkt_len     = 0;
+  ats_unique_buf pkt     = {nullptr, [](void *p) { ats_free(p); }};
+  size_t pkt_len         = 0;
+  bool has_packet_number = true;
 
   if (QUICInvariants::is_long_header(this->_payload.get())) {
     uint8_t *buf         = this->_payload.get() + this->_offset;
@@ -101,7 +102,8 @@ QUICPacketReceiveQueue::dequeue(QUICPacketCreationResult 
&result)
       QUICVersion version;
       QUICPacketLongHeader::version(version, buf, remaining_len);
       if (is_vn(version)) {
-        pkt_len = remaining_len;
+        has_packet_number = false;
+        pkt_len           = remaining_len;
       } else if (!QUICTypeUtil::is_supported_version(version)) {
         result  = QUICPacketCreationResult::UNSUPPORTED;
         pkt_len = remaining_len;
@@ -138,7 +140,8 @@ QUICPacketReceiveQueue::dequeue(QUICPacketCreationResult 
&result)
     this->_offset      = 0;
   }
 
-  if (QUICPacket::unprotect_packet_number(pkt.get(), pkt_len, 
&this->_pn_protector)) {
+  // VN doesn't have Packet Number field
+  if (!has_packet_number || QUICPacket::unprotect_packet_number(pkt.get(), 
pkt_len, &this->_pn_protector)) {
     quic_packet = this->_packet_factory.create(this->_from, std::move(pkt), 
pkt_len, this->_largest_received_packet_number, result);
   } else {
     result = QUICPacketCreationResult::FAILED;

Reply via email to