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