Fix encoding problem in FPDFAnnot_SetAP().

BUG=pdfium:1212

Change-Id: I1266b04adc83179d453b6fc6c61f815cd7795cfe
Reviewed-on: https://pdfium-review.googlesource.com/c/47710
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp
index fa13c2c..8cd57f8 100644
--- a/fpdfsdk/fpdf_annot.cpp
+++ b/fpdfsdk/fpdf_annot.cpp
@@ -785,7 +785,7 @@
     if (!pApDict)
       pApDict = pAnnotDict->SetNewFor<CPDF_Dictionary>("AP");
 
-    ByteString newValue = ByteStringFromFPDFWideString(value);
+    ByteString newValue = PDF_EncodeText(WideStringFromFPDFWideString(value));
     auto pNewApStream = pdfium::MakeUnique<CPDF_Stream>();
     pNewApStream->SetData(newValue.AsRawSpan());
     pApDict->SetFor(modeKey, std::move(pNewApStream));
diff --git a/fpdfsdk/fpdf_annot_embeddertest.cpp b/fpdfsdk/fpdf_annot_embeddertest.cpp
index 4c9a7f1..4e84d89 100644
--- a/fpdfsdk/fpdf_annot_embeddertest.cpp
+++ b/fpdfsdk/fpdf_annot_embeddertest.cpp
@@ -1579,6 +1579,30 @@
     EXPECT_STREQ(kData, BufferToWString(buf).c_str());
   }
 
+  {
+    ScopedFPDFAnnotation annot(FPDFPage_CreateAnnot(page, FPDF_ANNOT_STAMP));
+    ASSERT_TRUE(annot);
+    EXPECT_EQ(2, FPDFPage_GetAnnotCount(page));
+    EXPECT_EQ(FPDF_ANNOT_STAMP, FPDFAnnot_GetSubtype(annot.get()));
+    // Also do the same test for its appearance string.
+    std::fill(buf.begin(), buf.end(), 'x');
+    ASSERT_EQ(2u,
+              FPDFAnnot_GetAP(annot.get(), FPDF_ANNOT_APPEARANCEMODE_ROLLOVER,
+                              buf.data(), buf.size()));
+    EXPECT_STREQ(L"", BufferToWString(buf).c_str());
+
+    std::unique_ptr<unsigned short, pdfium::FreeDeleter> text =
+        GetFPDFWideString(kData);
+    EXPECT_TRUE(FPDFAnnot_SetAP(annot.get(), FPDF_ANNOT_APPEARANCEMODE_ROLLOVER,
+                                text.get()));
+
+    std::fill(buf.begin(), buf.end(), 'x');
+    ASSERT_EQ(6u,
+              FPDFAnnot_GetAP(annot.get(), FPDF_ANNOT_APPEARANCEMODE_ROLLOVER,
+                              buf.data(), buf.size()));
+    EXPECT_STREQ(kData, BufferToWString(buf).c_str());
+  }
+
   UnloadPage(page);
 
   {
@@ -1589,7 +1613,7 @@
     FPDF_PAGE saved_page = LoadSavedPage(0);
     ASSERT_TRUE(saved_page);
 
-    EXPECT_EQ(1, FPDFPage_GetAnnotCount(saved_page));
+    EXPECT_EQ(2, FPDFPage_GetAnnotCount(saved_page));
     {
       ScopedFPDFAnnotation annot(FPDFPage_GetAnnot(saved_page, 0));
       ASSERT_TRUE(annot);
@@ -1601,6 +1625,18 @@
       EXPECT_STREQ(kData, BufferToWString(buf).c_str());
     }
 
+    {
+      ScopedFPDFAnnotation annot(FPDFPage_GetAnnot(saved_page, 0));
+      ASSERT_TRUE(annot);
+      // TODO(thestig): This return FPDF_ANNOT_UNKNOWN for some reason.
+      // EXPECT_EQ(FPDF_ANNOT_TEXT, FPDFAnnot_GetSubtype(annot.get()));
+
+      std::fill(buf.begin(), buf.end(), 'x');
+      ASSERT_EQ(6u, FPDFAnnot_GetStringValue(annot.get(), kTestKey, buf.data(),
+                                             buf.size()));
+      EXPECT_STREQ(kData, BufferToWString(buf).c_str());
+    }
+
     CloseSavedPage(saved_page);
     CloseSavedDocument();
   }