From 70b368a66bdf6c888257ed6e4a621bde699a8800 Mon Sep 17 00:00:00 2001 From: mguessan Date: Tue, 20 Jul 2010 13:51:58 +0000 Subject: [PATCH] Carddav: fix semicolon encoding in compound value git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1227 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- src/java/davmail/exchange/VCardReader.java | 6 +++++- .../davmail/exchange/TestExchangeSessionContact.java | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/java/davmail/exchange/VCardReader.java b/src/java/davmail/exchange/VCardReader.java index 5482f6d9..525da074 100644 --- a/src/java/davmail/exchange/VCardReader.java +++ b/src/java/davmail/exchange/VCardReader.java @@ -215,10 +215,14 @@ public class VCardReader extends ICSBufferedReader { startIndex = i + 1; } } else if (state == State.VALUE) { - if (currentChar == ';') { + if (currentChar == '\\') { + state = State.BACKSLASH; + } else if (currentChar == ';') { property.addValue(line.substring(startIndex, i)); startIndex = i + 1; } + } else if (state == State.BACKSLASH) { + state = State.VALUE; } } property.addValue(line.substring(startIndex)); diff --git a/src/test/davmail/exchange/TestExchangeSessionContact.java b/src/test/davmail/exchange/TestExchangeSessionContact.java index 98e73886..8e2b4785 100644 --- a/src/test/davmail/exchange/TestExchangeSessionContact.java +++ b/src/test/davmail/exchange/TestExchangeSessionContact.java @@ -361,4 +361,15 @@ public class TestExchangeSessionContact extends AbstractExchangeSessionTestCase assertEquals("rouge,vert", contact.get("keywords")); } + + public void testSemiColonInCompoundValue() throws IOException { + ExchangeSession.Contact contact = getCurrentContact(); + String itemBody = "BEGIN:VCARD\n" + + "VERSION:3.0\n" + + "item1.ADR;type=WORK;type=pref:;;line1\\nline 2 \\; with semicolon;;;;\n" + + "END:VCARD"; + + ExchangeSession.ItemResult result = session.createOrUpdateContact("testcontactfolder", itemName, itemBody, contact.etag, null); + assertEquals(200, result.status); + } }