Replace deprecated version of absl::HexStringToBytes

Replaces the deprecated version of absl::HexStringToBytes that returns std::string with the version that returns bool and populates a passed in string with the bytes. This CL is not expected to introduce any changes in functionality other than now verifying that absl::HexStringToBytes works successfully.

This allows the Chrome build of the library to build without the `-Wno-deprecated-declarations` clang flag.

PiperOrigin-RevId: 612568046
diff --git a/quiche/common/capsule_test.cc b/quiche/common/capsule_test.cc
index fd07608..c51f816 100644
--- a/quiche/common/capsule_test.cc
+++ b/quiche/common/capsule_test.cc
@@ -73,12 +73,14 @@
 };
 
 TEST_F(CapsuleTest, DatagramCapsule) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "00"                // DATAGRAM capsule type
-      "08"                // capsule length
-      "a1a2a3a4a5a6a7a8"  // HTTP Datagram payload
-  );
-  std::string datagram_payload = absl::HexStringToBytes("a1a2a3a4a5a6a7a8");
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("00"                 // DATAGRAM capsule type
+                             "08"                 // capsule length
+                             "a1a2a3a4a5a6a7a8",  // HTTP Datagram payload
+                             &capsule_fragment));
+  std::string datagram_payload;
+  ASSERT_TRUE(absl::HexStringToBytes("a1a2a3a4a5a6a7a8", &datagram_payload));
   Capsule expected_capsule = Capsule::Datagram(datagram_payload);
   {
     EXPECT_CALL(visitor_, OnCapsule(expected_capsule));
@@ -89,7 +91,8 @@
 }
 
 TEST_F(CapsuleTest, DatagramCapsuleViaHeader) {
-  std::string datagram_payload = absl::HexStringToBytes("a1a2a3a4a5a6a7a8");
+  std::string datagram_payload;
+  ASSERT_TRUE(absl::HexStringToBytes("a1a2a3a4a5a6a7a8", &datagram_payload));
   quiche::QuicheBuffer expected_capsule = SerializeCapsule(
       Capsule::Datagram(datagram_payload), SimpleBufferAllocator::Get());
   quiche::QuicheBuffer actual_header = SerializeDatagramCapsuleHeader(
@@ -99,12 +102,14 @@
 }
 
 TEST_F(CapsuleTest, LegacyDatagramCapsule) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "80ff37a0"          // LEGACY_DATAGRAM capsule type
-      "08"                // capsule length
-      "a1a2a3a4a5a6a7a8"  // HTTP Datagram payload
-  );
-  std::string datagram_payload = absl::HexStringToBytes("a1a2a3a4a5a6a7a8");
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("80ff37a0"  // LEGACY_DATAGRAM capsule type
+                             "08"        // capsule length
+                             "a1a2a3a4a5a6a7a8",  // HTTP Datagram payload
+                             &capsule_fragment));
+  std::string datagram_payload;
+  ASSERT_TRUE(absl::HexStringToBytes("a1a2a3a4a5a6a7a8", &datagram_payload));
   Capsule expected_capsule = Capsule::LegacyDatagram(datagram_payload);
   {
     EXPECT_CALL(visitor_, OnCapsule(expected_capsule));
@@ -115,12 +120,14 @@
 }
 
 TEST_F(CapsuleTest, LegacyDatagramWithoutContextCapsule) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "80ff37a5"          // LEGACY_DATAGRAM_WITHOUT_CONTEXT capsule type
-      "08"                // capsule length
-      "a1a2a3a4a5a6a7a8"  // HTTP Datagram payload
-  );
-  std::string datagram_payload = absl::HexStringToBytes("a1a2a3a4a5a6a7a8");
+  std::string capsule_fragment;
+  ASSERT_TRUE(absl::HexStringToBytes(
+      "80ff37a5"           // LEGACY_DATAGRAM_WITHOUT_CONTEXT capsule type
+      "08"                 // capsule length
+      "a1a2a3a4a5a6a7a8",  // HTTP Datagram payload
+      &capsule_fragment));
+  std::string datagram_payload;
+  ASSERT_TRUE(absl::HexStringToBytes("a1a2a3a4a5a6a7a8", &datagram_payload));
   Capsule expected_capsule =
       Capsule::LegacyDatagramWithoutContext(datagram_payload);
   {
@@ -132,12 +139,13 @@
 }
 
 TEST_F(CapsuleTest, CloseWebTransportStreamCapsule) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "6843"        // CLOSE_WEBTRANSPORT_STREAM capsule type
