Add a 2-parameter CPDF_String ctor

Prepare for removing the 3-parameter CPDF_String ctor by adding a
2-param ctor that covers the majority of the use cases, where the `bHex`
argument is false.

Change-Id: I6b4f99c87201e71712303b8c9be2f2406597edb1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/119391
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp
index 1f57f07..b1f9635 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.cpp
+++ b/core/fpdfapi/page/cpdf_docpagedata.cpp
@@ -755,8 +755,8 @@
   pFontDict->SetNewFor<CPDF_Name>("BaseFont", basefont);
 
   auto pCIDSysInfo = pFontDict->SetNewFor<CPDF_Dictionary>("CIDSystemInfo");
-  pCIDSysInfo->SetNewFor<CPDF_String>("Registry", "Adobe", false);
-  pCIDSysInfo->SetNewFor<CPDF_String>("Ordering", ordering, false);
+  pCIDSysInfo->SetNewFor<CPDF_String>("Registry", "Adobe");
+  pCIDSysInfo->SetNewFor<CPDF_String>("Ordering", ordering);
   pCIDSysInfo->SetNewFor<CPDF_Number>("Supplement", supplement);
 
   auto pArray = pBaseDict->SetNewFor<CPDF_Array>("DescendantFonts");
diff --git a/core/fpdfapi/page/cpdf_streamparser.cpp b/core/fpdfapi/page/cpdf_streamparser.cpp
index 83fdc81..ec003a5 100644
--- a/core/fpdfapi/page/cpdf_streamparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamparser.cpp
@@ -328,12 +328,13 @@
 
   if (first_char == '(') {
     ByteString str = ReadString();
-    return pdfium::MakeRetain<CPDF_String>(m_pPool, str, false);
+    return pdfium::MakeRetain<CPDF_String>(m_pPool, str);
   }
 
   if (first_char == '<') {
-    if (m_WordSize == 1)
+    if (m_WordSize == 1) {
       return pdfium::MakeRetain<CPDF_String>(m_pPool, ReadHexString(), true);
+    }
 
     auto pDict = pdfium::MakeRetain<CPDF_Dictionary>(m_pPool);
     while (true) {
diff --git a/core/fpdfapi/parser/cpdf_document_unittest.cpp b/core/fpdfapi/parser/cpdf_document_unittest.cpp
index 49b59cb..99a7978 100644
--- a/core/fpdfapi/parser/cpdf_document_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_document_unittest.cpp
@@ -229,7 +229,7 @@
   EXPECT_TRUE(CPDF_Document::IsValidPageObject(dict_type_name_page.Get()));
 
   auto dict_type_string_page = pdfium::MakeRetain<CPDF_Dictionary>();
-  dict_type_string_page->SetNewFor<CPDF_String>("Type", "Page", false);
+  dict_type_string_page->SetNewFor<CPDF_String>("Type", "Page");
   document.AddIndirectObject(dict_type_string_page);
   EXPECT_FALSE(CPDF_Document::IsValidPageObject(dict_type_string_page.Get()));
 
diff --git a/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp b/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
index 5f96ee4..f4a0ef2 100644
--- a/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
@@ -128,7 +128,7 @@
 
 TEST(ObjectAvailTest, OneObject) {
   TestHolder holder;
-  holder.AddObject(1, pdfium::MakeRetain<CPDF_String>(nullptr, "string", false),
+  holder.AddObject(1, pdfium::MakeRetain<CPDF_String>(nullptr, "string"),
                    TestHolder::ObjectState::Unavailable);
   CPDF_ObjectAvail avail(holder.GetValidator(), &holder, 1);
   EXPECT_EQ(CPDF_DataAvail::kDataNotAvailable, avail.CheckAvail());
@@ -140,7 +140,7 @@
   TestHolder holder;
   holder.AddObject(1, pdfium::MakeRetain<CPDF_Reference>(&holder, 2),
                    TestHolder::ObjectState::Unavailable);
-  holder.AddObject(2, pdfium::MakeRetain<CPDF_String>(nullptr, "string", false),
+  holder.AddObject(2, pdfium::MakeRetain<CPDF_String>(nullptr, "string"),
                    TestHolder::ObjectState::Unavailable);
   CPDF_ObjectAvail avail(holder.GetValidator(), &holder, 1);
   EXPECT_EQ(CPDF_DataAvail::kDataNotAvailable, avail.CheckAvail());
@@ -245,8 +245,7 @@
 
   // Add string, which is refered by array item. It is should not be checked.
   holder.AddObject(
-      3,
-      pdfium::MakeRetain<CPDF_String>(nullptr, "Not available string", false),
+      3, pdfium::MakeRetain<CPDF_String>(nullptr, "Not available string"),
       TestHolder::ObjectState::Unavailable);
   CPDF_ObjectAvailExcludeArray avail(holder.GetValidator(), &holder, 1);
   EXPECT_EQ(CPDF_DataAvail::kDataAvailable, avail.CheckAvail());
@@ -264,17 +263,15 @@
   holder.GetTestObject(2)->GetMutableDict()->SetNewFor<CPDF_Reference>(
       "Type", &holder, 3);
   // The value of "Type" key is not available at start
-  holder.AddObject(
-      3, pdfium::MakeRetain<CPDF_String>(nullptr, "Exclude me", false),
-      TestHolder::ObjectState::Unavailable);
+  holder.AddObject(3, pdfium::MakeRetain<CPDF_String>(nullptr, "Exclude me"),
+                   TestHolder::ObjectState::Unavailable);
 
   holder.GetTestObject(2)->GetMutableDict()->SetNewFor<CPDF_Reference>(
       "OtherData", &holder, 4);
   // Add string, which is referred by dictionary item. It is should not be
   // checked, because the dictionary with it, should be skipped.
   holder.AddObject(
-      4,
-      pdfium::MakeRetain<CPDF_String>(nullptr, "Not available string", false),
+      4, pdfium::MakeRetain<CPDF_String>(nullptr, "Not available string"),
       TestHolder::ObjectState::Unavailable);
 
   CPDF_ObjectAvailExcludeTypeKey avail(holder.GetValidator(), &holder, 1);
@@ -303,7 +300,7 @@
 
 TEST(ObjectAvailTest, CheckTwice) {
   TestHolder holder;
-  holder.AddObject(1, pdfium::MakeRetain<CPDF_String>(nullptr, "string", false),
+  holder.AddObject(1, pdfium::MakeRetain<CPDF_String>(nullptr, "string"),
                    TestHolder::ObjectState::Unavailable);
 
   CPDF_ObjectAvail avail(holder.GetValidator(), &holder, 1);
@@ -325,7 +322,7 @@
           "Dict");
 
   root->SetNewFor<CPDF_Reference>("Self", &holder, 1);
-  holder.AddObject(2, pdfium::MakeRetain<CPDF_String>(nullptr, "Data", false),
+  holder.AddObject(2, pdfium::MakeRetain<CPDF_String>(nullptr, "Data"),
                    TestHolder::ObjectState::Unavailable);
 
   CPDF_ObjectAvail avail(holder.GetValidator(), &holder, root);
diff --git a/core/fpdfapi/parser/cpdf_object_stream_unittest.cpp b/core/fpdfapi/parser/cpdf_object_stream_unittest.cpp
index 513ca9b..9b978b3 100644
--- a/core/fpdfapi/parser/cpdf_object_stream_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_stream_unittest.cpp
@@ -101,7 +101,7 @@
 
 TEST(ObjectStreamTest, StreamDictWrongType) {
   auto dict = pdfium::MakeRetain<CPDF_Dictionary>();
-  dict->SetNewFor<CPDF_String>("Type", "ObjStm", /*bHex=*/false);
+  dict->SetNewFor<CPDF_String>("Type", "ObjStm");
   dict->SetNewFor<CPDF_Number>("N", 3);
   dict->SetNewFor<CPDF_Number>("First", 5);
 
diff --git a/core/fpdfapi/parser/cpdf_object_unittest.cpp b/core/fpdfapi/parser/cpdf_object_unittest.cpp
index 16370fb..e8bc399 100644
--- a/core/fpdfapi/parser/cpdf_object_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_unittest.cpp
@@ -278,7 +278,7 @@
 }
 
 TEST_F(PDFObjectsTest, GetNameFor) {
-  m_DictObj->SetNewFor<CPDF_String>("string", "ium", false);
+  m_DictObj->SetNewFor<CPDF_String>("string", "ium");
   m_DictObj->SetNewFor<CPDF_Name>("name", "Pdf");
 
   EXPECT_EQ("", m_DictObj->GetNameFor("invalid"));
@@ -552,7 +552,7 @@
     auto string_array = pdfium::MakeRetain<CPDF_Array>();
     auto name_array = pdfium::MakeRetain<CPDF_Array>();
     for (size_t i = 0; i < std::size(vals); ++i) {
-      string_array->InsertNewAt<CPDF_String>(i, vals[i], false);
+      string_array->InsertNewAt<CPDF_String>(i, vals[i]);
       name_array->InsertNewAt<CPDF_Name>(i, vals[i]);
     }
     for (size_t i = 0; i < std::size(vals); ++i) {
@@ -682,8 +682,8 @@
     arr->InsertNewAt<CPDF_Number>(3, -1234);
     arr->InsertNewAt<CPDF_Number>(4, 2345.0f);
     arr->InsertNewAt<CPDF_Number>(5, 0.05f);
-    arr->InsertNewAt<CPDF_String>(6, "", false);
-    arr->InsertNewAt<CPDF_String>(7, "It is a test!", false);
+    arr->InsertNewAt<CPDF_String>(6, "");
+    arr->InsertNewAt<CPDF_String>(7, "It is a test!");
     arr->InsertNewAt<CPDF_Name>(8, "NAME");
     arr->InsertNewAt<CPDF_Name>(9, "test");
     arr->InsertNewAt<CPDF_Null>(10);
@@ -693,12 +693,12 @@
     arr_val->AppendNew<CPDF_Number>(2);
 
     auto dict_val = arr->InsertNewAt<CPDF_Dictionary>(12);
-    dict_val->SetNewFor<CPDF_String>("key1", "Linda", false);
-    dict_val->SetNewFor<CPDF_String>("key2", "Zoe", false);
+    dict_val->SetNewFor<CPDF_String>("key1", "Linda");
+    dict_val->SetNewFor<CPDF_String>("key2", "Zoe");
 
     auto stream_dict = pdfium::MakeRetain<CPDF_Dictionary>();
-    stream_dict->SetNewFor<CPDF_String>("key1", "John", false);
-    stream_dict->SetNewFor<CPDF_String>("key2", "King", false);
+    stream_dict->SetNewFor<CPDF_String>("key1", "John");
+    stream_dict->SetNewFor<CPDF_String>("key2", "King");
     static constexpr uint8_t kData[] = "A stream for test";
     // The data buffer will be owned by stream object, so it needs to be
     // dynamically allocated.
@@ -765,7 +765,7 @@
   auto string_array = pdfium::MakeRetain<CPDF_Array>();
   auto name_array = pdfium::MakeRetain<CPDF_Array>();
   for (const char* val : kVals) {
-    string_array->AppendNew<CPDF_String>(val, false);
+    string_array->AppendNew<CPDF_String>(val);
     name_array->AppendNew<CPDF_Name>(val);
   }
   for (size_t i = 0; i < std::size(kVals); ++i) {
@@ -782,7 +782,7 @@
   auto int_obj = pdfium::MakeRetain<CPDF_Number>(-1234);
   auto float_obj = pdfium::MakeRetain<CPDF_Number>(2345.089f);
   auto str_obj =
-      pdfium::MakeRetain<CPDF_String>(nullptr, "Adsfdsf 343434 %&&*\n", false);
+      pdfium::MakeRetain<CPDF_String>(nullptr, "Adsfdsf 343434 %&&*\n");
   auto name_obj = pdfium::MakeRetain<CPDF_Name>(nullptr, "Title:");
   auto null_obj = pdfium::MakeRetain<CPDF_Null>();
   RetainPtr<CPDF_Object> indirect_objs[] = {boolean_obj, int_obj,  float_obj,
diff --git a/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp b/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
index 37ead40..82d8004 100644
--- a/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
@@ -112,9 +112,9 @@
   holder.GetTestObject(3)->GetMutableDict()->SetNewFor<CPDF_Reference>(
       "OtherPageData", &holder, 4);
   // Add unavailable object related to other page.
-  holder.AddObject(
-      4, pdfium::MakeRetain<CPDF_String>(nullptr, "Other page data", false),
-      TestHolder::ObjectState::Unavailable);
+  holder.AddObject(4,
+                   pdfium::MakeRetain<CPDF_String>(nullptr, "Other page data"),
+                   TestHolder::ObjectState::Unavailable);
 
   CPDF_PageObjectAvail avail(holder.GetValidator(), &holder, 1);
   // Now object should be available, although the object '4' is not available,
diff --git a/core/fpdfapi/parser/cpdf_security_handler.cpp b/core/fpdfapi/parser/cpdf_security_handler.cpp
index 3571c6e..33783e4 100644
--- a/core/fpdfapi/parser/cpdf_security_handler.cpp
+++ b/core/fpdfapi/parser/cpdf_security_handler.cpp
@@ -589,7 +589,7 @@
         FXSYS_memcpy(tempbuf, kDefaultPasscode, sizeof(kDefaultPasscode)));
     CRYPT_ArcFourCryptBlock(tempbuf,
                             pdfium::make_span(m_EncryptKey).first(key_len));
-    pEncryptDict->SetNewFor<CPDF_String>("U", ByteString(tempbuf, 32), false);
+    pEncryptDict->SetNewFor<CPDF_String>("U", ByteString(tempbuf, 32));
   } else {
     CRYPT_md5_context md5 = CRYPT_MD5Start();
     CRYPT_MD5Update(&md5, kDefaultPasscode);
@@ -611,7 +611,7 @@
     }
     CRYPT_MD5Generate(pdfium::make_span(digest).first(16u),
                       pdfium::make_span(digest).subspan(16u).data());
-    pEncryptDict->SetNewFor<CPDF_String>("U", ByteString(digest, 32), false);
+    pEncryptDict->SetNewFor<CPDF_String>("U", ByteString(digest, 32));
   }
 
   InitCryptoHandler();
@@ -638,7 +638,7 @@
     CRYPT_SHA256Finish(&sha2, digest1);
   }
   UNSAFE_TODO(FXSYS_memcpy(digest1 + 32, digest, 16));
-  pEncryptDict->SetNewFor<CPDF_String>("U", ByteString(digest1, 48), false);
+  pEncryptDict->SetNewFor<CPDF_String>("U", ByteString(digest1, 48));
   if (m_Revision >= 6) {
     Revision6_Hash(password, UNSAFE_TODO(digest + 8), nullptr, digest1);
   } else {
@@ -652,7 +652,7 @@
   uint8_t iv[16] = {};
   CRYPT_AESSetIV(&aes, iv);
   CRYPT_AESEncrypt(&aes, digest1, m_EncryptKey.data(), m_EncryptKey.size());
-  pEncryptDict->SetNewFor<CPDF_String>("UE", ByteString(digest1, 32), false);
+  pEncryptDict->SetNewFor<CPDF_String>("UE", ByteString(digest1, 32));
 }
 
 void CPDF_SecurityHandler::AES256_SetPerms(CPDF_Dictionary* pEncryptDict) {
@@ -683,7 +683,7 @@
 
   uint8_t buf1[16];
   CRYPT_AESEncrypt(&aes, buf1, buf, 16);
-  pEncryptDict->SetNewFor<CPDF_String>("Perms", ByteString(buf1, 16), false);
+  pEncryptDict->SetNewFor<CPDF_String>("Perms", ByteString(buf1, 16));
 }
 
 void CPDF_SecurityHandler::InitCryptoHandler() {
diff --git a/core/fpdfapi/parser/cpdf_string.cpp b/core/fpdfapi/parser/cpdf_string.cpp
index f699eb5..ca0dd53 100644
--- a/core/fpdfapi/parser/cpdf_string.cpp
+++ b/core/fpdfapi/parser/cpdf_string.cpp
@@ -17,6 +17,9 @@
 
 CPDF_String::CPDF_String() = default;
 
+CPDF_String::CPDF_String(WeakPtr<ByteStringPool> pPool, const ByteString& str)
+    : CPDF_String(pPool, str, false) {}
+
 CPDF_String::CPDF_String(WeakPtr<ByteStringPool> pPool,
                          const ByteString& str,
                          bool bHex)
diff --git a/core/fpdfapi/parser/cpdf_string.h b/core/fpdfapi/parser/cpdf_string.h
index 5ae6277..3b70d37 100644
--- a/core/fpdfapi/parser/cpdf_string.h
+++ b/core/fpdfapi/parser/cpdf_string.h
@@ -32,6 +32,8 @@
 
  private:
   CPDF_String();
+  // Same as the 3-param ctor, with `bHex` set to false.
+  CPDF_String(WeakPtr<ByteStringPool> pPool, const ByteString& str);
   CPDF_String(WeakPtr<ByteStringPool> pPool, const ByteString& str, bool bHex);
   CPDF_String(WeakPtr<ByteStringPool> pPool, WideStringView str);
   ~CPDF_String() override;
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index 2980ecd..bfddc14 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -533,7 +533,7 @@
 
   if (word == "(") {
     ByteString str = ReadString();
-    return pdfium::MakeRetain<CPDF_String>(m_pPool, str, false);
+    return pdfium::MakeRetain<CPDF_String>(m_pPool, str);
   }
   if (word == "<") {
     ByteString str = ReadHexString();
diff --git a/core/fpdfapi/parser/fpdf_parser_decode_unittest.cpp b/core/fpdfapi/parser/fpdf_parser_decode_unittest.cpp
index 08c1607..2ec773e 100644
--- a/core/fpdfapi/parser/fpdf_parser_decode_unittest.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_decode_unittest.cpp
@@ -99,7 +99,7 @@
   {
     // Invalid 1 decoder pipeline due to wrong type.
     auto decoders = pdfium::MakeRetain<CPDF_Array>();
-    decoders->AppendNew<CPDF_String>("FlateEncode", false);
+    decoders->AppendNew<CPDF_String>("FlateEncode");
     EXPECT_FALSE(ValidateDecoderPipeline(decoders.Get()));
   }
   {
@@ -119,7 +119,7 @@
   {
     // Invalid 2 decoder pipeline due to wrong type.
     auto decoders = pdfium::MakeRetain<CPDF_Array>();
-    decoders->AppendNew<CPDF_String>("AHx", false);
+    decoders->AppendNew<CPDF_String>("AHx");
     decoders->AppendNew<CPDF_Name>("LZWDecode");
     EXPECT_FALSE(ValidateDecoderPipeline(decoders.Get()));
   }
@@ -140,7 +140,7 @@
     decoders->AppendNew<CPDF_Name>("A85");
     decoders->AppendNew<CPDF_Name>("RunLengthDecode");
     decoders->AppendNew<CPDF_Name>("FlateDecode");
-    decoders->AppendNew<CPDF_String>("RL", false);
+    decoders->AppendNew<CPDF_String>("RL");
     EXPECT_FALSE(ValidateDecoderPipeline(decoders.Get()));
   }
 }
@@ -177,8 +177,7 @@
   {
     // Invalid 2 decoder pipeline due to wrong type indirect object.
     CPDF_IndirectObjectHolder objects_holder;
-    auto decoder =
-        pdfium::MakeRetain<CPDF_String>(nullptr, "FlateDecode", false);
+    auto decoder = pdfium::MakeRetain<CPDF_String>(nullptr, "FlateDecode");
     uint32_t decoder_number =
         objects_holder.AddIndirectObject(std::move(decoder));
 
@@ -213,7 +212,7 @@
   {
     // Wrong filter type.
     auto dict = pdfium::MakeRetain<CPDF_Dictionary>();
-    dict->SetNewFor<CPDF_String>("Filter", "RL", false);
+    dict->SetNewFor<CPDF_String>("Filter", "RL");
     std::optional<DecoderArray> decoder_array = GetDecoderArray(dict);
     EXPECT_FALSE(decoder_array.has_value());
   }
diff --git a/core/fpdfdoc/cpdf_action_unittest.cpp b/core/fpdfdoc/cpdf_action_unittest.cpp
index a787711..cf59a6a 100644
--- a/core/fpdfdoc/cpdf_action_unittest.cpp
+++ b/core/fpdfdoc/cpdf_action_unittest.cpp
@@ -39,14 +39,14 @@
     const ByteString& action_type) {
   auto dict = pdfium::MakeRetain<CPDF_Dictionary>();
   dict->SetNewFor<CPDF_Name>("Type", "Action");
-  dict->SetNewFor<CPDF_String>("S", action_type, /*is_hex=*/false);
+  dict->SetNewFor<CPDF_String>("S", action_type);
   return dict;
 }
 
 RetainPtr<CPDF_Dictionary> CreateInvalidActionDictWithoutType(
     const ByteString& action_type) {
   auto dict = pdfium::MakeRetain<CPDF_Dictionary>();
-  dict->SetNewFor<CPDF_String>("S", action_type, /*is_hex=*/false);
+  dict->SetNewFor<CPDF_String>("S", action_type);
   return dict;
 }
 
diff --git a/core/fpdfdoc/cpdf_annotlist.cpp b/core/fpdfdoc/cpdf_annotlist.cpp
index 14c3d14..f3f4a86 100644
--- a/core/fpdfdoc/cpdf_annotlist.cpp
+++ b/core/fpdfdoc/cpdf_annotlist.cpp
@@ -92,9 +92,8 @@
   pAnnotDict->SetNewFor<CPDF_Name>(pdfium::annotation::kSubtype, "Popup");
   pAnnotDict->SetNewFor<CPDF_String>(
       pdfium::form_fields::kT,
-      pParentDict->GetByteStringFor(pdfium::form_fields::kT), false);
-  pAnnotDict->SetNewFor<CPDF_String>(pdfium::annotation::kContents, contents,
-                                     /*bHex=*/false);
+      pParentDict->GetByteStringFor(pdfium::form_fields::kT));
+  pAnnotDict->SetNewFor<CPDF_String>(pdfium::annotation::kContents, contents);
 
   CFX_FloatRect rect = pParentDict->GetRectFor(pdfium::annotation::kRect);
   rect.Normalize();
@@ -166,7 +165,7 @@
 
   pAnnotDict->SetNewFor<CPDF_String>(
       pdfium::annotation::kAS,
-      pParentDict->GetByteStringFor(pdfium::annotation::kAS), false);
+      pParentDict->GetByteStringFor(pdfium::annotation::kAS));
 }
 
 }  // namespace
diff --git a/core/fpdfdoc/cpdf_annotlist_unittest.cpp b/core/fpdfdoc/cpdf_annotlist_unittest.cpp
index 653fdff..e15c110 100644
--- a/core/fpdfdoc/cpdf_annotlist_unittest.cpp
+++ b/core/fpdfdoc/cpdf_annotlist_unittest.cpp
@@ -48,8 +48,7 @@
     RetainPtr<CPDF_Dictionary> annotation =
         page_->GetOrCreateAnnotsArray()->AppendNew<CPDF_Dictionary>();
     annotation->SetNewFor<CPDF_Name>(pdfium::annotation::kSubtype, "Text");
-    annotation->SetNewFor<CPDF_String>(pdfium::annotation::kContents, contents,
-                                       /*bHex=*/false);
+    annotation->SetNewFor<CPDF_String>(pdfium::annotation::kContents, contents);
   }
 
   std::unique_ptr<CPDF_TestDocument> document_;
diff --git a/core/fpdfdoc/cpdf_bafontmap_unittest.cpp b/core/fpdfdoc/cpdf_bafontmap_unittest.cpp
index 25e7da5..db85b9f 100644
--- a/core/fpdfdoc/cpdf_bafontmap_unittest.cpp
+++ b/core/fpdfdoc/cpdf_bafontmap_unittest.cpp
@@ -23,8 +23,7 @@
 
   auto annot_dict = pdfium::MakeRetain<CPDF_Dictionary>();
   annot_dict->SetNewFor<CPDF_Name>(pdfium::annotation::kSubtype, "Widget");
-  annot_dict->SetNewFor<CPDF_String>("DA", "0 0 0 rg /F1 12 Tf",
-                                     /*bHex=*/false);
+  annot_dict->SetNewFor<CPDF_String>("DA", "0 0 0 rg /F1 12 Tf");
 
   CPDF_BAFontMap font_map(&doc, std::move(annot_dict), "N");
 #if !BUILDFLAG(IS_WIN)
@@ -51,8 +50,7 @@
 
   auto annot_dict = pdfium::MakeRetain<CPDF_Dictionary>();
   annot_dict->SetNewFor<CPDF_Name>(pdfium::annotation::kSubtype, "Widget");
-  annot_dict->SetNewFor<CPDF_String>("DA", "0 0 0 rg /F1 12 Tf",
-                                     /*bHex=*/false);
+  annot_dict->SetNewFor<CPDF_String>("DA", "0 0 0 rg /F1 12 Tf");
 
   CPDF_BAFontMap font_map(&doc, std::move(annot_dict), "N");
   EXPECT_EQ(font_map.GetPDFFontAlias(0), "F1");
diff --git a/core/fpdfdoc/cpdf_filespec_unittest.cpp b/core/fpdfdoc/cpdf_filespec_unittest.cpp
index cc2eb9c..11dfb0f 100644
--- a/core/fpdfdoc/cpdf_filespec_unittest.cpp
+++ b/core/fpdfdoc/cpdf_filespec_unittest.cpp
@@ -116,7 +116,7 @@
     }
 
     // With all the former fields and 'FS' field suggests 'URL' type.
-    dict_obj->SetNewFor<CPDF_String>("FS", "URL", false);
+    dict_obj->SetNewFor<CPDF_String>("FS", "URL");
     // Url string is not decoded.
     EXPECT_EQ(test_data[4].input, file_spec.GetFileName());
   }
@@ -134,7 +134,7 @@
       dict_obj->SetNewFor<CPDF_Name>(key, "http://evil.org");
       EXPECT_TRUE(file_spec.GetFileName().IsEmpty());
     }
