Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 615B9200B9F for ; Tue, 11 Oct 2016 18:22:38 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 602ED160AE6; Tue, 11 Oct 2016 16:22:38 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 7DC35160AC3 for ; Tue, 11 Oct 2016 18:22:37 +0200 (CEST) Received: (qmail 93715 invoked by uid 500); 11 Oct 2016 16:22:36 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 93705 invoked by uid 99); 11 Oct 2016 16:22:36 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 11 Oct 2016 16:22:36 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 3D85418014A for ; Tue, 11 Oct 2016 16:22:36 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -1.199 X-Spam-Level: X-Spam-Status: No, score=-1.199 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-2.999] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id Thi9w-Q9mFQJ for ; Tue, 11 Oct 2016 16:22:34 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTP id 044EC5F177 for ; Tue, 11 Oct 2016 16:22:34 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id D1406E05E0 for ; Tue, 11 Oct 2016 16:22:31 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id CF9C43A05B6 for ; Tue, 11 Oct 2016 16:22:31 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1764288 - in /commons/proper/imaging/trunk/src: changes/changes.xml main/java/org/apache/commons/imaging/formats/tiff/datareaders/ImageDataReader.java Date: Tue, 11 Oct 2016 16:22:31 -0000 To: commits@commons.apache.org From: sebb@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20161011162231.CF9C43A05B6@svn01-us-west.apache.org> archived-at: Tue, 11 Oct 2016 16:22:38 -0000 Author: sebb Date: Tue Oct 11 16:22:31 2016 New Revision: 1764288 URL: http://svn.apache.org/viewvc?rev=1764288&view=rev Log: IMAGING-190 ImageDataReader.decompress() overwrites its input Modified: commons/proper/imaging/trunk/src/changes/changes.xml commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/tiff/datareaders/ImageDataReader.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=1764288&r1=1764287&r2=1764288&view=diff ============================================================================== --- commons/proper/imaging/trunk/src/changes/changes.xml (original) +++ commons/proper/imaging/trunk/src/changes/changes.xml Tue Oct 11 16:22:31 2016 @@ -46,6 +46,9 @@ The type attribute can be add,u + + ImageDataReader.decompress() overwrites its input + Duplicate class names Modified: commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/tiff/datareaders/ImageDataReader.java URL: http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/tiff/datareaders/ImageDataReader.java?rev=1764288&r1=1764287&r2=1764288&view=diff ============================================================================== --- commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/tiff/datareaders/ImageDataReader.java (original) +++ commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/tiff/datareaders/ImageDataReader.java Tue Oct 11 16:22:31 2016 @@ -137,7 +137,7 @@ public abstract class ImageDataReader { return samples; } - protected byte[] decompress(final byte[] compressed, final int compression, + protected byte[] decompress(final byte[] compressedInput, final int compression, final int expectedSize, final int tileWidth, final int tileHeight) throws ImageReadException, IOException { final TiffField fillOrderField = directory.findField(TiffTagConstants.TIFF_TAG_FILL_ORDER); @@ -145,11 +145,14 @@ public abstract class ImageDataReader { if (fillOrderField != null) { fillOrder = fillOrderField.getIntValue(); } + final byte[] compressedOrdered; // re-ordered bytes (if necessary) if (fillOrder == TiffTagConstants.FILL_ORDER_VALUE_NORMAL) { + compressedOrdered = compressedInput; // good } else if (fillOrder == TiffTagConstants.FILL_ORDER_VALUE_REVERSED) { - for (int i = 0; i < compressed.length; i++) { - compressed[i] = (byte) (Integer.reverse(0xff & compressed[i]) >>> 24); + compressedOrdered = new byte[compressedInput.length]; + for (int i = 0; i < compressedInput.length; i++) { + compressedOrdered[i] = (byte) (Integer.reverse(0xff & compressedInput[i]) >>> 24); } } else { throw new ImageReadException("TIFF FillOrder=" + fillOrder @@ -158,10 +161,10 @@ public abstract class ImageDataReader { switch (compression) { case TIFF_COMPRESSION_UNCOMPRESSED: // None; - return compressed; + return compressedOrdered; case TIFF_COMPRESSION_CCITT_1D: // CCITT Group 3 1-Dimensional Modified // Huffman run-length encoding. - return T4AndT6Compression.decompressModifiedHuffman(compressed, + return T4AndT6Compression.decompressModifiedHuffman(compressedOrdered, tileWidth, tileHeight); case TIFF_COMPRESSION_CCITT_GROUP_3: { int t4Options = 0; @@ -177,10 +180,10 @@ public abstract class ImageDataReader { } final boolean hasFillBitsBeforeEOL = (t4Options & TIFF_FLAG_T4_OPTIONS_FILL) != 0; if (is2D) { - return T4AndT6Compression.decompressT4_2D(compressed, + return T4AndT6Compression.decompressT4_2D(compressedOrdered, tileWidth, tileHeight, hasFillBitsBeforeEOL); } - return T4AndT6Compression.decompressT4_1D(compressed, + return T4AndT6Compression.decompressT4_1D(compressedOrdered, tileWidth, tileHeight, hasFillBitsBeforeEOL); } case TIFF_COMPRESSION_CCITT_GROUP_4: { @@ -194,12 +197,12 @@ public abstract class ImageDataReader { throw new ImageReadException( "T.6 compression with the uncompressed mode extension is not yet supported"); } - return T4AndT6Compression.decompressT6(compressed, tileWidth, + return T4AndT6Compression.decompressT6(compressedOrdered, tileWidth, tileHeight); } case TIFF_COMPRESSION_LZW: // LZW { - final InputStream is = new ByteArrayInputStream(compressed); + final InputStream is = new ByteArrayInputStream(compressedOrdered); final int lzwMinimumCodeSize = 8; @@ -213,7 +216,7 @@ public abstract class ImageDataReader { case TIFF_COMPRESSION_PACKBITS: // Packbits { - return new PackBits().decompress(compressed, expectedSize); + return new PackBits().decompress(compressedOrdered, expectedSize); } default: