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;