Throw NullPointerException on args to Time#compare
Check for null on arguments to Time#compare(Time, Time) before passing
it down to JNI code.
Bug: 5073949
Change-Id: I077e9d5194a89206d1e51fc89a72c8a72e29f8f1
diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java
index c6ffe58..5926db3 100644
--- a/core/java/android/text/format/Time.java
+++ b/core/java/android/text/format/Time.java
@@ -281,10 +281,29 @@
}
/**
- * return a negative number if a is less than b, a positive number if a is
- * greater than b, and 0 if they are equal.
+ * Compare two {@code Time} objects and return a negative number if {@code
+ * a} is less than {@code b}, a positive number if {@code a} is greater than
+ * {@code b}, or 0 if they are equal.
+ *
+ * @param a first {@code Time} instance to compare
+ * @param b second {@code Time} instance to compare
+ * @throws NullPointerException if either argument is {@code null}
+ * @throws IllegalArgumentException if {@link #allDay} is true but {@code
+ * hour}, {@code minute}, and {@code second} are not 0.
+ * @return a negative result if {@code a} is earlier, a positive result if
+ * {@code a} is earlier, or 0 if they are equal.
*/
- native public static int compare(Time a, Time b);
+ public static int compare(Time a, Time b) {
+ if (a == null) {
+ throw new NullPointerException("a == null");
+ } else if (b == null) {
+ throw new NullPointerException("b == null");
+ }
+
+ return nativeCompare(a, b);
+ }
+
+ private static native int nativeCompare(Time a, Time b);
/**
* Print the current value given the format string provided. See man
diff --git a/core/jni/android_text_format_Time.cpp b/core/jni/android_text_format_Time.cpp
index c152aa8..69c6021 100644
--- a/core/jni/android_text_format_Time.cpp
+++ b/core/jni/android_text_format_Time.cpp
@@ -641,7 +641,7 @@
/* name, signature, funcPtr */
{ "normalize", "(Z)J", (void*)android_text_format_Time_normalize },
{ "switchTimezone", "(Ljava/lang/String;)V", (void*)android_text_format_Time_switchTimezone },
- { "compare", "(Landroid/text/format/Time;Landroid/text/format/Time;)I", (void*)android_text_format_Time_compare },
+ { "nativeCompare", "(Landroid/text/format/Time;Landroid/text/format/Time;)I", (void*)android_text_format_Time_compare },
{ "format1", "(Ljava/lang/String;)Ljava/lang/String;", (void*)android_text_format_Time_format },
{ "format2445", "()Ljava/lang/String;", (void*)android_text_format_Time_format2445 },
{ "toString", "()Ljava/lang/String;", (void*)android_text_format_Time_toString },