Snap for 4448085 from 6b815ed6cde82df78ed12a60e4b9acfcc3fe9412 to oc-m3-release

Change-Id: I59105ef5437aa03ec074eca66fe8c67d5a0c974c
diff --git a/luni/src/main/native/NetworkUtilities.cpp b/luni/src/main/native/NetworkUtilities.cpp
index b259814..66daf9c 100644
--- a/luni/src/main/native/NetworkUtilities.cpp
+++ b/luni/src/main/native/NetworkUtilities.cpp
@@ -99,9 +99,15 @@
 
     // Get holder.
     static jfieldID holderFid = env->GetFieldID(JniConstants::inetAddressClass, "holder", "Ljava/net/InetAddress$InetAddressHolder;");
+    if (holderFid == NULL) {
+        return false;
+    }
     ScopedLocalRef<jobject> holder(env, env->GetObjectField(inetAddress, holderFid));
     // Get the address family.
     static jfieldID familyFid = env->GetFieldID(JniConstants::inetAddressHolderClass, "family", "I");
+    if (familyFid == NULL) {
+        return false;
+    }
     ss.ss_family = env->GetIntField(holder.get(), familyFid);
     if (ss.ss_family == AF_UNSPEC) {
         sa_len = sizeof(ss.ss_family);
@@ -117,6 +123,9 @@
 
     // Get the byte array that stores the IP address bytes in the InetAddress.
     static jmethodID bytesMid = env->GetMethodID(JniConstants::inetAddressClass, "getAddress", "()[B");
+    if (bytesMid == NULL) {
+        return false;
+    }
     ScopedLocalRef<jbyteArray> addressBytes(env, reinterpret_cast<jbyteArray>(env->CallObjectMethod(inetAddress, bytesMid)));
     if (env->ExceptionCheck()) {
         return false;
@@ -143,6 +152,9 @@
         static jfieldID holder6Fid = env->GetFieldID(JniConstants::inet6AddressClass,
                                                      "holder6",
                                                      "Ljava/net/Inet6Address$Inet6AddressHolder;");
+        if (holder6Fid == NULL) {
+            return false;
+        }
         ScopedLocalRef<jobject> holder6(env, env->GetObjectField(inetAddress, holder6Fid));
         static jfieldID scopeFid = env->GetFieldID(JniConstants::inet6AddressHolderClass, "scope_id", "I");
         sin6.sin6_scope_id = env->GetIntField(holder6.get(), scopeFid);
diff --git a/luni/src/main/native/libcore_io_Linux.cpp b/luni/src/main/native/libcore_io_Linux.cpp
index 0f3a4a0..e3d67a6 100644
--- a/luni/src/main/native/libcore_io_Linux.cpp
+++ b/luni/src/main/native/libcore_io_Linux.cpp
@@ -374,11 +374,16 @@
         }
         static jmethodID ctor = env->GetMethodID(JniConstants::inetSocketAddressClass,
                 "<init>", "(Ljava/net/InetAddress;I)V");
+        if (ctor == NULL) {
+            return NULL;
+        }
         return env->NewObject(JniConstants::inetSocketAddressClass, ctor, inetAddress, port);
     } else if (ss.ss_family == AF_UNIX) {
         static jmethodID ctor = env->GetMethodID(JniConstants::unixSocketAddressClass,
                 "<init>", "([B)V");
-
+        if (ctor == NULL) {
+            return NULL;
+        }
         jbyteArray javaSunPath = getUnixSocketPath(env, ss, sa_len);
         if (!javaSunPath) {
             return NULL;
@@ -388,6 +393,9 @@
         const struct sockaddr_nl* nl_addr = reinterpret_cast<const struct sockaddr_nl*>(&ss);
         static jmethodID ctor = env->GetMethodID(JniConstants::netlinkSocketAddressClass,
                 "<init>", "(II)V");
+        if (ctor == NULL) {
+            return NULL;
+        }
         return env->NewObject(JniConstants::netlinkSocketAddressClass, ctor,
                 static_cast<jint>(nl_addr->nl_pid),
                 static_cast<jint>(nl_addr->nl_groups));
@@ -395,6 +403,9 @@
         const struct sockaddr_ll* sll = reinterpret_cast<const struct sockaddr_ll*>(&ss);
         static jmethodID ctor = env->GetMethodID(JniConstants::packetSocketAddressClass,
                 "<init>", "(SISB[B)V");
+        if (ctor == NULL) {
+            return NULL;
+        }
         ScopedLocalRef<jbyteArray> byteArray(env, env->NewByteArray(sll->sll_halen));
         if (byteArray.get() == NULL) {
             return NULL;
@@ -420,6 +431,9 @@
     TO_JAVA_STRING(pw_shell, pw.pw_shell);
     static jmethodID ctor = env->GetMethodID(JniConstants::structPasswdClass, "<init>",
             "(Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(JniConstants::structPasswdClass, ctor,
             pw_name, static_cast<jint>(pw.pw_uid), static_cast<jint>(pw.pw_gid), pw_dir, pw_shell);
 }
@@ -427,6 +441,9 @@
 static jobject makeStructTimespec(JNIEnv* env, const struct timespec& ts) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structTimespecClass, "<init>",
             "(JJ)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(JniConstants::structTimespecClass, ctor,
             static_cast<jlong>(ts.tv_sec), static_cast<jlong>(ts.tv_nsec));
 }
