diff --git a/quiche/oblivious_http/oblivious_http_client.cc b/quiche/oblivious_http/oblivious_http_client.cc
index 49a8ade..197c0d7 100644
--- a/quiche/oblivious_http/oblivious_http_client.cc
+++ b/quiche/oblivious_http/oblivious_http_client.cc
@@ -224,6 +224,9 @@
 
 absl::Status ChunkedObliviousHttpClient::DecryptResponseCheckpoint(
     absl::string_view& response_checkpoint, bool end_stream) {
+  if (chunk_handler_ == nullptr) {
+    return absl::InternalError("Chunk handler is null.");
+  }
   QuicheDataReader reader(response_checkpoint);
   switch (response_current_section_) {
     case ResponseMessageSection::kEnd:
@@ -293,13 +296,12 @@
                   response_chunk_counter.GetChunkNonce(), is_final_chunk));
 
           response_chunk_counter.Increment();
-          if (chunk_handler_ == nullptr) {
-            return absl::InternalError("Chunk handler is null.");
-          }
           absl::Status handler_status =
               chunk_handler_->OnDecryptedChunk(decrypted_chunk);
           if (!handler_status.ok()) {
-            return handler_status;
+            return absl::InternalError(absl::StrCat(
+                "Chunk handler failed to process decrypted chunk: ",
+                handler_status.message()));
           }
         }
 
@@ -331,17 +333,18 @@
               response_chunk_counter.GetChunkNonce(),
               /*is_final_chunk=*/true));
 
-      if (chunk_handler_ == nullptr) {
-        return absl::InternalError("Chunk handler is null.");
-      }
       absl::Status handler_status =
           chunk_handler_->OnDecryptedChunk(decrypted_chunk);
       if (!handler_status.ok()) {
-        return handler_status;
+        return absl::InternalError(
+            absl::StrCat("Chunk handler failed to process decrypted chunk: ",
+                         handler_status.message()));
       }
       handler_status = chunk_handler_->OnChunksDone();
       if (!handler_status.ok()) {
-        return handler_status;
+        return absl::InternalError(
+            absl::StrCat("Chunk handler failed to process chunks done: ",
+                         handler_status.message()));
       }
       return absl::OkStatus();
     }
diff --git a/quiche/oblivious_http/oblivious_http_client_test.cc b/quiche/oblivious_http/oblivious_http_client_test.cc
index ecb6cbf..0b4fab1 100644
--- a/quiche/oblivious_http/oblivious_http_client_test.cc
+++ b/quiche/oblivious_http/oblivious_http_client_test.cc
@@ -47,7 +47,7 @@
           "OnDecryptedChunk called after OnChunksDone.");
     }
     if (fail_on_decrypted_chunk_) {
-      return absl::InternalError("Failed to decrypt chunk.");
+      return absl::OutOfRangeError("Some custom supplied error.");
     }
     decrypted_chunks_.push_back(std::string(decrypted_chunk));
     return absl::OkStatus();
@@ -59,7 +59,7 @@
           "OnChunksDone called more than once.");
     }
     if (fail_on_chunks_done_) {
-      return absl::InternalError("Failed to handle chunks done.");
+      return absl::OutOfRangeError("Some custom supplied error.");
     }
     on_chunks_done_called_ = true;
     return absl::OkStatus();
diff --git a/quiche/oblivious_http/oblivious_http_gateway.cc b/quiche/oblivious_http/oblivious_http_gateway.cc
index 1d3b335..8480a5f 100644
--- a/quiche/oblivious_http/oblivious_http_gateway.cc
+++ b/quiche/oblivious_http/oblivious_http_gateway.cc
@@ -171,8 +171,13 @@
                                   ObliviousHttpRequest::DecryptChunk(
                                       *oblivious_http_request_context_, chunk,
                                       /*is_final_chunk=*/false));