-      "09"          // capsule length
-      "00001234"    // 0x1234 error code
-      "68656c6c6f"  // "hello" error message
-  );
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("6843"  // CLOSE_WEBTRANSPORT_STREAM capsule type
+                             "09"    // capsule length
+                             "00001234"     // 0x1234 error code
+                             "68656c6c6f",  // "hello" error message
+                             &capsule_fragment));
   Capsule expected_capsule = Capsule::CloseWebTransportSession(
       /*error_code=*/0x1234, /*error_message=*/"hello");
   {
@@ -149,10 +157,11 @@
 }
 
 TEST_F(CapsuleTest, DrainWebTransportStreamCapsule) {
-  std::string capsule_fragment = absl::HexStringToBytes(
+  std::string capsule_fragment;
+  ASSERT_TRUE(absl::HexStringToBytes(
       "800078ae"  // DRAIN_WEBTRANSPORT_STREAM capsule type
-      "00"        // capsule length
-  );
+      "00",       // capsule length
+      &capsule_fragment));
   Capsule expected_capsule = Capsule(DrainWebTransportSessionCapsule());
   {
     EXPECT_CALL(visitor_, OnCapsule(expected_capsule));
@@ -163,7 +172,8 @@
 }
 
 TEST_F(CapsuleTest, AddressAssignCapsule) {
-  std::string capsule_fragment = absl::HexStringToBytes(
+  std::string capsule_fragment;
+  ASSERT_TRUE(absl::HexStringToBytes(
       "9ECA6A00"  // ADDRESS_ASSIGN capsule type
       "1A"        // capsule length = 26
       // first assigned address
@@ -175,8 +185,8 @@
       "01"                                // request ID = 1
       "06"                                // IP version = 6
       "20010db8123456780000000000000000"  // 2001:db8:1234:5678::
-      "40"                                // prefix length = 64
-  );
+      "40",                               // prefix length = 64
+      &capsule_fragment));
   Capsule expected_capsule = Capsule::AddressAssign();
   quiche::QuicheIpAddress ip_address1;
   ip_address1.FromString("192.0.2.42");
@@ -203,7 +213,8 @@
 }
 
 TEST_F(CapsuleTest, AddressRequestCapsule) {
-  std::string capsule_fragment = absl::HexStringToBytes(
+  std::string capsule_fragment;
+  ASSERT_TRUE(absl::HexStringToBytes(
       "9ECA6A01"  // ADDRESS_REQUEST capsule type
       "1A"        // capsule length = 26
       // first requested address
@@ -215,8 +226,8 @@
       "01"                                // request ID = 1
       "06"                                // IP version = 6
       "20010db8123456780000000000000000"  // 2001:db8:1234:5678::
-      "40"                                // prefix length = 64
-  );
+      "40",                               // prefix length = 64
+      &capsule_fragment));
   Capsule expected_capsule = Capsule::AddressRequest();
   quiche::QuicheIpAddress ip_address1;
   ip_address1.FromString("192.0.2.42");
@@ -243,7 +254,8 @@
 }
 
 TEST_F(CapsuleTest, RouteAdvertisementCapsule) {
-  std::string capsule_fragment = absl::HexStringToBytes(
+  std::string capsule_fragment;
+  ASSERT_TRUE(absl::HexStringToBytes(
       "9ECA6A02"  // ROUTE_ADVERTISEMENT capsule type
       "2C"        // capsule length = 44
       // first IP address range
@@ -255,8 +267,8 @@
       "06"                                // IP version = 6
       "00000000000000000000000000000000"  // ::
       "ffffffffffffffffffffffffffffffff"  // all ones IPv6 address
-      "01"                                // ip protocol = 1 (ICMP)
-  );
+      "01",                               // ip protocol = 1 (ICMP)
+      &capsule_fragment));
   Capsule expected_capsule = Capsule::RouteAdvertisement();
   IpAddressRange ip_address_range1;
   ip_address_range1.start_ip_address.FromString("192.0.2.24");
@@ -280,12 +292,13 @@
 }
 
 TEST_F(CapsuleTest, WebTransportStreamData) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "990b4d3b"  // WT_STREAM without FIN
-      "04"        // capsule length
-      "17"        // stream ID
-      "abcdef"    // stream payload
-  );
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("990b4d3b"  // WT_STREAM without FIN
+                             "04"        // capsule length
+                             "17"        // stream ID
+                             "abcdef",   // stream payload
+                             &capsule_fragment));
   Capsule expected_capsule = Capsule(WebTransportStreamDataCapsule());
   expected_capsule.web_transport_stream_data().stream_id = 0x17;
   expected_capsule.web_transport_stream_data().data = "\xab\xcd\xef";
@@ -298,12 +311,13 @@
   TestSerialization(expected_capsule, capsule_fragment);
 }
 TEST_F(CapsuleTest, WebTransportStreamDataHeader) {
-  std::string capsule_fragment = absl::HexStringToBytes(
+  std::string capsule_fragment;
+  ASSERT_TRUE(absl::HexStringToBytes(
       "990b4d3b"  // WT_STREAM without FIN
       "04"        // capsule length
-      "17"        // stream ID
+      "17",       // stream ID
                   // three bytes of stream payload implied below
-  );
+      &capsule_fragment));
   QuicheBufferAllocator* allocator = SimpleBufferAllocator::Get();
   QuicheBuffer capsule_header =
       quiche::SerializeWebTransportStreamCapsuleHeader(0x17, /*fin=*/false, 3,
@@ -311,12 +325,13 @@
   EXPECT_EQ(capsule_header.AsStringView(), capsule_fragment);
 }
 TEST_F(CapsuleTest, WebTransportStreamDataWithFin) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "990b4d3c"  // data with FIN
-      "04"        // capsule length
-      "17"        // stream ID
-      "abcdef"    // stream payload
-  );
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("990b4d3c"  // data with FIN
+                             "04"        // capsule length
+                             "17"        // stream ID
+                             "abcdef",   // stream payload
+                             &capsule_fragment));
   Capsule expected_capsule = Capsule(WebTransportStreamDataCapsule());
   expected_capsule.web_transport_stream_data().stream_id = 0x17;
   expected_capsule.web_transport_stream_data().data = "\xab\xcd\xef";
@@ -330,12 +345,13 @@
 }
 
 TEST_F(CapsuleTest, WebTransportResetStream) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "990b4d39"  // WT_RESET_STREAM
-      "02"        // capsule length
-      "17"        // stream ID
-      "07"        // error code
-  );
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("990b4d39"  // WT_RESET_STREAM
+                             "02"        // capsule length
+                             "17"        // stream ID
+                             "07",       // error code
+                             &capsule_fragment));
   Capsule expected_capsule = Capsule(WebTransportResetStreamCapsule());
   expected_capsule.web_transport_reset_stream().stream_id = 0x17;
   expected_capsule.web_transport_reset_stream().error_code = 0x07;
