代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/openjdk-17 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From b3dd0f06b1d27afc1bf547605c856952e4392a08 Mon Sep 17 00:00:00 2001
Date: Thu, 18 Jan 2024 14:57:37 +0800
Subject: [PATCH] puyuan: jdk17.0.9 patch
---
src/hotspot/cpu/x86/x86_32.ad | 24 +--
src/hotspot/share/classfile/stringTable.hpp | 8 +-
.../share/gc/shenandoah/shenandoahFullGC.cpp | 3 +
src/hotspot/share/opto/compile.cpp | 2 +-
src/hotspot/share/runtime/arguments.cpp | 1 -
.../share/classes/java/util/zip/ZipFile.java | 18 ++-
.../classes/sun/security/pkcs/PKCS7.java | 4 +-
.../classes/java/io/WinNTFileSystem.java | 31 ++++
.../PLATFORM_API_WinOS_DirectSound.cpp | 26 +++-
.../javax/xml/stream/XMLStreamException.java | 2 +-
.../TestArrayAllocatorMallocLimit.java | 4 +-
.../CommandLine/UnrecognizedProperty.java | 45 ++++++
.../ExceptionCauseTest.java | 62 ++++++++
test/jdk/java/io/File/GetAbsolutePath.java | 114 ++++++++------
test/jdk/java/io/File/GetCanonicalPath.java | 82 ++++++++--
test/jdk/java/io/File/IsAbsolute.java | 58 +++----
test/jdk/java/io/File/WindowsPrefixes.java | 97 ++++++++++++
.../Lines/OpenLineAfterScreenLock.java | 144 ++++++++++++++++++
.../pkcs11/MessageDigest/TestCloning.java | 25 ++-
test/jdk/sun/security/pkcs11/PSSUtil.java | 84 ++++++++++
.../Signature/KeyAndParamCheckForPSS.java | 104 +++++++------
.../pkcs11/Signature/SignatureTestPSS.java | 110 ++++++-------
.../x509/X509CRLImpl/UnexpectedNPE.java | 63 +++-----
23 files changed, 842 insertions(+), 269 deletions(-)
create mode 100644 test/hotspot/jtreg/runtime/CommandLine/UnrecognizedProperty.java
create mode 100644 test/jaxp/javax/xml/jaxp/unittest/stream/XMLStreamExceptionTest/ExceptionCauseTest.java
create mode 100644 test/jdk/java/io/File/WindowsPrefixes.java
create mode 100644 test/jdk/javax/sound/sampled/Lines/OpenLineAfterScreenLock.java
create mode 100644 test/jdk/sun/security/pkcs11/PSSUtil.java
diff --git a/src/hotspot/cpu/x86/x86_32.ad b/src/hotspot/cpu/x86/x86_32.ad
index 01005c730..e7ab73b77 100644
--- a/src/hotspot/cpu/x86/x86_32.ad
+++ b/src/hotspot/cpu/x86/x86_32.ad
@@ -13150,7 +13150,7 @@ instruct cmovPP_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegP dst, eRegP s
// Compare 2 longs and CMOVE doubles
instruct cmovDDPR_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, regDPR dst, regDPR src) %{
- predicate( UseSSE<=1 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge );
+ predicate( UseSSE<=1 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge ) );
match(Set dst (CMoveD (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
@@ -13160,7 +13160,7 @@ instruct cmovDDPR_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, regDPR dst, regD
// Compare 2 longs and CMOVE doubles
instruct cmovDD_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, regD dst, regD src) %{
- predicate( UseSSE>=2 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge );
+ predicate( UseSSE>=2 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge ) );
match(Set dst (CMoveD (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
@@ -13169,7 +13169,7 @@ instruct cmovDD_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, regD dst, regD src
%}
instruct cmovFFPR_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, regFPR dst, regFPR src) %{
- predicate( UseSSE==0 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge );
+ predicate( UseSSE==0 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge ) );
match(Set dst (CMoveF (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
@@ -13178,7 +13178,7 @@ instruct cmovFFPR_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, regFPR dst, regF
%}
instruct cmovFF_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, regF dst, regF src) %{
- predicate( UseSSE>=1 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge );
+ predicate( UseSSE>=1 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge ) );
match(Set dst (CMoveF (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
@@ -13313,7 +13313,7 @@ instruct cmovPP_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegP dst, eRegP s
// Compare 2 longs and CMOVE doubles
instruct cmovDDPR_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, regDPR dst, regDPR src) %{
- predicate( UseSSE<=1 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne );
+ predicate( UseSSE<=1 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne ) );
match(Set dst (CMoveD (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
@@ -13323,7 +13323,7 @@ instruct cmovDDPR_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, regDPR dst, regD
// Compare 2 longs and CMOVE doubles
instruct cmovDD_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, regD dst, regD src) %{
- predicate( UseSSE>=2 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne );
+ predicate( UseSSE>=2 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne ) );
match(Set dst (CMoveD (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
@@ -13332,7 +13332,7 @@ instruct cmovDD_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, regD dst, regD src
%}
instruct cmovFFPR_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, regFPR dst, regFPR src) %{
- predicate( UseSSE==0 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne );
+ predicate( UseSSE==0 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne ) );
match(Set dst (CMoveF (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
@@ -13341,7 +13341,7 @@ instruct cmovFFPR_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, regFPR dst, regF
%}
instruct cmovFF_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, regF dst, regF src) %{
- predicate( UseSSE>=1 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne );
+ predicate( UseSSE>=1 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne ) );
match(Set dst (CMoveF (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
@@ -13508,7 +13508,7 @@ instruct cmovPP_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegP dst,
// Compare 2 longs and CMOVE doubles
instruct cmovDDPR_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, regDPR dst, regDPR src) %{
- predicate( UseSSE<=1 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt );
+ predicate( UseSSE<=1 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt ) );
match(Set dst (CMoveD (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
@@ -13518,7 +13518,7 @@ instruct cmovDDPR_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, regDPR d
// Compare 2 longs and CMOVE doubles
instruct cmovDD_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, regD dst, regD src) %{
- predicate( UseSSE>=2 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt );
+ predicate( UseSSE>=2 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt ) );
match(Set dst (CMoveD (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
@@ -13527,7 +13527,7 @@ instruct cmovDD_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, regD dst,
%}
instruct cmovFFPR_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, regFPR dst, regFPR src) %{
- predicate( UseSSE==0 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt );
+ predicate( UseSSE==0 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt ) );
match(Set dst (CMoveF (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
@@ -13537,7 +13537,7 @@ instruct cmovFFPR_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, regFPR d
instruct cmovFF_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, regF dst, regF src) %{
- predicate( UseSSE>=1 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt );
+ predicate( UseSSE>=1 && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt ) );
match(Set dst (CMoveF (Binary cmp flags) (Binary dst src)));
ins_cost(200);
expand %{
diff --git a/src/hotspot/share/classfile/stringTable.hpp b/src/hotspot/share/classfile/stringTable.hpp
index 6c6ded24c..823aa6975 100644
--- a/src/hotspot/share/classfile/stringTable.hpp
+++ b/src/hotspot/share/classfile/stringTable.hpp
@@ -25,7 +25,7 @@
#ifndef SHARE_CLASSFILE_STRINGTABLE_HPP
#define SHARE_CLASSFILE_STRINGTABLE_HPP
-#include "memory/allocation.hpp"
+#include "memory/allStatic.hpp"
#include "memory/padded.hpp"
#include "oops/oop.hpp"
#include "oops/weakHandle.hpp"
@@ -36,15 +36,11 @@ class DumpedInternedStrings;
class JavaThread;
class SerializeClosure;
-class StringTable;
class StringTableConfig;
-class StringTableCreateEntry;
-class StringTable : public CHeapObj<mtSymbol>{
+class StringTable : AllStatic {
friend class VMStructs;
- friend class Symbol;
friend class StringTableConfig;
- friend class StringTableCreateEntry;
static volatile bool _has_work;
diff --git a/src/hotspot/share/opto/compile.cpp b/src/hotspot/share/opto/compile.cpp
index 4b22284f9..56471d69a 100644
--- a/src/hotspot/share/opto/compile.cpp
+++ b/src/hotspot/share/opto/compile.cpp
@@ -775,7 +775,7 @@ Compile::Compile( ciEnv* ci_env, ciMethod* target, int osr_bci,
// If any phase is randomized for stress testing, seed random number
// generation and log the seed for repeatability.
if (StressLCM || StressGCM || StressIGVN || StressCCP) {
- if (FLAG_IS_DEFAULT(StressSeed) || (FLAG_IS_ERGO(StressSeed) && RepeatCompilation)) {
+ if (FLAG_IS_DEFAULT(StressSeed) || (FLAG_IS_ERGO(StressSeed) && directive->RepeatCompilationOption)) {
_stress_seed = static_cast<uint>(Ticks::now().nanoseconds());
FLAG_SET_ERGO(StressSeed, _stress_seed);
} else {
diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp
index 5683e4fe0..60f639795 100644
--- a/src/hotspot/share/runtime/arguments.cpp
+++ b/src/hotspot/share/runtime/arguments.cpp
@@ -339,7 +339,6 @@ static bool matches_property_suffix(const char* option, const char* property, si
// any of the reserved module properties.
// property should be passed without the leading "-D".
bool Arguments::is_internal_module_property(const char* property) {
- assert((strncmp(property, "-D", 2) != 0), "Unexpected leading -D");
if (strncmp(property, MODULE_PROPERTY_PREFIX, MODULE_PROPERTY_PREFIX_LEN) == 0) {
const char* property_suffix = property + MODULE_PROPERTY_PREFIX_LEN;
if (matches_property_suffix(property_suffix, ADDEXPORTS, ADDEXPORTS_LEN) ||
diff --git a/src/java.base/share/classes/java/util/zip/ZipFile.java b/src/java.base/share/classes/java/util/zip/ZipFile.java
index d47a1d260..7e16e6a67 100644
--- a/src/java.base/share/classes/java/util/zip/ZipFile.java
+++ b/src/java.base/share/classes/java/util/zip/ZipFile.java
@@ -95,8 +95,9 @@ import static java.util.zip.ZipUtils.*;
* @since 1.1
*/
public class ZipFile implements ZipConstants, Closeable {
-
- private final String name; // zip file name
+
+ private final String filePath; // zip file path
+ private final String fileName; // name of the file
private volatile boolean closeRequested;
// The "resource" used by this zip file that needs to be
@@ -246,7 +247,8 @@ public class ZipFile implements ZipConstants, Closeable {
}
Objects.requireNonNull(charset, "charset");
- this.name = name;
+ this.filePath = name;
+ this.fileName = file.getName();
long t0 = System.nanoTime();
this.res = new CleanableResource(this, ZipCoder.get(charset), file, mode);
@@ -477,8 +479,16 @@ public class ZipFile implements ZipConstants, Closeable {
* @return the path name of the ZIP file
*/
public String getName() {
- return name;
+ return filePath;
}
+
+ /**
+ * {@return a string identifying this {@code ZipFile}, for debugging}
+ */
+ @Override
+ public String toString() {
+ return this.fileName+ "@" + Integer.toHexString(System.identityHashCode(this));
+ }
private class ZipEntryIterator<T extends ZipEntry>
implements Enumeration<T>, Iterator<T> {
diff --git a/src/java.base/windows/classes/java/io/WinNTFileSystem.java b/src/java.base/windows/classes/java/io/WinNTFileSystem.java
index 0fabd6f2b..d910beb44 100644
--- a/src/java.base/windows/classes/java/io/WinNTFileSystem.java
+++ b/src/java.base/windows/classes/java/io/WinNTFileSystem.java
@@ -41,6 +41,8 @@ import sun.security.action.GetPropertyAction;
*/
class WinNTFileSystem extends FileSystem {
+ private static final String LONG_PATH_PREFIX = "\\\\?\\";
+
private final char slash;
private final char altSlash;
private final char semicolon;
@@ -59,6 +61,23 @@ class WinNTFileSystem extends FileSystem {
ENABLE_ADS = true;
}
}
+ // Strip a long path or UNC prefix and return the result.
+ // If there is no such prefix, return the parameter passed in.
+ private static String stripLongOrUNCPrefix(String path) {
+ // if a prefix is present, remove it
+ if (path.startsWith(LONG_PATH_PREFIX)) {
+ if (path.startsWith("UNC\\", 4)) {
+ path = "\\\\" + path.substring(8);
+ } else {
+ path = path.substring(4);
+ // if only "UNC" remains, a trailing "\\" was likely removed
+ if (path.equals("UNC")) {
+ path = "\\\\";
+ }
+ }
+ }
+ return path;
+ }
public WinNTFileSystem() {
Properties props = GetPropertyAction.privilegedGetProperties();
@@ -100,6 +119,7 @@ class WinNTFileSystem extends FileSystem {
This way we iterate through the whole pathname string only once. */
@Override
public String normalize(String path) {
+ path = stripLongOrUNCPrefix(path);
int n = path.length();
char slash = this.slash;
char altSlash = this.altSlash;
@@ -225,6 +245,8 @@ class WinNTFileSystem extends FileSystem {
@Override
public int prefixLength(String path) {
+ assert !path.startsWith(LONG_PATH_PREFIX);
+
char slash = this.slash;
int n = path.length();
if (n == 0) return 0;
@@ -244,6 +266,8 @@ class WinNTFileSystem extends FileSystem {
@Override
public String resolve(String parent, String child) {
+ assert !child.startsWith(LONG_PATH_PREFIX);
+
int pn = parent.length();
if (pn == 0) return child;
int cn = child.length();
@@ -315,6 +339,9 @@ class WinNTFileSystem extends FileSystem {
@Override
public boolean isAbsolute(File f) {
+ String path = f.getPath();
+ assert !path.startsWith(LONG_PATH_PREFIX);
+
int pl = f.getPrefixLength();
return (((pl == 2) && (f.getPath().charAt(0) == slash))
|| (pl == 3));
@@ -353,6 +380,8 @@ class WinNTFileSystem extends FileSystem {
@Override
public String resolve(File f) {
String path = f.getPath();
+ assert !path.startsWith(LONG_PATH_PREFIX);
+
int pl = f.getPrefixLength();
if ((pl == 2) && (path.charAt(0) == slash))
return path; /* UNC */
@@ -440,6 +469,8 @@ class WinNTFileSystem extends FileSystem {
@Override
public String canonicalize(String path) throws IOException {
+ assert !path.startsWith(LONG_PATH_PREFIX);
+
// If path is a drive letter only then skip canonicalization
int len = path.length();
if ((len == 2) &&
diff --git a/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_DirectSound.cpp b/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_DirectSound.cpp
index ea188e934..8585eda01 100644
--- a/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_DirectSound.cpp
+++ b/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_DirectSound.cpp
@@ -357,7 +379,7 @@ typedef struct {
} DS_Info;
-LPCSTR TranslateDSError(HRESULT hr) {
+LPSTR TranslateDSError(HRESULT hr) {
switch(hr) {
case DSERR_ALLOCATED:
return "DSERR_ALLOCATED";
diff --git a/src/java.xml/share/classes/javax/xml/stream/XMLStreamException.java b/src/java.xml/share/classes/javax/xml/stream/XMLStreamException.java
index 5a229ed1e..ec9734d7c 100644
--- a/src/java.xml/share/classes/javax/xml/stream/XMLStreamException.java
+++ b/src/java.xml/share/classes/javax/xml/stream/XMLStreamException.java
@@ -94,7 +94,7 @@ public class XMLStreamException extends Exception {
public XMLStreamException(String msg, Location location, Throwable th) {
super("ParseError at [row,col]:["+location.getLineNumber()+","+
location.getColumnNumber()+"]\n"+
- "Message: "+msg);
+ "Message: "+msg, th);
nested = th;
this.location = location;
}
diff --git a/test/hotspot/jtreg/runtime/CommandLine/UnrecognizedProperty.java b/test/hotspot/jtreg/runtime/CommandLine/UnrecognizedProperty.java
new file mode 100644
index 000000000..78ec54bbc
--- /dev/null
+++ b/test/hotspot/jtreg/runtime/CommandLine/UnrecognizedProperty.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2023, 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 8321479
+ * @summary VM should not crash with property "-D-D"
+ * @requires vm.flagless
+ * @library /test/lib
+ * @run driver UnrecognizedProperty
+ */
+
+import jdk.test.lib.process.ProcessTools;
+import jdk.test.lib.process.OutputAnalyzer;
+
+public class UnrecognizedProperty {
+ public static void main(String[] args) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ "-D-D");
+
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldContain("Usage: java");
+ output.shouldHaveExitValue(1);
+ }
+}
\ No newline at end of file
diff --git a/test/jaxp/javax/xml/jaxp/unittest/stream/XMLStreamExceptionTest/ExceptionCauseTest.java b/test/jaxp/javax/xml/jaxp/unittest/stream/XMLStreamExceptionTest/ExceptionCauseTest.java
new file mode 100644
index 000000000..e32527621
--- /dev/null
+++ b/test/jaxp/javax/xml/jaxp/unittest/stream/XMLStreamExceptionTest/ExceptionCauseTest.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2023, 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 stream.XMLStreamExceptionTest;
+
+import java.io.IOException;
+
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+
+import org.testng.Assert;
+import org.testng.annotations.Listeners;
+import org.testng.annotations.Test;
+
+/*
+ * @test
+ * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
+ * @run testng/othervm -DrunSecMngr=true -Djava.security.manager=allow stream.XMLStreamExceptionTest.ExceptionCauseTest
+ * @run testng/othervm stream.XMLStreamExceptionTest.ExceptionCauseTest
+ * @summary Test XMLStreamException constructor initializes chained exception
+ */
+@Listeners({jaxp.library.BasePolicy.class})
+public class ExceptionCauseTest {
+
+ @Test
+ public void testExceptionCause() {
+
+ // Create exception with cause
+ Throwable cause = new Throwable("cause");
+ Location location = new Location() {
+ public int getLineNumber() { return 0; }
+ public int getColumnNumber() { return 0; }
+ public int getCharacterOffset() { return 0; }
+ public String getPublicId() { return null; }
+ public String getSystemId() { return null; }
+ };
+ XMLStreamException e = new XMLStreamException("message", location, cause);
+
+ // Verify cause
+ Assert.assertSame(e.getCause(), cause, "XMLStreamException has the wrong cause");
+ }
+}
diff --git a/test/jdk/java/io/File/GetAbsolutePath.java b/test/jdk/java/io/File/GetAbsolutePath.java
index 1f69d0b6e..ad2e1cc79 100644
--- a/test/jdk/java/io/File/GetAbsolutePath.java
+++ b/test/jdk/java/io/File/GetAbsolutePath.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2023, 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
@@ -22,74 +22,92 @@
*/
/* @test
- @bug 4131169 4109131
- @summary Basic test for getAbsolutePath method
+ * @bug 4131169 4109131 8287843
+ * @summary Basic test for getAbsolutePath method
+ * @run junit GetAbsolutePath
*/
-import java.io.*;
+import java.io.File;
+import java.io.IOException;
+import java.util.stream.Stream;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.EnabledOnOs;
+import org.junit.jupiter.api.condition.OS;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+import static org.junit.jupiter.api.Assertions.*;
public class GetAbsolutePath {
- private static boolean ignoreCase = false;
+ private static final String USER_DIR = System.getProperty("user.dir");
- private static void ck(String path, String ans) throws Exception {
- File f = new File(path);
- String p = f.getAbsolutePath();
- if ((ignoreCase && p.equalsIgnoreCase(ans)) || p.equals(ans))
- System.err.println(path + " ==> " + p);
- else
- throw new Exception(path + ": expected " + ans + ", got " + p);
+ private static char driveLetter() {
+ assert System.getProperty("os.name").startsWith("Windows");
+
+ if ((USER_DIR.length() > 2) && (USER_DIR.charAt(1) == ':')
+ && (USER_DIR.charAt(2) == '\\'))
+ return USER_DIR.charAt(0);
+
+ throw new RuntimeException("Current directory has no drive");
}
- private static void testWin32() throws Exception {
- String wd = System.getProperty("user.dir");
- char d;
- if ((wd.length() > 2) && (wd.charAt(1) == ':')
- && (wd.charAt(2) == '\\'))
- d = wd.charAt(0);
- else
- throw new Exception("Current directory has no drive");
- ck("/foo/bar", d + ":\\foo\\bar");
- ck("\\foo\\bar", d + ":\\foo\\bar");
- ck("c:\\foo\\bar", "c:\\foo\\bar");
- ck("c:/foo/bar", "c:\\foo\\bar");
- ck("\\\\foo\\bar", "\\\\foo\\bar");
+ private static Stream<Arguments> windowsSource() {
+ char drive = driveLetter();
+ return Stream.of(Arguments.of("/foo/bar", drive + ":\\foo\\bar"),
+ Arguments.of("\\foo\\bar", drive + ":\\foo\\bar"),
+ Arguments.of("c:\\foo\\bar", "c:\\foo\\bar"),
+ Arguments.of("c:/foo/bar", "c:\\foo\\bar"),
+ Arguments.of("\\\\foo\\bar", "\\\\foo\\bar"),
+ Arguments.of("", USER_DIR), // empty path
+ Arguments.of("\\\\?\\foo", USER_DIR + "\\foo"),
+ Arguments.of("\\\\?\\C:\\Users\\x", "C:\\Users\\x"),
+ Arguments.of("\\\\?\\" + drive + ":", USER_DIR),
+ Arguments.of("\\\\?\\" + drive + ":bar", USER_DIR + "\\bar"));
+ }
+
+ @EnabledOnOs(OS.WINDOWS)
+ @ParameterizedTest
+ @MethodSource("windowsSource")
+ public void windows(String path, String absolute) throws IOException {
+ File file = new File(path);
+ assertEquals(0, absolute.compareToIgnoreCase(file.getAbsolutePath()));
+ }
- /* Tricky directory-relative case */
- d = Character.toLowerCase(d);
+ @EnabledOnOs(OS.WINDOWS)
+ @Test
+ public void windowsDriveRelative() throws IOException {
+ // Tricky directory-relative case
+ char d = Character.toLowerCase(driveLetter());
char z = 0;
if (d != 'c') z = 'c';
else if (d != 'd') z = 'd';
if (z != 0) {
File f = new File(z + ":.");
if (f.exists()) {
- String zwd = f.getCanonicalPath();
- ck(z + ":foo", zwd + "\\foo");
+ String zUSER_DIR = f.getCanonicalPath();
+ File path = new File(z + ":foo");
+ String p = path.getAbsolutePath();
+ String ans = zUSER_DIR + "\\foo";
+ assertEquals(0, p.compareToIgnoreCase(ans));
}
}
-
- /* Empty path */
- ck("", wd);
}
- private static void testUnix() throws Exception {
- String wd = System.getProperty("user.dir");
- ck("foo", wd + "/foo");
- ck("foo/bar", wd + "/foo/bar");
- ck("/foo", "/foo");
- ck("/foo/bar", "/foo/bar");
-
- /* Empty path */
- ck("", wd);
+ private static Stream<Arguments> unixSource() {
+ return Stream.of(Arguments.of("foo", USER_DIR + "/foo"),
+ Arguments.of("foo/bar", USER_DIR + "/foo/bar"),
+ Arguments.of("/foo", "/foo"),
+ Arguments.of("/foo/bar", "/foo/bar"),
+ Arguments.of("", USER_DIR));
}
- public static void main(String[] args) throws Exception {
- if (File.separatorChar == '\\') {
- ignoreCase = true;
- testWin32();
- }
- if (File.separatorChar == '/') testUnix();
+ @EnabledOnOs({OS.LINUX, OS.MAC})
+ @ParameterizedTest
+ @MethodSource("unixSource")
+ public void unix(String path, String absolute) throws IOException {
+ assertEquals(absolute, new File(path).getAbsolutePath());
}
-
}
diff --git a/test/jdk/java/io/File/GetCanonicalPath.java b/test/jdk/java/io/File/GetCanonicalPath.java
index dfd0fa5ca..0abf25244 100644
--- a/test/jdk/java/io/File/GetCanonicalPath.java
+++ b/test/jdk/java/io/File/GetCanonicalPath.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2023, 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
@@ -22,21 +22,81 @@
*/
/* @test
- @bug 4899022
- @summary Look for erroneous representation of drive letter
+ * @bug 4899022
+ * @requires (os.family == "windows")
+ * @summary Look for erroneous representation of drive letter
+ * @run junit GetCanonicalPath
*/
-import java.io.*;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import static org.junit.jupiter.api.Assertions.*;
public class GetCanonicalPath {
- public static void main(String[] args) throws Exception {
- if (File.separatorChar == '\\') {
- testDriveLetter();
- }
+ private static Stream<Arguments> pathProvider() {
+ List<Arguments> list = new ArrayList<Arguments>();
+
+ File dir = new File(System.getProperty("user.dir", "."));
+ char drive = dir.getPath().charAt(0);
+
+ String pathname = drive + ":\\";
+ list.add(Arguments.of(pathname, pathname));
+
+ list.add(Arguments.of(drive + ":", dir.toString()));
+
+ String name = "foo";
+ pathname = "\\\\?\\" + name;
+ list.add(Arguments.of(pathname, new File(dir, name).toString()));
+ pathname = "\\\\?\\" + drive + ":" + name;
+ list.add(Arguments.of(pathname, new File(dir, name).toString()));
+
+ pathname = "foo\\bar\\gus";
+ list.add(Arguments.of(pathname, new File(dir, pathname).toString()));
+
+ pathname = drive + ":\\foo\\bar\\gus";
+ list.add(Arguments.of(pathname, pathname));
+
+ pathname = "\\\\server\\share\\foo\\bar\\gus";
+ list.add(Arguments.of(pathname, pathname));
+
+ pathname = "\\\\localhost\\" + drive + "$\\Users\\file.dat";
+ list.add(Arguments.of(pathname, pathname));
+
+ list.add(Arguments.of("\\\\?\\" + drive + ":\\Users\\file.dat",
+ drive + ":\\Users\\file.dat"));
+ list.add(Arguments.of("\\\\?\\UNC\\localhost\\" + drive + "$\\Users\\file.dat",
+ "\\\\localhost\\" + drive + "$\\Users\\file.dat"));
+
+ return list.stream();
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = {"\\\\?", "\\\\?\\UNC", "\\\\?\\UNC\\"})
+ void badPaths(String pathname) {
+ assertThrows(IOException.class, () -> new File(pathname).getCanonicalPath());
+ }
+
+ @ParameterizedTest
+ @MethodSource("pathProvider")
+ void goodPaths(String pathname, String expected) throws IOException {
+ File file = new File(pathname);
+ String canonicalPath = file.getCanonicalPath();
+ assertEquals(expected, canonicalPath);
}
- private static void testDriveLetter() throws Exception {
+
+ @Test
+ void driveLetter() throws IOException {
String path = new File("c:/").getCanonicalPath();
- if (path.length() > 3)
- throw new RuntimeException("Drive letter incorrectly represented");
+ assertFalse(path.length() > 3, "Drive letter incorrectly represented");
}
}
diff --git a/test/jdk/java/io/File/IsAbsolute.java b/test/jdk/java/io/File/IsAbsolute.java
index 581d7bebf..cdeda917c 100644
--- a/test/jdk/java/io/File/IsAbsolute.java
+++ b/test/jdk/java/io/File/IsAbsolute.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2023, 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
@@ -22,42 +22,46 @@
*/
/* @test
- @bug 4022397
- @summary General test for isAbsolute
+ * @bug 4022397 8287843
+ * @summary General test for isAbsolute
+ * @run junit IsAbsolute
*/
-import java.io.*;
+import java.io.File;
+import java.io.IOException;
+import org.junit.jupiter.api.condition.EnabledOnOs;
+import org.junit.jupiter.api.condition.OS;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+import static org.junit.jupiter.api.Assertions.*;
public class IsAbsolute {
-
- private static void ck(String path, boolean ans) throws Exception {
- File f = new File(path);
- boolean x = f.isAbsolute();
- if (x != ans)
- throw new Exception(path + ": expected " + ans + ", got " + x);
- System.err.println(path + " ==> " + x);
+ @EnabledOnOs(OS.WINDOWS)
+ @ParameterizedTest
+ @ValueSource(strings = {"c:\\foo\\bar", "c:/foo/bar", "\\\\foo\\bar"})
+ public void windowsAbsolute(String path) throws IOException {
+ assertTrue(new File(path).isAbsolute());
}
- private static void testWin32() throws Exception {
- ck("/foo/bar", false);
- ck("\\foo\\bar", false);
- ck("c:\\foo\\bar", true);
- ck("c:/foo/bar", true);
- ck("c:foo\\bar", false);
- ck("\\\\foo\\bar", true);
+ @EnabledOnOs(OS.WINDOWS)
+ @ParameterizedTest
+ @ValueSource(strings = {"/foo/bar", "\\foo\\bar", "c:foo\\bar"})
+ public void windowsNotAbsolute(String path) throws IOException {
+ assertFalse(new File(path).isAbsolute());
}
- private static void testUnix() throws Exception {
- ck("foo", false);
- ck("foo/bar", false);
- ck("/foo", true);
- ck("/foo/bar", true);
+ @EnabledOnOs({OS.LINUX, OS.MAC})
+ @ParameterizedTest
+ @ValueSource(strings = {"/foo", "/foo/bar"})
+ public void unixAbsolute(String path) throws IOException {
+ assertTrue(new File(path).isAbsolute());
}
- public static void main(String[] args) throws Exception {
- if (File.separatorChar == '\\') testWin32();
- if (File.separatorChar == '/') testUnix();
+ @EnabledOnOs({OS.LINUX, OS.MAC})
+ @ParameterizedTest
+ @ValueSource(strings = {"foo", "foo/bar"})
+ public void unixNotAbsolute(String path) throws IOException {
+ assertFalse(new File(path).isAbsolute());
}
-
}
diff --git a/test/jdk/java/io/File/WindowsPrefixes.java b/test/jdk/java/io/File/WindowsPrefixes.java
new file mode 100644
index 000000000..0997f1f45
--- /dev/null
+++ b/test/jdk/java/io/File/WindowsPrefixes.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 1998, 2023, 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 8287843
+ * @summary Basic test for Windows path prefixes
+ * @requires (os.family == "windows")
+ * @run junit WindowsPrefixes
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.EnabledOnOs;
+import org.junit.jupiter.api.condition.OS;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+import static org.junit.jupiter.api.Assertions.*;
+
+public class WindowsPrefixes {
+
+ private static Stream<Arguments> paths() {
+ return Stream.of(Arguments.of(""),
+ Arguments.of("C:\\"),
+ Arguments.of("C:"),
+ Arguments.of("\\foo"),
+ Arguments.of("foo"),
+ Arguments.of("foo\\bar"),
+ Arguments.of("C:\\foo"),
+ Arguments.of("C:foo"),
+ Arguments.of("C:\\foo\\bar"));
+ }
+
+ @ParameterizedTest
+ @MethodSource("paths")
+ public void getAbsolutePath(String path) throws IOException {
+ File file = new File(path);
+ File that = new File("\\\\?\\" + path);
+ assertEquals(file.getAbsolutePath(), that.getAbsolutePath());
+ }
+
+ @ParameterizedTest
+ @MethodSource("paths")
+ public void getCanonicalPath(String path) throws IOException {
+ File file = new File(path);
+ File that = new File("\\\\?\\" + path);
+ assertEquals(file.getCanonicalPath(), that.getCanonicalPath());
+ }
+
+ @ParameterizedTest
+ @MethodSource("paths")
+ public void getName(String path) throws IOException {
+ File file = new File(path);
+ File that = new File("\\\\?\\" + path);
+ assertEquals(file.getName(), that.getName());
+ }
+
+ @ParameterizedTest
+ @MethodSource("paths")
+ public void getParent(String path) throws IOException {
+ File file = new File(path);
+ File that = new File("\\\\?\\" + path);
+ assertEquals(file.getParent(), that.getParent());
+ }
+
+ @ParameterizedTest
+ @MethodSource("paths")
+ public void isAbsolute(String path) throws IOException {
+ File file = new File(path);
+ File that = new File("\\\\?\\" + path);
+ assertEquals(file.isAbsolute(), that.isAbsolute());
+ }
+}
--
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。