[
https://issues.apache.org/jira/browse/PDFBOX-1799?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Puhong You updated PDFBOX-1799:
-------------------------------
Description:
In pdfbox 1.8.2 and 1.8.3, the constructor of PDJPeg class that takes a
BufferedImage throws java.lang.NullPointerException:
BufferedImage bi =
ImageIO.read(this.getClass().getClassLoader().getResourceAsStream("images/icon.png"));
PDJpeg icon = new PDJpeg(pdf, bi);
The stack trace is:
java.lang.NullPointerException
at
org.apache.pdfbox.util.ImageIOUtil.addResolution(ImageIOUtil.java:211)
at
org.apache.pdfbox.util.ImageIOUtil.createMetadata(ImageIOUtil.java:204)
at org.apache.pdfbox.util.ImageIOUtil.writeImage(ImageIOUtil.java:158)
at
org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.createImageStream(PDJpeg.java:171)
at
org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.<init>(PDJpeg.java:133)
The culprit is in this method in the ImageIOUtil:
private static IIOMetadata createMetadata(RenderedImage image, ImageWriter
imageWriter,
ImageWriteParam writerParams, int resolution)
{
.....
IIOMetadata meta = imageWriter.getDefaultImageMetadata( type,
writerParams );
return (addResolution(meta, resolution) ? meta : null);
}
One of the JPG image writer in our environment is
com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriter, its implementation
of getDefaultImageMetadata() returns null:
public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType,
ImageWriteParam param) {
return null;
}
this causes the NullPointerException at the first line of the addResolution()
method:
if (!meta.isReadOnly() && meta.isStandardMetadataFormatSupported())
I suggest that null checks be added at the following places:
1. ImageIOUtil.addResolution():
if (!meta.isReadOnly() && meta.isStandardMetadataFormatSupported())
==>
if (meta != null && meta.isReadOnly() &&
meta.isStandardMetadataFormatSupported())
2. ImageIOUtil.writeImage():
IIOMetadata meta = createMetadata( image, imageWriter,
writerParams, resolution);
imageWriter.setOutput( output );
imageWriter.write( null, new IIOImage( image, null, meta ),
writerParams );
foundWriter = true;
==>
IIOMetadata meta = createMetadata( image, imageWriter,
writerParams, resolution);
if (meta != null) {
imageWriter.setOutput( output );
imageWriter.write( null, new IIOImage( image, null,
meta ), writerParams );
foundWriter = true;
}
was:
In pdfbox 1.8.2 and 1.8.3, the constructor of PDJPeg class that takes a
BufferedImage throws java.lang.NullPointerException:
BufferedImage bi =
ImageIO.read(this.getClass().getClassLoader().getResourceAsStream("images/icon.png"));
PDJpeg icon = new PDJpeg(pdf, icon);
The stack trace is:
java.lang.NullPointerException
at
org.apache.pdfbox.util.ImageIOUtil.addResolution(ImageIOUtil.java:211)
at
org.apache.pdfbox.util.ImageIOUtil.createMetadata(ImageIOUtil.java:204)
at org.apache.pdfbox.util.ImageIOUtil.writeImage(ImageIOUtil.java:158)
at
org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.createImageStream(PDJpeg.java:171)
at
org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.<init>(PDJpeg.java:133)
The culprit is in this method in the ImageIOUtil:
private static IIOMetadata createMetadata(RenderedImage image, ImageWriter
imageWriter,
ImageWriteParam writerParams, int resolution)
{
.....
IIOMetadata meta = imageWriter.getDefaultImageMetadata( type,
writerParams );
return (addResolution(meta, resolution) ? meta : null);
}
One of the JPG image writer in our environment is
com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriter, its implementation
of getDefaultImageMetadata() returns null:
public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType,
ImageWriteParam param) {
return null;
}
this causes the NullPointerException at the first line of the addResolution()
method:
if (!meta.isReadOnly() && meta.isStandardMetadataFormatSupported())
I suggest that null checks to added at the following places:
1. ImageIOUtil.addResolution():
if (!meta.isReadOnly() && meta.isStandardMetadataFormatSupported())
==>
if (meta != null && meta.isReadOnly() &&
meta.isStandardMetadataFormatSupported())
2. ImageIOUtil.writeImage():
IIOMetadata meta = createMetadata( image, imageWriter,
writerParams, resolution);
imageWriter.setOutput( output );
imageWriter.write( null, new IIOImage( image, null, meta ),
writerParams );
foundWriter = true;
==>
IIOMetadata meta = createMetadata( image, imageWriter,
writerParams, resolution);
if (meta != null) {
imageWriter.setOutput( output );
imageWriter.write( null, new IIOImage( image, null,
meta ), writerParams );
foundWriter = true;
}
> NullPointerException when constructing a PDJPeg using a BufferedImage
> ---------------------------------------------------------------------
>
> Key: PDFBOX-1799
> URL: https://issues.apache.org/jira/browse/PDFBOX-1799
> Project: PDFBox
> Issue Type: Bug
> Components: Utilities
> Affects Versions: 1.8.3
> Environment: Windows 2008 R2 Standard
> Reporter: Puhong You
>
> In pdfbox 1.8.2 and 1.8.3, the constructor of PDJPeg class that takes a
> BufferedImage throws java.lang.NullPointerException:
> BufferedImage bi =
> ImageIO.read(this.getClass().getClassLoader().getResourceAsStream("images/icon.png"));
>
> PDJpeg icon = new PDJpeg(pdf, bi);
> The stack trace is:
> java.lang.NullPointerException
> at
> org.apache.pdfbox.util.ImageIOUtil.addResolution(ImageIOUtil.java:211)
> at
> org.apache.pdfbox.util.ImageIOUtil.createMetadata(ImageIOUtil.java:204)
> at org.apache.pdfbox.util.ImageIOUtil.writeImage(ImageIOUtil.java:158)
> at
> org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.createImageStream(PDJpeg.java:171)
> at
> org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.<init>(PDJpeg.java:133)
> The culprit is in this method in the ImageIOUtil:
> private static IIOMetadata createMetadata(RenderedImage image,
> ImageWriter imageWriter,
> ImageWriteParam writerParams, int resolution)
> {
> .....
> IIOMetadata meta = imageWriter.getDefaultImageMetadata( type,
> writerParams );
> return (addResolution(meta, resolution) ? meta : null);
> }
> One of the JPG image writer in our environment is
> com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriter, its
> implementation of getDefaultImageMetadata() returns null:
> public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType,
> ImageWriteParam param) {
> return null;
> }
> this causes the NullPointerException at the first line of the addResolution()
> method:
> if (!meta.isReadOnly() && meta.isStandardMetadataFormatSupported())
> I suggest that null checks be added at the following places:
> 1. ImageIOUtil.addResolution():
> if (!meta.isReadOnly() && meta.isStandardMetadataFormatSupported())
> ==>
> if (meta != null && meta.isReadOnly() &&
> meta.isStandardMetadataFormatSupported())
> 2. ImageIOUtil.writeImage():
> IIOMetadata meta = createMetadata( image, imageWriter,
> writerParams, resolution);
> imageWriter.setOutput( output );
> imageWriter.write( null, new IIOImage( image, null, meta ),
> writerParams );
> foundWriter = true;
> ==>
> IIOMetadata meta = createMetadata( image, imageWriter,
> writerParams, resolution);
> if (meta != null) {
> imageWriter.setOutput( output );
> imageWriter.write( null, new IIOImage( image, null,
> meta ), writerParams );
> foundWriter = true;
> }
--
This message was sent by Atlassian JIRA
(v6.1#6144)