@@ -348,12 +364,13 @@
 }
 
 TEST_F(CapsuleTest, WebTransportStopSending) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "990b4d3a"  // WT_STOP_SENDING
-      "02"        // capsule length
-      "17"        // stream ID
-      "07"        // error code
-  );
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("990b4d3a"  // WT_STOP_SENDING
+                             "02"        // capsule length
+                             "17"        // stream ID
+                             "07",       // error code
+                             &capsule_fragment));
   Capsule expected_capsule = Capsule(WebTransportStopSendingCapsule());
   expected_capsule.web_transport_stop_sending().stream_id = 0x17;
   expected_capsule.web_transport_stop_sending().error_code = 0x07;
@@ -366,12 +383,13 @@
 }
 
 TEST_F(CapsuleTest, WebTransportMaxStreamData) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "990b4d3e"  // WT_MAX_STREAM_DATA
-      "02"        // capsule length
-      "17"        // stream ID
-      "10"        // max stream data
-  );
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("990b4d3e"  // WT_MAX_STREAM_DATA
+                             "02"        // capsule length
+                             "17"        // stream ID
+                             "10",       // max stream data
+                             &capsule_fragment));
   Capsule expected_capsule = Capsule(WebTransportMaxStreamDataCapsule());
   expected_capsule.web_transport_max_stream_data().stream_id = 0x17;
   expected_capsule.web_transport_max_stream_data().max_stream_data = 0x10;
@@ -384,11 +402,12 @@
 }
 
 TEST_F(CapsuleTest, WebTransportMaxStreamsBi) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "990b4d3f"  // WT_MAX_STREAMS (bidi)
-      "01"        // capsule length
-      "17"        // max streams
-  );
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("990b4d3f"  // WT_MAX_STREAMS (bidi)
+                             "01"        // capsule length
+                             "17",       // max streams
+                             &capsule_fragment));
   Capsule expected_capsule = Capsule(WebTransportMaxStreamsCapsule());
   expected_capsule.web_transport_max_streams().stream_type =
       StreamType::kBidirectional;
@@ -402,11 +421,12 @@
 }
 
 TEST_F(CapsuleTest, WebTransportMaxStreamsUni) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "990b4d40"  // WT_MAX_STREAMS (unidi)
-      "01"        // capsule length
-      "17"        // max streams
-  );
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("990b4d40"  // WT_MAX_STREAMS (unidi)
+                             "01"        // capsule length
+                             "17",       // max streams
+                             &capsule_fragment));
   Capsule expected_capsule = Capsule(WebTransportMaxStreamsCapsule());
   expected_capsule.web_transport_max_streams().stream_type =
       StreamType::kUnidirectional;
@@ -420,12 +440,15 @@
 }
 
 TEST_F(CapsuleTest, UnknownCapsule) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "17"                // unknown capsule type of 0x17
-      "08"                // capsule length
-      "a1a2a3a4a5a6a7a8"  // unknown capsule data
-  );
-  std::string unknown_capsule_data = absl::HexStringToBytes("a1a2a3a4a5a6a7a8");
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("17"  // unknown capsule type of 0x17
+                             "08"  // capsule length
+                             "a1a2a3a4a5a6a7a8",  // unknown capsule data
+                             &capsule_fragment));
+  std::string unknown_capsule_data;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("a1a2a3a4a5a6a7a8", &unknown_capsule_data));
   Capsule expected_capsule = Capsule::Unknown(0x17, unknown_capsule_data);
   {
     EXPECT_CALL(visitor_, OnCapsule(expected_capsule));
@@ -436,16 +459,19 @@
 }
 
 TEST_F(CapsuleTest, TwoCapsules) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "00"                // DATAGRAM capsule type
