diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-11-10 23:03:57 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-11-10 23:03:57 -0800 |
commit | b9c40a65c7fb2121d3076a522248574162bf5f8c (patch) | |
tree | 6b1315791e96fa929982e2a505991a5ab1b17562 | |
parent | e464de6b764348a102ae64417d22bbd1c80723dc (diff) | |
parent | 5d30aa183fe492ca2b56975986ff3ac5dbcad35b (diff) | |
download | frameworks_base-b9c40a65c7fb2121d3076a522248574162bf5f8c.zip frameworks_base-b9c40a65c7fb2121d3076a522248574162bf5f8c.tar.gz frameworks_base-b9c40a65c7fb2121d3076a522248574162bf5f8c.tar.bz2 |
Merge change I5d30aa18 into eclair
* changes:
Make vCard parser invalid lines in vCard file which look like some comment. Do not merge.
3 files changed, 83 insertions, 8 deletions
diff --git a/core/java/android/pim/vcard/VCardParser_V21.java b/core/java/android/pim/vcard/VCardParser_V21.java index 974fca8..11b3888 100644 --- a/core/java/android/pim/vcard/VCardParser_V21.java +++ b/core/java/android/pim/vcard/VCardParser_V21.java @@ -16,6 +16,8 @@ package android.pim.vcard; import android.pim.vcard.exception.VCardException; +import android.pim.vcard.exception.VCardInvalidCommentLineException; +import android.pim.vcard.exception.VCardInvalidLineException; import android.pim.vcard.exception.VCardNestedException; import android.pim.vcard.exception.VCardNotSupportedException; import android.pim.vcard.exception.VCardVersionException; @@ -52,7 +54,7 @@ public class VCardParser_V21 extends VCardParser { Arrays.asList("INLINE", "URL", "CONTENT-ID", "CID")); /** Store the property names available in vCard 2.1 */ - private static final HashSet<String> sAvailablePropertyNameV21 = + private static final HashSet<String> sAvailablePropertyNameSetV21 = new HashSet<String>(Arrays.asList( "BEGIN", "LOGO", "PHOTO", "LABEL", "FN", "TITLE", "SOUND", "VERSION", "TEL", "EMAIL", "TZ", "GEO", "NOTE", "URL", @@ -152,7 +154,7 @@ public class VCardParser_V21 extends VCardParser { * @return true when the propertyName is a valid property name. */ protected boolean isValidPropertyName(String propertyName) { - if (!(sAvailablePropertyNameV21.contains(propertyName.toUpperCase()) || + if (!(sAvailablePropertyNameSetV21.contains(propertyName.toUpperCase()) || propertyName.startsWith("X-")) && !mWarningValueMap.contains(propertyName)) { mWarningValueMap.add(propertyName); @@ -342,7 +344,12 @@ public class VCardParser_V21 extends VCardParser { mBuilder.startProperty(); mTimeStartProperty += System.currentTimeMillis() - start; } - ended = parseItem(); + try { + ended = parseItem(); + } catch (VCardInvalidCommentLineException e) { + Log.e(LOG_TAG, "Invalid line which looks like some comment was found. Ignored."); + ended = false; + } if (mBuilder != null && !ended) { long start = System.currentTimeMillis(); mBuilder.endProperty(); @@ -369,7 +376,7 @@ public class VCardParser_V21 extends VCardParser { return true; } if (propertyNameAndValue.length != 2) { - throw new VCardException("Invalid line \"" + line + "\""); + throw new VCardInvalidLineException("Invalid line \"" + line + "\""); } String propertyName = propertyNameAndValue[0].toUpperCase(); String propertyValue = propertyNameAndValue[1]; @@ -418,7 +425,11 @@ public class VCardParser_V21 extends VCardParser { int nameIndex = 0; String[] propertyNameAndValue = new String[2]; - + + if (length > 0 && line.charAt(0) == '#') { + throw new VCardInvalidCommentLineException(); + } + for (int i = 0; i < length; i++) { char ch = line.charAt(i); switch (state) { @@ -483,7 +494,7 @@ public class VCardParser_V21 extends VCardParser { } } - throw new VCardException("Invalid line: \"" + line + "\""); + throw new VCardInvalidLineException("Invalid line: \"" + line + "\""); } @@ -527,7 +538,7 @@ public class VCardParser_V21 extends VCardParser { /** * ptypeval = knowntype / "X-" word */ - protected void handleType(String ptypeval) { + protected void handleType(final String ptypeval) { String upperTypeValue = ptypeval; if (!(sKnownTypeSet.contains(upperTypeValue) || upperTypeValue.startsWith("X-")) && !mWarningValueMap.contains(ptypeval)) { @@ -543,7 +554,7 @@ public class VCardParser_V21 extends VCardParser { /** * pvalueval = "INLINE" / "URL" / "CONTENT-ID" / "CID" / "X-" word */ - protected void handleValue(String pvalueval) throws VCardException { + protected void handleValue(final String pvalueval) throws VCardException { if (sKnownValueSet.contains(pvalueval.toUpperCase()) || pvalueval.startsWith("X-")) { if (mBuilder != null) { diff --git a/core/java/android/pim/vcard/exception/VCardInvalidCommentLineException.java b/core/java/android/pim/vcard/exception/VCardInvalidCommentLineException.java new file mode 100644 index 0000000..67db62c --- /dev/null +++ b/core/java/android/pim/vcard/exception/VCardInvalidCommentLineException.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed 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 android.pim.vcard.exception; + +/** + * Thrown when the vCard has some line starting with '#'. In the specification, + * both vCard 2.1 and vCard 3.0 does not allow such line, but some actual exporter emit + * such lines. + */ +public class VCardInvalidCommentLineException extends VCardInvalidLineException { + public VCardInvalidCommentLineException() { + super(); + } + + public VCardInvalidCommentLineException(final String message) { + super(message); + } +} diff --git a/core/java/android/pim/vcard/exception/VCardInvalidLineException.java b/core/java/android/pim/vcard/exception/VCardInvalidLineException.java new file mode 100644 index 0000000..330153e --- /dev/null +++ b/core/java/android/pim/vcard/exception/VCardInvalidLineException.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed 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 android.pim.vcard.exception; + +/** + * Thrown when the vCard has some line starting with '#'. In the specification, + * both vCard 2.1 and vCard 3.0 does not allow such line, but some actual exporter emit + * such lines. + */ +public class VCardInvalidLineException extends VCardException { + public VCardInvalidLineException() { + super(); + } + + public VCardInvalidLineException(final String message) { + super(message); + } +} |