-          QUICHE_RETURN_IF_ERROR(
-              chunk_handler_.OnDecryptedChunk(decrypted_chunk));
+          absl::Status handler_status =
+              chunk_handler_.OnDecryptedChunk(decrypted_chunk);
+          if (!handler_status.ok()) {
+            return absl::InternalError(absl::StrCat(
+                "Chunk handler failed to process decrypted chunk: ",
+                handler_status.message()));
+          }
         }
 
         SaveCheckpoint(reader);
@@ -194,8 +199,19 @@
           ObliviousHttpRequest::DecryptChunk(*oblivious_http_request_context_,
                                              reader.PeekRemainingPayload(),
                                              /*is_final_chunk=*/true));
-      QUICHE_RETURN_IF_ERROR(chunk_handler_.OnDecryptedChunk(decrypted_chunk));
-      QUICHE_RETURN_IF_ERROR(chunk_handler_.OnChunksDone());
+      absl::Status handler_status =
+          chunk_handler_.OnDecryptedChunk(decrypted_chunk);
+      if (!handler_status.ok()) {
+        return absl::InternalError(
+            absl::StrCat("Chunk handler failed to process decrypted chunk: ",
+                         handler_status.message()));
+      }
+      handler_status = chunk_handler_.OnChunksDone();
+      if (!handler_status.ok()) {
+        return absl::InternalError(
+            absl::StrCat("Chunk handler failed to process chunks done: ",
+                         handler_status.message()));
+      }
     }
   }
   return absl::OkStatus();
diff --git a/quiche/oblivious_http/oblivious_http_gateway_test.cc b/quiche/oblivious_http/oblivious_http_gateway_test.cc
index 5736011..731ccf7 100644
--- a/quiche/oblivious_http/oblivious_http_gateway_test.cc
+++ b/quiche/oblivious_http/oblivious_http_gateway_test.cc
@@ -233,14 +233,15 @@
             absl::StatusCode::kInvalidArgument);
 }
 
-TEST(ChunkedObliviousHttpGateway, ChunkHandlerOnChunkErrorPropagates) {
+TEST(ChunkedObliviousHttpGateway,
+     ChunkHandlerOnChunkErrorPropagatesAsInternalError) {
   class FailingChunkHandler : public ObliviousHttpChunkHandler {
    public:
     FailingChunkHandler() = default;
     ~FailingChunkHandler() override = default;
     absl::Status OnDecryptedChunk(
         absl::string_view /*decrypted_chunk*/) override {
-      return absl::InvalidArgumentError("Invalid data");
+      return absl::OutOfRangeError("Some custom supplied error");
     }
     absl::Status OnChunksDone() override {
       return absl::InvalidArgumentError("Invalid data");
@@ -254,10 +255,11 @@
                                      &encapsulated_request_bytes));
 
   EXPECT_EQ(instance->DecryptRequest(encapsulated_request_bytes, true).code(),
-            absl::StatusCode::kInvalidArgument);
+            absl::StatusCode::kInternal);
 }
 
-TEST(ChunkedObliviousHttpGateway, ChunkHandlerOnChunksDoneErrorPropagates) {
+TEST(ChunkedObliviousHttpGateway,
+     ChunkHandlerOnChunksDoneErrorPropagatesAsInternalError) {
   class FailingChunkHandler : public ObliviousHttpChunkHandler {
    public:
     FailingChunkHandler() = default;
@@ -267,7 +269,7 @@
       return absl::OkStatus();
     }
     absl::Status OnChunksDone() override {
-      return absl::InvalidArgumentError("Invalid data");
+      return absl::OutOfRangeError("Some custom supplied error");
     }
   };
   FailingChunkHandler chunk_handler;
@@ -278,7 +280,7 @@
                                      &encapsulated_request_bytes));
 
   EXPECT_EQ(instance->DecryptRequest(encapsulated_request_bytes, true).code(),
-            absl::StatusCode::kInvalidArgument);
+            absl::StatusCode::kInternal);
 }
 
 TEST(ObliviousHttpGateway, TestDecryptingMultipleRequestsWithSingleInstance) {