-      "08"                // capsule length
-      "a1a2a3a4a5a6a7a8"  // HTTP Datagram payload
-      "00"                // DATAGRAM capsule type
-      "08"                // capsule length
-      "b1b2b3b4b5b6b7b8"  // HTTP Datagram payload
-  );
-  std::string datagram_payload1 = absl::HexStringToBytes("a1a2a3a4a5a6a7a8");
-  std::string datagram_payload2 = absl::HexStringToBytes("b1b2b3b4b5b6b7b8");
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("00"                 // DATAGRAM capsule type
+                             "08"                 // capsule length
+                             "a1a2a3a4a5a6a7a8"   // HTTP Datagram payload
+                             "00"                 // DATAGRAM capsule type
+                             "08"                 // capsule length
+                             "b1b2b3b4b5b6b7b8",  // HTTP Datagram payload
+                             &capsule_fragment));
+  std::string datagram_payload1;
+  ASSERT_TRUE(absl::HexStringToBytes("a1a2a3a4a5a6a7a8", &datagram_payload1));
+  std::string datagram_payload2;
+  ASSERT_TRUE(absl::HexStringToBytes("b1b2b3b4b5b6b7b8", &datagram_payload2));
   Capsule expected_capsule1 = Capsule::Datagram(datagram_payload1);
   Capsule expected_capsule2 = Capsule::Datagram(datagram_payload2);
   {
@@ -458,22 +484,27 @@
 }
 
 TEST_F(CapsuleTest, TwoCapsulesPartialReads) {
-  std::string capsule_fragment1 = absl::HexStringToBytes(
-      "00"        // first capsule DATAGRAM capsule type
-      "08"        // first capsule length
-      "a1a2a3a4"  // first half of HTTP Datagram payload of first capsule
-  );
-  std::string capsule_fragment2 = absl::HexStringToBytes(
+  std::string capsule_fragment1;
+  ASSERT_TRUE(absl::HexStringToBytes(
+      "00"         // first capsule DATAGRAM capsule type
+      "08"         // first capsule length
+      "a1a2a3a4",  // first half of HTTP Datagram payload of first capsule
+      &capsule_fragment1));
+  std::string capsule_fragment2;
+  ASSERT_TRUE(absl::HexStringToBytes(
       "a5a6a7a8"  // second half of HTTP Datagram payload 1
-      "00"        // second capsule DATAGRAM capsule type
-  );
-  std::string capsule_fragment3 = absl::HexStringToBytes(
-      "08"                // second capsule length
-      "b1b2b3b4b5b6b7b8"  // HTTP Datagram payload of second capsule
-  );
+      "00",       // second capsule DATAGRAM capsule type
+      &capsule_fragment2));
+  std::string capsule_fragment3;
+  ASSERT_TRUE(absl::HexStringToBytes(
+      "08"                 // second capsule length
+      "b1b2b3b4b5b6b7b8",  // HTTP Datagram payload of second capsule
+      &capsule_fragment3));
   capsule_parser_.ErrorIfThereIsRemainingBufferedData();
-  std::string datagram_payload1 = absl::HexStringToBytes("a1a2a3a4a5a6a7a8");
-  std::string datagram_payload2 = absl::HexStringToBytes("b1b2b3b4b5b6b7b8");
+  std::string datagram_payload1;
+  ASSERT_TRUE(absl::HexStringToBytes("a1a2a3a4a5a6a7a8", &datagram_payload1));
+  std::string datagram_payload2;
+  ASSERT_TRUE(absl::HexStringToBytes("b1b2b3b4b5b6b7b8", &datagram_payload2));
   Capsule expected_capsule1 = Capsule::Datagram(datagram_payload1);
   Capsule expected_capsule2 = Capsule::Datagram(datagram_payload2);
   {
@@ -488,16 +519,19 @@
 }
 
 TEST_F(CapsuleTest, TwoCapsulesOneByteAtATime) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "00"                // DATAGRAM capsule type
-      "08"                // capsule length
-      "a1a2a3a4a5a6a7a8"  // HTTP Datagram payload
-      "00"                // DATAGRAM capsule type
-      "08"                // capsule length
-      "b1b2b3b4b5b6b7b8"  // HTTP Datagram payload
-  );
-  std::string datagram_payload1 = absl::HexStringToBytes("a1a2a3a4a5a6a7a8");
-  std::string datagram_payload2 = absl::HexStringToBytes("b1b2b3b4b5b6b7b8");
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("00"                 // DATAGRAM capsule type
+                             "08"                 // capsule length
+                             "a1a2a3a4a5a6a7a8"   // HTTP Datagram payload
+                             "00"                 // DATAGRAM capsule type
+                             "08"                 // capsule length
+                             "b1b2b3b4b5b6b7b8",  // HTTP Datagram payload
+                             &capsule_fragment));
+  std::string datagram_payload1;
+  ASSERT_TRUE(absl::HexStringToBytes("a1a2a3a4a5a6a7a8", &datagram_payload1));
+  std::string datagram_payload2;
+  ASSERT_TRUE(absl::HexStringToBytes("b1b2b3b4b5b6b7b8", &datagram_payload2));
   Capsule expected_capsule1 = Capsule::Datagram(datagram_payload1);
   Capsule expected_capsule2 = Capsule::Datagram(datagram_payload2);
   for (size_t i = 0; i < capsule_fragment.size(); i++) {
@@ -526,11 +560,12 @@
 }
 
 TEST_F(CapsuleTest, PartialCapsuleThenError) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-      "00"        // DATAGRAM capsule type
-      "08"        // capsule length
-      "a1a2a3a4"  // first half of HTTP Datagram payload
-  );
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("00"         // DATAGRAM capsule type
+                             "08"         // capsule length
+                             "a1a2a3a4",  // first half of HTTP Datagram payload
+                             &capsule_fragment));
   EXPECT_CALL(visitor_, OnCapsule(_)).Times(0);
   {
     EXPECT_CALL(visitor_, OnCapsuleParseFailure(_)).Times(0);
@@ -545,11 +580,12 @@
 }
 
 TEST_F(CapsuleTest, RejectOverlyLongCapsule) {
-  std::string capsule_fragment = absl::HexStringToBytes(
-                                     "17"        // unknown capsule type of 0x17
-                                     "80123456"  // capsule length
-                                     ) +
-                                 std::string(1111111, '?');
+  std::string capsule_fragment;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("17"         // unknown capsule type of 0x17
+                             "80123456",  // capsule length
+                             &capsule_fragment));
+  absl::StrAppend(&capsule_fragment, std::string(1111111, '?'));
   EXPECT_CALL(visitor_, OnCapsuleParseFailure(
                             "Refusing to buffer too much capsule data"));
   EXPECT_FALSE(capsule_parser_.IngestCapsuleFragment(capsule_fragment));