@@ -434,19 +451,39 @@
 static jobject makeStructStat(JNIEnv* env, const struct stat64& sb) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structStatClass, "<init>",
             "(JJIJIIJJLandroid/system/StructTimespec;Landroid/system/StructTimespec;Landroid/system/StructTimespec;JJ)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
+
+    jobject atim_timespec = makeStructTimespec(env, sb.st_atim);
+    if (atim_timespec == NULL) {
+        return NULL;
+    }
+    jobject mtim_timespec = makeStructTimespec(env, sb.st_mtim);
+    if (mtim_timespec == NULL) {
+        return NULL;
+    }
+    jobject ctim_timespec = makeStructTimespec(env, sb.st_ctim);
+    if (ctim_timespec == NULL) {
+        return NULL;
+    }
+
     return env->NewObject(JniConstants::structStatClass, ctor,
             static_cast<jlong>(sb.st_dev), static_cast<jlong>(sb.st_ino),
             static_cast<jint>(sb.st_mode), static_cast<jlong>(sb.st_nlink),
             static_cast<jint>(sb.st_uid), static_cast<jint>(sb.st_gid),
             static_cast<jlong>(sb.st_rdev), static_cast<jlong>(sb.st_size),
-            makeStructTimespec(env, sb.st_atim), makeStructTimespec(env, sb.st_mtim),
-            makeStructTimespec(env, sb.st_ctim), static_cast<jlong>(sb.st_blksize),
-            static_cast<jlong>(sb.st_blocks));
+            atim_timespec, mtim_timespec, ctim_timespec,
+            static_cast<jlong>(sb.st_blksize), static_cast<jlong>(sb.st_blocks));
 }
 
 static jobject makeStructStatVfs(JNIEnv* env, const struct statvfs& sb) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structStatVfsClass, "<init>",
             "(JJJJJJJJJJJ)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
+
     return env->NewObject(JniConstants::structStatVfsClass, ctor,
                           static_cast<jlong>(sb.f_bsize),
                           static_cast<jlong>(sb.f_frsize),
@@ -463,18 +500,27 @@
 
 static jobject makeStructLinger(JNIEnv* env, const struct linger& l) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structLingerClass, "<init>", "(II)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(JniConstants::structLingerClass, ctor, l.l_onoff, l.l_linger);
 }
 
 static jobject makeStructTimeval(JNIEnv* env, const struct timeval& tv) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structTimevalClass, "<init>", "(JJ)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(JniConstants::structTimevalClass, ctor,
             static_cast<jlong>(tv.tv_sec), static_cast<jlong>(tv.tv_usec));
 }
 
 static jobject makeStructUcred(JNIEnv* env, const struct ucred& u __unused) {
-  static jmethodID ctor = env->GetMethodID(JniConstants::structUcredClass, "<init>", "(III)V");
-  return env->NewObject(JniConstants::structUcredClass, ctor, u.pid, u.uid, u.gid);
+    static jmethodID ctor = env->GetMethodID(JniConstants::structUcredClass, "<init>", "(III)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
+    return env->NewObject(JniConstants::structUcredClass, ctor, u.pid, u.uid, u.gid);
 }
 
 static jobject makeStructUtsname(JNIEnv* env, const struct utsname& buf) {
@@ -485,6 +531,9 @@
     TO_JAVA_STRING(machine, buf.machine);
     static jmethodID ctor = env->GetMethodID(JniConstants::structUtsnameClass, "<init>",
             "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(JniConstants::structUtsnameClass, ctor,
             sysname, nodename, release, version, machine);
 };
@@ -1324,6 +1373,9 @@
 
     ScopedLocalRef<jclass> rlimit_class(env, env->FindClass("android/system/StructRlimit"));
     jmethodID ctor = env->GetMethodID(rlimit_class.get(), "<init>", "(JJ)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(rlimit_class.get(), ctor,
                           static_cast<jlong>(r.rlim_cur),
                           static_cast<jlong>(r.rlim_max));
@@ -1457,6 +1509,9 @@
 static jobjectArray Linux_getifaddrs(JNIEnv* env, jobject) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structIfaddrs, "<init>",
             "(Ljava/lang/String;ILjava/net/InetAddress;Ljava/net/InetAddress;Ljava/net/InetAddress;[B)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
 
     ifaddrs* ifaddr;
     int rc = TEMP_FAILURE_RETRY(getifaddrs(&ifaddr));
@@ -1543,6 +1598,9 @@
 
         jobject o = env->NewObject(JniConstants::structIfaddrs, ctor, name, flags, addr, netmask,
                                    broad, hwaddr);
+        if (o == NULL) {
+            return NULL;
+        }
         env->SetObjectArrayElement(result, index, o);
     }
 
