Add pdfium_test --password support.

Instead of always loading documents with no password, check for
--password=value from the command line, and pass the value to the
document loading functions.

Change-Id: Ibabaa63f9f9c0a8440c0775f77b5bfcb4af67498
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/63712
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc
index e3e9c0d..e7e1049 100644
--- a/samples/pdfium_test.cc
+++ b/samples/pdfium_test.cc
@@ -135,6 +135,7 @@
   bool linux_no_system_fonts = false;
 #endif
   OutputFormat output_format = OUTPUT_NONE;
+  std::string password;
   std::string scale_factor_as_string;
   std::string exe_path;
   std::string bin_directory;
@@ -536,6 +537,13 @@
 #endif  // V8_USE_EXTERNAL_STARTUP_DATA
 #endif  // PDF_ENABLE_V8
 
+    } else if (cur_arg.size() > 11 &&
+               cur_arg.compare(0, 11, "--password=") == 0) {
+      if (!options->password.empty()) {
+        fprintf(stderr, "Duplicate --password argument\n");
+        return false;
+      }
+      options->password = cur_arg.substr(11);
     } else if (cur_arg.size() > 8 && cur_arg.compare(0, 8, "--scale=") == 0) {
       if (!options->scale_factor_as_string.empty()) {
         fprintf(stderr, "Duplicate --scale argument\n");
@@ -821,13 +829,15 @@
   // |doc| must outlive |form_callbacks.loaded_pages|.
   ScopedFPDFDocument doc;
 
+  const char* password =
+      options.password.empty() ? nullptr : options.password.c_str();
   bool is_linearized = false;
   if (options.use_load_mem_document) {
-    doc.reset(FPDF_LoadMemDocument(buf, len, nullptr));
+    doc.reset(FPDF_LoadMemDocument(buf, len, password));
   } else {
     if (FPDFAvail_IsLinearized(pdf_avail.get()) == PDF_LINEARIZED) {
       int avail_status = PDF_DATA_NOTAVAIL;
-      doc.reset(FPDFAvail_GetDocument(pdf_avail.get(), nullptr));
+      doc.reset(FPDFAvail_GetDocument(pdf_avail.get(), password));
       if (doc) {
         while (avail_status == PDF_DATA_NOTAVAIL)
           avail_status = FPDFAvail_IsDocAvail(pdf_avail.get(), &hints);
@@ -847,7 +857,7 @@
         is_linearized = true;
       }
     } else {
-      doc.reset(FPDF_LoadCustomDocument(&file_access, nullptr));
+      doc.reset(FPDF_LoadCustomDocument(&file_access, password));
     }
   }