diff --git a/quiche/common/quiche_text_utils_test.cc b/quiche/common/quiche_text_utils_test.cc
index cc62d78..d535614 100644
--- a/quiche/common/quiche_text_utils_test.cc
+++ b/quiche/common/quiche_text_utils_test.cc
@@ -31,7 +31,9 @@
 
 TEST(QuicheTextUtilsTest, HexDump) {
   // Verify output for empty input.
-  EXPECT_EQ("", quiche::QuicheTextUtils::HexDump(absl::HexStringToBytes("")));
+  std::string empty;
+  ASSERT_TRUE(absl::HexStringToBytes("", &empty));
+  EXPECT_EQ("", quiche::QuicheTextUtils::HexDump(empty));
   // Verify output of the HexDump method is as expected.
   char packet[] = {
       0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x51, 0x55, 0x49, 0x43, 0x21,
@@ -51,13 +53,17 @@
       "0x0040:  6c69 6e65 7320 6f66 206f 7574 7075 742e  lines.of.output.\n"
       "0x0050:  0102 03                                  ...\n");
   // Verify that 0x21 and 0x7e are printable, 0x20 and 0x7f are not.
-  EXPECT_EQ(
-      "0x0000:  2021 7e7f                                .!~.\n",
-      quiche::QuicheTextUtils::HexDump(absl::HexStringToBytes("20217e7f")));
+  std::string printable_and_unprintable_chars;
+  ASSERT_TRUE(
+      absl::HexStringToBytes("20217e7f", &printable_and_unprintable_chars));
+  EXPECT_EQ("0x0000:  2021 7e7f                                .!~.\n",
+            quiche::QuicheTextUtils::HexDump(printable_and_unprintable_chars));
   // Verify that values above numeric_limits<unsigned char>::max() are formatted
   // properly on platforms where char is unsigned.
+  std::string large_chars;
+  ASSERT_TRUE(absl::HexStringToBytes("90aaff", &large_chars));
   EXPECT_EQ("0x0000:  90aa ff                                  ...\n",
-            quiche::QuicheTextUtils::HexDump(absl::HexStringToBytes("90aaff")));
+            quiche::QuicheTextUtils::HexDump(large_chars));
 }
 
 TEST(QuicheTextUtilsTest, Base64Encode) {
diff --git a/quiche/common/wire_serialization_test.cc b/quiche/common/wire_serialization_test.cc
index f35c13d..98713d4 100644
--- a/quiche/common/wire_serialization_test.cc
+++ b/quiche/common/wire_serialization_test.cc
@@ -6,10 +6,12 @@
 
 #include <limits>
 #include <optional>
+#include <string>
 
 #include "absl/status/status.h"
 #include "absl/status/statusor.h"
 #include "absl/strings/escaping.h"
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "quiche/common/platform/api/quiche_expect_bug.h"
 #include "quiche/common/platform/api/quiche_test.h"
@@ -45,7 +47,9 @@
 template <typename... Ts>
 void ExpectEncodingHex(const std::string& description,
                        absl::string_view expected_hex, Ts... data) {
-  ExpectEncoding(description, absl::HexStringToBytes(expected_hex), data...);
+  std::string expected;
+  ASSERT_TRUE(absl::HexStringToBytes(expected_hex, &expected));
+  ExpectEncoding(description, expected, data...);
 }
 
 TEST(SerializationTest, SerializeStrings) {
@@ -79,7 +83,9 @@
   QUICHE_ASSERT_OK(
       SerializeIntoWriter(writer, WireUint16(0x1234), WireUint16(0xabcd)));
   absl::string_view actual(writer.data(), writer.length());
-  EXPECT_EQ(actual, absl::HexStringToBytes("3412cdab"));
+  std::string expected;
+  ASSERT_TRUE(absl::HexStringToBytes("3412cdab", &expected));
+  EXPECT_EQ(actual, expected);
 }
 
 TEST(SerializationTest, SerializeVarInt62) {
diff --git a/quiche/oblivious_http/buffers/oblivious_http_integration_test.cc b/quiche/oblivious_http/buffers/oblivious_http_integration_test.cc
index b9e17f6..535b585 100644
--- a/quiche/oblivious_http/buffers/oblivious_http_integration_test.cc
+++ b/quiche/oblivious_http/buffers/oblivious_http_integration_test.cc
@@ -3,6 +3,7 @@
 #include <string>
 
 #include "absl/strings/escaping.h"
+#include "absl/strings/string_view.h"
 #include "openssl/hpke.h"
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/oblivious_http/buffers/oblivious_http_response.h"
@@ -20,13 +21,17 @@
 std::string GetHpkePrivateKey() {
   absl::string_view hpke_key_hex =
       "b77431ecfa8f4cfc30d6e467aafa06944dffe28cb9dd1409e33a3045f5adc8a1";
-  return absl::HexStringToBytes(hpke_key_hex);
+  std::string hpke_key_bytes;
+  EXPECT_TRUE(absl::HexStringToBytes(hpke_key_hex, &hpke_key_bytes));
+  return hpke_key_bytes;
 }
 
 std::string GetHpkePublicKey() {
   absl::string_view public_key =
       "6d21cfe09fbea5122f9ebc2eb2a69fcc4f06408cd54aac934f012e76fcdcef62";
-  return absl::HexStringToBytes(public_key);
+  std::string public_key_bytes;
+  EXPECT_TRUE(absl::HexStringToBytes(public_key, &public_key_bytes));
+  return public_key_bytes;
 }
 
 const ObliviousHttpHeaderKeyConfig GetOhttpKeyConfig(uint8_t key_id,
diff --git a/quiche/oblivious_http/buffers/oblivious_http_request_test.cc b/quiche/oblivious_http/buffers/oblivious_http_request_test.cc
index b788e5c..cf2f482 100644
--- a/quiche/oblivious_http/buffers/oblivious_http_request_test.cc
+++ b/quiche/oblivious_http/buffers/oblivious_http_request_test.cc
@@ -25,31 +25,42 @@
 std::string GetHpkePrivateKey() {
   absl::string_view hpke_key_hex =
       "b77431ecfa8f4cfc30d6e467aafa06944dffe28cb9dd1409e33a3045f5adc8a1";
-  return absl::HexStringToBytes(hpke_key_hex);
+  std::string hpke_key_bytes;
+  EXPECT_TRUE(absl::HexStringToBytes(hpke_key_hex, &hpke_key_bytes));
+  return hpke_key_bytes;
 }
 
 std::string GetHpkePublicKey() {
   absl::string_view public_key =
       "6d21cfe09fbea5122f9ebc2eb2a69fcc4f06408cd54aac934f012e76fcdcef62";
-  return absl::HexStringToBytes(public_key);
+  std::string public_key_bytes;
+  EXPECT_TRUE(absl::HexStringToBytes(public_key, &public_key_bytes));
+  return public_key_bytes;
 }
 
 std::string GetAlternativeHpkePublicKey() {
   absl::string_view public_key =
       "6d21cfe09fbea5122f9ebc2eb2a69fcc4f06408cd54aac934f012e76fcdcef63";
-  return absl::HexStringToBytes(public_key);
+  std::string public_key_bytes;
+  EXPECT_TRUE(absl::HexStringToBytes(public_key, &public_key_bytes));
+  return public_key_bytes;
 }
 
 std::string GetSeed() {
   absl::string_view seed =
       "52c4a758a802cd8b936eceea314432798d5baf2d7e9235dc084ab1b9cfa2f736";
-  return absl::HexStringToBytes(seed);
+  std::string seed_bytes;
+  EXPECT_TRUE(absl::HexStringToBytes(seed, &seed_bytes));
+  return seed_bytes;
 }
 
 std::string GetSeededEncapsulatedKey() {
   absl::string_view encapsulated_key =
       "37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431";
-  return absl::HexStringToBytes(encapsulated_key);
+  std::string encapsulated_key_bytes;
+  EXPECT_TRUE(
+      absl::HexStringToBytes(encapsulated_key, &encapsulated_key_bytes));
+  return encapsulated_key_bytes;
 }
 
 bssl::UniquePtr<EVP_HPKE_KEY> ConstructHpkeKey(
@@ -94,10 +105,15 @@
       "c0185204b4d63525";
 
   // Initialize Request obj to Decapsulate (decrypt).
+  std::string encapsulated_request_bytes;
+  ASSERT_TRUE(absl::HexStringToBytes(kEncapsulatedRequest,
+                                     &encapsulated_request_bytes));
+  std::string x25519_secret_key_bytes;
+  ASSERT_TRUE(
+      absl::HexStringToBytes(kX25519SecretKey, &x25519_secret_key_bytes));
   auto instance = ObliviousHttpRequest::CreateServerObliviousRequest(
-      absl::HexStringToBytes(kEncapsulatedRequest),
-      *(ConstructHpkeKey(absl::HexStringToBytes(kX25519SecretKey),
-                         ohttp_key_config)),
+      encapsulated_request_bytes,
+      *(ConstructHpkeKey(x25519_secret_key_bytes, ohttp_key_config)),
       ohttp_key_config);
   ASSERT_TRUE(instance.ok());
   auto decrypted = instance->GetPlaintextData();
@@ -106,15 +122,21 @@
   // https://www.ietf.org/archive/id/draft-ietf-ohai-ohttp-03.html#appendix-A-10
   constexpr absl::string_view kExpectedEphemeralPublicKey =
       "4b28f881333e7c164ffc499ad9796f877f4e1051ee6d31bad19dec96c208b472";
+  std::string expected_ephemeral_public_key_bytes;
+  ASSERT_TRUE(absl::HexStringToBytes(kExpectedEphemeralPublicKey,
+                                     &expected_ephemeral_public_key_bytes));
   auto oblivious_request_context = std::move(instance.value()).ReleaseContext();
   EXPECT_EQ(oblivious_request_context.encapsulated_key_,
-            absl::HexStringToBytes(kExpectedEphemeralPublicKey));
+            expected_ephemeral_public_key_bytes);
 
   // Binary HTTP message.
   // https://www.ietf.org/archive/id/draft-ietf-ohai-ohttp-03.html#appendix-A-6
   constexpr absl::string_view kExpectedBinaryHTTPMessage =
       "00034745540568747470730b6578616d706c652e636f6d012f";
-  EXPECT_EQ(decrypted, absl::HexStringToBytes(kExpectedBinaryHTTPMessage));
+  std::string expected_binary_http_message_bytes;
+  ASSERT_TRUE(absl::HexStringToBytes(kExpectedBinaryHTTPMessage,
+                                     &expected_binary_http_message_bytes));
+  EXPECT_EQ(decrypted, expected_binary_http_message_bytes);
 }
 
 TEST(ObliviousHttpRequest, TestEncapsulatedRequestStructure) {
@@ -167,12 +189,15 @@
             GetSeededEncapsulatedKey());
   absl::string_view expected_encrypted_request =
       "9f37cfed07d0111ecd2c34f794671759bcbd922a";
+  std::string expected_encrypted_request_bytes;
+  ASSERT_TRUE(absl::HexStringToBytes(expected_encrypted_request,
+                                     &expected_encrypted_request_bytes));
   EXPECT_NE(ohttp_request_context.hpke_context_, nullptr);
   size_t encapsulated_key_len = EVP_HPKE_KEM_enc_len(
       EVP_HPKE_CTX_kem(ohttp_request_context.hpke_context_.get()));
   int encrypted_payload_offset = kHeaderLength + encapsulated_key_len;
   EXPECT_EQ(encapsulated_request.substr(encrypted_payload_offset),
-            absl::HexStringToBytes(expected_encrypted_request));
+            expected_encrypted_request_bytes);
 }
 
 TEST(ObliviousHttpRequest,
diff --git a/quiche/oblivious_http/common/oblivious_http_header_key_config_test.cc b/quiche/oblivious_http/common/oblivious_http_header_key_config_test.cc
index 73e4c07..f9a8348 100644
--- a/quiche/oblivious_http/common/oblivious_http_header_key_config_test.cc
+++ b/quiche/oblivious_http/common/oblivious_http_header_key_config_test.cc
@@ -1,6 +1,7 @@
 #include "quiche/oblivious_http/common/oblivious_http_header_key_config.h"
 
 #include <cstdint>
+#include <string>
 
 #include "absl/strings/escaping.h"
 #include "absl/strings/str_cat.h"
@@ -169,19 +170,24 @@
 }
 
 TEST(ObliviousHttpKeyConfigs, SingleKeyConfig) {
-  std::string key = absl::HexStringToBytes(
+  std::string key;
+  ASSERT_TRUE(absl::HexStringToBytes(
       "4b0020f83e0a17cbdb18d2684dd2a9b087a43e5f3fa3fa27a049bc746a6e97a1e0244b00"
-      "0400010002");
+      "0400010002",
+      &key));
   auto configs = ObliviousHttpKeyConfigs::ParseConcatenatedKeys(key).value();
   EXPECT_THAT(configs, Property(&ObliviousHttpKeyConfigs::NumKeys, 1));
   EXPECT_THAT(
       configs.PreferredConfig(),
       AllOf(HasKeyId(0x4b), HasKemId(EVP_HPKE_DHKEM_X25519_HKDF_SHA256),
             HasKdfId(EVP_HPKE_HKDF_SHA256), HasAeadId(EVP_HPKE_AES_256_GCM)));
+  std::string expected_public_key;
+  ASSERT_TRUE(absl::HexStringToBytes(
+      "f83e0a17cbdb18d2684dd2a9b087a43e5f3fa3fa27a049bc746a6e97a1e0244b",
+      &expected_public_key));
   EXPECT_THAT(
       configs.GetPublicKeyForId(configs.PreferredConfig().GetKeyId()).value(),
-      StrEq(absl::HexStringToBytes(
-          "f83e0a17cbdb18d2684dd2a9b087a43e5f3fa3fa27a049bc746a6e97a1e0244b")));
+      StrEq(expected_public_key));
 }
 
 TEST(ObliviousHttpKeyConfigs, TwoSimilarKeyConfigs) {
diff --git a/quiche/oblivious_http/oblivious_http_client_test.cc b/quiche/oblivious_http/oblivious_http_client_test.cc
index a2768a5..65c6cc9 100644
--- a/quiche/oblivious_http/oblivious_http_client_test.cc
+++ b/quiche/oblivious_http/oblivious_http_client_test.cc
@@ -19,14 +19,18 @@
   // Dev/Test private key generated using Keystore.
   absl::string_view hpke_key_hex =
       "b77431ecfa8f4cfc30d6e467aafa06944dffe28cb9dd1409e33a3045f5adc8a1";
-  return absl::HexStringToBytes(hpke_key_hex);
+  std::string hpke_key_bytes;
+  EXPECT_TRUE(absl::HexStringToBytes(hpke_key_hex, &hpke_key_bytes));
+  return hpke_key_bytes;
 }
 
 std::string GetHpkePublicKey() {
   // Dev/Test public key generated using Keystore.
   absl::string_view public_key =
       "6d21cfe09fbea5122f9ebc2eb2a69fcc4f06408cd54aac934f012e76fcdcef62";
-  return absl::HexStringToBytes(public_key);
+  std::string public_key_bytes;
+  EXPECT_TRUE(absl::HexStringToBytes(public_key, &public_key_bytes));
+  return public_key_bytes;
 }
 
 const ObliviousHttpHeaderKeyConfig GetOhttpKeyConfig(uint8_t key_id,
diff --git a/quiche/oblivious_http/oblivious_http_gateway_test.cc b/quiche/oblivious_http/oblivious_http_gateway_test.cc
index af03b21..ad52585 100644
--- a/quiche/oblivious_http/oblivious_http_gateway_test.cc
+++ b/quiche/oblivious_http/oblivious_http_gateway_test.cc
@@ -21,14 +21,18 @@
   // Dev/Test private key generated using Keystore.
   absl::string_view hpke_key_hex =
       "b77431ecfa8f4cfc30d6e467aafa06944dffe28cb9dd1409e33a3045f5adc8a1";
-  return absl::HexStringToBytes(hpke_key_hex);
+  std::string hpke_key_bytes;
+  EXPECT_TRUE(absl::HexStringToBytes(hpke_key_hex, &hpke_key_bytes));
+  return hpke_key_bytes;
 }
 
 std::string GetHpkePublicKey() {
   // Dev/Test public key generated using Keystore.
   absl::string_view public_key =
       "6d21cfe09fbea5122f9ebc2eb2a69fcc4f06408cd54aac934f012e76fcdcef62";
-  return absl::HexStringToBytes(public_key);
+  std::string public_key_bytes;
+  EXPECT_TRUE(absl::HexStringToBytes(public_key, &public_key_bytes));
+  return public_key_bytes;
 }
 
 const ObliviousHttpHeaderKeyConfig GetOhttpKeyConfig(uint8_t key_id,
@@ -46,9 +50,12 @@
   // https://www.ietf.org/archive/id/draft-ietf-ohai-ohttp-03.html#appendix-A-2
   constexpr absl::string_view kX25519SecretKey =
       "3c168975674b2fa8e465970b79c8dcf09f1c741626480bd4c6162fc5b6a98e1a";
+  std::string x25519_secret_key_bytes;
+  ASSERT_TRUE(
+      absl::HexStringToBytes(kX25519SecretKey, &x25519_secret_key_bytes));
 
   auto instance = ObliviousHttpGateway::Create(
-      /*hpke_private_key*/ absl::HexStringToBytes(kX25519SecretKey),
+      /*hpke_private_key*/ x25519_secret_key_bytes,
       /*ohttp_key_config*/ GetOhttpKeyConfig(
           /*key_id=*/1, EVP_HPKE_DHKEM_X25519_HKDF_SHA256, EVP_HPKE_HKDF_SHA256,
           EVP_HPKE_AES_128_GCM));
@@ -59,9 +66,12 @@
       "010020000100014b28f881333e7c164ffc499ad9796f877f4e1051ee6d31bad19dec96c2"
       "08b4726374e469135906992e1268c594d2a10c695d858c40a026e7965e7d86b83dd440b2"
       "c0185204b4d63525";
+  std::string encapsulated_request_bytes;
+  ASSERT_TRUE(absl::HexStringToBytes(kEncapsulatedRequest,
+                                     &encapsulated_request_bytes));
 
-  auto decrypted_req = instance->DecryptObliviousHttpRequest(
-      absl::HexStringToBytes(kEncapsulatedRequest));
+  auto decrypted_req =
+      instance->DecryptObliviousHttpRequest(encapsulated_request_bytes);
   ASSERT_TRUE(decrypted_req.ok());
   ASSERT_FALSE(decrypted_req->GetPlaintextData().empty());
 }
