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);
+  }
+}