Author: nick
Date: Thu Jan 10 15:29:59 2013
New Revision: 1431426

URL: http://svn.apache.org/viewvc?rev=1431426&view=rev
Log:
Patch from Emmanuel Hugonnet from TIKA-1021 - PSD data lengths are even padded

Added:
    tika/trunk/tika-parsers/src/test/resources/test-documents/testPSD2.psd   
(with props)
Modified:
    
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/image/PSDParser.java
    
tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/image/PSDParserTest.java

Modified: 
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/image/PSDParser.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/image/PSDParser.java?rev=1431426&r1=1431425&r2=1431426&view=diff
==============================================================================
--- 
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/image/PSDParser.java
 (original)
+++ 
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/image/PSDParser.java
 Thu Jan 10 15:29:59 2013
@@ -165,7 +165,7 @@ public class PSDParser extends AbstractP
              nameLen++;
              
              if(v == 0) {
-                // Even size, may be padded
+                // The name length is padded to be even
                 if(nameLen % 2 == 1) {
                    stream.read();
                    nameLen++;
@@ -178,6 +178,10 @@ public class PSDParser extends AbstractP
           }
           
           int dataLen = EndianUtils.readIntBE(stream);
+          if(dataLen %2 == 1) {
+              // Data Length is even padded
+              dataLen = dataLen + 1;
+          }
           totalLength = 4 + 2 + nameLen + 4 + dataLen;
           
           data = new byte[dataLen];

Modified: 
tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/image/PSDParserTest.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/image/PSDParserTest.java?rev=1431426&r1=1431425&r2=1431426&view=diff
==============================================================================
--- 
tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/image/PSDParserTest.java
 (original)
+++ 
tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/image/PSDParserTest.java
 Thu Jan 10 15:29:59 2013
@@ -25,6 +25,8 @@ import org.xml.sax.helpers.DefaultHandle
 
 import junit.framework.TestCase;
 
+import static junit.framework.Assert.assertEquals;
+
 public class PSDParserTest extends TestCase {
 
     private final Parser parser = new PSDParser();
@@ -43,4 +45,19 @@ public class PSDParserTest extends TestC
         assertEquals("51", metadata.get(Metadata.IMAGE_LENGTH));
         assertEquals("8", metadata.get(Metadata.BITS_PER_SAMPLE));
     }
+    
+    /**
+     * Tests a very basic file, without much metadata,
+     *  where some of the data lengths are padded to be even
+     */
+    public void testOddPSD() throws Exception {
+        Metadata metadata = new Metadata();
+        metadata.set(Metadata.CONTENT_TYPE, "image/x-psd");
+        InputStream stream =
+            getClass().getResourceAsStream("/test-documents/testPSD2.psd");
+        parser.parse(stream, new DefaultHandler(), metadata, new 
ParseContext());
+        assertEquals("69", metadata.get(Metadata.IMAGE_WIDTH));
+        assertEquals("70", metadata.get(Metadata.IMAGE_LENGTH));
+        assertEquals("8", metadata.get(Metadata.BITS_PER_SAMPLE));
+    }
 }

Added: tika/trunk/tika-parsers/src/test/resources/test-documents/testPSD2.psd
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/resources/test-documents/testPSD2.psd?rev=1431426&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
tika/trunk/tika-parsers/src/test/resources/test-documents/testPSD2.psd
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream


Reply via email to