@@ -75,8 +85,10 @@
   absl::string_view encrypted_req_1 =
       "010020000100025f20b60306b61ad9ecad389acd752ca75c4e2969469809fe3d84aae137"
       "f73e4ccfe9ba71f12831fdce6c8202fbd38a84c5d8a73ac4c8ea6c10592594845f";
-  auto decapsulated_req_1 = instance->DecryptObliviousHttpRequest(
-      absl::HexStringToBytes(encrypted_req_1));
+  std::string encrypted_req_1_bytes;
+  ASSERT_TRUE(absl::HexStringToBytes(encrypted_req_1, &encrypted_req_1_bytes));
+  auto decapsulated_req_1 =
+      instance->DecryptObliviousHttpRequest(encrypted_req_1_bytes);
   ASSERT_TRUE(decapsulated_req_1.ok());
   ASSERT_FALSE(decapsulated_req_1->GetPlaintextData().empty());
 
@@ -84,8 +96,10 @@
   absl::string_view encrypted_req_2 =
       "01002000010002285ebc2fcad72cc91b378050cac29a62feea9cd97829335ee9fc87e672"
       "4fa13ff2efdff620423d54225d3099088e7b32a5165f805a5d922918865a0a447a";
-  auto decapsulated_req_2 = instance->DecryptObliviousHttpRequest(
-      absl::HexStringToBytes(encrypted_req_2));
+  std::string encrypted_req_2_bytes;
+  ASSERT_TRUE(absl::HexStringToBytes(encrypted_req_2, &encrypted_req_2_bytes));
+  auto decapsulated_req_2 =
+      instance->DecryptObliviousHttpRequest(encrypted_req_2_bytes);
   ASSERT_TRUE(decapsulated_req_2.ok());
   ASSERT_FALSE(decapsulated_req_2->GetPlaintextData().empty());
 }
