You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by da...@apache.org on 2012/02/21 18:07:16 UTC

svn commit: r1291921 - in /commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan: ./ common/ common/bytesource/ common/itu_t4/ common/mylzw/ formats/jpeg/segments/ formats/png/ formats/pnm/ formats/tiff/ formats/tiff/fieldtypes/ icc/ ...

Author: damjan
Date: Tue Feb 21 17:07:15 2012
New Revision: 1291921

URL: http://svn.apache.org/viewvc?rev=1291921&view=rev
Log:
Fix some bugs found by Findbugs.


Modified:
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/ImageParser.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryConstant.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryFileFunctions.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryInputStream.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/bytesource/ByteSourceInputStream.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/itu_t4/T4AndT6Compression.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/mylzw/MyLzwCompressor.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/segments/App2Segment.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/png/PngConstants.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/pnm/PnmImageParser.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/fieldtypes/FieldTypeAscii.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/icc/IccProfileParser.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/icc/IccTag.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/palette/ColorSpaceSubset.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/palette/MedianCutQuantizer.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/util/Debug.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/util/IoUtils.java

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/ImageParser.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/ImageParser.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/ImageParser.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/ImageParser.java Tue Feb 21 17:07:15 2012
@@ -82,7 +82,7 @@ public abstract class ImageParser extend
     public final IImageMetadata getMetadata(byte bytes[])
             throws ImageReadException, IOException
     {
-        return getMetadata(bytes);
+        return getMetadata(bytes, null);
     }
 
     public final IImageMetadata getMetadata(byte bytes[], Map params)

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryConstant.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryConstant.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryConstant.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryConstant.java Tue Feb 21 17:07:15 2012
@@ -29,7 +29,7 @@ public class BinaryConstant implements C
     
     @Override
     public BinaryConstant clone() throws CloneNotSupportedException {
-        return new BinaryConstant(value);
+        return (BinaryConstant) super.clone();
     }
     
     @Override

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryFileFunctions.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryFileFunctions.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryFileFunctions.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryFileFunctions.java Tue Feb 21 17:07:15 2012
@@ -761,7 +761,7 @@ public class BinaryFileFunctions impleme
         System.out.println(msg + ": '" + Integer.toBinaryString(0xff & i));
     }
 
-    public final static int CharsToQuad(char c1, char c2, char c3, char c4)
+    public final static int charsToQuad(char c1, char c2, char c3, char c4)
     {
         return (((0xff & c1) << 24) | ((0xff & c2) << 16) | ((0xff & c3) << 8) | ((0xff & c4) << 0));
     }

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryInputStream.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryInputStream.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryInputStream.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/BinaryInputStream.java Tue Feb 21 17:07:15 2012
@@ -630,7 +630,7 @@ public class BinaryInputStream extends I
         System.out.println(msg + ": '" + Integer.toBinaryString(0xff & i));
     }
 
-    protected final static int CharsToQuad(char c1, char c2, char c3, char c4)
+    protected final static int charsToQuad(char c1, char c2, char c3, char c4)
     {
         return (((0xff & c1) << 24) | ((0xff & c2) << 16) | ((0xff & c3) << 8) | ((0xff & c4) << 0));
     }

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/bytesource/ByteSourceInputStream.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/bytesource/ByteSourceInputStream.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/bytesource/ByteSourceInputStream.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/bytesource/ByteSourceInputStream.java Tue Feb 21 17:07:15 2012
@@ -180,7 +180,12 @@ public class ByteSourceInputStream exten
         }
 
         InputStream is = getInputStream();
-        is.skip(blockStart);
+        for (long skipped = 0; skipped < blockStart; ) {
+            long ret = is.skip(blockStart - skipped);
+            if (ret >= 0) {
+                skipped += ret;
+            }
+        }
 
         byte bytes[] = new byte[blockLength];
         int total = 0;

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/itu_t4/T4AndT6Compression.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/itu_t4/T4AndT6Compression.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/itu_t4/T4AndT6Compression.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/itu_t4/T4AndT6Compression.java Tue Feb 21 17:07:15 2012
@@ -641,7 +641,7 @@ public class T4AndT6Compression {
         int first = 0;
         int last = entries.length - 1;
         do {
-            int middle = (first + last) / 2;
+            int middle = (first + last) >>> 2;
             if (entries[middle].value.intValue() <= value &&
                     ((middle + 1) >= entries.length || value < entries[middle + 1].value.intValue())) {
                 return entries[middle];

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/mylzw/MyLzwCompressor.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/mylzw/MyLzwCompressor.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/mylzw/MyLzwCompressor.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/mylzw/MyLzwCompressor.java Tue Feb 21 17:07:15 2012
@@ -133,19 +133,22 @@ public class MyLzwCompressor
 
         public final boolean equals(Object o)
         {
-            ByteArray other = (ByteArray) o;
-            if (other.hash != hash)
-                return false;
-            if (other.length != length)
-                return false;
-
-            for (int i = 0; i < length; i++)
-            {
-                if (other.bytes[i + other.start] != bytes[i + start])
+            if (o instanceof ByteArray) {
+                ByteArray other = (ByteArray) o;
+                if (other.hash != hash)
+                    return false;
+                if (other.length != length)
                     return false;
-            }
 
-            return true;
+                for (int i = 0; i < length; i++)
+                {
+                    if (other.bytes[i + other.start] != bytes[i + start])
+                        return false;
+                }
+
+                return true;
+            }
+            return false;
         }
     }
 

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/segments/App2Segment.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/segments/App2Segment.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/segments/App2Segment.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/segments/App2Segment.java Tue Feb 21 17:07:15 2012
@@ -64,6 +64,20 @@ public class App2Segment extends AppnSeg
             icc_bytes = null;
         }
     }
+    
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof App2Segment) {
+            App2Segment other = (App2Segment)obj;
+            return cur_marker == other.cur_marker;
+        }
+        return false;
+    }
+    
+    @Override
+    public int hashCode() {
+        return cur_marker;
+    }
 
     public int compareTo(App2Segment other)
     {

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/png/PngConstants.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/png/PngConstants.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/png/PngConstants.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/png/PngConstants.java Tue Feb 21 17:07:15 2012
@@ -17,6 +17,7 @@
 package org.apache.commons.sanselan.formats.png;
 
 import org.apache.commons.sanselan.SanselanConstants;
+import org.apache.commons.sanselan.common.BinaryFileFunctions;
 
 public interface PngConstants extends SanselanConstants
 {
@@ -46,31 +47,31 @@ public interface PngConstants extends Sa
             0x74, //
     };
 
-    public final static int IEND = PngImageParser.CharsToQuad('I', 'E', 'N',
+    public final static int IEND = BinaryFileFunctions.charsToQuad('I', 'E', 'N',
             'D');
-    public final static int IHDR = PngImageParser.CharsToQuad('I', 'H', 'D',
+    public final static int IHDR = BinaryFileFunctions.charsToQuad('I', 'H', 'D',
             'R');
-    public final static int iCCP = PngImageParser.CharsToQuad('i', 'C', 'C',
+    public final static int iCCP = BinaryFileFunctions.charsToQuad('i', 'C', 'C',
             'P');
-    public final static int tEXt = PngImageParser.CharsToQuad('t', 'E', 'X',
+    public final static int tEXt = BinaryFileFunctions.charsToQuad('t', 'E', 'X',
             't');
-    public final static int zTXt = PngImageParser.CharsToQuad('z', 'T', 'X',
+    public final static int zTXt = BinaryFileFunctions.charsToQuad('z', 'T', 'X',
             't');
-    public final static int pHYs = PngImageParser.CharsToQuad('p', 'H', 'Y',
+    public final static int pHYs = BinaryFileFunctions.charsToQuad('p', 'H', 'Y',
             's');
-    public final static int PLTE = PngImageParser.CharsToQuad('P', 'L', 'T',
+    public final static int PLTE = BinaryFileFunctions.charsToQuad('P', 'L', 'T',
             'E');
-    public final static int IDAT = PngImageParser.CharsToQuad('I', 'D', 'A',
+    public final static int IDAT = BinaryFileFunctions.charsToQuad('I', 'D', 'A',
             'T');
-    public final static int tRNS = PngImageParser.CharsToQuad('t', 'R', 'N',
+    public final static int tRNS = BinaryFileFunctions.charsToQuad('t', 'R', 'N',
             'S');
-    public final static int gAMA = PngImageParser.CharsToQuad('g', 'A', 'M',
+    public final static int gAMA = BinaryFileFunctions.charsToQuad('g', 'A', 'M',
             'A');
-    public final static int sRGB = PngImageParser.CharsToQuad('s', 'R', 'G',
+    public final static int sRGB = BinaryFileFunctions.charsToQuad('s', 'R', 'G',
             'B');
 
     // XMP chunk type.
-    public final static int iTXt = PngImageParser.CharsToQuad('i', 'T', 'X',
+    public final static int iTXt = BinaryFileFunctions.charsToQuad('i', 'T', 'X',
             't');
 
     public static final byte PNG_Signature[] = {

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/pnm/PnmImageParser.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/pnm/PnmImageParser.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/pnm/PnmImageParser.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/pnm/PnmImageParser.java Tue Feb 21 17:07:15 2012
@@ -330,7 +330,11 @@ public class PnmImageParser extends Imag
             writer = new PpmWriter(useRawbits);
 
         // make copy of params; we'll clear keys as we consume them.
-        params = new HashMap(params);
+        if (params != null) {
+            params = new HashMap(params);
+        } else {
+            params = new HashMap();
+        }
 
         // clear format key.
         if (params.containsKey(PARAM_KEY_FORMAT))

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java Tue Feb 21 17:07:15 2012
@@ -137,8 +137,14 @@ public class TiffReader extends BinaryFi
         try
         {
             is = byteSource.getInputStream();
-            if (offset > 0)
-                is.skip(offset);
+            if (offset > 0) {
+                for (long skipped = 0; skipped < offset; ) {
+                    long ret = is.skip(offset - skipped);
+                    if (ret >= 0) {
+                        skipped += ret;
+                    }
+                }
+            }
 
             List<TiffField> fields = new ArrayList<TiffField>();
 

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/fieldtypes/FieldTypeAscii.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/fieldtypes/FieldTypeAscii.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/fieldtypes/FieldTypeAscii.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/tiff/fieldtypes/FieldTypeAscii.java Tue Feb 21 17:07:15 2012
@@ -91,7 +91,12 @@ public class FieldTypeAscii extends Fiel
             String[] strings = (String[])o;
             int totalLength = 0;
             for (int i = 0; i < strings.length; i++) {
-                totalLength += (strings[i].getBytes().length + 1);
+                byte[] bytes = null;
+                try {
+                    bytes = strings[i].getBytes("UTF-8");
+                } catch (UnsupportedEncodingException cannotHappen) {
+                }
+                totalLength += (bytes.length + 1);
             }
             byte[] result = new byte[totalLength];
             int position = 0;

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/icc/IccProfileParser.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/icc/IccProfileParser.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/icc/IccProfileParser.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/icc/IccProfileParser.java Tue Feb 21 17:07:15 2012
@@ -370,7 +370,7 @@ public class IccProfileParser extends Bi
 
             boolean result = ((DeviceManufacturer == IEC) && (DeviceModel == sRGB));
 
-            return new Boolean(result);
+            return result;
         }
         catch (Exception e)
         {

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/icc/IccTag.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/icc/IccTag.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/icc/IccTag.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/icc/IccTag.java Tue Feb 21 17:07:15 2012
@@ -20,6 +20,7 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.util.Arrays;
 
 import org.apache.commons.sanselan.ImageReadException;
 import org.apache.commons.sanselan.common.BinaryConstants;
@@ -97,7 +98,7 @@ public class IccTag implements BinaryCon
                 }) + ")");
 
         if (data == null)
-            pw.println(prefix + "data: " + data);
+            pw.println(prefix + "data: " + Arrays.toString(data));
         else
         {
             pw.println(prefix + "data: " + data.length);

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/palette/ColorSpaceSubset.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/palette/ColorSpaceSubset.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/palette/ColorSpaceSubset.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/palette/ColorSpaceSubset.java Tue Feb 21 17:07:15 2012
@@ -173,5 +173,5 @@ class ColorSpaceSubset implements Compar
     {
         index = i;
     }
-
+    
 }
\ No newline at end of file

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/palette/MedianCutQuantizer.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/palette/MedianCutQuantizer.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/palette/MedianCutQuantizer.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/palette/MedianCutQuantizer.java Tue Feb 21 17:07:15 2012
@@ -61,8 +61,11 @@ public class MedianCutQuantizer
 
         public boolean equals(Object o)
         {
-            ColorCount other = (ColorCount) o;
-            return other.argb == this.argb;
+            if (o instanceof ColorCount) {
+                ColorCount other = (ColorCount) o;
+                return other.argb == this.argb;
+            }
+            return false;
         }
 
     }

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/util/Debug.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/util/Debug.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/util/Debug.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/util/Debug.java Tue Feb 21 17:07:15 2012
@@ -208,7 +208,7 @@ public final class Debug
     }
 
     //    public static String newline = System.getProperty("line.separator");
-    public static String newline = "\r\n";
+    public static final String newline = "\r\n";
 
     private static void log(StringBuffer buffer, String s)
     {
@@ -517,9 +517,6 @@ public final class Debug
         debug(fClass.getName(), e);
     }
 
-    private static final SimpleDateFormat timestamp = new SimpleDateFormat(
-            "yyyy-MM-dd kk:mm:ss:SSS");
-
     public static void debug(String message, boolean value)
     {
         debug(message + " " + ((value) ? ("true") : ("false")));
@@ -662,6 +659,8 @@ public final class Debug
     {
         StringBuffer result = new StringBuffer();
 
+        final SimpleDateFormat timestamp = new SimpleDateFormat(
+                "yyyy-MM-dd kk:mm:ss:SSS");
         String datetime = timestamp.format(new Date()).toLowerCase();
 
         result.append(newline);
@@ -869,7 +868,7 @@ public final class Debug
             for (int i = 0; i < array.length; i++)
                 debug(prefix + "\t" + i + ": ", array[i]);
         }
-        else if (value instanceof byte[])
+        else if (value instanceof double[])
         {
             double[] array = (double[]) value;
             debug(prefix, array);

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/util/IoUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/util/IoUtils.java?rev=1291921&r1=1291920&r2=1291921&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/util/IoUtils.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/util/IoUtils.java Tue Feb 21 17:07:15 2012
@@ -142,8 +142,11 @@ public class IoUtils implements Sanselan
 
         try
         {
-            if (file.getParentFile() != null)
-                file.getParentFile().mkdirs();
+            if (file.getParentFile() != null && !file.getParentFile().exists()) {
+                if (!file.getParentFile().mkdirs()) {
+                    throw new IOException("Could not create directory for file " + file);
+                }
+            }
             stream = new FileOutputStream(file);
 
             copyStreamToStream(src, stream);