Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Unified Diff: net/quic/core/quic_framer.cc

Issue 2842373003: In QUIC v39, read and write integers and floating numbers in big endian. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/core/quic_framer.h ('k') | net/quic/core/quic_framer_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/core/quic_framer.cc
diff --git a/net/quic/core/quic_framer.cc b/net/quic/core/quic_framer.cc
index b08c020f6b256ba3c20f11aaf139a7231efcc02c..7404ebb1624bac5d7c36c8e05ea834d5be008a8a 100644
--- a/net/quic/core/quic_framer.cc
+++ b/net/quic/core/quic_framer.cc
@@ -313,7 +313,7 @@ size_t QuicFramer::BuildDataPacket(const QuicPacketHeader& header,
const QuicFrames& frames,
char* buffer,
size_t packet_length) {
- QuicDataWriter writer(packet_length, buffer, perspective_, HOST_BYTE_ORDER);
+ QuicDataWriter writer(packet_length, buffer, perspective_, endianness());
if (!AppendPacketHeader(header, &writer)) {
QUIC_BUG << "AppendPacketHeader failed";
return 0;
@@ -427,8 +427,10 @@ std::unique_ptr<QuicEncryptedPacket> QuicFramer::BuildPublicResetPacket(
size_t len =
kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID + reset_serialized.length();
std::unique_ptr<char[]> buffer(new char[len]);
+ // Endianness is not a concern here, as writer is not going to write integers
+ // or floating numbers.
QuicDataWriter writer(len, buffer.get(), Perspective::IS_SERVER,
- HOST_BYTE_ORDER);
+ NETWORK_BYTE_ORDER);
uint8_t flags = static_cast<uint8_t>(PACKET_PUBLIC_FLAGS_RST |
PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID);
@@ -458,8 +460,10 @@ std::unique_ptr<QuicEncryptedPacket> QuicFramer::BuildVersionNegotiationPacket(
DCHECK(!versions.empty());
size_t len = GetVersionNegotiationPacketSize(versions.size());
std::unique_ptr<char[]> buffer(new char[len]);
+ // Endianness is not a concern here, version negotiation packet does not have
+ // integers or floating numbers.
QuicDataWriter writer(len, buffer.get(), Perspective::IS_SERVER,
- HOST_BYTE_ORDER);
+ NETWORK_BYTE_ORDER);
uint8_t flags = static_cast<uint8_t>(
PACKET_PUBLIC_FLAGS_VERSION | PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID |
@@ -484,7 +488,7 @@ std::unique_ptr<QuicEncryptedPacket> QuicFramer::BuildVersionNegotiationPacket(
bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) {
QuicDataReader reader(packet.data(), packet.length(), perspective_,
- HOST_BYTE_ORDER);
+ endianness());
visitor_->OnPacket();
@@ -510,6 +514,9 @@ bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) {
}
}
+ // framer's version may change, reset reader's endianness.
+ reader.set_endianness(endianness());
+
bool rv;
if (perspective_ == Perspective::IS_CLIENT && public_header.version_flag) {
rv = ProcessVersionNegotiationPacket(&reader, &public_header);
@@ -573,7 +580,7 @@ bool QuicFramer::ProcessDataPacket(QuicDataReader* encrypted_reader,
}
QuicDataReader reader(decrypted_buffer, decrypted_length, perspective_,
- HOST_BYTE_ORDER);
+ endianness());
// Set the last packet number after we have decrypted the packet
// so we are confident is not attacker controlled.
@@ -2161,4 +2168,8 @@ bool QuicFramer::RaiseError(QuicErrorCode error) {
return false;
}
+Endianness QuicFramer::endianness() const {
+ return quic_version_ > QUIC_VERSION_38 ? NETWORK_BYTE_ORDER : HOST_BYTE_ORDER;
+}
+
} // namespace net
« no previous file with comments | « net/quic/core/quic_framer.h ('k') | net/quic/core/quic_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698