You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gn...@apache.org on 2009/03/12 21:34:18 UTC
svn commit: r753004 - in
/geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src:
main/java/org/apache/geronimo/javamail/store/imap/connection/
test/java/org/apache/geronimo/javamail/store/imap/connection/
test/resources/imap/
Author: gnodet
Date: Thu Mar 12 20:34:17 2009
New Revision: 753004
URL: http://svn.apache.org/viewvc?rev=753004&view=rev
Log:
GERONIMO-4585: Disposition is incorrectly parsed on multiparts imap messages
Added:
geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/java/org/apache/geronimo/javamail/store/imap/connection/
geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/java/org/apache/geronimo/javamail/store/imap/connection/IMAPBodyStructureTest.java
geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/resources/imap/
geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/resources/imap/multipart.bodystructure
Modified:
geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPBodyStructure.java
geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPResponseTokenizer.java
geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPStatusResponse.java
Modified: geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPBodyStructure.java
URL: http://svn.apache.org/viewvc/geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPBodyStructure.java?rev=753004&r1=753003&r2=753004&view=diff
==============================================================================
--- geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPBodyStructure.java (original)
+++ geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPBodyStructure.java Thu Mar 12 20:34:17 2009
@@ -27,6 +27,8 @@
import javax.mail.internet.ContentDisposition;
import javax.mail.internet.ContentType;
+import org.apache.geronimo.javamail.util.ResponseFormatException;
+
public class IMAPBodyStructure extends IMAPFetchDataItem {
@@ -94,9 +96,6 @@
// get the subtype (required)
mimeType.setSubType(source.readString());
- if (source.checkListEnd()) {
- return;
- }
// if the next token is the list terminator, we're done. Otherwise, we need to read extension
// data.
if (source.checkListEnd()) {
@@ -168,8 +167,16 @@
disposition = new ContentDisposition();
// now the dispostion. This is a string, followed by a parameter list.
- disposition.setDisposition(source.readString());
- disposition.setParameterList(source.readParameterList());
+ if (source.peek(true).getType() == '(') {
+ source.checkLeftParen();
+ disposition.setDisposition(source.readString());
+ disposition.setParameterList(source.readParameterList());
+ source.checkRightParen();
+ } else if (source.peek(true) == IMAPResponseTokenizer.NIL) {
+ source.next();
+ } else {
+ throw new ResponseFormatException("Expecting NIL or '(' in response");
+ }
// once more
if (source.checkListEnd()) {
@@ -187,11 +194,13 @@
// read the location info.
source.readStringList();
-
// we don't recognize any other forms of extension, so just skip over these.
while (source.notListEnd()) {
source.skipExtensionItem();
}
+
+ // step over the closing paren
+ source.next();
}
Modified: geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPResponseTokenizer.java
URL: http://svn.apache.org/viewvc/geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPResponseTokenizer.java?rev=753004&r1=753003&r2=753004&view=diff
==============================================================================
--- geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPResponseTokenizer.java (original)
+++ geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPResponseTokenizer.java Thu Mar 12 20:34:17 2009
@@ -613,9 +613,11 @@
* @exception ResponseFormatException
*/
public String readString() throws MessagingException {
- Token token = next();
+ Token token = next(true);
int type = token.getType();
-
+ if (type == Token.NIL) {
+ return null;
+ }
if (type != Token.ATOM && type != Token.QUOTEDSTRING && type != Token.LITERAL && type != Token.NUMERIC) {
throw new ResponseFormatException("String token expected in response: " + token.getValue());
}
@@ -1083,11 +1085,11 @@
* @exception ResponseFormatException
*/
public List readStringList() throws MessagingException {
- Token token = peek();
-
- List list = new ArrayList();
+ Token token = peek(true);
if (token.getType() == '(') {
+ List list = new ArrayList();
+
next();
while (notListEnd()) {
@@ -1098,17 +1100,25 @@
}
}
// step over the closing paren
- next();
+ next();
+
+ return list;
}
- else {
+ else if (token != NIL) {
+ List list = new ArrayList();
+
// just a single string value.
String value = readString();
// this can be NIL, technically
if (value != null) {
list.add(value);
}
+
+ return list;
+ } else {
+ next();
}
- return list;
+ return null;
}
Modified: geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPStatusResponse.java
URL: http://svn.apache.org/viewvc/geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPStatusResponse.java?rev=753004&r1=753003&r2=753004&view=diff
==============================================================================
--- geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPStatusResponse.java (original)
+++ geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPStatusResponse.java Thu Mar 12 20:34:17 2009
@@ -46,6 +46,9 @@
// parse the list of flag values
List flags = source.readStringList();
+ if (flags == null) {
+ return;
+ }
for (int i = 0; i < flags.size(); i += 2) {
String field = ((String)flags.get(i)).toUpperCase();
Added: geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/java/org/apache/geronimo/javamail/store/imap/connection/IMAPBodyStructureTest.java
URL: http://svn.apache.org/viewvc/geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/java/org/apache/geronimo/javamail/store/imap/connection/IMAPBodyStructureTest.java?rev=753004&view=auto
==============================================================================
--- geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/java/org/apache/geronimo/javamail/store/imap/connection/IMAPBodyStructureTest.java (added)
+++ geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/java/org/apache/geronimo/javamail/store/imap/connection/IMAPBodyStructureTest.java Thu Mar 12 20:34:17 2009
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.javamail.store.imap.connection;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
+
+import javax.mail.internet.MimeMessage;
+
+import junit.framework.TestCase;
+import org.apache.geronimo.javamail.store.imap.IMAPStoreTest;
+
+public class IMAPBodyStructureTest extends TestCase {
+
+ public void testMultipart() throws Exception {
+ InputStream in = IMAPStoreTest.class.getResourceAsStream("/imap/multipart.bodystructure");
+ BufferedReader r = new BufferedReader(new InputStreamReader(in));
+ try {
+ IMAPResponseTokenizer tokenizer = new IMAPResponseTokenizer(r.readLine().getBytes());
+ IMAPBodyStructure s = new IMAPBodyStructure(tokenizer);
+ assertNull(s.disposition.getDisposition());
+ assertNull(s.md5Hash);
+ } finally {
+ in.close();
+ }
+ }
+}
Added: geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/resources/imap/multipart.bodystructure
URL: http://svn.apache.org/viewvc/geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/resources/imap/multipart.bodystructure?rev=753004&view=auto
==============================================================================
--- geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/resources/imap/multipart.bodystructure (added)
+++ geronimo/javamail/trunk/geronimo-javamail_1.4/geronimo-javamail_1.4_provider/src/test/resources/imap/multipart.bodystructure Thu Mar 12 20:34:17 2009
@@ -0,0 +1 @@
+(("TEXT" "PLAIN" ("CHARSET" "ISO-8859-1") NIL NIL "7BIT" 1281 28 NIL NIL NIL)("TEXT" "HTML" ("CHARSET" "ISO-8859-1") NIL NIL "7BIT" 1510 33 NIL NIL NIL) "ALTERNATIVE" ("BOUNDARY" "0016e6d976ed8989d30464e986d1") NIL NIL)
\ No newline at end of file