undefect. CWE-407 — 63 sites patched across 27 ecosystems
Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com Patches, unit tests, benchmarks, whitepaper, and outreach briefs. Public domain — no copyright claimed. Use freely.
This commit is contained in:
commit
0a580b313d
70422 changed files with 17213626 additions and 0 deletions
135
test/jdk/java/util/Scanner/EncodingTest.java
Normal file
135
test/jdk/java/util/Scanner/EncodingTest.java
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
/*
|
||||
* Copyright (c) 2017, 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.
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Scanner;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.DataProvider;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 8183743
|
||||
* @summary Test to verify the new overload method with Charset functions the
|
||||
* same as the existing method that takes a charset name.
|
||||
* @run testng EncodingTest
|
||||
*/
|
||||
public class EncodingTest {
|
||||
static String USER_DIR = System.getProperty("user.dir", ".");
|
||||
|
||||
public static enum ConstructorType {
|
||||
FILE,
|
||||
PATH,
|
||||
INPUTSTREAM,
|
||||
READABLEBYTECHANNEL
|
||||
}
|
||||
|
||||
static final String TEST_STRING = "abc \u0100 \u0101 \u0555 \u07FD \u07FF";
|
||||
|
||||
@DataProvider(name = "parameters")
|
||||
public Object[][] getParameters() throws IOException {
|
||||
String csn = StandardCharsets.UTF_8.name();
|
||||
Charset charset = StandardCharsets.UTF_8;
|
||||
File file1 = new File(USER_DIR, "ScannerCharsetTest1.txt");
|
||||
File file2 = new File(USER_DIR, "ScannerCharsetTest2.txt");
|
||||
|
||||
return new Object[][]{
|
||||
{ConstructorType.FILE, file1, file2, csn, charset},
|
||||
{ConstructorType.PATH, file1, file2, csn, charset},
|
||||
{ConstructorType.INPUTSTREAM, file1, file2, csn, charset},
|
||||
{ConstructorType.READABLEBYTECHANNEL, file1, file2, csn, charset},};
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies that the overloading constructor behaves the same as the
|
||||
* existing one.
|
||||
*
|
||||
* @param type the type of the constructor
|
||||
* @param file1 file1 written with the name of a charset
|
||||
* @param file2 file2 written with a charset
|
||||
* @param csn the charset name
|
||||
* @param charset the charset
|
||||
* @throws IOException
|
||||
*/
|
||||
@Test(dataProvider = "parameters")
|
||||
void test(ConstructorType type, File file1, File file2, String csn, Charset charset)
|
||||
throws Exception {
|
||||
prepareFile(file1, TEST_STRING);
|
||||
prepareFile(file2, TEST_STRING);
|
||||
|
||||
try (Scanner s1 = getScanner(type, file1.getPath(), csn, null);
|
||||
Scanner s2 = getScanner(type, file2.getPath(), null, charset);) {
|
||||
String result1 = s1.findInLine(TEST_STRING);
|
||||
String result2 = s2.findInLine(TEST_STRING);
|
||||
Assert.assertEquals(result1, result2);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates a Scanner over the given input file.
|
||||
*/
|
||||
Scanner getScanner(ConstructorType type, String file, String csn, Charset charset)
|
||||
throws Exception {
|
||||
if (csn != null) {
|
||||
switch (type) {
|
||||
case FILE:
|
||||
return new Scanner(new File(file), csn);
|
||||
case PATH:
|
||||
return new Scanner(Paths.get(file), csn);
|
||||
case INPUTSTREAM:
|
||||
FileInputStream fis = new FileInputStream(file);
|
||||
return new Scanner(fis, csn);
|
||||
case READABLEBYTECHANNEL:
|
||||
FileInputStream fis1 = new FileInputStream(file);
|
||||
return new Scanner(fis1.getChannel(), csn);
|
||||
}
|
||||
} else {
|
||||
switch (type) {
|
||||
case FILE:
|
||||
return new Scanner(new File(file), charset);
|
||||
case PATH:
|
||||
return new Scanner(Paths.get(file), charset);
|
||||
case INPUTSTREAM:
|
||||
FileInputStream fis = new FileInputStream(file);
|
||||
return new Scanner(fis, charset);
|
||||
case READABLEBYTECHANNEL:
|
||||
FileInputStream fis1 = new FileInputStream(file);
|
||||
return new Scanner(fis1.getChannel(), charset);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
void prepareFile(File file, String content) throws IOException {
|
||||
try (FileWriter writer = new FileWriter(file);) {
|
||||
writer.write(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
146
test/jdk/java/util/Scanner/FailingConstructors.java
Normal file
146
test/jdk/java/util/Scanner/FailingConstructors.java
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
* Copyright (c) 2011, 2017, 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 7000511 8190577
|
||||
* @summary PrintStream, PrintWriter, Formatter, Scanner leave files open when
|
||||
* exception thrown
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class FailingConstructors {
|
||||
static final String fileName = "FailingConstructorsTest";
|
||||
static final String UNSUPPORTED_CHARSET = "unknownCharset";
|
||||
static final String FILE_CONTENTS = "This is a small file!";
|
||||
|
||||
private static void realMain(String[] args) throws Throwable {
|
||||
test(false, new File(fileName));
|
||||
|
||||
/* create the file and write its contents */
|
||||
File file = File.createTempFile(fileName, null);
|
||||
file.deleteOnExit();
|
||||
Files.write(file.toPath(), FILE_CONTENTS.getBytes());
|
||||
|
||||
test(true, file);
|
||||
file.delete();
|
||||
}
|
||||
|
||||
private static void test(boolean exists, File file) throws Throwable {
|
||||
/* Scanner(File source, String charsetName) */
|
||||
try {
|
||||
new Scanner(file, UNSUPPORTED_CHARSET);
|
||||
fail();
|
||||
} catch(FileNotFoundException|IllegalArgumentException e) {
|
||||
pass();
|
||||
}
|
||||
|
||||
check(exists, file);
|
||||
|
||||
try {
|
||||
new Scanner(file, (String)null);
|
||||
fail();
|
||||
} catch(FileNotFoundException|NullPointerException e) {
|
||||
pass();
|
||||
}
|
||||
|
||||
try {
|
||||
new Scanner(file, (Charset)null);
|
||||
fail();
|
||||
} catch(FileNotFoundException|NullPointerException e) {
|
||||
pass();
|
||||
}
|
||||
|
||||
check(exists, file);
|
||||
|
||||
/* Scanner(FileRef source, String charsetName) */
|
||||
try {
|
||||
new Scanner(file.toPath(), UNSUPPORTED_CHARSET);
|
||||
fail();
|
||||
} catch(FileNotFoundException|IllegalArgumentException e) {
|
||||
pass();
|
||||
}
|
||||
|
||||
check(exists, file);
|
||||
|
||||
try {
|
||||
new Scanner(file.toPath(), (String)null);
|
||||
fail();
|
||||
} catch(FileNotFoundException|NullPointerException e) {
|
||||
pass();
|
||||
}
|
||||
|
||||
try {
|
||||
new Scanner(file.toPath(), (Charset)null);
|
||||
fail();
|
||||
} catch(FileNotFoundException|NullPointerException e) {
|
||||
pass();
|
||||
}
|
||||
|
||||
check(exists, file);
|
||||
}
|
||||
|
||||
private static void check(boolean exists, File file) {
|
||||
if (exists) {
|
||||
/* the file should be unchanged */
|
||||
verifyContents(file);
|
||||
} else {
|
||||
/* the file should not have been created */
|
||||
if (file.exists()) { fail(file + " should not have been created"); }
|
||||
}
|
||||
}
|
||||
|
||||
private static void verifyContents(File file) {
|
||||
try (FileInputStream fis = new FileInputStream(file)) {
|
||||
byte[] contents = FILE_CONTENTS.getBytes();
|
||||
int read, count = 0;
|
||||
while ((read = fis.read()) != -1) {
|
||||
if (read != contents[count++]) {
|
||||
fail("file contents have been altered");
|
||||
return;
|
||||
}
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
unexpected(ioe);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------- Infrastructure ---------------------------
|
||||
static volatile int passed = 0, failed = 0;
|
||||
static void pass() {passed++;}
|
||||
static void fail() {failed++; Thread.dumpStack();}
|
||||
static void fail(String message) {System.out.println(message); fail(); }
|
||||
static void unexpected(Throwable t) {failed++; t.printStackTrace();}
|
||||
public static void main(String[] args) throws Throwable {
|
||||
try {realMain(args);} catch (Throwable t) {unexpected(t);}
|
||||
System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
|
||||
if (failed > 0) throw new AssertionError("Some tests failed");}
|
||||
}
|
||||
1674
test/jdk/java/util/Scanner/ScanTest.java
Normal file
1674
test/jdk/java/util/Scanner/ScanTest.java
Normal file
File diff suppressed because it is too large
Load diff
197
test/jdk/java/util/Scanner/ScannerStreamTest.java
Normal file
197
test/jdk/java/util/Scanner/ScannerStreamTest.java
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
/*
|
||||
* Copyright (c) 2015, 2017, 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.
|
||||
*/
|
||||
|
||||
import org.testng.annotations.DataProvider;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.UncheckedIOException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.MatchResult;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.LambdaTestHelpers;
|
||||
import java.util.stream.OpTestCase;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.stream.TestData;
|
||||
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 8072722 8150488
|
||||
* @summary Tests of stream support in java.util.Scanner
|
||||
* @library /lib/testlibrary/bootlib
|
||||
* @build java.base/java.util.stream.OpTestCase
|
||||
* @run testng/othervm ScannerStreamTest
|
||||
*/
|
||||
|
||||
@Test
|
||||
public class ScannerStreamTest extends OpTestCase {
|
||||
|
||||
static File inputFile = new File(System.getProperty("test.src", "."), "input.txt");
|
||||
|
||||
@DataProvider(name = "Tokens")
|
||||
public static Object[][] makeTokensTestData() {
|
||||
// each inner array is [String description, String input, String delimiter]
|
||||
// delimiter may be null
|
||||
List<Object[]> data = new ArrayList<>();
|
||||
|
||||
data.add(new Object[] { "default delimiter", "abc def ghi", null });
|
||||
data.add(new Object[] { "fixed delimiter", "abc,def,,ghi", "," });
|
||||
data.add(new Object[] { "regex delimiter", "###abc##def###ghi###j", "#+" });
|
||||
|
||||
return data.toArray(new Object[0][]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates a scanner over the input, applying a delimiter if non-null.
|
||||
*/
|
||||
Scanner makeScanner(String input, String delimiter) {
|
||||
Scanner sc = new Scanner(input);
|
||||
if (delimiter != null) {
|
||||
sc.useDelimiter(delimiter);
|
||||
}
|
||||
return sc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Given input and a delimiter, tests that tokens() returns the same
|
||||
* results that would be provided by a Scanner hasNext/next loop.
|
||||
*/
|
||||
@Test(dataProvider = "Tokens")
|
||||
public void tokensTest(String description, String input, String delimiter) {
|
||||
// derive expected result by using conventional loop
|
||||
Scanner sc = makeScanner(input, delimiter);
|
||||
List<String> expected = new ArrayList<>();
|
||||
while (sc.hasNext()) {
|
||||
expected.add(sc.next());
|
||||
}
|
||||
|
||||
Supplier<Stream<String>> ss = () -> makeScanner(input, delimiter).tokens();
|
||||
withData(TestData.Factory.ofSupplier(description, ss))
|
||||
.stream(LambdaTestHelpers.identity())
|
||||
.expectedResult(expected)
|
||||
.exercise();
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates a Scanner over the given input file.
|
||||
*/
|
||||
Scanner makeFileScanner(File file) {
|
||||
try {
|
||||
return new Scanner(file, "UTF-8");
|
||||
} catch (IOException ioe) {
|
||||
throw new UncheckedIOException(ioe);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Tests that the matches produced by findAll(pat) are the same
|
||||
* as what are returned by findWithinHorizon(pat, 0). This tests
|
||||
* a single pattern against a single input file.
|
||||
*/
|
||||
public void findAllFileTest() {
|
||||
// derive expected result by using conventional loop
|
||||
Pattern pat = Pattern.compile("[A-Z]{7,}");
|
||||
List<String> expected = new ArrayList<>();
|
||||
|
||||
try (Scanner sc = makeFileScanner(inputFile)) {
|
||||
String match;
|
||||
while ((match = sc.findWithinHorizon(pat, 0)) != null) {
|
||||
expected.add(match);
|
||||
}
|
||||
}
|
||||
|
||||
Supplier<Stream<String>> ss =
|
||||
() -> makeFileScanner(inputFile).findAll(pat).map(MatchResult::group);
|
||||
|
||||
withData(TestData.Factory.ofSupplier("findAllFileTest", ss))
|
||||
.stream(LambdaTestHelpers.identity())
|
||||
.expectedResult(expected)
|
||||
.exercise();
|
||||
}
|
||||
|
||||
@DataProvider(name = "FindAllZero")
|
||||
public static Object[][] makeFindAllZeroTestData() {
|
||||
// each inner array is [String input, String patternString]
|
||||
List<Object[]> data = new ArrayList<>();
|
||||
|
||||
data.add(new Object[] { "aaaaa", "a*" });
|
||||
data.add(new Object[] { "aaaaab", "a*" });
|
||||
data.add(new Object[] { "aaaaabb", "a*" });
|
||||
data.add(new Object[] { "aaaaabbb", "a*" });
|
||||
data.add(new Object[] { "aaabbaaaa", "a*" });
|
||||
data.add(new Object[] { "aaabbaaaab", "a*" });
|
||||
data.add(new Object[] { "aaabbaaaabb", "a*" });
|
||||
data.add(new Object[] { "aaabbaaaabbb", "a*" });
|
||||
data.add(new Object[] { "aaabbaaaa", "a*|b*" });
|
||||
data.add(new Object[] { "aaabbaaaab", "a*|b*" });
|
||||
data.add(new Object[] { "aaabbaaaabb", "a*|b*" });
|
||||
data.add(new Object[] { "aaabbaaaabbb", "a*|b*" });
|
||||
|
||||
return data.toArray(new Object[0][]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Tests findAll() using a pattern against an input string.
|
||||
* The results from findAll() should equal the results obtained
|
||||
* using a loop around Matcher.find().
|
||||
*
|
||||
* The provided regexes should allow zero-length matches.
|
||||
* This primarily tests the auto-advance feature of findAll() that
|
||||
* occurs if the regex match is of zero length to see if it has the
|
||||
* same behavior as Matcher.find()'s auto-advance (JDK-8150488).
|
||||
* Without auto-advance, findAll() would return an infinite stream
|
||||
* of zero-length matches. Apply a limit to the stream so
|
||||
* that an infinite stream will be truncated. The limit must be
|
||||
* high enough that the resulting truncated stream won't be
|
||||
* mistaken for a correct expected result.
|
||||
*/
|
||||
@Test(dataProvider = "FindAllZero")
|
||||
public void findAllZeroTest(String input, String patternString) {
|
||||
Pattern pattern = Pattern.compile(patternString);
|
||||
|
||||
// generate expected result using Matcher.find()
|
||||
Matcher m = pattern.matcher(input);
|
||||
List<String> expected = new ArrayList<>();
|
||||
while (m.find()) {
|
||||
expected.add(m.group());
|
||||
}
|
||||
|
||||
Supplier<Stream<String>> ss = () -> new Scanner(input).findAll(pattern)
|
||||
.limit(100)
|
||||
.map(MatchResult::group);
|
||||
|
||||
withData(TestData.Factory.ofSupplier("findAllZeroTest", ss))
|
||||
.stream(LambdaTestHelpers.identity())
|
||||
.expectedResult(expected)
|
||||
.exercise();
|
||||
}
|
||||
}
|
||||
438
test/jdk/java/util/Scanner/input.txt
Normal file
438
test/jdk/java/util/Scanner/input.txt
Normal file
|
|
@ -0,0 +1,438 @@
|
|||
# Data for fromFileTest
|
||||
14343441
|
||||
24134342
|
||||
34324233
|
||||
43234234
|
||||
53423425
|
||||
63424326
|
||||
74324337
|
||||
|
||||
|
||||
# Data for usage case 1
|
||||
23.4 Frank 34.8 -9.0
|
||||
2.333 6.75 Joe -2
|
||||
3.3 -888.8 -16.00 Mary
|
||||
Michelle -5 -5.5 -5.555
|
||||
|
||||
|
||||
# Data for usage case 2
|
||||
cat-9-dog-6-pig-2--5-
|
||||
|
||||
|
||||
# Data for usage case 3
|
||||
/**
|
||||
* Returns the next string in the input that matches the specified pattern.
|
||||
* This method may block while waiting for input
|
||||
* to scan, even if a previous invocation of {@link #hasNext(Pattern)}
|
||||
* returned <code>true</code>. If the match is successful, the scanner
|
||||
* advances past the input that matched the pattern.
|
||||
*
|
||||
* @param pattern the pattern to scan for
|
||||
* @return the next token
|
||||
* @throws NoSuchElementException if no more tokens are available
|
||||
* @throws IllegalStateException if this scanner is closed
|
||||
*/
|
||||
|
||||
|
||||
# Data for usage case 4
|
||||
<html>
|
||||
<body bgcolor="#EEEEEE">
|
||||
<title>Source Directory</title>
|
||||
<center><h1>tiger</h1></center>
|
||||
<p>
|
||||
Parent workspace is /java/jdk/1.5/ws/integration/TL/j2se <br>
|
||||
Child workspace is /export/tiger <br>
|
||||
<hr>
|
||||
<code>
|
||||
<p>
|
||||
<a href=make/java/java/mapfile-vers.diff.html>Diffs</a>
|
||||
<a href=make/java/java/mapfile-vers.sdiff.html>Sdiffs</a>
|
||||
<a href=make/java/java/mapfile-vers-.html>Old</a>
|
||||
<a href=make/java/java/mapfile-vers.html>New</a>
|
||||
<b>make/java/java/mapfile-vers</b><p>
|
||||
<ul>
|
||||
<li><a href=http://example.com/cgi-bin/bugtraq_showbug?bugid=4904881>4904881</a>: JVM crash during java.io.File.deleteOnExit()<br>
|
||||
</ul>
|
||||
<p>
|
||||
<a href=src/share/classes/java/lang/Shutdown.java.diff.html>Diffs</a>
|
||||
<a href=src/share/classes/java/lang/Shutdown.java.sdiff.html>Sdiffs</a>
|
||||
<a href=src/share/classes/java/lang/Shutdown.java-.html>Old</a>
|
||||
<a href=src/share/classes/java/lang/Shutdown.java.html>New</a>
|
||||
<b>src/share/classes/java/lang/Shutdown.java</b><p>
|
||||
<ul>
|
||||
<li><a href=http://example.com/cgi-bin/bugtraq_showbug?bugid=4904881>4904881</a>: JVM crash during java.io.File.deleteOnExit()<br>
|
||||
</ul>
|
||||
<p>
|
||||
<a href=src/share/native/java/lang/Shutdown.c.diff.html>Diffs</a>
|
||||
<a href=src/share/native/java/lang/Shutdown.c.sdiff.html>Sdiffs</a>
|
||||
<a href=src/share/native/java/lang/Shutdown.c-.html>Old</a>
|
||||
<a href=src/share/native/java/lang/Shutdown.c.html>New</a>
|
||||
<b>src/share/native/java/lang/Shutdown.c</b><p>
|
||||
<ul>
|
||||
<li><a href=http://example.com/cgi-bin/bugtraq_showbug?bugid=4904881>4904881</a>: JVM crash during java.io.File.deleteOnExit()<br>
|
||||
</ul>
|
||||
</code>
|
||||
<p>
|
||||
</font>
|
||||
</html>
|
||||
|
||||
# Data for usage case 5
|
||||
|
||||
# This is the main Samba configuration file. You should read the
|
||||
# smb.conf(5) manual page in order to understand the options listed
|
||||
# here. Samba has a huge number of configurable options (perhaps too
|
||||
# many!) most of which are not shown in this example
|
||||
#
|
||||
# Any line which starts with a ; (semi-colon) or a # (hash)
|
||||
# is a comment and is ignored. In this example we will use a #
|
||||
# for commentry and a ; for parts of the config file that you
|
||||
# may wish to enable
|
||||
#
|
||||
# NOTE: Whenever you modify this file you should run the command "testparm"
|
||||
# to check that you have not many any basic syntactic errors.
|
||||
#
|
||||
#======================= Global Settings =====================================
|
||||
[global]
|
||||
|
||||
##
|
||||
## Basic Server Settings
|
||||
##
|
||||
|
||||
# workgroup = NT-Domain-Name or Workgroup-Name, eg: REDHAT4
|
||||
workgroup = MYGROUP
|
||||
|
||||
# server string is the equivalent of the NT Description field
|
||||
server string = Samba Server
|
||||
|
||||
# This option is important for security. It allows you to restrict
|
||||
# connections to machines which are on your local network. The
|
||||
# following example restricts access to two C class networks and
|
||||
# the "loopback" interface. For more examples of the syntax see
|
||||
# the smb.conf man page
|
||||
; hosts allow = 192.168.1. 192.168.2.0./24 192.168.3.0/255.255.255.0 127.0.0.1
|
||||
|
||||
# Uncomment this if you want a guest account, you must add this to /etc/passwd
|
||||
# otherwise the user "nobody" is used
|
||||
; guest account = pcguest
|
||||
|
||||
# this tells Samba to use a separate log file for each machine
|
||||
# that connects
|
||||
log file = /usr/local/samba/var/log.%m
|
||||
|
||||
# How much information do you want to see in the logs?
|
||||
# default is only to log critical messages
|
||||
; log level = 1
|
||||
|
||||
# Put a capping on the size of the log files (in Kb).
|
||||
max log size = 50
|
||||
|
||||
# Security mode. Most people will want user level security. See
|
||||
# security_level.txt for details.
|
||||
security = user
|
||||
|
||||
# Using the following line enables you to customise your configuration
|
||||
# on a per machine basis. The %m gets replaced with the netbios name
|
||||
# of the machine that is connecting.
|
||||
# Note: Consider carefully the location in the configuration file of
|
||||
# this line. The included file is read at that point.
|
||||
; include = /usr/local/samba/lib/smb.conf.%m
|
||||
|
||||
# Most people will find that this option gives better performance.
|
||||
# See speed.txt and the manual pages for details
|
||||
# You may want to add the following on a Linux system:
|
||||
# SO_RCVBUF=8192 SO_SNDBUF=8192
|
||||
; socket options = TCP_NODELAY
|
||||
|
||||
# Configure Samba to use multiple interfaces
|
||||
# If you have multiple network interfaces and want to limit smbd will
|
||||
# use, list the ones desired here. Otherwise smbd & nmbd will bind to all
|
||||
# active interfaces on the system. See the man page for details.
|
||||
; interfaces = 192.168.12.2/24 192.168.13.2/24
|
||||
|
||||
# Should smbd report that it has MS-DFS Capabilities? Only available
|
||||
# if --with-msdfs was passed to ./configure
|
||||
; host msdfs = yes
|
||||
|
||||
##
|
||||
## Network Browsing
|
||||
##
|
||||
# set local master to no if you don't want Samba to become a master
|
||||
# browser on your network. Otherwise the normal election rules apply
|
||||
; local master = no
|
||||
|
||||
# OS Level determines the precedence of this server in master browser
|
||||
# elections. The default value (20) should be reasonable
|
||||
; os level = 20
|
||||
|
||||
# Domain Master specifies Samba to be the Domain Master Browser. This
|
||||
# allows Samba to collate browse lists between subnets. Don't use this
|
||||
# if you already have a Windows NT domain controller doing this job
|
||||
; domain master = yes
|
||||
|
||||
# Preferred Master causes Samba to force a local browser election on startup
|
||||
# and gives it a slightly higher chance of winning the election
|
||||
; preferred master = yes
|
||||
|
||||
|
||||
##
|
||||
## WINS & Name Resolution
|
||||
##
|
||||
# Windows Internet Name Serving Support Section:
|
||||
# WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
|
||||
; wins support = yes
|
||||
|
||||
# WINS Server - Tells the NMBD components of Samba to be a WINS Client
|
||||
# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
|
||||
; wins server = w.x.y.z
|
||||
|
||||
# WINS Proxy - Tells Samba to answer name resolution queries on
|
||||
# behalf of a non WINS capable client, for this to work there must be
|
||||
# at least one WINS Server on the network. The default is NO.
|
||||
; wins proxy = yes
|
||||
|
||||
# DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
|
||||
# via DNS nslookups.
|
||||
dns proxy = no
|
||||
|
||||
|
||||
##
|
||||
## Passwords & Authentication
|
||||
##
|
||||
# Use password server option only with security = server
|
||||
# The argument list may include:
|
||||
# password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]
|
||||
# or to auto-locate the domain controller/s
|
||||
; password server = *
|
||||
; password server = <NT-Server-Name>
|
||||
|
||||
# You may wish to use password encryption. Please read
|
||||
# ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba documentation.
|
||||
# Do not enable this option unless you have read those documents
|
||||
; encrypt passwords = yes
|
||||
|
||||
# Should smbd obey the session and account lines in /etc/pam.d/samba ?
|
||||
# only available if --with-pam was used at compile time
|
||||
; obey pam restrictions = yes
|
||||
|
||||
# When using encrypted passwords, Samba can synchronize the local
|
||||
# UNIX password as well. You will also need the "passwd chat" parameters
|
||||
; unix password sync = yes
|
||||
|
||||
# how should smbd talk to the local system when changing a UNIX
|
||||
# password? See smb.conf(5) for details
|
||||
; passwd chat = <custom chat string>
|
||||
|
||||
# This is only available if you compiled Samba to include --with-pam
|
||||
# Use PAM for changing the password
|
||||
; pam password change = yes
|
||||
|
||||
##
|
||||
## Domain Control
|
||||
##
|
||||
# Enable this if you want Samba act as a domain controller.
|
||||
# make sure you have read the Samba-PDC-HOWTO included in the documentation
|
||||
# before enabling this parameter
|
||||
; domain logons = yes
|
||||
|
||||
# if you enable domain logons then you may want a per-machine or
|
||||
# per user logon script
|
||||
# run a specific logon batch file per workstation (machine)
|
||||
; logon script = %m.bat
|
||||
# run a specific logon batch file per username
|
||||
; logon script = %U.bat
|
||||
|
||||
# Where to store roving profiles (only for Win95 and WinNT)
|
||||
# %L substitutes for this servers netbios name, %U is username
|
||||
# You must uncomment the [Profiles] share below
|
||||
; logon path = \\%L\Profiles\%U
|
||||
|
||||
# UNC path specifying the network location of the user's home directory
|
||||
# only used when acting as a DC for WinNT/2k/XP. Ignored by Win9x clients
|
||||
; logon home = \\%L\%U
|
||||
|
||||
# What drive should the "logon home" be mounted at upon login ?
|
||||
# only used when acting as a DC for WinNT/2k/XP. Ignored by Win9x clients
|
||||
; logon drive = H:
|
||||
|
||||
##
|
||||
## Printing
|
||||
##
|
||||
|
||||
# If you want to automatically load your printer list rather
|
||||
# than setting them up individually then you'll need this
|
||||
load printers = yes
|
||||
|
||||
# you may wish to override the location of the printcap file
|
||||
; printcap name = /etc/printcap
|
||||
|
||||
# on SystemV system setting printcap name to lpstat should allow
|
||||
# you to automatically obtain a printer list from the SystemV spool
|
||||
# system
|
||||
; printcap name = lpstat
|
||||
|
||||
# It should not be necessary to specify the print system type unless
|
||||
# it is non-standard. Currently supported print systems include:
|
||||
# bsd, sysv, plp, lprng, aix, hpux, qnx
|
||||
; printing = bsd
|
||||
|
||||
# Enable this to make Samba 2.2 behavior just like Samba 2.0
|
||||
# not recommended nuless you are sure of what you are doing
|
||||
; disable spoolss = yes
|
||||
|
||||
# list of users and groups which should be able to remotely manage
|
||||
# printer drivers installed on the server
|
||||
; printer admin = root, +ntadmin
|
||||
|
||||
|
||||
##
|
||||
## Winbind
|
||||
##
|
||||
|
||||
# specify the uid range which can be used by winbindd
|
||||
# to allocate uids for Windows users as necessary
|
||||
; winbind uid = 10000-65000
|
||||
|
||||
# specify the uid range which can be used by winbindd
|
||||
# to allocate uids for Windows users as necessary
|
||||
; winbind gid = 10000-65000
|
||||
|
||||
# Define a home directory to be given to passwd(5) style entries
|
||||
# generated by libnss_winbind.so. You can use variables here
|
||||
; winbind template homedir = /home/%D/%U
|
||||
|
||||
# Specify a shell for all winbind user entries return by the
|
||||
# libnss_winbind.so library.
|
||||
; winbind template shell = /bin/sh
|
||||
|
||||
# What character should be used to separate the DOMAIN and Username
|
||||
# for a Windows user. The default is DOMAIN\user, but many people
|
||||
# prefer DOMAIN+user
|
||||
; winbind separator = +
|
||||
|
||||
|
||||
#============================ Share Definitions ==============================
|
||||
[homes]
|
||||
comment = Home Directories
|
||||
browseable = no
|
||||
writable = yes
|
||||
valid users = %S
|
||||
|
||||
# Un-comment the following and create the netlogon directory for Domain Logons
|
||||
; [netlogon]
|
||||
; comment = Network Logon Service
|
||||
; path = /usr/local/samba/lib/netlogon
|
||||
; guest ok = yes
|
||||
; writable = no
|
||||
; share modes = no
|
||||
|
||||
|
||||
# Un-comment the following to provide a specific roving profile share
|
||||
# the default is to use the user's home directory
|
||||
;[Profiles]
|
||||
; path = /usr/local/samba/profiles
|
||||
; browseable = no
|
||||
; guest ok = yes
|
||||
|
||||
|
||||
# NOTE: If you have a BSD-style print system there is no need to
|
||||
# specifically define each individual printer
|
||||
[printers]
|
||||
comment = All Printers
|
||||
path = /usr/spool/samba
|
||||
browseable = no
|
||||
# Set public = yes to allow user 'guest account' to print
|
||||
guest ok = no
|
||||
writable = no
|
||||
printable = yes
|
||||
|
||||
# This one is useful for people to share files
|
||||
#[tmp]
|
||||
# comment = Temporary file space
|
||||
# path = /tmp
|
||||
# read only = no
|
||||
# public = yes
|
||||
|
||||
|
||||
# MS-DFS support is only available if Samba was compiled to
|
||||
# include --with-msdfs
|
||||
;[dfsroot]
|
||||
; dfs root = yes
|
||||
|
||||
|
||||
# A publicly accessible directory, but read only, except for people in
|
||||
# the "staff" group
|
||||
;[public]
|
||||
; comment = Public Stuff
|
||||
; path = /home/samba
|
||||
; public = yes
|
||||
; writable = yes
|
||||
; printable = no
|
||||
; write list = @staff
|
||||
|
||||
|
||||
##
|
||||
## Other examples.
|
||||
##
|
||||
|
||||
# A private printer, usable only by fred. Spool data will be placed in fred's
|
||||
# home directory. Note that fred must have write access to the spool directory,
|
||||
# wherever it is.
|
||||
#[fredsprn]
|
||||
# comment = Fred's Printer
|
||||
# valid users = fred
|
||||
# path = /homes/fred
|
||||
# printer = freds_printer
|
||||
# public = no
|
||||
# writable = no
|
||||
# printable = yes
|
||||
|
||||
# A private directory, usable only by fred. Note that fred requires write
|
||||
# access to the directory.
|
||||
#[fredsdir]
|
||||
# comment = Fred's Service
|
||||
# path = /usr/somewhere/private
|
||||
# valid users = fred
|
||||
# public = no
|
||||
# writable = yes
|
||||
# printable = no
|
||||
|
||||
# a service which has a different directory for each machine that connects
|
||||
# this allows you to tailor configurations to incoming machines. You could
|
||||
# also use the %U option to tailor it by user name.
|
||||
# The %m gets replaced with the machine name that is connecting.
|
||||
#[pchome]
|
||||
# comment = PC Directories
|
||||
# path = /usr/pc/%m
|
||||
# public = no
|
||||
# writable = yes
|
||||
|
||||
# A publicly accessible directory, read/write to all users. Note that all files
|
||||
# created in the directory by users will be owned by the default user, so
|
||||
# any user with access can delete any other user's files. Obviously this
|
||||
# directory must be writable by the default user. Another user could of course
|
||||
# be specified, in which case all files would be owned by that user instead.
|
||||
#[public]
|
||||
# path = /usr/somewhere/else/public
|
||||
# public = yes
|
||||
# only guest = yes
|
||||
# writable = yes
|
||||
# printable = no
|
||||
|
||||
# The following two entries demonstrate how to share a directory so that two
|
||||
# users can place files there that will be owned by the specific users. In this
|
||||
# setup, the directory should be writable by both users and should have the
|
||||
# sticky bit set on it to prevent abuse. Obviously this could be extended to
|
||||
# as many users as required.
|
||||
#[myshare]
|
||||
# comment = Mary's and Fred's stuff
|
||||
# path = /usr/somewhere/shared
|
||||
# valid users = mary fred
|
||||
# public = no
|
||||
# writable = yes
|
||||
# printable = no
|
||||
# create mask = 0765
|
||||
|
||||
|
||||
|
||||
|
||||
# Data for usage case 6
|
||||
69
test/jdk/java/util/Scanner/spi/UseLocaleWithProvider.java
Normal file
69
test/jdk/java/util/Scanner/spi/UseLocaleWithProvider.java
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* Copyright (c) 2017, 2024, 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 8190278 8174269
|
||||
* @summary checks the Scanner.useLocale() with java.locale.providers=SPI,
|
||||
* CLDR. It should not throw ClassCastException if any SPI is
|
||||
* used and NumberFormat.getInstance() does not return a
|
||||
* DecimalFormat object. Also, to test the behaviour of Scanner
|
||||
* while scanning numbers in the format of Scanner's locale.
|
||||
* @modules jdk.localedata
|
||||
* @library provider
|
||||
* @build provider/module-info provider/test.NumberFormatProviderImpl
|
||||
* provider/test.NumberFormatImpl
|
||||
* @run main/othervm -Djava.locale.providers=SPI,CLDR UseLocaleWithProvider
|
||||
*/
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class UseLocaleWithProvider {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
try {
|
||||
testScannerUseLocale("-123.4", Locale.US, -123.4);
|
||||
testScannerUseLocale("-123,45", Locale.of("fi", "FI"), -123.45);
|
||||
testScannerUseLocale("334,65", Locale.FRENCH, 334.65);
|
||||
testScannerUseLocale("4.334,65", Locale.GERMAN, 4334.65);
|
||||
} catch (ClassCastException ex) {
|
||||
throw new RuntimeException("[FAILED: With" +
|
||||
" java.locale.providers=SPI,CLDR, Scanner.useLocale()" +
|
||||
" shouldn't throw ClassCastException]");
|
||||
}
|
||||
}
|
||||
|
||||
private static void testScannerUseLocale(String number, Locale locale,
|
||||
Number actual) {
|
||||
Scanner sc = new Scanner(number).useLocale(locale);
|
||||
if (!sc.hasNextFloat() || sc.nextFloat() != actual.floatValue()) {
|
||||
throw new RuntimeException("[FAILED: With" +
|
||||
" java.locale.providers=SPI,CLDR, Scanner" +
|
||||
".hasNextFloat() or Scanner.nextFloat() is unable to" +
|
||||
" scan the given number: " + number + ", in the given" +
|
||||
" locale:" + locale + "]");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
26
test/jdk/java/util/Scanner/spi/provider/module-info.java
Normal file
26
test/jdk/java/util/Scanner/spi/provider/module-info.java
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* Copyright (c) 2017, 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.
|
||||
*/
|
||||
module provider {
|
||||
exports test;
|
||||
provides java.text.spi.NumberFormatProvider with test.NumberFormatProviderImpl;
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright (c) 2017, 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.
|
||||
*/
|
||||
package test;
|
||||
|
||||
import java.text.FieldPosition;
|
||||
import java.text.NumberFormat;
|
||||
import java.text.ParsePosition;
|
||||
|
||||
public class NumberFormatImpl extends NumberFormat {
|
||||
|
||||
@Override
|
||||
public StringBuffer format(double number, StringBuffer toAppendTo,
|
||||
FieldPosition pos) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringBuffer format(long number, StringBuffer toAppendTo,
|
||||
FieldPosition pos) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Number parse(String source, ParsePosition parsePosition) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* Copyright (c) 2017, 2022, 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.
|
||||
*/
|
||||
package test;
|
||||
|
||||
import java.text.NumberFormat;
|
||||
import java.text.spi.NumberFormatProvider;
|
||||
import java.util.Locale;
|
||||
|
||||
public class NumberFormatProviderImpl extends NumberFormatProvider {
|
||||
|
||||
private static final Locale[] locales = {Locale.US, Locale.FRENCH,
|
||||
Locale.GERMAN, Locale.of("fi", "FI")};
|
||||
|
||||
@Override
|
||||
public NumberFormat getCurrencyInstance(Locale locale) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NumberFormat getIntegerInstance(Locale locale) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NumberFormat getNumberInstance(Locale locale) {
|
||||
return new NumberFormatImpl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NumberFormat getPercentInstance(Locale locale) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Locale[] getAvailableLocales() {
|
||||
return locales;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue