Add GetWidthsArrayForCidFont() helper to fpdf_edit_embeddertest.cpp

It takes a few levels of traversals to get the widths array for a CID
font. Add a helper function to do this and convert an existing test to
use it. This helper will be reused in the near future in new tests.

Change-Id: I5d20229bbdc95823b3858af7c3417eae3c7bd72f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/128010
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index c35e874..799a7e1 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -149,6 +149,35 @@
   return os;
 }
 
+RetainPtr<const CPDF_Array> GetWidthsArrayForCidFont(const CPDF_Font* font) {
+  if (!font || !font->IsCIDFont()) {
+    ADD_FAILURE();
+    return nullptr;
+  }
+
+  RetainPtr<const CPDF_Dictionary> font_dict = font->GetFontDict();
+  if (!font_dict) {
+    ADD_FAILURE();
+    return nullptr;
+  }
+
+  RetainPtr<const CPDF_Array> descendant_array =
+      font_dict->GetArrayFor("DescendantFonts");
+  if (!descendant_array || descendant_array->size() != 1) {
+    ADD_FAILURE();
+    return nullptr;
+  }
+
+  RetainPtr<const CPDF_Dictionary> cidfont_dict =
+      descendant_array->GetDictAt(0);
+  if (!cidfont_dict) {
+    ADD_FAILURE();
+    return nullptr;
+  }
+
+  return cidfont_dict->GetArrayFor("W");
+}
+
 }  // namespace
 
 class FPDFEditEmbedderTest : public EmbedderTest {
@@ -5363,8 +5392,8 @@
 // Regression test for https://issues.chromium.org/377948405
 // fonts/bug_377948405.ttf was made with harfbuzz* subset utility:
 // > hb-subset NotoSans-Regular.ttf -u 41,C0,C4-C6,C8 -o bug_377948405.ttf
-// Font W array state before bug fix: [ 1[ 639 639 639 639 881 556]]
-// Font W array state after bug fix: [ 1[ 639] 5 7 639 8[ 881 556]]
+// Font W array state before bug fix: [1 [639 639 639 639 881 556]]
+// Font W array state after bug fix: [1 [639] 5 7 639 8 [881 556]]
 // *At the moment of the bug detection harfbuzz version was 10.1.0
 TEST_F(FPDFEditEmbedderTest, Bug377948405) {
   CreateEmptyDocument();
@@ -5380,23 +5409,9 @@
       document(), font_data.data(), font_data.size(), FPDF_FONT_TRUETYPE, 1));
   ASSERT_TRUE(font);
   CPDF_Font* typed_font = CPDFFontFromFPDFFont(font.get());
-  EXPECT_TRUE(typed_font->IsCIDFont());
-
-  // Get font descendant
-  RetainPtr<const CPDF_Dictionary> font_dict = typed_font->GetFontDict();
-  ASSERT_TRUE(font_dict);
-  RetainPtr<const CPDF_Array> descendant_array =
-      font_dict->GetArrayFor("DescendantFonts");
-  ASSERT_TRUE(descendant_array);
-  EXPECT_EQ(1u, descendant_array->size());
-
-  // Check the CIDFontDict width array
-  RetainPtr<const CPDF_Dictionary> cidfont_dict =
-      descendant_array->GetDictAt(0);
-  ASSERT_TRUE(cidfont_dict);
-  RetainPtr<const CPDF_Array> widths_array = cidfont_dict->GetArrayFor("W");
+  RetainPtr<const CPDF_Array> widths_array =
+      GetWidthsArrayForCidFont(typed_font);
   ASSERT_TRUE(widths_array);
-
   EXPECT_EQ(widths_array->GetIntegerAt(0), 1);
-  ASSERT_EQ(widths_array->GetIntegerAt(2), 5);
+  EXPECT_EQ(widths_array->GetIntegerAt(2), 5);
 }