Merge "libjavacore: Implement JNI_OnUnload for icu"
diff --git a/expectations/taggedtests.txt b/expectations/taggedtests.txt
index 20825fa..cc2a4d6 100644
--- a/expectations/taggedtests.txt
+++ b/expectations/taggedtests.txt
@@ -9,6 +9,8 @@
names: [
/* libcore tests that take over 15 minutes on device because of DHParametersHelper.generateSafePrimes */
"org.apache.harmony.crypto.tests.javax.crypto.func.KeyAgreementFunctionalTest",
+ "org.apache.harmony.crypto.tests.javax.crypto.interfaces.DHPrivateKeyTest",
+ "org.apache.harmony.crypto.tests.javax.crypto.interfaces.DHPublicKeyTest",
/* non-AOSP tests http://b/8027066 */
"java.util.EnumSet.EnumSetBash",
"java.io.PipedInputStream.CloseAndAvailableRC",
diff --git a/include/LocalArray.h b/include/LocalArray.h
deleted file mode 100644
index 2ab708a..0000000
--- a/include/LocalArray.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.
- */
-
-#ifndef LOCAL_ARRAY_H_included
-#define LOCAL_ARRAY_H_included
-
-#include <cstddef>
-#include <new>
-
-/**
- * A fixed-size array with a size hint. That number of bytes will be allocated
- * on the stack, and used if possible, but if more bytes are requested at
- * construction time, a buffer will be allocated on the heap (and deallocated
- * by the destructor).
- *
- * The API is intended to be a compatible subset of C++0x's std::array.
- */
-template <size_t STACK_BYTE_COUNT>
-class LocalArray {
-public:
- /**
- * Allocates a new fixed-size array of the given size. If this size is
- * less than or equal to the template parameter STACK_BYTE_COUNT, an
- * internal on-stack buffer will be used. Otherwise a heap buffer will
- * be allocated.
- */
- LocalArray(size_t desiredByteCount) : mSize(desiredByteCount) {
- if (desiredByteCount > STACK_BYTE_COUNT) {
- mPtr = new char[mSize];
- } else {
- mPtr = &mOnStackBuffer[0];
- }
- }
-
- /**
- * Frees the heap-allocated buffer, if there was one.
- */
- ~LocalArray() {
- if (mPtr != &mOnStackBuffer[0]) {
- delete[] mPtr;
- }
- }
-
- // Capacity.
- size_t size() { return mSize; }
- bool empty() { return mSize == 0; }
-
- // Element access.
- char& operator[](size_t n) { return mPtr[n]; }
- const char& operator[](size_t n) const { return mPtr[n]; }
-
-private:
- char mOnStackBuffer[STACK_BYTE_COUNT];
- char* mPtr;
- size_t mSize;
-
- // Disallow copy and assignment.
- LocalArray(const LocalArray&);
- void operator=(const LocalArray&);
-};
-
-#endif // LOCAL_ARRAY_H_included
diff --git a/luni/src/main/native/org_apache_harmony_xml_ExpatParser.cpp b/luni/src/main/native/org_apache_harmony_xml_ExpatParser.cpp
index 820bda62..e27af69 100644
--- a/luni/src/main/native/org_apache_harmony_xml_ExpatParser.cpp
+++ b/luni/src/main/native/org_apache_harmony_xml_ExpatParser.cpp
@@ -19,7 +19,6 @@
#include "JNIHelp.h"
#include "JniConstants.h"
#include "JniException.h"
-#include "LocalArray.h"
#include "ScopedLocalRef.h"
#include "ScopedPrimitiveArray.h"
#include "ScopedStringChars.h"
@@ -33,6 +32,8 @@
#include <string.h>
#include <expat.h>
+#include <android-base/stringprintf.h>
+
#define BUCKET_COUNT 128
/**
@@ -519,9 +520,8 @@
}
// return prefix + ":" + localName
- ::LocalArray<1024> qName(strlen(mPrefix) + 1 + strlen(mLocalName) + 1);
- snprintf(&qName[0], qName.size(), "%s:%s", mPrefix, mLocalName);
- return internString(mEnv, mParsingContext, &qName[0]);
+ auto qName = android::base::StringPrintf("%s:%s", mPrefix, mLocalName);
+ return internString(mEnv, mParsingContext, qName.c_str());
}
/**
diff --git a/luni/src/test/java/libcore/java/net/DatagramSocketTest.java b/luni/src/test/java/libcore/java/net/DatagramSocketTest.java
index 85526cc..86d9c58 100644
--- a/luni/src/test/java/libcore/java/net/DatagramSocketTest.java
+++ b/luni/src/test/java/libcore/java/net/DatagramSocketTest.java
@@ -21,6 +21,7 @@
import java.lang.reflect.Field;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
+import java.net.DatagramSocketImpl;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketException;
@@ -97,4 +98,22 @@
assertEquals(i, s.getTrafficClass());
}
}
+
+ // Socket should become connected even if impl.connect() failed and threw exception.
+ public void test_b31218085() throws Exception {
+ final int port = 9999;
+
+ try (DatagramSocket s = new DatagramSocket()) {
+ // Set fd of DatagramSocket to null, forcing impl.connect() to throw.
+ Field f = DatagramSocket.class.getDeclaredField("impl");
+ f.setAccessible(true);
+ DatagramSocketImpl impl = (DatagramSocketImpl) f.get(s);
+ f = DatagramSocketImpl.class.getDeclaredField("fd");
+ f.setAccessible(true);
+ f.set(impl, null);
+
+ s.connect(InetAddress.getLocalHost(), port);
+ assertTrue(s.isConnected());
+ }
+ }
}
diff --git a/luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/interfaces/DHPublicKeyTest.java b/luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/interfaces/DHPublicKeyTest.java
index 61680fe..bc7b338 100644
--- a/luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/interfaces/DHPublicKeyTest.java
+++ b/luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/interfaces/DHPublicKeyTest.java
@@ -22,29 +22,26 @@
package org.apache.harmony.crypto.tests.javax.crypto.interfaces;
-import org.junit.Test;
+import junit.framework.TestCase;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
+
+import javax.crypto.interfaces.DHKey;
import javax.crypto.interfaces.DHPublicKey;
import javax.crypto.spec.DHParameterSpec;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
/**
* Tests for <code>DHPublicKey</code> class field
*
*/
-public class DHPublicKeyTest {
+public class DHPublicKeyTest extends TestCase {
/**
* Test for <code>serialVersionUID</code> field
*/
- @Test
public void testField() {
checkDHPublicKey key = new checkDHPublicKey();
assertEquals("Incorrect serialVersionUID",
@@ -52,7 +49,6 @@
-6628103563352519193L);
}
- @Test(timeout = 30 * 60 * 1000) // http://b/30741591
public void test_getParams() throws Exception {
KeyPairGenerator kg = KeyPairGenerator.getInstance("DH");
kg.initialize(1024);
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodHandleStatics.java b/ojluni/src/main/java/java/lang/invoke/MethodHandleStatics.java
index 6928c22..17d7882 100644
--- a/ojluni/src/main/java/java/lang/invoke/MethodHandleStatics.java
+++ b/ojluni/src/main/java/java/lang/invoke/MethodHandleStatics.java
@@ -25,8 +25,6 @@
package java.lang.invoke;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
import sun.misc.Unsafe;
/**
@@ -41,56 +39,8 @@
static final Unsafe UNSAFE = Unsafe.getUnsafe();
- static final boolean DEBUG_METHOD_HANDLE_NAMES;
- static final boolean DUMP_CLASS_FILES;
- static final boolean TRACE_INTERPRETER;
- static final boolean TRACE_METHOD_LINKAGE;
- static final int COMPILE_THRESHOLD;
- static final int DONT_INLINE_THRESHOLD;
- static final int PROFILE_LEVEL;
- static final boolean PROFILE_GWT;
- static final int CUSTOMIZE_THRESHOLD;
-
- static {
- final Object[] values = new Object[9];
- AccessController.doPrivileged(new PrivilegedAction<Void>() {
- public Void run() {
- values[0] = Boolean.getBoolean("java.lang.invoke.MethodHandle.DEBUG_NAMES");
- values[1] = Boolean.getBoolean("java.lang.invoke.MethodHandle.DUMP_CLASS_FILES");
- values[2] = Boolean.getBoolean("java.lang.invoke.MethodHandle.TRACE_INTERPRETER");
- values[3] = Boolean.getBoolean("java.lang.invoke.MethodHandle.TRACE_METHOD_LINKAGE");
- values[4] = Integer.getInteger("java.lang.invoke.MethodHandle.COMPILE_THRESHOLD", 0);
- values[5] = Integer.getInteger("java.lang.invoke.MethodHandle.DONT_INLINE_THRESHOLD", 30);
- values[6] = Integer.getInteger("java.lang.invoke.MethodHandle.PROFILE_LEVEL", 0);
- values[7] = Boolean.parseBoolean(System.getProperty("java.lang.invoke.MethodHandle.PROFILE_GWT", "true"));
- values[8] = Integer.getInteger("java.lang.invoke.MethodHandle.CUSTOMIZE_THRESHOLD", 127);
- return null;
- }
- });
- DEBUG_METHOD_HANDLE_NAMES = (Boolean) values[0];
- DUMP_CLASS_FILES = (Boolean) values[1];
- TRACE_INTERPRETER = (Boolean) values[2];
- TRACE_METHOD_LINKAGE = (Boolean) values[3];
- COMPILE_THRESHOLD = (Integer) values[4];
- DONT_INLINE_THRESHOLD = (Integer) values[5];
- PROFILE_LEVEL = (Integer) values[6];
- PROFILE_GWT = (Boolean) values[7];
- CUSTOMIZE_THRESHOLD = (Integer) values[8];
-
- if (CUSTOMIZE_THRESHOLD < -1 || CUSTOMIZE_THRESHOLD > 127) {
- throw newInternalError("CUSTOMIZE_THRESHOLD should be in [-1...127] range");
- }
- }
-
- /** Tell if any of the debugging switches are turned on.
- * If this is the case, it is reasonable to perform extra checks or save extra information.
- */
- /*non-public*/ static boolean debugEnabled() {
- return (DEBUG_METHOD_HANDLE_NAMES |
- DUMP_CLASS_FILES |
- TRACE_INTERPRETER |
- TRACE_METHOD_LINKAGE);
- }
+ // Android-changed: Remove debugging related static fields. They are unused and have
+ // no equivalent on Android.
// Android-changed: Temporarily hide methods that operate on MethodHandles until the
// MethodHandle class is imported.
diff --git a/ojluni/src/main/java/java/net/DatagramSocket.java b/ojluni/src/main/java/java/net/DatagramSocket.java
index 6f2c95c..4e03f8f 100755
--- a/ojluni/src/main/java/java/net/DatagramSocket.java
+++ b/ojluni/src/main/java/java/net/DatagramSocket.java
@@ -172,10 +172,11 @@
// connection will be emulated by DatagramSocket
connectState = ST_CONNECTED_NO_IMPL;
}*/
- getImpl().connect(address, port);
// socket is now connected by the impl
connectState = ST_CONNECTED;
+ getImpl().connect(address, port);
+
// Do we need to filter some packets?
int avail = getImpl().dataAvailable();
if (avail == -1) {
diff --git a/ojluni/src/main/java/javax/net/ssl/SSLEngine.java b/ojluni/src/main/java/javax/net/ssl/SSLEngine.java
index f460d5f..47783a0 100644
--- a/ojluni/src/main/java/javax/net/ssl/SSLEngine.java
+++ b/ojluni/src/main/java/javax/net/ssl/SSLEngine.java
@@ -498,14 +498,14 @@
* <td>9–22</td>
* <td></td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>SSL_RSA_WITH_RC4_128_MD5</td>
- * <td>9+</td>
+ * <td>9–TBD</td>
* <td>9–19</td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>SSL_RSA_WITH_RC4_128_SHA</td>
- * <td>9+</td>
+ * <td>9–TBD</td>
* <td>9–23</td>
* </tr>
* <tr class="deprecated">
@@ -718,9 +718,9 @@
* <td>20–22</td>
* <td></td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>TLS_ECDHE_ECDSA_WITH_RC4_128_SHA</td>
- * <td>20+</td>
+ * <td>20–TBD</td>
* <td>20–23</td>
* </tr>
* <tr>
@@ -783,9 +783,9 @@
* <td>20–22</td>
* <td></td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>TLS_ECDHE_RSA_WITH_RC4_128_SHA</td>
- * <td>20+</td>
+ * <td>20–TBD</td>
* <td>20–23</td>
* </tr>
* <tr class="deprecated">
@@ -933,9 +933,9 @@
* <td>21+</td>
* <td>21+</td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>TLS_PSK_WITH_RC4_128_SHA</td>
- * <td>21+</td>
+ * <td>21–TBD</td>
* <td></td>
* </tr>
* <tr class="deprecated">
diff --git a/ojluni/src/main/java/javax/net/ssl/SSLSocket.java b/ojluni/src/main/java/javax/net/ssl/SSLSocket.java
index 3ee7f8c..4dd8b9e 100644
--- a/ojluni/src/main/java/javax/net/ssl/SSLSocket.java
+++ b/ojluni/src/main/java/javax/net/ssl/SSLSocket.java
@@ -313,14 +313,14 @@
* <td>9–22</td>
* <td></td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>SSL_RSA_WITH_RC4_128_MD5</td>
- * <td>9+</td>
+ * <td>9–TBD</td>
* <td>9–19</td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>SSL_RSA_WITH_RC4_128_SHA</td>
- * <td>9+</td>
+ * <td>9–TBD</td>
* <td>9–23</td>
* </tr>
* <tr class="deprecated">
@@ -458,9 +458,9 @@
* <td>11–22</td>
* <td></td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>TLS_ECDHE_ECDSA_WITH_RC4_128_SHA</td>
- * <td>11+</td>
+ * <td>11–TBD</td>
* <td>11–23</td>
* </tr>
* <tr>
@@ -518,9 +518,9 @@
* <td>11–22</td>
* <td></td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>TLS_ECDHE_RSA_WITH_RC4_128_SHA</td>
- * <td>11+</td>
+ * <td>11–TBD</td>
* <td>11–23</td>
* </tr>
* <tr class="deprecated">
@@ -663,9 +663,9 @@
* <td>21+</td>
* <td>21+</td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>TLS_PSK_WITH_RC4_128_SHA</td>
- * <td>21+</td>
+ * <td>21–TBD</td>
* <td></td>
* </tr>
* <tr>
@@ -848,16 +848,16 @@
* <td>1–8</td>
* <td>1–8</td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>RC4-MD5</td>
* <td>SSL_RSA_WITH_RC4_128_MD5</td>
- * <td>1+</td>
+ * <td>1–TBD</td>
* <td>1–19</td>
* </tr>
- * <tr>
+ * <tr class="deprecated">
* <td>RC4-SHA</td>
* <td>SSL_RSA_WITH_RC4_128_SHA</td>
- * <td>1+</td>
+ * <td>1–TBD</td>
* <td>1–23</td>
* </tr>
* </tbody>
diff --git a/support/src/test/java/libcore/java/security/StandardNames.java b/support/src/test/java/libcore/java/security/StandardNames.java
index d2f8b67..c9546e2 100644
--- a/support/src/test/java/libcore/java/security/StandardNames.java
+++ b/support/src/test/java/libcore/java/security/StandardNames.java
@@ -735,11 +735,7 @@
addBoth( "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA");
addBoth( "TLS_RSA_WITH_AES_128_CBC_SHA");
addBoth( "TLS_DHE_RSA_WITH_AES_128_CBC_SHA");
- addBoth( "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA");
- addBoth( "TLS_ECDHE_RSA_WITH_RC4_128_SHA");
- addBoth( "SSL_RSA_WITH_RC4_128_SHA");
addBoth( "SSL_RSA_WITH_3DES_EDE_CBC_SHA");
- addBoth( "SSL_RSA_WITH_RC4_128_MD5");
// TLSv1.2 cipher suites
addBoth( "TLS_RSA_WITH_AES_128_CBC_SHA256");
@@ -762,7 +758,6 @@
addOpenSsl("TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256");
// Pre-Shared Key (PSK) cipher suites
- addOpenSsl("TLS_PSK_WITH_RC4_128_SHA");
addOpenSsl("TLS_PSK_WITH_AES_128_CBC_SHA");
addOpenSsl("TLS_PSK_WITH_AES_256_CBC_SHA");
addOpenSsl("TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA");
@@ -801,6 +796,12 @@
addRi( "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256");
addNeither("TLS_DHE_DSS_WITH_AES_256_GCM_SHA384");
+ // Android does not have RC4 support
+ addRi( "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA");
+ addRi( "TLS_ECDHE_RSA_WITH_RC4_128_SHA");
+ addRi( "SSL_RSA_WITH_RC4_128_SHA");
+ addRi( "SSL_RSA_WITH_RC4_128_MD5");
+
// Dropped
addNeither("SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA");
addNeither("SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA");