Merge change I5d30aa18 into eclair

* changes:
  Make vCard parser invalid lines in vCard file which look like some comment. Do not merge.
This commit is contained in:
Android (Google) Code Review
2009-11-10 23:03:57 -08:00
3 changed files with 83 additions and 8 deletions

View File

@@ -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) {

View File

@@ -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);
}
}

View File

@@ -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);
}
}