diff --git a/quic/core/http/http_decoder.cc b/quic/core/http/http_decoder.cc
index e105fc6..1a89324 100644
--- a/quic/core/http/http_decoder.cc
+++ b/quic/core/http/http_decoder.cc
@@ -124,8 +124,8 @@
   }
 
   if (current_frame_length_ > MaxFrameLength(current_frame_type_)) {
-    // TODO(bnc): Signal HTTP_EXCESSIVE_LOAD or similar to peer.
-    RaiseError(QUIC_INTERNAL_ERROR, "Frame is too large");
+    // TODO(b/124216424): Use HTTP_EXCESSIVE_LOAD.
+    RaiseError(QUIC_INVALID_FRAME_DATA, "Frame is too large");
     return false;
   }
 
@@ -220,7 +220,8 @@
         QuicByteCount push_id_length = reader->PeekVarInt62Length();
         // TODO(rch): Handle partial delivery of this field.
         if (!reader->ReadVarInt62(&push_id)) {
-          RaiseError(QUIC_INTERNAL_ERROR, "Unable to read push_id");
+          // TODO(b/124216424): Use HTTP_MALFORMED_FRAME.
+          RaiseError(QUIC_INVALID_FRAME_DATA, "Unable to read push_id");
           return false;
         }
         remaining_frame_length_ -= bytes_remaining - reader->BytesRemaining();
@@ -309,7 +310,8 @@
       CancelPushFrame frame;
       QuicDataReader reader(buffer_.data(), current_frame_length_);
       if (!reader.ReadVarInt62(&frame.push_id)) {
-        RaiseError(QUIC_INTERNAL_ERROR, "Unable to read push_id");
+        // TODO(b/124216424): Use HTTP_MALFORMED_FRAME.
+        RaiseError(QUIC_INVALID_FRAME_DATA, "Unable to read push_id");
         return false;
       }
       continue_processing = visitor_->OnCancelPushFrame(frame);
@@ -338,7 +340,8 @@
                     "QuicStreamId from uint32_t to uint64_t.");
       uint64_t stream_id;
       if (!reader.ReadVarInt62(&stream_id)) {
-        RaiseError(QUIC_INTERNAL_ERROR, "Unable to read GOAWAY stream_id");
+        // TODO(b/124216424): Use HTTP_MALFORMED_FRAME.
+        RaiseError(QUIC_INVALID_FRAME_DATA, "Unable to read GOAWAY stream_id");
         return false;
       }
       frame.stream_id = static_cast<QuicStreamId>(stream_id);
@@ -350,7 +353,8 @@
       QuicDataReader reader(buffer_.data(), current_frame_length_);
       MaxPushIdFrame frame;
       if (!reader.ReadVarInt62(&frame.push_id)) {
-        RaiseError(QUIC_INTERNAL_ERROR, "Unable to read push_id");
+        // TODO(b/124216424): Use HTTP_MALFORMED_FRAME.
+        RaiseError(QUIC_INVALID_FRAME_DATA, "Unable to read push_id");
         return false;
       }
       continue_processing = visitor_->OnMaxPushIdFrame(frame);
@@ -361,7 +365,8 @@
       QuicDataReader reader(buffer_.data(), current_frame_length_);
       DuplicatePushFrame frame;
       if (!reader.ReadVarInt62(&frame.push_id)) {
-        RaiseError(QUIC_INTERNAL_ERROR, "Unable to read push_id");
+        // TODO(b/124216424): Use HTTP_MALFORMED_FRAME.
+        RaiseError(QUIC_INVALID_FRAME_DATA, "Unable to read push_id");
         return false;
       }
       continue_processing = visitor_->OnDuplicatePushFrame(frame);
@@ -494,13 +499,16 @@
     // TODO(bnc): Handle partial delivery of both fields.
     uint64_t id;
     if (!reader->ReadVarInt62(&id)) {
-      RaiseError(QUIC_INTERNAL_ERROR,
+      // TODO(b/124216424): Use HTTP_MALFORMED_FRAME.
+      RaiseError(QUIC_INVALID_FRAME_DATA,
                  "Unable to read settings frame identifier");
       return false;
     }
     uint64_t content;
     if (!reader->ReadVarInt62(&content)) {
-      RaiseError(QUIC_INTERNAL_ERROR, "Unable to read settings frame content");
+      // TODO(b/124216424): Use HTTP_MALFORMED_FRAME.
+      RaiseError(QUIC_INVALID_FRAME_DATA,
+                 "Unable to read settings frame content");
       return false;
     }
     frame->values[id] = content;
diff --git a/quic/core/http/http_decoder_test.cc b/quic/core/http/http_decoder_test.cc
index 7cbe949..313af62 100644
--- a/quic/core/http/http_decoder_test.cc
+++ b/quic/core/http/http_decoder_test.cc
@@ -491,7 +491,7 @@
     QuicByteCount processed_bytes =
         decoder.ProcessInput(input.data(), input.size());
     EXPECT_EQ(input.size(), processed_bytes);
-    EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder.error());
+    EXPECT_EQ(QUIC_INVALID_FRAME_DATA, decoder.error());
     EXPECT_EQ(test_data.error_message, decoder.error_detail());
   }
 }
@@ -775,7 +775,7 @@
   // Process the full frame.
   EXPECT_CALL(visitor_, OnError(&decoder_));
   EXPECT_EQ(2u, ProcessInput(input));
-  EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder_.error());
+  EXPECT_EQ(QUIC_INVALID_FRAME_DATA, decoder_.error());
   EXPECT_EQ("Frame is too large", decoder_.error_detail());
 }
 
@@ -790,7 +790,7 @@
   writer.WriteStringPiece("Malformed payload");
   EXPECT_CALL(visitor_, OnError(&decoder_));
   EXPECT_EQ(5u, decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input)));
-  EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder_.error());
+  EXPECT_EQ(QUIC_INVALID_FRAME_DATA, decoder_.error());
   EXPECT_EQ("Frame is too large", decoder_.error_detail());
 }
 
@@ -861,7 +861,7 @@
 
       QuicStringPiece input(test_data.input);
       decoder.ProcessInput(input.data(), input.size());
-      EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder.error());
+      EXPECT_EQ(QUIC_INVALID_FRAME_DATA, decoder.error());
       EXPECT_EQ(test_data.error_message, decoder.error_detail());
     }
     {
@@ -872,7 +872,7 @@
       for (auto c : input) {
         decoder.ProcessInput(&c, 1);
       }
-      EXPECT_EQ(QUIC_INTERNAL_ERROR, decoder.error());
+      EXPECT_EQ(QUIC_INVALID_FRAME_DATA, decoder.error());
       EXPECT_EQ(test_data.error_message, decoder.error_detail());
     }
   }
