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:
russell@unturf.com 2026-03-26 17:11:57 -04:00
commit 0a580b313d
70422 changed files with 17213626 additions and 0 deletions

View 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);
}
}
}

View 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");}
}

File diff suppressed because it is too large Load diff

View 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();
}
}

View 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

View 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 + "]");
}
}
}

View 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;
}

View file

@ -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;
}
}

View file

@ -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;
}
}