Author: markt
Date: Tue Mar 19 23:14:59 2013
New Revision: 1458566
URL: http://svn.apache.org/r1458566
Log:
Update Commons Fileupload to r1458500
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/ (props
changed)
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/package-info.java
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/FileItemHeadersImpl.java
(props changed)
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/Base64Decoder.java
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/MimeUtility.java
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/QuotedPrintableDecoder.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1458564-1458565
Propchange: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/
------------------------------------------------------------------------------
Merged
/commons/proper/fileupload/trunk/src/main/java/org/apache/commons/fileupload:r1458081-1458500
Merged
/tomcat/trunk/java/org/apache/tomcat/util/http/fileupload:r1458564-1458565
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java?rev=1458566&r1=1458565&r2=1458566&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java
Tue Mar 19 23:14:59 2013
@@ -299,9 +299,8 @@ public abstract class FileUploadBase {
} catch (FileUploadIOException e) {
throw (FileUploadException) e.getCause();
} catch (IOException e) {
- throw new IOFileUploadException(
- String.format("Processing of %s request failed.
%s",
- MULTIPART_FORM_DATA, e.getMessage()), e);
+ throw new IOFileUploadException(String.format("Processing
of %s request failed. %s",
+
MULTIPART_FORM_DATA, e.getMessage()), e);
}
final FileItemHeaders fih = item.getHeaders();
fileItem.setHeaders(fih);
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/package-info.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/package-info.java?rev=1458566&r1=1458565&r2=1458566&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/package-info.java
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/package-info.java
Tue Mar 19 23:14:59 2013
@@ -18,7 +18,7 @@
/**
* <p><b>NOTE:</b> This code has been copied from commons-fileupload trunk
- * revision 1458080 and commons-io 1.4 and package renamed to avoid clashes
with
+ * revision 1458500 and commons-io 1.4 and package renamed to avoid clashes
with
* any web apps that may wish to use these libraries.
* </p>
* <p>
Propchange:
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/FileItemHeadersImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/Base64Decoder.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/Base64Decoder.java?rev=1458566&r1=1458565&r2=1458566&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/Base64Decoder.java
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/Base64Decoder.java
Tue Mar 19 23:14:59 2013
@@ -82,17 +82,19 @@ final class Base64Decoder {
* whitespace characters will be ignored.
*
* @param data the buffer containing the Base64-encoded data
- * @param off the start offset (zero-based)
- * @param length the number of bytes to convert
* @param out the output stream to hold the decoded bytes
*
* @return the number of bytes produced.
*/
- public static int decode(byte[] data, int off, int length, OutputStream
out) throws IOException {
+ public static int decode(byte[] data, OutputStream out) throws IOException
{
byte b1, b2, b3, b4;
int outLen = 0;
- int end = off + length;
+ if (data.length == 0) {
+ return outLen;
+ }
+
+ int end = data.length;
while (end > 0) {
if (!ignore((char) data[end - 1])) {
@@ -102,7 +104,7 @@ final class Base64Decoder {
end--;
}
- int i = off;
+ int i = 0;
// CHECKSTYLE IGNORE MagicNumber FOR NEXT 1 LINE
int finish = end - 4; // last set of 4 bytes might include padding
@@ -159,11 +161,12 @@ final class Base64Decoder {
// CHECKSTYLE IGNORE MagicNumber FOR NEXT 1 LINE
out.write((b2 << 4) | (b3 >> 2)); // 4 bits of b2 plus 4 bits of b3
outLen++;
- } else if (p2 != PADDING) { // Nothing more to do if p2 == PADDING
- b4 = DECODING_TABLE[p2];
- // CHECKSTYLE IGNORE MagicNumber FOR NEXT 1 LINE
- out.write((b3 << 6) | b4); // 2 bits of b3 plus 6 bits of b4
- outLen++;
+ if (p2 != PADDING) { // Nothing more to do if p2 == PADDING
+ b4 = DECODING_TABLE[p2];
+ // CHECKSTYLE IGNORE MagicNumber FOR NEXT 1 LINE
+ out.write((b3 << 6) | b4); // 2 bits of b3 plus 6 bits
of b4
+ outLen++;
+ }
}
return outLen;
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/MimeUtility.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/MimeUtility.java?rev=1458566&r1=1458565&r2=1458566&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/MimeUtility.java
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/MimeUtility.java
Tue Mar 19 23:14:59 2013
@@ -31,11 +31,31 @@ import java.util.Map;
public final class MimeUtility {
/**
+ * The {@code US-ASCII} charset identifier constant.
+ */
+ private static final String US_ASCII_CHARSET = "US-ASCII";
+
+ /**
+ * The marker to indicate text is encoded with BASE64 algorithm.
+ */
+ private static final String BASE64_ENCODING_MARKER = "B";
+
+ /**
+ * The marker to indicate text is encoded with QuotedPrintable algorithm.
+ */
+ private static final String QUOTEDPRINTABLE_ENCODING_MARKER = "Q";
+
+ /**
* If the text contains any encoded tokens, those tokens will be marked
with "=?".
*/
private static final String ENCODED_TOKEN_MARKER = "=?";
/**
+ * If the text contains any encoded tokens, those tokens will terminate
with "=?".
+ */
+ private static final String ENCODED_TOKEN_FINISHER = "?=";
+
+ /**
* The linear whitespace chars sequence.
*/
private static final String LINEAR_WHITESPACE = " \t\r\n";
@@ -98,12 +118,12 @@ public final class MimeUtility {
char ch = text.charAt(offset);
// is this a whitespace character?
- if (LINEAR_WHITESPACE.indexOf(ch) != -1) {
+ if (LINEAR_WHITESPACE.indexOf(ch) != -1) { // whitespace found
startWhiteSpace = offset;
while (offset < endOffset) {
// step over the white space characters.
ch = text.charAt(offset);
- if (LINEAR_WHITESPACE.indexOf(ch) != -1) {
+ if (LINEAR_WHITESPACE.indexOf(ch) != -1) { // whitespace
found
offset++;
} else {
// record the location of the first non lwsp and drop
down to process the
@@ -117,9 +137,9 @@ public final class MimeUtility {
int wordStart = offset;
while (offset < endOffset) {
- // step over the white space characters.
+ // step over the non white space characters.
ch = text.charAt(offset);
- if (LINEAR_WHITESPACE.indexOf(ch) == -1) {
+ if (LINEAR_WHITESPACE.indexOf(ch) == -1) { // not white
space
offset++;
} else {
break;
@@ -204,7 +224,7 @@ public final class MimeUtility {
String encoding = word.substring(charsetPos + 1, encodingPos);
// and finally the encoded text.
- int encodedTextPos = word.indexOf("?=", encodingPos + 1);
+ int encodedTextPos = word.indexOf(ENCODED_TOKEN_FINISHER, encodingPos
+ 1);
if (encodedTextPos == -1) {
throw new ParseException("Missing encoded text in RFC 2047
encoded-word: " + word);
}
@@ -220,13 +240,13 @@ public final class MimeUtility {
// the decoder writes directly to an output stream.
ByteArrayOutputStream out = new
ByteArrayOutputStream(encodedText.length());
- byte[] encodedData = encodedText.getBytes("US-ASCII");
+ byte[] encodedData = encodedText.getBytes(US_ASCII_CHARSET);
// Base64 encoded?
- if (encoding.equals("B")) {
- Base64Decoder.decode(encodedData, 0, encodedData.length, out);
- } else if (encoding.equals("Q")) { // maybe quoted printable.
- QuotedPrintableDecoder.decode(encodedData, 0,
encodedData.length, out);
+ if (encoding.equals(BASE64_ENCODING_MARKER)) {
+ Base64Decoder.decode(encodedData, out);
+ } else if (encoding.equals(QUOTEDPRINTABLE_ENCODING_MARKER)) { //
maybe quoted printable.
+ QuotedPrintableDecoder.decode(encodedData, out);
} else {
throw new UnsupportedEncodingException("Unknown RFC 2047
encoding: " + encoding);
}
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/QuotedPrintableDecoder.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/QuotedPrintableDecoder.java?rev=1458566&r1=1458565&r2=1458566&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/QuotedPrintableDecoder.java
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/fileupload/util/mime/QuotedPrintableDecoder.java
Tue Mar 19 23:14:59 2013
@@ -25,34 +25,12 @@ import java.io.OutputStream;
final class QuotedPrintableDecoder {
/**
- * Set up the encoding table.
- */
- private static final byte[] ENCODING_TABLE = {
- (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte)
'5', (byte) '6', (byte) '7',
- (byte) '8', (byte) '9', (byte) 'A', (byte) 'B', (byte) 'C', (byte)
'D', (byte) 'E', (byte) 'F'
- };
-
- /**
* The shift value required to create the upper nibble
* from the first of 2 byte values converted from ascii hex.
*/
private static final int UPPER_NIBBLE_SHIFT = Byte.SIZE / 2;
/**
- * Set up the decoding table; this is indexed by a byte converted to an
int,
- * so must be at least as large as the number of different byte values,
- * positive and negative and zero.
- */
- private static final byte[] DECODING_TABLE = new byte[Byte.MAX_VALUE -
Byte.MIN_VALUE + 1];
-
- static {
- // initialize the decoding table
- for (int i = 0; i < ENCODING_TABLE.length; i++) {
- DECODING_TABLE[ENCODING_TABLE[i]] = (byte) i;
- }
- }
-
- /**
* Hidden constructor, this class must not be instantiated.
*/
private QuotedPrintableDecoder() {
@@ -63,14 +41,14 @@ final class QuotedPrintableDecoder {
* Decode the encoded byte data writing it to the given output stream.
*
* @param data The array of byte data to decode.
- * @param off Starting offset within the array.
- * @param length The length of data to encode.
* @param out The output stream used to return the decoded data.
*
* @return the number of bytes produced.
* @exception IOException
*/
- public static int decode(byte[] data, int off, int length, OutputStream
out) throws IOException {
+ public static int decode(byte[] data, OutputStream out) throws IOException
{
+ int off = 0;
+ int length = data.length;
int endOffset = off + length;
int bytesWritten = 0;
@@ -84,23 +62,23 @@ final class QuotedPrintableDecoder {
// we found an encoded character. Reduce the 3 char sequence
to one.
// but first, make sure we have two characters to work with.
if (off + 1 >= endOffset) {
- throw new IOException("Invalid quoted printable encoding");
+ throw new IOException("Invalid quoted printable encoding;
truncated escape sequence");
}
- // convert the two bytes back from hex.
+
byte b1 = data[off++];
byte b2 = data[off++];
// we've found an encoded carriage return. The next char
needs to be a newline
if (b1 == '\r') {
if (b2 != '\n') {
- throw new IOException("Invalid quoted printable
encoding");
+ throw new IOException("Invalid quoted printable
encoding; CR must be followed by LF");
}
// this was a soft linebreak inserted by the encoding. We
just toss this away
// on decode.
} else {
// this is a hex pair we need to convert back to a single
byte.
- byte c1 = DECODING_TABLE[b1];
- byte c2 = DECODING_TABLE[b2];
+ int c1 = hexToBinary(b1);
+ int c2 = hexToBinary(b2);
out.write((c1 << UPPER_NIBBLE_SHIFT) | c2);
// 3 bytes in, one byte out
bytesWritten++;
@@ -115,4 +93,20 @@ final class QuotedPrintableDecoder {
return bytesWritten;
}
+ /**
+ * Convert a hex digit to the binary value it represents.
+ *
+ * @param b the ascii hex byte to convert (0-0, A-F, a-f)
+ * @return the int value of the hex byte, 0-15
+ * @throws IOException if the byte is not a valid hex digit.
+ */
+ private static int hexToBinary(final byte b) throws IOException {
+ // CHECKSTYLE IGNORE MagicNumber FOR NEXT 1 LINE
+ final int i = Character.digit((char) b, 16);
+ if (i == -1) {
+ throw new IOException("Invalid quoted printable encoding: not a
valid hex digit: " + b);
+ }
+ return i;
+ }
+
}
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1458566&r1=1458565&r2=1458566&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Tue Mar 19 23:14:59 2013
@@ -79,7 +79,7 @@
</add>
<update>
Update Tomcat's internal copy of Commons FileUpload to FileUpload
trunk,
- revision 1458080 and the associated extract from Commons IO to 2.4.
+ revision 1458500 and the associated extract from Commons IO to 2.4.
(markt)
</update>
<fix>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]