Merge change I5d30aa18 into eclair

* changes:
  Make vCard parser invalid lines in vCard file which look like some comment. Do not merge.
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 @@
             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 @@
      * @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 @@
                 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 @@
             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 @@
         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 @@
             }
         }
         
-        throw new VCardException("Invalid line: \"" + line + "\"");
+        throw new VCardInvalidLineException("Invalid line: \"" + line + "\"");
     }
     
     
@@ -527,7 +538,7 @@
     /**
      * 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 @@
     /**
      * 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);
+    }
+}