https://issues.apache.org/bugzilla/show_bug.cgi?id=49216
Summary: NullPointerException in DataBufferInt.getBankData()
Product: Batik
Version: 1.7
Platform: PC
OS/Version: Mac OS X 10.5
Status: NEW
Severity: normal
Priority: P2
Component: SVG Rasterizer
AssignedTo: [email protected]
ReportedBy: [email protected]
I'm using the Transcoder API to rasterize an SVG into JPEG. I'm getting the
following NPE, followed by a complete crash of the Java VM (there's two stack
traces here - I'm not sure if it happened twice on two separate images or if
these are related somehow):
java.lang.NullPointerException
at java.awt.image.DataBufferInt.getBankData(DataBufferInt.java:162)
at
org.apache.batik.ext.awt.image.rendered.PadRed$ZeroRecter_INT_PACK.<init>(PadRed.java:156)
at
org.apache.batik.ext.awt.image.rendered.PadRed$ZeroRecter.getZeroRecter(PadRed.java:123)
at
org.apache.batik.ext.awt.image.rendered.PadRed.handleZero(PadRed.java:193)
at org.apache.batik.ext.awt.image.rendered.PadRed.copyData(PadRed.java:92)
at
org.apache.batik.ext.awt.image.rendered.ColorMatrixRed.copyData(ColorMatrixRed.java:116)
at
org.apache.batik.ext.awt.image.rendered.FormatRed.copyData(FormatRed.java:116)
at
org.apache.batik.ext.awt.image.rendered.AbstractRed.getData(AbstractRed.java:526)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:264)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:455)
at
org.apache.batik.ext.awt.image.renderable.PadRable8Bit.paintRable(PadRable8Bit.java:135)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:440)
at
org.apache.batik.ext.awt.image.renderable.PadRable8Bit.paintRable(PadRable8Bit.java:135)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:440)
at
org.apache.batik.ext.awt.image.renderable.FilterChainRable8Bit.paintRable(FilterChainRable8Bit.java:251)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:440)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:549)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.filter.GraphicsNodeRed8Bit.genRect(GraphicsNodeRed8Bit.java:140)
at
org.apache.batik.gvt.filter.GraphicsNodeRed8Bit.copyData(GraphicsNodeRed8Bit.java:116)
at org.apache.batik.ext.awt.image.rendered.PadRed.copyData(PadRed.java:88)
at
org.apache.batik.ext.awt.image.rendered.AbstractRed.getData(AbstractRed.java:526)
at
org.apache.batik.ext.awt.image.rendered.Any2LumRed.copyData(Any2LumRed.java:71)
at
org.apache.batik.ext.awt.image.rendered.AbstractRed.getData(AbstractRed.java:526)
at
org.apache.batik.ext.awt.image.rendered.FilterAsAlphaRed.copyData(FilterAsAlphaRed.java:83)
at
org.apache.batik.ext.awt.image.rendered.AbstractRed.getData(AbstractRed.java:526)
at
org.apache.batik.ext.awt.image.rendered.MultiplyAlphaRed.INT_PACK_BYTE_COMP_Impl(MultiplyAlphaRed.java:107)
at
org.apache.batik.ext.awt.image.rendered.MultiplyAlphaRed.copyData(MultiplyAlphaRed.java:183)
at
org.apache.batik.ext.awt.image.rendered.Any2sRGBRed.copyData(Any2sRGBRed.java:166)
at
org.apache.batik.ext.awt.image.rendered.FormatRed.copyData(FormatRed.java:116)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:347)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:455)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:549)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.CanvasGraphicsNode.primitivePaint(CanvasGraphicsNode.java:159)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at org.apache.batik.gvt.renderer.MacRenderer.repaint(MacRenderer.java:361)
at org.apache.batik.gvt.renderer.MacRenderer.repaint(MacRenderer.java:291)
at
org.apache.batik.transcoder.image.ImageTranscoder.transcode(ImageTranscoder.java:111)
at
org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142)
at
org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156)
at
com.dji.converter.epub.constructor.ImageConstructor.convertVectorImage(ImageConstructor.java:305)
at
com.dji.converter.epub.constructor.ImageConstructor.createImage(ImageConstructor.java:109)
at
com.dji.converter.epub.constructor.ImageConstructor.handleStartEvent(ImageConstructor.java:80)
at
com.dji.converter.epub.ePubConverter.processEvents(ePubConverter.java:334)
at com.dji.converter.epub.ePubConverter.convert(ePubConverter.java:202)
at com.dji.converter.ConverterBase.run(ConverterBase.java:91)
at java.lang.Thread.run(Thread.java:613)
java.lang.NullPointerException
at java.awt.image.DataBufferInt.getBankData(DataBufferInt.java:162)
at
org.apache.batik.ext.awt.image.rendered.PadRed$ZeroRecter_INT_PACK.<init>(PadRed.java:156)
at
org.apache.batik.ext.awt.image.rendered.PadRed$ZeroRecter.getZeroRecter(PadRed.java:123)
at
org.apache.batik.ext.awt.image.rendered.PadRed.handleZero(PadRed.java:193)
at org.apache.batik.ext.awt.image.rendered.PadRed.copyData(PadRed.java:92)
at
org.apache.batik.ext.awt.image.rendered.ColorMatrixRed.copyData(ColorMatrixRed.java:116)
at
org.apache.batik.ext.awt.image.rendered.FormatRed.copyData(FormatRed.java:116)
at
org.apache.batik.ext.awt.image.rendered.AbstractRed.getData(AbstractRed.java:526)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:264)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:455)
at
org.apache.batik.ext.awt.image.renderable.PadRable8Bit.paintRable(PadRable8Bit.java:135)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:440)
at
org.apache.batik.ext.awt.image.renderable.PadRable8Bit.paintRable(PadRable8Bit.java:135)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:440)
at
org.apache.batik.ext.awt.image.renderable.FilterChainRable8Bit.paintRable(FilterChainRable8Bit.java:251)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:440)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:549)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.filter.GraphicsNodeRed8Bit.genRect(GraphicsNodeRed8Bit.java:140)
at
org.apache.batik.gvt.filter.GraphicsNodeRed8Bit.copyData(GraphicsNodeRed8Bit.java:116)
at org.apache.batik.ext.awt.image.rendered.PadRed.copyData(PadRed.java:88)
at
org.apache.batik.ext.awt.image.rendered.AbstractRed.getData(AbstractRed.java:526)
at
org.apache.batik.ext.awt.image.rendered.Any2LumRed.copyData(Any2LumRed.java:71)
at
org.apache.batik.ext.awt.image.rendered.AbstractRed.getData(AbstractRed.java:526)
at
org.apache.batik.ext.awt.image.rendered.FilterAsAlphaRed.copyData(FilterAsAlphaRed.java:83)
at
org.apache.batik.ext.awt.image.rendered.AbstractRed.getData(AbstractRed.java:526)
at
org.apache.batik.ext.awt.image.rendered.MultiplyAlphaRed.INT_PACK_BYTE_COMP_Impl(MultiplyAlphaRed.java:107)
at
org.apache.batik.ext.awt.image.rendered.MultiplyAlphaRed.copyData(MultiplyAlphaRed.java:183)
at
org.apache.batik.ext.awt.image.rendered.Any2sRGBRed.copyData(Any2sRGBRed.java:166)
at
org.apache.batik.ext.awt.image.rendered.FormatRed.copyData(FormatRed.java:116)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:347)
at
org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:455)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:549)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.CanvasGraphicsNode.primitivePaint(CanvasGraphicsNode.java:159)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
at
org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
at org.apache.batik.gvt.renderer.MacRenderer.repaint(MacRenderer.java:361)
at org.apache.batik.gvt.renderer.MacRenderer.repaint(MacRenderer.java:291)
at
org.apache.batik.transcoder.image.ImageTranscoder.transcode(ImageTranscoder.java:111)
at
org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142)
at
org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156)
at
com.dji.converter.epub.constructor.ImageConstructor.convertVectorImage(ImageConstructor.java:305)
at
com.dji.converter.epub.constructor.ImageConstructor.createImage(ImageConstructor.java:109)
at
com.dji.converter.epub.constructor.ImageConstructor.handleStartEvent(ImageConstructor.java:80)
at
com.dji.converter.epub.ePubConverter.processEvents(ePubConverter.java:334)
at com.dji.converter.epub.ePubConverter.convert(ePubConverter.java:202)
at com.dji.converter.ConverterBase.run(ConverterBase.java:91)
at java.lang.Thread.run(Thread.java:613)
Invalid memory access of location 0x128 eip=0x4dcd8a
The code in question is pretty straightforward, but one odd thing did happen: I
never hit the catch(Exception e) clause, which I should have done for an NPE:
try {
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
String svgURI = imageSourcePath.toURL().toString();
Document doc = f.createDocument(svgURI);
// Get the root element (the 'svg' element).
final Element svgRoot = doc.getDocumentElement();
// Set the width and height attributes on the root 'svg' element.
final String strWidth = svgRoot.getAttributeNS(null, "width");
if (strWidth != null) {
actualWidth = Float.parseFloat(strWidth);
}
final String strHeight = svgRoot.getAttributeNS(null, "height");
if (strHeight != null) {
actualHeight = Float.parseFloat(strHeight);
}
if ((actualWidth != Float.MAX_VALUE) && (actualWidth >
maxImageWidth)) {
float proportion = maxImageWidth / actualWidth;
actualWidth = proportion * actualWidth;
actualHeight = proportion * actualHeight;
}
if ((actualHeight != Float.MAX_VALUE) && (actualHeight >
maxImageHeight)) {
float proportion = maxImageHeight / actualHeight;
actualWidth = proportion * actualWidth;
actualHeight = proportion * actualHeight;
}
// Create a JPEG transcoder
ImageTranscoder t = null;
if (imageOutputFormat.equalsIgnoreCase("jpeg")) {
t = new JPEGTranscoder();
} else if (imageOutputFormat.equalsIgnoreCase("png")) {
t = new PNGTranscoder();
} else {
throw new UnsupportedImageFormatException("Cannot convert SVG
to " + imageOutputFormat);
}
// Set the transcoding hints.
t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(.8));
t.addTranscodingHint(JPEGTranscoder.KEY_WIDTH, actualWidth);
t.addTranscodingHint(JPEGTranscoder.KEY_HEIGHT, actualHeight);
// Create the transcoder input.
TranscoderInput input = new TranscoderInput(doc);
// Create the transcoder output.
OutputStream ostream = new FileOutputStream(imageDestPath);
TranscoderOutput output = new TranscoderOutput(ostream);
// Save the image.
t.transcode(input, output);
// Flush and close the stream.
ostream.flush();
ostream.close();
finalImagePath = imageDestPath;
} catch (FileNotFoundException e) {
logger.error("Image file not found", e);
getStatusAccumulator().addWarningMessage("The image file " +
imageSourcePath + " specified in the XML was not found.");
finalImagePath = imageSourcePath;
} catch (IOException e) {
logger.error("Image I/O error", e);
getStatusAccumulator().addWarningMessage("An error occurred while
processing image file " + imageSourcePath + ": " + e.getMessage());
finalImagePath = imageSourcePath;
} catch (TranscoderException e) {
logger.error("Image conversion error", e);
getStatusAccumulator().addWarningMessage("An error occurred while
processing image file " + imageSourcePath + ": " + e.getMessage());
finalImagePath = imageSourcePath;
} catch (Exception e) {
// Batik sometimes NPEs...
logger.error("Image conversion error", e);
getStatusAccumulator().addWarningMessage("An error occurred while
processing image file " + imageSourcePath + ": " + e.getMessage());
finalImagePath = imageSourcePath;
}
Thanks in advance for any help you can provide.
Cheers
Chris
--
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]