Fix crash on unset recurrence type

Recurring event rule parser uses -1 for an unset recurrence type. Check
for invalid recurrence type to prevent crash.

Bug:14490734
Change-Id: I68de74d16cd4489d4235a9a3aea9c8ed0c4429dc
diff --git a/src/com/android/exchange/utility/CalendarUtilities.java b/src/com/android/exchange/utility/CalendarUtilities.java
index 7a4af68..50edea2 100644
--- a/src/com/android/exchange/utility/CalendarUtilities.java
+++ b/src/com/android/exchange/utility/CalendarUtilities.java
@@ -1349,7 +1349,15 @@
      */
     static public String rruleFromRecurrence(int type, int occurrences, int interval, int dow,
             int dom, int wom, int moy, String until) {
-        StringBuilder rrule = new StringBuilder("FREQ=" + sTypeToFreq[type]);
+        if (type < 0 || type >= sTypeToFreq.length) {
+            return null;
+        }
+        final String typeStr = sTypeToFreq[type];
+        // Type array is sparse (eg, no type 4), so catch invalid (empty) types
+        if (TextUtils.isEmpty(typeStr)) {
+            return null;
+        }
+        StringBuilder rrule = new StringBuilder("FREQ=" + typeStr);
         // INTERVAL and COUNT
         if (occurrences > 0) {
             rrule.append(";COUNT=" + occurrences);
diff --git a/tests/src/com/android/exchange/utility/CalendarUtilitiesTests.java b/tests/src/com/android/exchange/utility/CalendarUtilitiesTests.java
index 68e57e0..bf80f1b 100644
--- a/tests/src/com/android/exchange/utility/CalendarUtilitiesTests.java
+++ b/tests/src/com/android/exchange/utility/CalendarUtilitiesTests.java
@@ -720,6 +720,14 @@
         rrule = CalendarUtilities.rruleFromRecurrence(
                 6 /*Yearly/Month/DayOfWeek*/, 0, 0, 4 /*Tue*/, 0, 1 /*1st*/, 6 /*June*/, null);
         assertEquals("FREQ=YEARLY;BYDAY=1TU;BYMONTH=6", rrule);
+        // Missing type
+        rrule = CalendarUtilities.rruleFromRecurrence(
+                -1 /* missing */, 0, 0, 4 /*Tue*/, 0, 1 /*1st*/, 6 /*June*/, null);
+        assertNull(rrule);
+        // Invalid type
+        rrule = CalendarUtilities.rruleFromRecurrence(
+                4 /* invalid */, 0, 0, 4 /*Tue*/, 0, 1 /*1st*/, 6 /*June*/, null);
+        assertNull(rrule);
     }
 
     /**