Index: net/quic/quic_framer.cc |
diff --git a/net/quic/quic_framer.cc b/net/quic/quic_framer.cc |
index da91cfca96cd49b0a7378613fe52d07d7d922a39..1dd0064570b6edccdbd930e8ddf5a997dee0a311 100644 |
--- a/net/quic/quic_framer.cc |
+++ b/net/quic/quic_framer.cc |
@@ -4,7 +4,8 @@ |
#include "net/quic/quic_framer.h" |
-#include <stdint.h> |
+#include <cstdint> |
+#include <memory> |
#include "base/compiler_specific.h" |
#include "base/logging.h" |
@@ -1494,8 +1495,13 @@ bool QuicFramer::ProcessRstStreamFrame(QuicDataReader* reader, |
} |
if (error_code >= QUIC_STREAM_LAST_ERROR) { |
- set_detailed_error("Invalid rst stream error code."); |
- return false; |
+ if (FLAGS_quic_ignore_invalid_error_code) { |
+ // Ignore invalid stream error code if any. |
+ error_code = QUIC_STREAM_LAST_ERROR; |
+ } else { |
+ set_detailed_error("Invalid rst stream error code."); |
+ return false; |
+ } |
} |
frame->error_code = static_cast<QuicRstStreamErrorCode>(error_code); |
@@ -1511,8 +1517,13 @@ bool QuicFramer::ProcessConnectionCloseFrame(QuicDataReader* reader, |
} |
if (error_code >= QUIC_LAST_ERROR) { |
- set_detailed_error("Invalid error code."); |
- return false; |
+ if (FLAGS_quic_ignore_invalid_error_code) { |
+ // Ignore invalid QUIC error code if any. |
+ error_code = QUIC_LAST_ERROR; |
+ } else { |
+ set_detailed_error("Invalid error code."); |
+ return false; |
+ } |
} |
frame->error_code = static_cast<QuicErrorCode>(error_code); |
@@ -1534,12 +1545,17 @@ bool QuicFramer::ProcessGoAwayFrame(QuicDataReader* reader, |
set_detailed_error("Unable to read go away error code."); |
return false; |
} |
- frame->error_code = static_cast<QuicErrorCode>(error_code); |
if (error_code >= QUIC_LAST_ERROR) { |
- set_detailed_error("Invalid error code."); |
- return false; |
+ if (FLAGS_quic_ignore_invalid_error_code) { |
+ // Ignore invalid QUIC error code if any. |
+ error_code = QUIC_LAST_ERROR; |
+ } else { |
+ set_detailed_error("Invalid error code."); |
+ return false; |
+ } |
} |
+ frame->error_code = static_cast<QuicErrorCode>(error_code); |
uint32_t stream_id; |
if (!reader->ReadUInt32(&stream_id)) { |