提交 3f287fe2 编写于 作者: N naoto

8004240: Return value from getAdapterPrefence() can be modified

Reviewed-by: okutsu
上级 e1d1b08e
......@@ -33,6 +33,7 @@ import java.text.spi.DateFormatSymbolsProvider;
import java.text.spi.DecimalFormatSymbolsProvider;
import java.text.spi.NumberFormatProvider;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
......@@ -89,10 +90,7 @@ public abstract class LocaleProviderAdapter {
* LocaleProviderAdapter preference list. The default list is intended
* to behave the same manner in JDK7.
*/
private static Type[] adapterPreference = {
Type.JRE,
Type.SPI,
};
private static final List<Type> adapterPreference;
/**
* JRE Locale Data Adapter instance
......@@ -129,10 +127,11 @@ public abstract class LocaleProviderAdapter {
static {
String order = AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("java.locale.providers"));
// Override adapterPreference with the properties one
List<Type> typeList = new ArrayList<>();
// Check user specified adapter preference
if (order != null && order.length() != 0) {
String[] types = order.split(",");
List<Type> typeList = new ArrayList<>();
for (String type : types) {
try {
Type aType = Type.valueOf(type.trim().toUpperCase(Locale.ROOT));
......@@ -153,18 +152,22 @@ public abstract class LocaleProviderAdapter {
LocaleServiceProviderPool.config(LocaleProviderAdapter.class, e.toString());
}
}
}
if (!typeList.isEmpty()) {
if (!typeList.contains(Type.JRE)) {
// Append FALLBACK as the last resort.
fallbackLocaleProviderAdapter = new FallbackLocaleProviderAdapter();
typeList.add(Type.FALLBACK);
}
adapterPreference = typeList.toArray(new Type[0]);
if (!typeList.isEmpty()) {
if (!typeList.contains(Type.JRE)) {
// Append FALLBACK as the last resort.
fallbackLocaleProviderAdapter = new FallbackLocaleProviderAdapter();
typeList.add(Type.FALLBACK);
}
} else {
// Default preference list
typeList.add(Type.JRE);
typeList.add(Type.SPI);
}
}
adapterPreference = Collections.unmodifiableList(typeList);
}
/**
* Returns the singleton instance for each adapter type
......@@ -202,7 +205,7 @@ public abstract class LocaleProviderAdapter {
/**
* Returns the preference order of LocaleProviderAdapter.Type
*/
public static Type[] getAdapterPreference() {
public static List<Type> getAdapterPreference() {
return adapterPreference;
}
......
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8004240
* @summary Verify that getAdapterPreference returns an unmodifiable list.
* @compile -XDignore.symbol.file Bug8004240.java
* @run main Bug8004240
*/
import java.util.List;
import sun.util.locale.provider.LocaleProviderAdapter;
public class Bug8004240 {
public static void main(String[] args) {
List<LocaleProviderAdapter.Type> types = LocaleProviderAdapter.getAdapterPreference();
try {
types.set(0, null);
} catch (UnsupportedOperationException e) {
// success
return;
}
throw new RuntimeException("LocaleProviderAdapter.getAdapterPrefence() returned a modifiable list.");
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册