-    dict_obj->SetNewFor<CPDF_String>("FS", "URL", false);
+    dict_obj->SetNewFor<CPDF_String>("FS", "URL");
     EXPECT_TRUE(file_spec.GetFileName().IsEmpty());
   }
 }
@@ -191,7 +191,7 @@
                 file_spec.GetFileStream()->GetUnicodeText().ToUTF8());
 
       if (i == 2) {
-        dict_obj->SetNewFor<CPDF_String>("FS", "URL", false);
+        dict_obj->SetNewFor<CPDF_String>("FS", "URL");
         EXPECT_FALSE(file_spec.GetFileStream());
       }
     }
diff --git a/core/fpdfdoc/cpdf_interactiveform.cpp b/core/fpdfdoc/cpdf_interactiveform.cpp
index 270cd5e..e2da3f9 100644
--- a/core/fpdfdoc/cpdf_interactiveform.cpp
+++ b/core/fpdfdoc/cpdf_interactiveform.cpp
@@ -308,7 +308,7 @@
   if (pFont)
     csDA = "/" + PDF_NameEncode(csBaseName) + " 0 Tf ";
   csDA += "0 g";
-  pFormDict->SetNewFor<CPDF_String>("DA", csDA, /*bHex=*/false);
+  pFormDict->SetNewFor<CPDF_String>("DA", csDA);
   return pFormDict;
 }
 
@@ -958,8 +958,7 @@
     auto pNewDict = pDoc->New<CPDF_Dictionary>();
     pNewDict->SetNewFor<CPDF_Name>("Type", "Filespec");
     WideString wsStr = CPDF_FileSpec::EncodeFileName(pdf_path);
-    pNewDict->SetNewFor<CPDF_String>(pdfium::stream::kF, wsStr.ToDefANSI(),
-                                     false);
+    pNewDict->SetNewFor<CPDF_String>(pdfium::stream::kF, wsStr.ToDefANSI());
     pNewDict->SetNewFor<CPDF_String>("UF", wsStr.AsStringView());
     pMainDict->SetFor("F", pNewDict);
   }
@@ -997,8 +996,7 @@
       ByteString csBExport = PDF_EncodeText(csExport.AsStringView());
       RetainPtr<const CPDF_Object> pOpt = pField->GetFieldAttr("Opt");
       if (pOpt) {
-        pFieldDict->SetNewFor<CPDF_String>(pdfium::form_fields::kV, csBExport,
-                                           false);
+        pFieldDict->SetNewFor<CPDF_String>(pdfium::form_fields::kV, csBExport);
       } else {
         pFieldDict->SetNewFor<CPDF_Name>(pdfium::form_fields::kV, csBExport);
       }
diff --git a/core/fpdfdoc/cpdf_nametree_unittest.cpp b/core/fpdfdoc/cpdf_nametree_unittest.cpp
index 8ee494d..413c914 100644
--- a/core/fpdfdoc/cpdf_nametree_unittest.cpp
+++ b/core/fpdfdoc/cpdf_nametree_unittest.cpp
@@ -13,7 +13,7 @@
 namespace {
 
 void AddNameKeyValue(CPDF_Array* names, const char* key, int value) {
-  names->AppendNew<CPDF_String>(key, false);
+  names->AppendNew<CPDF_String>(key);
   names->AppendNew<CPDF_Number>(value);
 }
 
@@ -30,8 +30,8 @@
                     const char* least,
                     const char* greatest) {
   auto limits = node->SetNewFor<CPDF_Array>("Limits");
-  limits->AppendNew<CPDF_String>(least, false);
-  limits->AppendNew<CPDF_String>(greatest, false);
+  limits->AppendNew<CPDF_String>(least);
+  limits->AppendNew<CPDF_String>(greatest);
 }
 
 void CheckLimitsArray(const CPDF_Dictionary* node,
diff --git a/fpdfsdk/cpdfsdk_appstream.cpp b/fpdfsdk/cpdfsdk_appstream.cpp
index 55cc243..9bea26f 100644
--- a/fpdfsdk/cpdfsdk_appstream.cpp
+++ b/fpdfsdk/cpdfsdk_appstream.cpp
@@ -1099,7 +1099,7 @@
   if (pImageDict->KeyExist("Name"))
     return;
 
-  pImageDict->SetNewFor<CPDF_String>("Name", name, false);
+  pImageDict->SetNewFor<CPDF_String>("Name", name);
 }
 
 std::optional<CheckStyle> CheckStyleFromCaption(const WideString& caption) {
diff --git a/fpdfsdk/cpdfsdk_baannot.cpp b/fpdfsdk/cpdfsdk_baannot.cpp
index c2d58c1..027bd56 100644
--- a/fpdfsdk/cpdfsdk_baannot.cpp
+++ b/fpdfsdk/cpdfsdk_baannot.cpp
@@ -110,7 +110,7 @@
 
 void CPDFSDK_BAAnnot::SetAppStateOff() {
   RetainPtr<CPDF_Dictionary> pDict = GetMutableAnnotDict();
-  pDict->SetNewFor<CPDF_String>(pdfium::annotation::kAS, "Off", false);
+  pDict->SetNewFor<CPDF_String>(pdfium::annotation::kAS, "Off");
 }
 
 ByteString CPDFSDK_BAAnnot::GetAppState() const {
diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp
index 637f9c7..ea171fa 100644
--- a/fpdfsdk/fpdf_annot.cpp
+++ b/fpdfsdk/fpdf_annot.cpp
@@ -1490,7 +1490,7 @@
   auto action = annot_dict->SetNewFor<CPDF_Dictionary>("A");
   action->SetNewFor<CPDF_Name>("Type", "Action");
   action->SetNewFor<CPDF_Name>("S", "URI");
-  action->SetNewFor<CPDF_String>("URI", uri, /*bHex=*/false);
+  action->SetNewFor<CPDF_String>("URI", uri);
   return true;
 }
 
diff --git a/fpdfsdk/fpdf_attachment.cpp b/fpdfsdk/fpdf_attachment.cpp
index 5153d11..89b71f9 100644
--- a/fpdfsdk/fpdf_attachment.cpp
+++ b/fpdfsdk/fpdf_attachment.cpp
@@ -192,8 +192,8 @@
     if (stringValue->IsHex()) {
       ByteString encoded =
           PDF_HexEncodeString(stringValue->GetString().AsStringView());
-      value = pdfium::MakeRetain<CPDF_String>(nullptr, encoded, false)
-                  ->GetUnicodeText();
+      value =
+          pdfium::MakeRetain<CPDF_String>(nullptr, encoded)->GetUnicodeText();
     }
   }
   // SAFETY: required from caller.
@@ -233,8 +233,7 @@
       ByteString::Format("D:%d%02d%02d%02d%02d%02d", dateTime.GetYear(),
                          dateTime.GetMonth(), dateTime.GetDay(),
                          dateTime.GetHour(), dateTime.GetMinute(),
-                         dateTime.GetSecond()),
-      false);
+                         dateTime.GetSecond()));
 
   // SAFETY: required from caller.
   pdfium::span<const uint8_t> contents_span = UNSAFE_BUFFERS(
diff --git a/fpdfsdk/fpdf_catalog_unittest.cpp b/fpdfsdk/fpdf_catalog_unittest.cpp
index 7a45cb0..b5f655a 100644
--- a/fpdfsdk/fpdf_catalog_unittest.cpp
+++ b/fpdfsdk/fpdf_catalog_unittest.cpp
@@ -52,7 +52,7 @@
   EXPECT_FALSE(FPDFCatalog_IsTagged(m_pDoc.get()));
 
   // Root with other key
-  m_pRootObj->SetNewFor<CPDF_String>("OTHER_KEY", "other value", false);
+  m_pRootObj->SetNewFor<CPDF_String>("OTHER_KEY", "other value");
   EXPECT_FALSE(FPDFCatalog_IsTagged(m_pDoc.get()));
 
   // Root with empty MarkInfo
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp
index e6ff79a..49e623a 100644
--- a/fpdfsdk/fpdf_editpage.cpp
+++ b/fpdfsdk/fpdf_editpage.cpp
@@ -174,7 +174,7 @@
   RetainPtr<CPDF_Dictionary> pInfoDict = pDoc->GetInfo();
   if (pInfoDict) {
     if (IsPDFSandboxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
-      pInfoDict->SetNewFor<CPDF_String>("CreationDate", DateStr, false);
+      pInfoDict->SetNewFor<CPDF_String>("CreationDate", DateStr);
     pInfoDict->SetNewFor<CPDF_String>("Creator", L"PDFium");
   }
 
@@ -559,7 +559,7 @@
   if (!pParams)
     return false;
 
-  pParams->SetNewFor<CPDF_String>(key, value, false);
+  pParams->SetNewFor<CPDF_String>(key, value);
   pPageObj->SetDirty(true);
   return true;
 }
diff --git a/fpdfsdk/fpdf_edittext.cpp b/fpdfsdk/fpdf_edittext.cpp
index fe52b92..9fcf7dd 100644
--- a/fpdfsdk/fpdf_edittext.cpp
+++ b/fpdfsdk/fpdf_edittext.cpp
@@ -114,8 +114,8 @@
   // TODO(npm): Maybe use FT_Get_CID_Registry_Ordering_Supplement to get the
   // CIDSystemInfo
   auto cid_system_info_dict = doc->NewIndirect<CPDF_Dictionary>();
-  cid_system_info_dict->SetNewFor<CPDF_String>("Registry", "Adobe", false);
-  cid_system_info_dict->SetNewFor<CPDF_String>("Ordering", "Identity", false);
+  cid_system_info_dict->SetNewFor<CPDF_String>("Registry", "Adobe");
+  cid_system_info_dict->SetNewFor<CPDF_String>("Ordering", "Identity");
   cid_system_info_dict->SetNewFor<CPDF_Number>("Supplement", 0);
   cid_font_dict->SetNewFor<CPDF_Reference>("CIDSystemInfo", doc,
                                            cid_system_info_dict->GetObjNum());
diff --git a/fpdfsdk/fpdf_ppo.cpp b/fpdfsdk/fpdf_ppo.cpp
index 266d021..58e2721 100644
--- a/fpdfsdk/fpdf_ppo.cpp
+++ b/fpdfsdk/fpdf_ppo.cpp
@@ -264,7 +264,7 @@
 
   RetainPtr<CPDF_Dictionary> info = dest()->GetInfo();
   if (info) {
-    info->SetNewFor<CPDF_String>("Producer", "PDFium", false);
+    info->SetNewFor<CPDF_String>("Producer", "PDFium");
   }
 
   if (root->GetByteStringFor("Type", ByteString()).IsEmpty()) {
diff --git a/fpdfsdk/fpdf_save.cpp b/fpdfsdk/fpdf_save.cpp
index d3e03a1..8dee668 100644
--- a/fpdfsdk/fpdf_save.cpp
+++ b/fpdfsdk/fpdf_save.cpp
@@ -119,7 +119,7 @@
         auto data_stream = pPDFDocument->NewIndirect<CPDF_Stream>(
             pFileWrite, pPDFDocument->New<CPDF_Dictionary>());
         int iLast = fxcrt::CollectionSize<int>(*pArray) - 2;
-        pArray->InsertNewAt<CPDF_String>(iLast, "datasets", false);
+        pArray->InsertNewAt<CPDF_String>(iLast, "datasets");
         pArray->InsertNewAt<CPDF_Reference>(iLast + 1, pPDFDocument,
                                             data_stream->GetObjNum());
       }
@@ -139,7 +139,7 @@
         auto data_stream = pPDFDocument->NewIndirect<CPDF_Stream>(
             pFileWrite, pPDFDocument->New<CPDF_Dictionary>());
         int iLast = fxcrt::CollectionSize<int>(*pArray) - 2;
-        pArray->InsertNewAt<CPDF_String>(iLast, "form", false);
+        pArray->InsertNewAt<CPDF_String>(iLast, "form");
         pArray->InsertNewAt<CPDF_Reference>(iLast + 1, pPDFDocument,
                                             data_stream->GetObjNum());
       }