Selaa lähdekoodia

LibPDF: Fix assertion when destination page is an index

This isn't correct per spec, but it happens in practice, e.g.
0000847.pdf, 0000327.pdf, 0000124.pdf from 0000.zip from
https://pdfa.org/new-large-scale-pdf-corpus-now-publicly-available/
Nico Weber 1 vuosi sitten
vanhempi
commit
8922574133
1 muutettua tiedostoa jossa 9 lisäystä ja 1 poistoa
  1. 9 1
      Userland/Libraries/LibPDF/Document.cpp

+ 9 - 1
Userland/Libraries/LibPDF/Document.cpp

@@ -451,7 +451,15 @@ PDFErrorOr<Destination> Document::create_destination_from_parameters(NonnullRefP
         VERIFY_NOT_REACHED();
     }
 
-    return Destination { type, page_number_by_index_ref.get(page_ref.as_ref_index()), parameters };
+    // The spec requires page_ref to be an indirect reference to a page object,
+    // but in practice it's sometimes a page index.
+    Optional<u32> page_number;
+    if (page_ref.has<int>())
+        page_number = page_ref.get<int>();
+    else
+        page_number = page_number_by_index_ref.get(page_ref.as_ref_index());
+
+    return Destination { type, page_number, parameters };
 }
 
 PDFErrorOr<Optional<NonnullRefPtr<Object>>> Document::get_inheritable_object(DeprecatedFlyString const& name, NonnullRefPtr<DictObject> object)