Package org.apache.tika.fuzzing.pdf
Class EvilCOSWriter
java.lang.Object
org.apache.tika.fuzzing.pdf.EvilCOSWriter
- All Implemented Interfaces:
Closeable
,AutoCloseable
,org.apache.pdfbox.cos.ICOSVisitor
-
Field Summary
Modifier and TypeFieldDescriptionstatic final byte[]
The array close token.static final byte[]
The array open token.static final byte[]
The start to a PDF comment.static final byte[]
The dictionary close token.static final byte[]
The dictionary open token.static final byte[]
The end object token.static final byte[]
The close stream token.static final byte[]
The EOF constant.static final byte[]
Garbage bytes used to create the PDF header.static final byte[]
The starting object token.static final byte[]
The reference token.static final byte[]
space character.static final byte[]
The start xref token.static final byte[]
The open stream token.static final byte[]
The trailer token.static final byte[]
The output version of the PDF.static final byte[]
The XREF token.static final byte[]
The xref free token.static final byte[]
The xref used token. -
Constructor Summary
ConstructorDescriptionEvilCOSWriter
(OutputStream outputStream, PDFTransformerConfig config) COSWriter constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
addXRefEntry
(org.apache.pdfbox.pdfparser.xref.XReferenceEntry entry) add an entry in the x ref table for later dump.void
close()
This will close the stream.protected void
doWriteBody
(org.apache.pdfbox.cos.COSDocument doc) This will write the body of the document.protected void
doWriteHeader
(org.apache.pdfbox.cos.COSDocument doc) This will write the header to the PDF document.void
doWriteObject
(org.apache.pdfbox.cos.COSBase obj) void
doWriteObject
(org.apache.pdfbox.cos.COSObjectKey key, org.apache.pdfbox.cos.COSBase obj) protected void
doWriteTrailer
(org.apache.pdfbox.cos.COSDocument doc) This will write the trailer to the PDF document.Return the stream of PDF data to be signed.protected long
This will get the current object number.Map<org.apache.pdfbox.cos.COSBase,
org.apache.pdfbox.cos.COSObjectKey> This will get all available object keys.protected OutputStream
This will get the output stream.protected org.apache.pdfbox.pdfwriter.COSStandardOutputStream
This will get the standard output stream.protected long
This will get the current start xref.protected List<org.apache.pdfbox.pdfparser.xref.XReferenceEntry>
This will get the xref entries.protected Long[]
getXRefRanges
(List<org.apache.pdfbox.pdfparser.xref.XReferenceEntry> xRefEntriesList) check the xref entries and write out the ranges.protected void
setNumber
(long newNumber) This will set the current object number.protected void
setStartxref
(long newStartxref) This will set the start xref.void
visitFromArray
(org.apache.pdfbox.cos.COSArray obj) void
visitFromBoolean
(org.apache.pdfbox.cos.COSBoolean obj) void
visitFromDictionary
(org.apache.pdfbox.cos.COSDictionary obj) void
visitFromDocument
(org.apache.pdfbox.cos.COSDocument doc) void
visitFromFloat
(org.apache.pdfbox.cos.COSFloat obj) void
visitFromInt
(org.apache.pdfbox.cos.COSInteger obj) void
visitFromName
(org.apache.pdfbox.cos.COSName obj) void
visitFromNull
(org.apache.pdfbox.cos.COSNull obj) void
visitFromStream
(org.apache.pdfbox.cos.COSStream obj) void
visitFromString
(org.apache.pdfbox.cos.COSString obj) void
write
(org.apache.pdfbox.cos.COSDocument doc) This will write the pdf document. }void
write
(org.apache.pdfbox.pdmodel.fdf.FDFDocument doc) This will write the fdf document.void
write
(org.apache.pdfbox.pdmodel.PDDocument doc) This will write the pdf document.void
write
(org.apache.pdfbox.pdmodel.PDDocument doc, org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface signInterface) This will write the pdf document.void
writeExternalSignature
(byte[] cmsSignature) Write externally created signature of PDF data obtained viagetDataToSign()
method.void
writeReference
(org.apache.pdfbox.cos.COSBase obj) visitFromObjRef method comment.static void
writeString
(byte[] bytes, OutputStream output) This will output the given text/byte getString as a PDF object.static void
writeString
(org.apache.pdfbox.cos.COSString string, OutputStream output) This will output the given byte getString as a PDF object.
-
Field Details
-
DICT_OPEN
public static final byte[] DICT_OPENThe dictionary open token. -
DICT_CLOSE
public static final byte[] DICT_CLOSEThe dictionary close token. -
SPACE
public static final byte[] SPACEspace character. -
COMMENT
public static final byte[] COMMENTThe start to a PDF comment. -
VERSION
public static final byte[] VERSIONThe output version of the PDF. -
GARBAGE
public static final byte[] GARBAGEGarbage bytes used to create the PDF header. -
EOF
public static final byte[] EOFThe EOF constant. -
REFERENCE
public static final byte[] REFERENCEThe reference token. -
XREF
public static final byte[] XREFThe XREF token. -
XREF_FREE
public static final byte[] XREF_FREEThe xref free token. -
XREF_USED
public static final byte[] XREF_USEDThe xref used token. -
TRAILER
public static final byte[] TRAILERThe trailer token. -
STARTXREF
public static final byte[] STARTXREFThe start xref token. -
OBJ
public static final byte[] OBJThe starting object token. -
ENDOBJ
public static final byte[] ENDOBJThe end object token. -
ARRAY_OPEN
public static final byte[] ARRAY_OPENThe array open token. -
ARRAY_CLOSE
public static final byte[] ARRAY_CLOSEThe array close token. -
STREAM
public static final byte[] STREAMThe open stream token. -
ENDSTREAM
public static final byte[] ENDSTREAMThe close stream token.
-
-
Constructor Details
-
EvilCOSWriter
COSWriter constructor.- Parameters:
outputStream
- The output stream to write the PDF. It will be closed when this object is closed.
-
-
Method Details
-
writeString
public static void writeString(org.apache.pdfbox.cos.COSString string, OutputStream output) throws IOException This will output the given byte getString as a PDF object.- Parameters:
string
- COSString to be writtenoutput
- The stream to write to.- Throws:
IOException
- If there is an error writing to the stream.
-
writeString
This will output the given text/byte getString as a PDF object.- Parameters:
bytes
- byte array representation of a string to be writtenoutput
- The stream to write to.- Throws:
IOException
- If there is an error writing to the stream.
-
addXRefEntry
protected void addXRefEntry(org.apache.pdfbox.pdfparser.xref.XReferenceEntry entry) add an entry in the x ref table for later dump.- Parameters:
entry
- The new entry to add.
-
close
This will close the stream.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Throws:
IOException
- If the underlying stream throws an exception.
-
getNumber
protected long getNumber()This will get the current object number.- Returns:
- The current object number.
-
setNumber
protected void setNumber(long newNumber) This will set the current object number.- Parameters:
newNumber
- The new object number.
-
getObjectKeys
This will get all available object keys.- Returns:
- A map of all object keys.
-
getOutput
This will get the output stream.- Returns:
- The output stream.
-
getStandardOutput
protected org.apache.pdfbox.pdfwriter.COSStandardOutputStream getStandardOutput()This will get the standard output stream.- Returns:
- The standard output stream.
-
getStartxref
protected long getStartxref()This will get the current start xref.- Returns:
- The current start xref.
-
setStartxref
protected void setStartxref(long newStartxref) This will set the start xref.- Parameters:
newStartxref
- The new start xref attribute.
-
getXRefEntries
This will get the xref entries.- Returns:
- All available xref entries.
-
doWriteBody
This will write the body of the document.- Parameters:
doc
- The document to write the body for.- Throws:
IOException
- If there is an error writing the data.
-
doWriteObject
- Throws:
IOException
-
doWriteObject
public void doWriteObject(org.apache.pdfbox.cos.COSObjectKey key, org.apache.pdfbox.cos.COSBase obj) throws IOException - Throws:
IOException
-
doWriteHeader
This will write the header to the PDF document.- Parameters:
doc
- The document to get the data from.- Throws:
IOException
- If there is an error writing to the stream.
-
doWriteTrailer
This will write the trailer to the PDF document.- Parameters:
doc
- The document to create the trailer for.- Throws:
IOException
- If there is an IOError while writing the document.
-
getDataToSign
Return the stream of PDF data to be signed. Clients should use this method only to create signatures externally.write(PDDocument)
method should have been called prior. The created signature should be set usingwriteExternalSignature(byte[])
.When
SignatureInterface
instance is used, COSWriter obtains and writes the signature itself.- Returns:
- data stream to be signed
- Throws:
IllegalStateException
- if PDF is not prepared for external signingIOException
- if input data is closed
-
writeExternalSignature
Write externally created signature of PDF data obtained viagetDataToSign()
method.- Parameters:
cmsSignature
- CMS signature byte array- Throws:
IllegalStateException
- if PDF is not prepared for external signingIOException
- if source data stream is closed
-
getXRefRanges
protected Long[] getXRefRanges(List<org.apache.pdfbox.pdfparser.xref.XReferenceEntry> xRefEntriesList) check the xref entries and write out the ranges. The format of the returned array is exactly the same as the pdf specification. See section 7.5.4 of ISO32000-1:2008, example 1 (page 40) for reference.example: 0 1 2 5 6 7 8 10
will create a array with follow ranges
0 3 5 4 10 1
this mean that the element 0 is followed by two other related numbers that represent a cluster of the size 3. 5 is follow by three other related numbers and create a cluster of size 4. etc.
- Parameters:
xRefEntriesList
- list with the xRef entries that was written- Returns:
- a integer array with the ranges
-
visitFromArray
- Specified by:
visitFromArray
in interfaceorg.apache.pdfbox.cos.ICOSVisitor
- Throws:
IOException
-
visitFromBoolean
- Specified by:
visitFromBoolean
in interfaceorg.apache.pdfbox.cos.ICOSVisitor
- Throws:
IOException
-
visitFromDictionary
- Specified by:
visitFromDictionary
in interfaceorg.apache.pdfbox.cos.ICOSVisitor
- Throws:
IOException
-
visitFromDocument
- Specified by:
visitFromDocument
in interfaceorg.apache.pdfbox.cos.ICOSVisitor
- Throws:
IOException
-
visitFromFloat
- Specified by:
visitFromFloat
in interfaceorg.apache.pdfbox.cos.ICOSVisitor
- Throws:
IOException
-
visitFromInt
- Specified by:
visitFromInt
in interfaceorg.apache.pdfbox.cos.ICOSVisitor
- Throws:
IOException
-
visitFromName
- Specified by:
visitFromName
in interfaceorg.apache.pdfbox.cos.ICOSVisitor
- Throws:
IOException
-
visitFromNull
- Specified by:
visitFromNull
in interfaceorg.apache.pdfbox.cos.ICOSVisitor
- Throws:
IOException
-
writeReference
visitFromObjRef method comment.- Parameters:
obj
- The object that is being visited.- Throws:
IOException
- If there is an exception while visiting this object.
-
visitFromStream
- Specified by:
visitFromStream
in interfaceorg.apache.pdfbox.cos.ICOSVisitor
- Throws:
IOException
-
visitFromString
- Specified by:
visitFromString
in interfaceorg.apache.pdfbox.cos.ICOSVisitor
- Throws:
IOException
-
write
This will write the pdf document. }- Parameters:
doc
- The document to write.- Throws:
IOException
- If an error occurs while generating the data.
-
write
This will write the pdf document. If signature should be created externally,writeExternalSignature(byte[])
should be invoked to set signature after calling this method.- Parameters:
doc
- The document to write.- Throws:
IOException
- If an error occurs while generating the data.
-
write
public void write(org.apache.pdfbox.pdmodel.PDDocument doc, org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface signInterface) throws IOException This will write the pdf document. If signature should be created externally,writeExternalSignature(byte[])
should be invoked to set signature after calling this method.- Parameters:
doc
- The document to write.signInterface
- class to be used for signing;null
if external signing would be performed or there will be no signing at all- Throws:
IOException
- If an error occurs while generating the data.IllegalStateException
- If the document has an encryption dictionary but no protection policy.
-
write
This will write the fdf document.- Parameters:
doc
- The document to write.- Throws:
IOException
- If an error occurs while generating the data.
-