Detect truncated input

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/fileupload/trunk@1458928 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/commons/fileupload/util/mime/Base64Decoder.java b/src/main/java/org/apache/commons/fileupload/util/mime/Base64Decoder.java
index f151c96..98bb54a 100644
--- a/src/main/java/org/apache/commons/fileupload/util/mime/Base64Decoder.java
+++ b/src/main/java/org/apache/commons/fileupload/util/mime/Base64Decoder.java
@@ -135,6 +135,8 @@
                     outLen++;
                 }
             }
+        } else if (cachedBytes != 0){
+            throw new IOException("Invalid Base64 input: truncated");            
         }
         return outLen;
     }
diff --git a/src/test/java/org/apache/commons/fileupload/util/mime/Base64DecoderTestCase.java b/src/test/java/org/apache/commons/fileupload/util/mime/Base64DecoderTestCase.java
index 94e0b8c..a58ed99 100644
--- a/src/test/java/org/apache/commons/fileupload/util/mime/Base64DecoderTestCase.java
+++ b/src/test/java/org/apache/commons/fileupload/util/mime/Base64DecoderTestCase.java
@@ -89,4 +89,10 @@
         Base64Decoder.decode(x, new ByteArrayOutputStream());
     }
 
+    @Test(expected = IOException.class)
+    public void truncatedString() throws Exception {
+        final byte[] x = new byte[]{'n'};
+        Base64Decoder.decode(x, new ByteArrayOutputStream());
+    }
+
 }