@@ -141,17 +155,25 @@
                         EVP_HPKE_HKDF_SHA256, EVP_HPKE_AES_256_GCM),
       QuicheRandom::GetInstance());
   // Setup contexts first.
-  auto decrypted_request_1 = instance->DecryptObliviousHttpRequest(
+  std::string encrypted_request_1_bytes;
+  ASSERT_TRUE(
       absl::HexStringToBytes("010020000100025f20b60306b61ad9ecad389acd752ca75c4"
                              "e2969469809fe3d84aae137"
                              "f73e4ccfe9ba71f12831fdce6c8202fbd38a84c5d8a73ac4c"
-                             "8ea6c10592594845f"));
+                             "8ea6c10592594845f",
+                             &encrypted_request_1_bytes));
+  auto decrypted_request_1 =
+      instance->DecryptObliviousHttpRequest(encrypted_request_1_bytes);
   ASSERT_TRUE(decrypted_request_1.ok());
-  auto decrypted_request_2 = instance->DecryptObliviousHttpRequest(
+  std::string encrypted_request_2_bytes;
+  ASSERT_TRUE(
       absl::HexStringToBytes("01002000010002285ebc2fcad72cc91b378050cac29a62fee"
                              "a9cd97829335ee9fc87e672"
                              "4fa13ff2efdff620423d54225d3099088e7b32a5165f805a5"
-                             "d922918865a0a447a"));
+                             "d922918865a0a447a",
+                             &encrypted_request_2_bytes));
+  auto decrypted_request_2 =
+      instance->DecryptObliviousHttpRequest(encrypted_request_2_bytes);
   ASSERT_TRUE(decrypted_request_2.ok());
 
   // Extract contexts and handle the response for each corresponding request.
@@ -204,20 +226,22 @@
                         EVP_HPKE_HKDF_SHA256, EVP_HPKE_AES_256_GCM),
       QuicheRandom::GetInstance());
 
-  TestQuicheThread t1(
-      *gateway_receiver,
+  std::string request_payload_1;
+  ASSERT_TRUE(
       absl::HexStringToBytes("010020000100025f20b60306b61ad9ecad389acd752ca75c4"
                              "e2969469809fe3d84aae137"
                              "f73e4ccfe9ba71f12831fdce6c8202fbd38a84c5d8a73ac4c"
-                             "8ea6c10592594845f"),
-      "test response 1");
-  TestQuicheThread t2(
-      *gateway_receiver,
+                             "8ea6c10592594845f",
+                             &request_payload_1));
+  TestQuicheThread t1(*gateway_receiver, request_payload_1, "test response 1");
+  std::string request_payload_2;
+  ASSERT_TRUE(
       absl::HexStringToBytes("01002000010002285ebc2fcad72cc91b378050cac29a62fee"
                              "a9cd97829335ee9fc87e672"
                              "4fa13ff2efdff620423d54225d3099088e7b32a5165f805a5"
-                             "d922918865a0a447a"),
-      "test response 2");
+                             "d922918865a0a447a",
+                             &request_payload_2));
+  TestQuicheThread t2(*gateway_receiver, request_payload_2, "test response 2");
   t1.Start();
   t2.Start();
   t1.Join();