Ho un file PDF che il mio lettore (Zathura) non avrebbe aperto. Ho un altro lettore (mupdf) che lo apre. Credo che Zathura dipenda dal rilevamento del valore magico del file (primi pochi byte) perché può aprire altri formati oltre al PDF.
All'ispezione, ho notato che è stato rilevato come Java serialisation data, version 5
.
$ file document.pdf
document.pdf: Java serialization data, version 5
Ispezione dei primi pochi byte:
00000000: aced 0005 7572 0002 5b42 acf3 17f8 0608 ....ur..[B......
00000010: 54e0 0200 0078 7000 0389 9525 5044 462d T....xp....%PDF-
Normalmente inizierebbe un PDF %PDF
al byte 0.
Se tolgo i primi 27 byte, posso aprire il file:
$ dd if=~/Downloads/file.pdf skip=27 bs=1 of=/tmp/file.pdf
Un'ulteriore ispezione mostra che il file è stato generato da Apache FOP Versione 1.1. Non riesco a trovare nessuna metion di questo formato per un PDF nonostante un bel po 'di Google.
È un formato valido per un PDF?
aggiornare avendo approfondito un po 'l'intestazione, sembra essere un array serializzato java in cui l'array contiene i dati del file PDF. Ho guardato il spec per il protocollo di serializzazione e, in particolare, il descrizione grammaticale da cui ho potuto decodificare l'intestazione di 27 byte come:
AC ED
=STREAM_MAGIC
identifica il contenuto del file come protocollo di serializzazione.00 05
=STREAM_VERSION
La versione di serializzazione.75
=TC_ARRAY
72
=TC_CLASSDESC
00 02
= Lunghezza del nome della classe.5b 42
= il nome della classeur
AC F3 17 F8 06 08 54 E0
=SerialVersionUID
, l'identificativo della versione seriale della classe.02
= bandieraSC_SERIALIZABLE
- l'oggetto supporta la serializzazione.00 00
= Numero di campi in questa classe (zero!)78
=TC_ENDBLOCKDATA
.70
=TC_NULL
(L'oggetto non ha una classe genitore).00 03 89 95
= lunghezza di "array" = 231829 = dimensione dei dati in byte
Il PDF estratto è infatti lungo 231829 byte
$ dd if=document.pdf skip=27 bs=1 | wc -c
231829 bytes
Ciò indicherebbe che il file non è corrotto ed è in effetti un array serializzato Java che contiene un documento PDF. Ma questo sarebbe considerato un PDF valido?