Loading k9mail-library/src/main/java/com/fsck/k9/mail/store/imap/ImapResponseParser.java +17 −2 Original line number Diff line number Diff line Loading @@ -194,8 +194,7 @@ class ImapResponseParser { expect(' '); parseList(response, '(', ')'); expect(' '); //TODO: Add support for NIL String delimiter = parseQuoted(); String delimiter = parseQuotedOrNil(); response.add(delimiter); expect(' '); String name = parseString(); Loading Loading @@ -412,6 +411,22 @@ class ImapResponseParser { throw new IOException("parseQuoted(): end of stream reached"); } private String parseQuotedOrNil() throws IOException { int peek = inputStream.peek(); if (peek == '"') { return parseQuoted(); } else { parseNil(); return null; } } private void parseNil() throws IOException { expect('N'); expect('I'); expect('L'); } private String readStringUntil(char end) throws IOException { StringBuilder sb = new StringBuilder(); Loading k9mail-library/src/main/java/com/fsck/k9/mail/store/imap/ListResponse.java +4 −2 Original line number Diff line number Diff line Loading @@ -5,6 +5,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import android.support.annotation.Nullable; import static com.fsck.k9.mail.store.imap.ImapResponseParser.equalsIgnoreCase; class ListResponse { Loading Loading @@ -52,9 +54,8 @@ class ListResponse { return null; } //TODO: Add support for NIL. Needs modifications in ImapResponseParser String hierarchyDelimiter = response.getString(2); if (hierarchyDelimiter.length() != 1) { if (hierarchyDelimiter != null && hierarchyDelimiter.length() != 1) { return null; } Loading Loading @@ -93,6 +94,7 @@ class ListResponse { return false; } @Nullable public String getHierarchyDelimiter() { return hierarchyDelimiter; } Loading k9mail-library/src/test/java/com/fsck/k9/mail/store/imap/ImapResponseParserTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -344,6 +344,20 @@ public class ImapResponseParserTest { assertEquals("TAG", responseTwo.getTag()); } @Test public void readResponse_withListResponseContainingNil() throws Exception { ImapResponseParser parser = createParser("* LIST (\\NoInferiors) NIL INBOX\r\n"); ImapResponse response = parser.readResponse(); assertEquals(4, response.size()); assertEquals("LIST", response.get(0)); assertEquals(1, response.getList(1).size()); assertEquals("\\NoInferiors", response.getList(1).getString(0)); assertEquals(null, response.get(2)); assertEquals("INBOX", response.get(3)); } @Test public void readResponse_withListAsFirstToken_shouldThrow() throws Exception { ImapResponseParser parser = createParser("* [1 2] 3\r\n"); Loading k9mail-library/src/test/java/com/fsck/k9/mail/store/imap/ListResponseTest.java +3 −1 Original line number Diff line number Diff line Loading @@ -20,15 +20,17 @@ public class ListResponseTest { createImapResponse("* LIST () \"/\" blurdybloop"), createImapResponse("* LIST (\\Noselect) \"/\" foo"), createImapResponse("* LIST () \"/\" foo/bar"), createImapResponse("* LIST (\\NoInferiors) NIL INBOX"), createImapResponse("X OK LIST completed") ); List<ListResponse> result = ListResponse.parseList(responses); assertEquals(3, result.size()); assertEquals(4, result.size()); assertListResponseEquals(noAttributes(), "/", "blurdybloop", result.get(0)); assertListResponseEquals(singletonList("\\Noselect"), "/", "foo", result.get(1)); assertListResponseEquals(noAttributes(), "/", "foo/bar", result.get(2)); assertListResponseEquals(singletonList("\\NoInferiors"), null, "INBOX", result.get(3)); } @Test Loading Loading
k9mail-library/src/main/java/com/fsck/k9/mail/store/imap/ImapResponseParser.java +17 −2 Original line number Diff line number Diff line Loading @@ -194,8 +194,7 @@ class ImapResponseParser { expect(' '); parseList(response, '(', ')'); expect(' '); //TODO: Add support for NIL String delimiter = parseQuoted(); String delimiter = parseQuotedOrNil(); response.add(delimiter); expect(' '); String name = parseString(); Loading Loading @@ -412,6 +411,22 @@ class ImapResponseParser { throw new IOException("parseQuoted(): end of stream reached"); } private String parseQuotedOrNil() throws IOException { int peek = inputStream.peek(); if (peek == '"') { return parseQuoted(); } else { parseNil(); return null; } } private void parseNil() throws IOException { expect('N'); expect('I'); expect('L'); } private String readStringUntil(char end) throws IOException { StringBuilder sb = new StringBuilder(); Loading
k9mail-library/src/main/java/com/fsck/k9/mail/store/imap/ListResponse.java +4 −2 Original line number Diff line number Diff line Loading @@ -5,6 +5,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import android.support.annotation.Nullable; import static com.fsck.k9.mail.store.imap.ImapResponseParser.equalsIgnoreCase; class ListResponse { Loading Loading @@ -52,9 +54,8 @@ class ListResponse { return null; } //TODO: Add support for NIL. Needs modifications in ImapResponseParser String hierarchyDelimiter = response.getString(2); if (hierarchyDelimiter.length() != 1) { if (hierarchyDelimiter != null && hierarchyDelimiter.length() != 1) { return null; } Loading Loading @@ -93,6 +94,7 @@ class ListResponse { return false; } @Nullable public String getHierarchyDelimiter() { return hierarchyDelimiter; } Loading
k9mail-library/src/test/java/com/fsck/k9/mail/store/imap/ImapResponseParserTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -344,6 +344,20 @@ public class ImapResponseParserTest { assertEquals("TAG", responseTwo.getTag()); } @Test public void readResponse_withListResponseContainingNil() throws Exception { ImapResponseParser parser = createParser("* LIST (\\NoInferiors) NIL INBOX\r\n"); ImapResponse response = parser.readResponse(); assertEquals(4, response.size()); assertEquals("LIST", response.get(0)); assertEquals(1, response.getList(1).size()); assertEquals("\\NoInferiors", response.getList(1).getString(0)); assertEquals(null, response.get(2)); assertEquals("INBOX", response.get(3)); } @Test public void readResponse_withListAsFirstToken_shouldThrow() throws Exception { ImapResponseParser parser = createParser("* [1 2] 3\r\n"); Loading
k9mail-library/src/test/java/com/fsck/k9/mail/store/imap/ListResponseTest.java +3 −1 Original line number Diff line number Diff line Loading @@ -20,15 +20,17 @@ public class ListResponseTest { createImapResponse("* LIST () \"/\" blurdybloop"), createImapResponse("* LIST (\\Noselect) \"/\" foo"), createImapResponse("* LIST () \"/\" foo/bar"), createImapResponse("* LIST (\\NoInferiors) NIL INBOX"), createImapResponse("X OK LIST completed") ); List<ListResponse> result = ListResponse.parseList(responses); assertEquals(3, result.size()); assertEquals(4, result.size()); assertListResponseEquals(noAttributes(), "/", "blurdybloop", result.get(0)); assertListResponseEquals(singletonList("\\Noselect"), "/", "foo", result.get(1)); assertListResponseEquals(noAttributes(), "/", "foo/bar", result.get(2)); assertListResponseEquals(singletonList("\\NoInferiors"), null, "INBOX", result.get(3)); } @Test Loading