diff --git a/ojluni/src/main/java/java/lang/SecurityManager.java b/ojluni/src/main/java/java/lang/SecurityManager.java
index 5ef885e..b7053e0 100644
--- a/ojluni/src/main/java/java/lang/SecurityManager.java
+++ b/ojluni/src/main/java/java/lang/SecurityManager.java
@@ -36,6 +36,12 @@
 // other other methods for security purposes.
 /**
  * Legacy security code; do not use.
+ *
+ * <p>Security managers do <i>not</i> provide a secure environment for
+ * executing untrusted code and are unsupported on Android. Untrusted code
+ * cannot be safely isolated within a single VM on Android. Application
+ * developers can assume that there's no SecurityManager installed,
+ * i.e. {@link java.lang.System#getSecurityManager()} will return null.
  */
 public
 class SecurityManager {
diff --git a/ojluni/src/main/java/java/text/SimpleDateFormat.java b/ojluni/src/main/java/java/text/SimpleDateFormat.java
index 6ae9057..229896b 100644
--- a/ojluni/src/main/java/java/text/SimpleDateFormat.java
+++ b/ojluni/src/main/java/java/text/SimpleDateFormat.java
@@ -128,7 +128,7 @@
  *         <td>Week year
  *         <td><a href="#year">Year</a>
  *         <td><code>2009</code>; <code>09</code>
- *         <td>1+</td>
+ *         <td>24+</td>
  *     <tr style="background-color: rgb(238, 238, 255);">
  *         <td><code>M</code>
  *         <td>Month in year (context sensitive)
@@ -242,7 +242,7 @@
  *         <td>Time zone
  *         <td><a href="#iso8601timezone">ISO 8601 time zone</a>
  *         <td><code>-08</code>; <code>-0800</code>;  <code>-08:00</code>
- *         <td>1+</td>
+ *         <td>24+</td>
  * </table>
  * </blockquote>
  * Pattern letters are usually repeated, as their number determines the
diff --git a/ojluni/src/main/java/java/util/Locale.java b/ojluni/src/main/java/java/util/Locale.java
index 9073504..9d9f3e4 100644
--- a/ojluni/src/main/java/java/util/Locale.java
+++ b/ojluni/src/main/java/java/util/Locale.java
@@ -516,7 +516,7 @@
  *     <td><a href="http://site.icu-project.org/download/56">ICU 56.1</a></td>
  *     <td><a href="http://cldr.unicode.org/index/downloads/cldr-28">CLDR 28</a></td>
  *     <td><a href="http://www.unicode.org/versions/Unicode8.0.0/">Unicode 8.0</a></td></tr>
- * <tr><td>Android O</td>
+ * <tr><td>Android 8.0 (Oreo)</td>
  *     <td><a href="http://site.icu-project.org/download/58">ICU 58.2</a></td>
  *     <td><a href="http://cldr.unicode.org/index/downloads/cldr-30">CLDR 30.0.3</a></td>
  *     <td><a href="http://www.unicode.org/versions/Unicode9.0.0/">Unicode 9.0</a></td></tr>