Handle trailing garbage after XMP metadata in EPS files more gracefully

v0.27.3
vog 14 years ago
parent 2b0ff37419
commit 3db4d31938

@ -644,10 +644,11 @@ namespace {
#ifndef SUPPRESS_WARNINGS #ifndef SUPPRESS_WARNINGS
EXV_WARNING << "Unexpected " << line.size() << " bytes of data after XMP at position: " << (xmpPos + xmpSize) << "\n"; EXV_WARNING << "Unexpected " << line.size() << " bytes of data after XMP at position: " << (xmpPos + xmpSize) << "\n";
#endif #endif
if (write) throw Error(21); flexibleEmbedding = false;
} } else {
readLine(line, data, posLineAfterXmp, posEndEps); readLine(line, data, posLineAfterXmp, posEndEps);
flexibleEmbedding = (line == "% &&end XMP packet marker&&" || line == "% &&end XMP packet marker&&"); flexibleEmbedding = (line == "% &&end XMP packet marker&&" || line == "% &&end XMP packet marker&&");
}
if (flexibleEmbedding) { if (flexibleEmbedding) {
#ifdef DEBUG #ifdef DEBUG
EXV_DEBUG << "readWriteEpsMetadata: XMP embedding is flexible\n"; EXV_DEBUG << "readWriteEpsMetadata: XMP embedding is flexible\n";

@ -0,0 +1,47 @@
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 5 5 105 105
%%LanguageLevel: 2
%ADO_ContainsXMP: MainFirst
%%Pages: 1
%Exiv2Version: 0.21.1
%Exiv2Website: http://www.exiv2.org/
%%EndComments
%%Page: 1 1
%%EndPageComments
%%BeginPageSetup
%Exiv2BeginXMP: Before %%EndPageSetup
/currentdistillerparams where
{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse
{userdict /Exiv2_pdfmark /cleartomark load put
userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put}
{userdict /Exiv2_pdfmark /pdfmark load put
userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse
[/NamespacePush Exiv2_pdfmark
[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark
[{Exiv2_metadata_stream} 2 dict begin
/Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark
[{Exiv2_metadata_stream}
currentfile 0 (% &&end XMP packet marker&&)
/SubFileDecode filter Exiv2_metafile_pdfmark
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="TEST">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="" xmlns:test="http://www.example.com/" test:test="TEST"/>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?> % some garbage between XMP and end marker
% &&end XMP packet marker&&
[/Document 1 dict begin
/Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark
%Exiv2EndXMP
%%EndPageSetup
10 setlinewidth
10 10 moveto
0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath
stroke
%%PageTrailer
%Exiv2BeginXMP: After %%PageTrailer
[/EMC Exiv2_pdfmark
[/NamespacePop Exiv2_pdfmark
%Exiv2EndXMP
%%EOF

@ -0,0 +1,70 @@
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 5 5 105 105
%%LanguageLevel: 2
%ADO_ContainsXMP: MainFirst
%%Pages: 1
%Exiv2Version: _Exiv2Version_
%Exiv2Website: http://www.exiv2.org/
%%EndComments
%%Page: 1 1
%%EndPageComments
%%BeginPageSetup
%Exiv2BeginXMP: Before %%EndPageSetup
/currentdistillerparams where
{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse
{userdict /Exiv2_pdfmark /cleartomark load put
userdict /Exiv2_metafile_pdfmark {flushfile cleartomark} bind put}
{userdict /Exiv2_pdfmark /pdfmark load put
userdict /Exiv2_metafile_pdfmark {/PUT pdfmark} bind put} ifelse
[/NamespacePush Exiv2_pdfmark
[/_objdef {Exiv2_metadata_stream} /type /stream /OBJ Exiv2_pdfmark
[{Exiv2_metadata_stream} 2 dict begin
/Type /Metadata def /Subtype /XML def currentdict end /PUT Exiv2_pdfmark
[{Exiv2_metadata_stream}
currentfile 0 (% &&end XMP packet marker&&)
/SubFileDecode filter Exiv2_metafile_pdfmark
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:test="http://www.example.com/"
test:test="TEST"/>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>
% &&end XMP packet marker&&
[/Document 1 dict begin
/Metadata {Exiv2_metadata_stream} def currentdict end /BDC Exiv2_pdfmark
%Exiv2EndXMP
%%EndPageSetup
10 setlinewidth
10 10 moveto
0 90 rlineto 90 0 rlineto 0 -90 rlineto closepath
stroke
%%PageTrailer
%Exiv2BeginXMP: After %%PageTrailer
[/EMC Exiv2_pdfmark
[/NamespacePop Exiv2_pdfmark
%Exiv2EndXMP
%%EOF

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:test="http://www.example.com/"
test:test="TEST"/>
</rdf:RDF>
</x:xmpmeta>

@ -358,6 +358,28 @@ Warning: Unable to find XMP embedding trailer ending at position: 1424
eps-flat_minimal_missing-xmp-embedding-trailer.eps: Could not write metadata to file: Failed to write image eps-flat_minimal_missing-xmp-embedding-trailer.eps: Could not write metadata to file: Failed to write image
Exit code: 1 Exit code: 1
-----> eps-flat_minimal_xmp-garbage-before-endmarker.eps <-----
Command: exiv2 -u -pa eps-flat_minimal_xmp-garbage-before-endmarker.eps
Warning: Unexpected 42 bytes of data after XMP at position: 1250
Xmp.test.test XmpText 4 TEST
Exit code: 253
Command: exiv2 -f -eX eps-flat_minimal_xmp-garbage-before-endmarker.eps
Warning: Unexpected 42 bytes of data after XMP at position: 1250
Exit code: 0
Command: exiv2 -ix eps-flat_minimal_xmp-garbage-before-endmarker.eps
Warning: Unexpected 42 bytes of data after XMP at position: 1250
Warning: Unexpected 42 bytes of data after XMP at position: 1250
Exit code: 0
Command: (2) exiv2 -ix eps-flat_minimal_xmp-garbage-before-endmarker.eps
Exit code: 0
Command: exiv2 -f -ex eps-flat_minimal_xmp-garbage-before-endmarker.eps
Exit code: 0
-----> eps-flat_minimal_xmp-readonly.eps <----- -----> eps-flat_minimal_xmp-readonly.eps <-----
Command: exiv2 -u -pa eps-flat_minimal_xmp-readonly.eps Command: exiv2 -u -pa eps-flat_minimal_xmp-readonly.eps

Loading…
Cancel
Save