You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by br...@apache.org on 2015/04/26 21:42:43 UTC
svn commit: r1676141 - in /commons/proper/imaging/trunk/src: changes/
main/java/org/apache/commons/imaging/formats/pnm/
test/java/org/apache/commons/imaging/formats/pnm/
Author: britter
Date: Sun Apr 26 19:42:42 2015
New Revision: 1676141
URL: http://svn.apache.org/r1676141
Log:
IMAGING-169: PnmImageParser throws NumberFormatException instead of ImageReadException when parsing invalid images. This also fixes #16 from github. Thanks to Nebu Pookins.
Added:
commons/proper/imaging/trunk/src/test/java/org/apache/commons/imaging/formats/pnm/
commons/proper/imaging/trunk/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java
Modified:
commons/proper/imaging/trunk/src/changes/changes.xml
commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
Modified: commons/proper/imaging/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/changes/changes.xml?rev=1676141&r1=1676140&r2=1676141&view=diff
==============================================================================
--- commons/proper/imaging/trunk/src/changes/changes.xml (original)
+++ commons/proper/imaging/trunk/src/changes/changes.xml Sun Apr 26 19:42:42 2015
@@ -46,6 +46,9 @@ The <action> type attribute can be add,u
<body>
<release version="1.0" date="TBA" description="TBA">
+ <action issue="IMAGING-169" dev="britter" type="fix" due-to="Nebu Pookins">
+ PnmImageParser throws NumberFormatException instead of ImageReadException when parsing invalid images
+ </action>
<action issue="IMAGING-166" dev="britter" type="update" due-to="Michael GroÃ">
ByteSourceImageTest: Local variable hides a field
</action>
Modified: commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java?rev=1676141&r1=1676140&r2=1676141&view=diff
==============================================================================
--- commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java (original)
+++ commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java Sun Apr 26 19:42:42 2015
@@ -101,8 +101,18 @@ public class PnmImageParser extends Imag
|| identifier2 == PnmConstants.PPM_TEXT_CODE
|| identifier2 == PnmConstants.PPM_RAW_CODE) {
- final int width = Integer.parseInt(wsr.readtoWhiteSpace());
- final int height = Integer.parseInt(wsr.readtoWhiteSpace());
+ final int width;
+ try {
+ width = Integer.parseInt(wsr.readtoWhiteSpace());
+ } catch (NumberFormatException e) {
+ throw new ImageReadException("Invalid width specified." , e);
+ }
+ final int height;
+ try {
+ height = Integer.parseInt(wsr.readtoWhiteSpace());
+ } catch (NumberFormatException e) {
+ throw new ImageReadException("Invalid height specified." , e);
+ }
if (identifier2 == PnmConstants.PBM_TEXT_CODE) {
return new PbmFileInfo(width, height, false);
Added: commons/proper/imaging/trunk/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java
URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java?rev=1676141&view=auto
==============================================================================
--- commons/proper/imaging/trunk/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java (added)
+++ commons/proper/imaging/trunk/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java Sun Apr 26 19:42:42 2015
@@ -0,0 +1,47 @@
+package org.apache.commons.imaging.formats.pnm;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.commons.imaging.ImageInfo;
+import org.apache.commons.imaging.ImageReadException;
+import org.junit.Test;
+
+public class PnmImageParserTest {
+
+ @Test
+ public void testGetImageInfo_happyCase() throws ImageReadException, IOException {
+ byte[] bytes = "P1\n3 2\n0 1 0\n1 0 1\n".getBytes(StandardCharsets.US_ASCII);
+ Map<String, Object> params = Collections.emptyMap();
+ PnmImageParser underTest = new PnmImageParser();
+ ImageInfo results = underTest.getImageInfo(bytes, params);
+ assertEquals(results.getBitsPerPixel(), 1);
+ assertEquals(results.getWidth(), 3);
+ assertEquals(results.getHeight(), 2);
+ assertEquals(results.getNumberOfImages(), 1);
+ }
+
+ /**
+ * If an invalid width is specified, should throw {@link ImageReadException} rather than
+ * {@link NumberFormatException}.
+ */
+ @Test(expected = ImageReadException.class)
+ public void testGetImageInfo_invalidWidth() throws ImageReadException, IOException {
+ byte[] bytes = "P1\na 2\n0 0 0 0 0 0 0 0 0 0 0\n1 1 1 1 1 1 1 1 1 1 1\n".getBytes(StandardCharsets.US_ASCII);
+ Map<String, Object> params = Collections.emptyMap();
+ PnmImageParser underTest = new PnmImageParser();
+ underTest.getImageInfo(bytes, params);
+ }
+
+ @Test(expected = ImageReadException.class)
+ public void testGetImageInfo_invalidHeight() throws ImageReadException, IOException {
+ byte[] bytes = "P1\n2 a\n0 0\n0 0\n0 0\n0 0\n0 0\n0 1\n1 1\n1 1\n1 1\n1 1\n1 1\n".getBytes(StandardCharsets.US_ASCII);
+ Map<String, Object> params = Collections.emptyMap();
+ PnmImageParser underTest = new PnmImageParser();
+ underTest.getImageInfo(bytes, params);
+ }
+}