Update to upstream version 1.12.0
Resolves: rhbz#1880669
This commit is contained in:
parent
e755375210
commit
38aa4250f8
@ -1,6 +1,6 @@
|
||||
From ceca0b287ac211a968e84cee7f05cfd6c2a843ec Mon Sep 17 00:00:00 2001
|
||||
From 395fcc56d403d0625fe4930af4b2b772b0958fe1 Mon Sep 17 00:00:00 2001
|
||||
From: Marian Koncek <mkoncek@redhat.com>
|
||||
Date: Tue, 29 Sep 2020 14:46:16 +0200
|
||||
Date: Tue, 9 Nov 2021 11:55:22 +0100
|
||||
Subject: [PATCH] Avoid bundling asm
|
||||
|
||||
---
|
||||
@ -8,7 +8,7 @@ Subject: [PATCH] Avoid bundling asm
|
||||
1 file changed, 15 insertions(+), 55 deletions(-)
|
||||
|
||||
diff --git a/byte-buddy/pom.xml b/byte-buddy/pom.xml
|
||||
index 16388f3..c97b4d9 100644
|
||||
index 403f684..0d1d98c 100644
|
||||
--- a/byte-buddy/pom.xml
|
||||
+++ b/byte-buddy/pom.xml
|
||||
@@ -26,8 +26,6 @@
|
||||
@ -17,7 +17,7 @@ index 16388f3..c97b4d9 100644
|
||||
<properties>
|
||||
- <shade.source>org.objectweb.asm</shade.source>
|
||||
- <shade.target>net.bytebuddy.jar.asm</shade.target>
|
||||
<packages.list>
|
||||
<packages.list.external>
|
||||
net.bytebuddy,
|
||||
net.bytebuddy.agent.builder,
|
||||
@@ -62,9 +60,6 @@
|
||||
@ -27,27 +27,10 @@ index 16388f3..c97b4d9 100644
|
||||
- ${shade.target},
|
||||
- ${shade.target}.signature,
|
||||
- ${shade.target}.commons
|
||||
</packages.list>
|
||||
</properties>
|
||||
|
||||
@@ -79,6 +74,16 @@
|
||||
<artifactId>byte-buddy-dep</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
+ <dependency>
|
||||
+ <groupId>org.ow2.asm</groupId>
|
||||
+ <artifactId>asm</artifactId>
|
||||
+ <version>${version.asm}</version>
|
||||
+ </dependency>
|
||||
+ <dependency>
|
||||
+ <groupId>org.ow2.asm</groupId>
|
||||
+ <artifactId>asm-commons</artifactId>
|
||||
+ <version>${version.asm}</version>
|
||||
+ </dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
@@ -105,44 +110,6 @@
|
||||
</packages.list.external>
|
||||
<packages.list.internal>
|
||||
net.bytebuddy.utility.dispatcher
|
||||
@@ -120,44 +115,6 @@
|
||||
<createDependencyReducedPom>true</createDependencyReducedPom>
|
||||
<createSourcesJar>${bytebuddy.extras}</createSourcesJar>
|
||||
<shadeSourcesContent>true</shadeSourcesContent>
|
||||
@ -92,7 +75,7 @@ index 16388f3..c97b4d9 100644
|
||||
<transformers>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
||||
<mainClass>net.bytebuddy.build.Plugin$Engine$Default</mainClass>
|
||||
@@ -151,21 +118,14 @@
|
||||
@@ -166,21 +123,14 @@
|
||||
<resource>META-INF/LICENSE</resource>
|
||||
</transformer>
|
||||
</transformers>
|
||||
@ -119,6 +102,23 @@ index 16388f3..c97b4d9 100644
|
||||
</plugin>
|
||||
<!-- Disable pitest as it fails for empty modules -->
|
||||
<plugin>
|
||||
@@ -243,6 +193,16 @@
|
||||
<artifactId>asm</artifactId>
|
||||
<version>${version.asm}</version>
|
||||
</dependency>
|
||||
+ <dependency>
|
||||
+ <groupId>org.ow2.asm</groupId>
|
||||
+ <artifactId>asm</artifactId>
|
||||
+ <version>${version.asm}</version>
|
||||
+ </dependency>
|
||||
+ <dependency>
|
||||
+ <groupId>org.ow2.asm</groupId>
|
||||
+ <artifactId>asm-commons</artifactId>
|
||||
+ <version>${version.asm}</version>
|
||||
+ </dependency>
|
||||
</dependencies>
|
||||
<executions>
|
||||
<execution>
|
||||
--
|
||||
2.26.2
|
||||
2.31.1
|
||||
|
||||
|
@ -1,14 +1,15 @@
|
||||
From 4dcae48a47d1c2123d5ec86f3e2d6ef1adab8a83 Mon Sep 17 00:00:00 2001
|
||||
From c54cc280a38d05ffe93a1af6922afcefe4d0cf71 Mon Sep 17 00:00:00 2001
|
||||
From: Marian Koncek <mkoncek@redhat.com>
|
||||
Date: Wed, 30 Sep 2020 13:04:45 +0200
|
||||
Subject: [PATCH] Remove dependency on jna
|
||||
Date: Mon, 1 Nov 2021 12:51:02 +0100
|
||||
Subject: [PATCH] Remove dependencies
|
||||
|
||||
---
|
||||
.../net/bytebuddy/agent/VirtualMachine.java | 2275 +++--------------
|
||||
1 file changed, 357 insertions(+), 1918 deletions(-)
|
||||
.../net/bytebuddy/agent/VirtualMachine.java | 1978 +----------------
|
||||
.../dynamic/loading/ClassInjector.java | 104 +-
|
||||
2 files changed, 2 insertions(+), 2080 deletions(-)
|
||||
|
||||
diff --git a/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java b/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java
|
||||
index 245581d..80cab63 100644
|
||||
index 32fe7d1fad..795d648512 100644
|
||||
--- a/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java
|
||||
+++ b/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java
|
||||
@@ -15,13 +15,6 @@
|
||||
@ -25,7 +26,24 @@ index 245581d..80cab63 100644
|
||||
import java.io.*;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
@@ -227,23 +220,6 @@ public interface VirtualMachine {
|
||||
@@ -149,15 +142,7 @@ public interface VirtualMachine {
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public Class<? extends VirtualMachine> run() {
|
||||
- try {
|
||||
- Class.forName("com.sun.jna.Platform");
|
||||
- } catch (ClassNotFoundException exception) {
|
||||
- throw new IllegalStateException("Optional JNA dependency is not available", exception);
|
||||
- }
|
||||
- return System.getProperty("java.vm.name", "").toUpperCase(Locale.US).contains("J9")
|
||||
- ? ForOpenJ9.class
|
||||
- : ForHotSpot.class;
|
||||
-
|
||||
+ throw new IllegalStateException("Optional JNA dependency is not available");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,23 +212,6 @@ public interface VirtualMachine {
|
||||
this.connection = connection;
|
||||
}
|
||||
|
||||
@ -49,7 +67,7 @@ index 245581d..80cab63 100644
|
||||
/**
|
||||
* Attaches to the supplied process id using the supplied connection factory.
|
||||
*
|
||||
@@ -515,7 +491,6 @@ public interface VirtualMachine {
|
||||
@@ -515,7 +483,6 @@ public interface VirtualMachine {
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@ -57,40 +75,26 @@ index 245581d..80cab63 100644
|
||||
public Connection connect(String processId) throws IOException {
|
||||
File socket = new File(temporaryDirectory, SOCKET_FILE_PREFIX + processId);
|
||||
if (!socket.exists()) {
|
||||
@@ -679,1949 +654,413 @@ public interface VirtualMachine {
|
||||
@@ -679,1949 +646,6 @@ public interface VirtualMachine {
|
||||
*/
|
||||
protected abstract int read(T connection, byte[] buffer) throws IOException;
|
||||
}
|
||||
+ }
|
||||
+ }
|
||||
|
||||
-
|
||||
- /**
|
||||
- * Implements a connection for a Posix socket in JNA.
|
||||
- */
|
||||
- class ForJnaPosixSocket extends OnPersistentByteChannel<Integer> {
|
||||
+ /**
|
||||
+ * A virtual machine attachment implementation for OpenJ9 or any compatible JVM.
|
||||
+ */
|
||||
+ class ForOpenJ9 extends AbstractBase {
|
||||
|
||||
-
|
||||
- /**
|
||||
- * The JNA library to use.
|
||||
- */
|
||||
- private final PosixLibrary library;
|
||||
+ /**
|
||||
+ * The temporary folder for attachment files for OpenJ9 VMs.
|
||||
+ */
|
||||
+ private static final String IBM_TEMPORARY_FOLDER = "com.ibm.tools.attach.directory";
|
||||
|
||||
-
|
||||
- /**
|
||||
- * The POSIX socket.
|
||||
- */
|
||||
- private final File socket;
|
||||
+ /**
|
||||
+ * The socket on which this VM and the target VM communicate.
|
||||
+ */
|
||||
+ private final Socket socket;
|
||||
|
||||
-
|
||||
- /**
|
||||
- * Creates a connection for a virtual posix socket implemented in JNA.
|
||||
- *
|
||||
@ -101,39 +105,13 @@ index 245581d..80cab63 100644
|
||||
- this.library = library;
|
||||
- this.socket = socket;
|
||||
- }
|
||||
+ /**
|
||||
+ * Creates a new virtual machine connection for OpenJ9.
|
||||
+ *
|
||||
+ * @param socket The socket on which this VM and the target VM communicate.
|
||||
+ */
|
||||
+ protected ForOpenJ9(Socket socket) {
|
||||
+ this.socket = socket;
|
||||
+ }
|
||||
|
||||
-
|
||||
- @Override
|
||||
- protected Integer connect() {
|
||||
- int handle = library.socket(1, 1, 0);
|
||||
+ /**
|
||||
+ * Attaches to the supplied process id.
|
||||
+ *
|
||||
+ * @param processId The process id.
|
||||
+ * @param timeout The timeout for establishing the socket connection.
|
||||
+ * @param dispatcher The connector to use to communicate with the target VM.
|
||||
+ * @return A suitable virtual machine implementation.
|
||||
+ * @throws IOException If an IO exception occurs during establishing the connection.
|
||||
+ */
|
||||
+ public static VirtualMachine attach(String processId, int timeout, Dispatcher dispatcher) throws IOException {
|
||||
+ File directory = new File(System.getProperty(IBM_TEMPORARY_FOLDER, dispatcher.getTemporaryFolder()), ".com_ibm_tools_attach");
|
||||
+ RandomAccessFile attachLock = new RandomAccessFile(new File(directory, "_attachlock"), "rw");
|
||||
+ try {
|
||||
+ FileLock attachLockLock = attachLock.getChannel().lock();
|
||||
+ try {
|
||||
+ List<Properties> virtualMachines;
|
||||
+ RandomAccessFile master = new RandomAccessFile(new File(directory, "_master"), "rw");
|
||||
try {
|
||||
- try {
|
||||
- PosixLibrary.SocketAddress address = new PosixLibrary.SocketAddress();
|
||||
+ FileLock masterLock = master.getChannel().lock();
|
||||
try {
|
||||
- try {
|
||||
- address.setPath(socket.getAbsolutePath());
|
||||
- library.connect(handle, address, address.size());
|
||||
- return handle;
|
||||
@ -265,10 +243,7 @@ index 245581d..80cab63 100644
|
||||
- System.arraycopy(new byte[]{0}, 0, this.path, path.length(), 1);
|
||||
- } catch (UnsupportedEncodingException exception) {
|
||||
- throw new IllegalStateException(exception);
|
||||
+ File[] vmFolder = directory.listFiles();
|
||||
+ if (vmFolder == null) {
|
||||
+ throw new IllegalStateException("No descriptor files found in " + directory);
|
||||
}
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
@ -323,54 +298,13 @@ index 245581d..80cab63 100644
|
||||
- temporaryDirectory = "/tmp";
|
||||
- } else {
|
||||
- temporaryDirectory = memory.getString(0);
|
||||
+ long userId = dispatcher.userId();
|
||||
+ virtualMachines = new ArrayList<Properties>();
|
||||
+ for (File aVmFolder : vmFolder) {
|
||||
+ if (aVmFolder.isDirectory() && dispatcher.getOwnerIdOf(aVmFolder) == userId) {
|
||||
+ File attachInfo = new File(aVmFolder, "attachInfo");
|
||||
+ if (attachInfo.isFile()) {
|
||||
+ Properties virtualMachine = new Properties();
|
||||
+ FileInputStream inputStream = new FileInputStream(attachInfo);
|
||||
+ try {
|
||||
+ virtualMachine.load(inputStream);
|
||||
+ } finally {
|
||||
+ inputStream.close();
|
||||
+ }
|
||||
+ int targetProcessId = Integer.parseInt(virtualMachine.getProperty("processId"));
|
||||
+ long targetUserId;
|
||||
+ try {
|
||||
+ targetUserId = Long.parseLong(virtualMachine.getProperty("userUid"));
|
||||
+ } catch (NumberFormatException ignored) {
|
||||
+ targetUserId = 0L;
|
||||
+ }
|
||||
+ if (userId != 0L && targetUserId == 0L) {
|
||||
+ targetUserId = dispatcher.getOwnerIdOf(attachInfo);
|
||||
+ }
|
||||
+ if (targetProcessId == 0L || dispatcher.isExistingProcess(targetProcessId)) {
|
||||
+ virtualMachines.add(virtualMachine);
|
||||
+ } else if (userId == 0L || targetUserId == userId) {
|
||||
+ File[] vmFile = aVmFolder.listFiles();
|
||||
+ if (vmFile != null) {
|
||||
+ for (File aVmFile : vmFile) {
|
||||
+ if (!aVmFile.delete()) {
|
||||
+ aVmFile.deleteOnExit();
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ if (!aVmFolder.delete()) {
|
||||
+ aVmFolder.deleteOnExit();
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
- }
|
||||
- } finally {
|
||||
- memory = null;
|
||||
}
|
||||
- }
|
||||
- } else {
|
||||
- temporaryDirectory = "/tmp";
|
||||
+ } finally {
|
||||
+ masterLock.release();
|
||||
}
|
||||
- }
|
||||
- return new Factory(temporaryDirectory, attempts, pause, timeUnit);
|
||||
- }
|
||||
-
|
||||
@ -403,9 +337,7 @@ index 245581d..80cab63 100644
|
||||
- * @return The amount of bytes written to the buffer.
|
||||
- */
|
||||
- long confstr(int name, Pointer buffer, long length);
|
||||
+ } finally {
|
||||
+ master.close();
|
||||
}
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
@ -471,13 +403,7 @@ index 245581d..80cab63 100644
|
||||
- throw new IllegalArgumentException("Unknown protocol version: " + protocol);
|
||||
- } else if (argument.length > 4) {
|
||||
- throw new IllegalArgumentException("Cannot supply more then four arguments to Windows attach mechanism: " + Arrays.asList(argument));
|
||||
+ Properties target = null;
|
||||
+ for (Properties virtualMachine : virtualMachines) {
|
||||
+ if (virtualMachine.getProperty("processId").equalsIgnoreCase(processId)) {
|
||||
+ target = virtualMachine;
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
- }
|
||||
- String name = "\\\\.\\pipe\\javatool" + Math.abs(random.nextInt() + 1);
|
||||
- WinNT.HANDLE pipe = Kernel32.INSTANCE.CreateNamedPipe(name,
|
||||
- WinBase.PIPE_ACCESS_INBOUND,
|
||||
@ -489,11 +415,8 @@ index 245581d..80cab63 100644
|
||||
- null);
|
||||
- if (pipe == null) {
|
||||
- throw new Win32Exception(Native.getLastError());
|
||||
+ if (target == null) {
|
||||
+ throw new IllegalStateException("Could not locate target process info in " + directory);
|
||||
}
|
||||
+ ServerSocket serverSocket = new ServerSocket(0);
|
||||
try {
|
||||
- }
|
||||
- try {
|
||||
- WinDef.LPVOID data = attachLibrary.allocate_remote_argument(process,
|
||||
- name,
|
||||
- argument.length < 1 ? null : argument[0],
|
||||
@ -503,19 +426,12 @@ index 245581d..80cab63 100644
|
||||
- if (data == null) {
|
||||
- throw new Win32Exception(Native.getLastError());
|
||||
- }
|
||||
+ serverSocket.setSoTimeout(timeout);
|
||||
+ File receiver = new File(directory, target.getProperty("vmId"));
|
||||
+ String key = Long.toHexString(new SecureRandom().nextLong());
|
||||
+ File reply = new File(receiver, "replyInfo");
|
||||
try {
|
||||
- try {
|
||||
- WinNT.HANDLE thread = library.CreateRemoteThread(process, null, 0, code.getPointer(), data.getPointer(), null, null);
|
||||
- if (thread == null) {
|
||||
- throw new Win32Exception(Native.getLastError());
|
||||
+ if (reply.createNewFile()) {
|
||||
+ dispatcher.setPermissions(reply, 0600);
|
||||
}
|
||||
+ FileOutputStream outputStream = new FileOutputStream(reply);
|
||||
try {
|
||||
- }
|
||||
- try {
|
||||
- int result = Kernel32.INSTANCE.WaitForSingleObject(thread, WinBase.INFINITE);
|
||||
- if (result != 0) {
|
||||
- throw new Win32Exception(result);
|
||||
@ -524,7 +440,7 @@ index 245581d..80cab63 100644
|
||||
- if (!library.GetExitCodeThread(thread, exitCode)) {
|
||||
- throw new Win32Exception(Native.getLastError());
|
||||
- } else if (exitCode.getValue() != 0) {
|
||||
- throw new IllegalStateException("Target could not dispatch command successfully");
|
||||
- throw new IllegalStateException("Target VM could not dispatch command successfully: " + exitCode.getValue());
|
||||
- }
|
||||
- if (!Kernel32.INSTANCE.ConnectNamedPipe(pipe, null)) {
|
||||
- int code = Native.getLastError();
|
||||
@ -533,11 +449,7 @@ index 245581d..80cab63 100644
|
||||
- }
|
||||
- }
|
||||
- return new NamedPipeResponse(pipe);
|
||||
+ outputStream.write(key.getBytes("UTF-8"));
|
||||
+ outputStream.write("\n".getBytes("UTF-8"));
|
||||
+ outputStream.write(Long.toString(serverSocket.getLocalPort()).getBytes("UTF-8"));
|
||||
+ outputStream.write("\n".getBytes("UTF-8"));
|
||||
} finally {
|
||||
- } finally {
|
||||
- if (!Kernel32.INSTANCE.CloseHandle(thread)) {
|
||||
- throw new Win32Exception(Native.getLastError());
|
||||
- }
|
||||
@ -545,8 +457,7 @@ index 245581d..80cab63 100644
|
||||
- } finally {
|
||||
- if (!library.VirtualFreeEx(process, data.getPointer(), 0, MEM_RELEASE)) {
|
||||
- throw new Win32Exception(Native.getLastError());
|
||||
+ outputStream.close();
|
||||
}
|
||||
- }
|
||||
- }
|
||||
- } catch (Throwable throwable) {
|
||||
- if (!Kernel32.INSTANCE.CloseHandle(pipe)) {
|
||||
@ -1545,8 +1456,7 @@ index 245581d..80cab63 100644
|
||||
- boolean exited = false;
|
||||
- String line = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8")).readLine();
|
||||
- do {
|
||||
+ Map<RandomAccessFile, FileLock> locks = new HashMap<RandomAccessFile, FileLock>();
|
||||
try {
|
||||
- try {
|
||||
- if (process.exitValue() != 0) {
|
||||
- throw new IllegalStateException("Error while executing stat");
|
||||
- }
|
||||
@ -1558,20 +1468,7 @@ index 245581d..80cab63 100644
|
||||
- } catch (InterruptedException exception) {
|
||||
- Thread.currentThread().interrupt();
|
||||
- throw new IllegalStateException(exception);
|
||||
+ String pid = Long.toString(dispatcher.pid());
|
||||
+ for (Properties virtualMachine : virtualMachines) {
|
||||
+ if (!virtualMachine.getProperty("processId").equalsIgnoreCase(pid)) {
|
||||
+ String attachNotificationSync = virtualMachine.getProperty("attachNotificationSync");
|
||||
+ RandomAccessFile syncFile = new RandomAccessFile(attachNotificationSync == null
|
||||
+ ? new File(directory, "attachNotificationSync")
|
||||
+ : new File(attachNotificationSync), "rw");
|
||||
+ try {
|
||||
+ locks.put(syncFile, syncFile.getChannel().lock());
|
||||
+ } catch (IOException ignored) {
|
||||
+ syncFile.close();
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
- }
|
||||
- }
|
||||
- } while (--attempts > 0);
|
||||
- if (!exited) {
|
||||
@ -1631,19 +1528,7 @@ index 245581d..80cab63 100644
|
||||
- break;
|
||||
- } else {
|
||||
- throw exception;
|
||||
+ int notifications = 0;
|
||||
+ File[] item = directory.listFiles();
|
||||
+ if (item != null) {
|
||||
+ for (File anItem : item) {
|
||||
+ String name = anItem.getName();
|
||||
+ if (!name.startsWith(".trash_")
|
||||
+ && !name.equalsIgnoreCase("_attachlock")
|
||||
+ && !name.equalsIgnoreCase("_master")
|
||||
+ && !name.equalsIgnoreCase("_notifier")) {
|
||||
+ notifications += 1;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- } finally {
|
||||
@ -1933,22 +1818,10 @@ index 245581d..80cab63 100644
|
||||
- mutex = library.OpenMutex(WinNT.STANDARD_RIGHTS_REQUIRED | WinNT.SYNCHRONIZE | 0x0001, false, CREATION_MUTEX_NAME);
|
||||
- if (mutex == null) {
|
||||
- throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
|
||||
+ boolean global = Boolean.parseBoolean(target.getProperty("globalSemaphore"));
|
||||
+ dispatcher.incrementSemaphore(directory, "_notifier", global, notifications);
|
||||
+ try {
|
||||
+ Socket socket = serverSocket.accept();
|
||||
+ String answer = new String(read(socket), "UTF-8");
|
||||
+ if (answer.contains(' ' + key + ' ')) {
|
||||
+ return new ForOpenJ9(socket);
|
||||
+ } else {
|
||||
+ socket.close();
|
||||
+ throw new IllegalStateException("Unexpected answered to attachment: " + answer);
|
||||
}
|
||||
- }
|
||||
- } else {
|
||||
- throw new Win32Exception(lastError);
|
||||
+ } finally {
|
||||
+ dispatcher.decrementSemaphore(directory, "_notifier", global, notifications);
|
||||
}
|
||||
- }
|
||||
- }
|
||||
- int result = Kernel32.INSTANCE.WaitForSingleObject(mutex, 2000);
|
||||
- switch (result) {
|
||||
@ -1956,9 +1829,7 @@ index 245581d..80cab63 100644
|
||||
- case WinError.WAIT_TIMEOUT:
|
||||
- throw new Win32Exception(result);
|
||||
- default:
|
||||
+ } finally {
|
||||
+ for (Map.Entry<RandomAccessFile, FileLock> entry : locks.entrySet()) {
|
||||
try {
|
||||
- try {
|
||||
- String target = (global ? "Global\\" : "")
|
||||
- + (directory.getAbsolutePath() + '_' + name).replaceAll("[^a-zA-Z0-9_]", "")
|
||||
- + "_semaphore";
|
||||
@ -1983,62 +1854,27 @@ index 245581d..80cab63 100644
|
||||
- } finally {
|
||||
- if (!library.ReleaseMutex(mutex)) {
|
||||
- throw new Win32Exception(Native.getLastError());
|
||||
+ try {
|
||||
+ entry.getValue().release();
|
||||
+ } finally {
|
||||
+ entry.getKey().close();
|
||||
}
|
||||
+ } catch (Throwable ignored) {
|
||||
+ /* do nothing */
|
||||
}
|
||||
+ }
|
||||
}
|
||||
} finally {
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- } finally {
|
||||
- securityAttributes = null;
|
||||
+ if (!reply.delete()) {
|
||||
+ reply.deleteOnExit();
|
||||
+ }
|
||||
}
|
||||
} finally {
|
||||
- }
|
||||
- } finally {
|
||||
- securityDescriptor = null;
|
||||
+ serverSocket.close();
|
||||
}
|
||||
+ } finally {
|
||||
+ attachLockLock.release();
|
||||
}
|
||||
+ } finally {
|
||||
+ attachLock.close();
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- /**
|
||||
- * A library for interacting with Windows.
|
||||
- */
|
||||
- protected interface WindowsLibrary extends StdCallLibrary {
|
||||
+ /**
|
||||
+ * {@inheritDoc}
|
||||
+ */
|
||||
+ public Properties getSystemProperties() throws IOException {
|
||||
+ write(socket, "ATTACH_GETSYSTEMPROPERTIES".getBytes("UTF-8"));
|
||||
+ Properties properties = new Properties();
|
||||
+ properties.load(new ByteArrayInputStream(read(socket)));
|
||||
+ return properties;
|
||||
+ }
|
||||
|
||||
-
|
||||
- /**
|
||||
- * Indicates that a semaphore requires all access rights.
|
||||
- */
|
||||
- int SEMAPHORE_ALL_ACCESS = 0x1F0003;
|
||||
+ /**
|
||||
+ * {@inheritDoc}
|
||||
+ */
|
||||
+ public Properties getAgentProperties() throws IOException {
|
||||
+ write(socket, "ATTACH_GETAGENTPROPERTIES".getBytes("UTF-8"));
|
||||
+ Properties properties = new Properties();
|
||||
+ properties.load(new ByteArrayInputStream(read(socket)));
|
||||
+ return properties;
|
||||
+ }
|
||||
|
||||
-
|
||||
- /**
|
||||
- * Opens an existing semaphore.
|
||||
- *
|
||||
@ -2049,19 +1885,7 @@ index 245581d..80cab63 100644
|
||||
- */
|
||||
- @SuppressWarnings("checkstyle:methodname")
|
||||
- WinNT.HANDLE OpenSemaphoreW(int access, boolean inheritHandle, String name);
|
||||
+ /**
|
||||
+ * {@inheritDoc}
|
||||
+ */
|
||||
+ public void loadAgent(String jarFile, String argument) throws IOException {
|
||||
+ write(socket, ("ATTACH_LOADAGENT(instrument," + jarFile + '=' + (argument == null ? "" : argument) + ')').getBytes("UTF-8"));
|
||||
+ String answer = new String(read(socket), "UTF-8");
|
||||
+ if (answer.startsWith("ATTACH_ERR")) {
|
||||
+ throw new IllegalStateException("Target VM failed loading agent: " + answer);
|
||||
+ } else if (!answer.startsWith("ATTACH_ACK") && !answer.startsWith("ATTACH_RESULT=")) {
|
||||
+ throw new IllegalStateException("Unexpected response: " + answer);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
-
|
||||
- /**
|
||||
- * Creates a new semaphore.
|
||||
- *
|
||||
@ -2073,19 +1897,7 @@ index 245581d..80cab63 100644
|
||||
- */
|
||||
- @SuppressWarnings("checkstyle:methodname")
|
||||
- WinNT.HANDLE CreateSemaphoreW(WinBase.SECURITY_ATTRIBUTES securityAttributes, long count, long maximumCount, String name);
|
||||
+ /**
|
||||
+ * {@inheritDoc}
|
||||
+ */
|
||||
+ public void loadAgentPath(String path, String argument) throws IOException {
|
||||
+ write(socket, ("ATTACH_LOADAGENTPATH(" + path + (argument == null ? "" : (',' + argument)) + ')').getBytes("UTF-8"));
|
||||
+ String answer = new String(read(socket), "UTF-8");
|
||||
+ if (answer.startsWith("ATTACH_ERR")) {
|
||||
+ throw new IllegalStateException("Target VM failed loading native agent: " + answer);
|
||||
+ } else if (!answer.startsWith("ATTACH_ACK") && !answer.startsWith("ATTACH_RESULT=")) {
|
||||
+ throw new IllegalStateException("Unexpected response: " + answer);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
-
|
||||
- /**
|
||||
- * Releases the semaphore.
|
||||
- *
|
||||
@ -2096,19 +1908,7 @@ index 245581d..80cab63 100644
|
||||
- */
|
||||
- @SuppressWarnings("checkstyle:methodname")
|
||||
- boolean ReleaseSemaphore(WinNT.HANDLE handle, long count, Long previousCount);
|
||||
+ /**
|
||||
+ * {@inheritDoc}
|
||||
+ */
|
||||
+ public void loadAgentLibrary(String library, String argument) throws IOException {
|
||||
+ write(socket, ("ATTACH_LOADAGENTLIBRARY(" + library + (argument == null ? "" : (',' + argument)) + ')').getBytes("UTF-8"));
|
||||
+ String answer = new String(read(socket), "UTF-8");
|
||||
+ if (answer.startsWith("ATTACH_ERR")) {
|
||||
+ throw new IllegalStateException("Target VM failed loading native library: " + answer);
|
||||
+ } else if (!answer.startsWith("ATTACH_ACK") && !answer.startsWith("ATTACH_RESULT=")) {
|
||||
+ throw new IllegalStateException("Unexpected response: " + answer);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
-
|
||||
- /**
|
||||
- * Create or opens a mutex.
|
||||
- *
|
||||
@ -2119,22 +1919,7 @@ index 245581d..80cab63 100644
|
||||
- */
|
||||
- @SuppressWarnings("checkstyle:methodname")
|
||||
- WinNT.HANDLE CreateMutex(SecurityAttributes attributes, boolean owner, String name);
|
||||
+ /**
|
||||
+ * {@inheritDoc}
|
||||
+ */
|
||||
+ public void startManagementAgent(Properties properties) throws IOException {
|
||||
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
+ properties.store(outputStream, null);
|
||||
+ write(socket, "ATTACH_START_MANAGEMENT_AGENT".getBytes("UTF-8"));
|
||||
+ write(socket, outputStream.toByteArray());
|
||||
+ String answer = new String(read(socket), "UTF-8");
|
||||
+ if (answer.startsWith("ATTACH_ERR")) {
|
||||
+ throw new IllegalStateException("Target VM could not start management agent: " + answer);
|
||||
+ } else if (!answer.startsWith("ATTACH_ACK") && !answer.startsWith("ATTACH_RESULT=")) {
|
||||
+ throw new IllegalStateException("Unexpected response: " + answer);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
-
|
||||
- /**
|
||||
- * Opens an existing object.
|
||||
- *
|
||||
@ -2145,23 +1930,7 @@ index 245581d..80cab63 100644
|
||||
- */
|
||||
- @SuppressWarnings("checkstyle:methodname")
|
||||
- WinNT.HANDLE OpenMutex(int access, boolean inherit, String name);
|
||||
+ /**
|
||||
+ * {@inheritDoc}
|
||||
+ */
|
||||
+ public String startLocalManagementAgent() throws IOException {
|
||||
+ write(socket, "ATTACH_START_LOCAL_MANAGEMENT_AGENT".getBytes("UTF-8"));
|
||||
+ String answer = new String(read(socket), "UTF-8");
|
||||
+ if (answer.startsWith("ATTACH_ERR")) {
|
||||
+ throw new IllegalStateException("Target VM could not start management agent: " + answer);
|
||||
+ } else if (answer.startsWith("ATTACH_ACK")) {
|
||||
+ return answer.substring("ATTACH_ACK".length());
|
||||
+ } else if (answer.startsWith("ATTACH_RESULT=")) {
|
||||
+ return answer.substring("ATTACH_RESULT=".length());
|
||||
+ } else {
|
||||
+ throw new IllegalStateException("Unexpected response: " + answer);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
-
|
||||
- /**
|
||||
- * Releases the supplied mutex.
|
||||
- *
|
||||
@ -2170,18 +1939,7 @@ index 245581d..80cab63 100644
|
||||
- */
|
||||
- @SuppressWarnings("checkstyle:methodname")
|
||||
- boolean ReleaseMutex(WinNT.HANDLE handle);
|
||||
+ /**
|
||||
+ * {@inheritDoc}
|
||||
+ */
|
||||
+ public void detach() throws IOException {
|
||||
+ try {
|
||||
+ write(socket, "ATTACH_DETACH".getBytes("UTF-8"));
|
||||
+ read(socket); // The answer is intentionally ignored.
|
||||
+ } finally {
|
||||
+ socket.close();
|
||||
+ }
|
||||
+ }
|
||||
|
||||
-
|
||||
- /**
|
||||
- * A structure representing a mutex's security attributes.
|
||||
- */
|
||||
@ -2209,72 +1967,23 @@ index 245581d..80cab63 100644
|
||||
- return Arrays.asList("length", "securityDescriptor", "inherit");
|
||||
- }
|
||||
- }
|
||||
+ /**
|
||||
+ * Writes the supplied value to the target socket.
|
||||
+ *
|
||||
+ * @param socket The socket to write to.
|
||||
+ * @param value The value being written.
|
||||
+ * @throws IOException If an I/O exception occurs.
|
||||
+ */
|
||||
+ private static void write(Socket socket, byte[] value) throws IOException {
|
||||
+ socket.getOutputStream().write(value);
|
||||
+ socket.getOutputStream().write(0);
|
||||
+ socket.getOutputStream().flush();
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Reads a {@code '\0'}-terminated value from the target socket.
|
||||
+ *
|
||||
+ * @param socket The socket to read from.
|
||||
+ * @return The value that was read.
|
||||
+ * @throws IOException If an I/O exception occurs.
|
||||
+ */
|
||||
+ private static byte[] read(Socket socket) throws IOException {
|
||||
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
+ byte[] buffer = new byte[1024];
|
||||
+ int length;
|
||||
+ while ((length = socket.getInputStream().read(buffer)) != -1) {
|
||||
+ if (length > 0 && buffer[length - 1] == 0) {
|
||||
+ outputStream.write(buffer, 0, length - 1);
|
||||
+ break;
|
||||
+ } else {
|
||||
+ outputStream.write(buffer, 0, length);
|
||||
}
|
||||
+ }
|
||||
+ return outputStream.toByteArray();
|
||||
+ }
|
||||
|
||||
- }
|
||||
-
|
||||
- /**
|
||||
- * A handle for an attachment which is represented by a pair of handles.
|
||||
- */
|
||||
- protected static class AttachmentHandle implements Closeable {
|
||||
+ /**
|
||||
+ * A dispatcher for native operations being used for communication with an OpenJ9 virtual machine.
|
||||
+ */
|
||||
+ public interface Dispatcher {
|
||||
|
||||
-
|
||||
- /**
|
||||
- * The parent handle.
|
||||
- */
|
||||
- private final WinNT.HANDLE parent;
|
||||
+ /**
|
||||
+ * Returns this machine's temporary folder.
|
||||
+ *
|
||||
+ * @return The temporary folder.
|
||||
+ */
|
||||
+ String getTemporaryFolder();
|
||||
|
||||
-
|
||||
- /**
|
||||
- * The child handle.
|
||||
- */
|
||||
- private final WinNT.HANDLE child;
|
||||
+ /**
|
||||
+ * Returns the process id of this process.
|
||||
+ *
|
||||
+ * @return The process id of this process.
|
||||
+ */
|
||||
+ int pid();
|
||||
|
||||
-
|
||||
- /**
|
||||
- * Creates a new attachment handle.
|
||||
- *
|
||||
@ -2285,13 +1994,7 @@ index 245581d..80cab63 100644
|
||||
- this.parent = parent;
|
||||
- this.child = child;
|
||||
- }
|
||||
+ /**
|
||||
+ * Returns the user id of this process.
|
||||
+ *
|
||||
+ * @return The user id of this process
|
||||
+ */
|
||||
+ int userId();
|
||||
|
||||
-
|
||||
- /**
|
||||
- * Returns the handle on which signals are to be sent.
|
||||
- *
|
||||
@ -2300,14 +2003,7 @@ index 245581d..80cab63 100644
|
||||
- protected WinNT.HANDLE getHandle() {
|
||||
- return child;
|
||||
- }
|
||||
+ /**
|
||||
+ * Returns {@code true} if the supplied process id is a running process.
|
||||
+ *
|
||||
+ * @param processId The process id to evaluate.
|
||||
+ * @return {@code true} if the supplied process id is currently running.
|
||||
+ */
|
||||
+ boolean isExistingProcess(int processId);
|
||||
|
||||
-
|
||||
- /**
|
||||
- * {@inheritDoc}
|
||||
- */
|
||||
@ -2326,44 +2022,198 @@ index 245581d..80cab63 100644
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
+ /**
|
||||
+ * Returns the user id of the owner of the supplied file.
|
||||
+ *
|
||||
+ * @param file The file for which to locate the owner.
|
||||
+ * @return The owner id of the supplied file.
|
||||
+ */
|
||||
+ int getOwnerIdOf(File file);
|
||||
+
|
||||
+ /**
|
||||
+ * Sets permissions for the supplied file.
|
||||
+ *
|
||||
+ * @param file The file for which to set the permissions.
|
||||
+ * @param permissions The permission bits to set.
|
||||
+ */
|
||||
+ void setPermissions(File file, int permissions);
|
||||
+
|
||||
+ /**
|
||||
+ * Increments a semaphore.
|
||||
+ *
|
||||
+ * @param directory The sempahore's control directory.
|
||||
+ * @param name The semaphore's name.
|
||||
+ * @param global {@code true} if the semaphore is in the global namespace (only applicable on Windows).
|
||||
+ * @param count The amount of increments.
|
||||
+ */
|
||||
+ void incrementSemaphore(File directory, String name, boolean global, int count);
|
||||
+
|
||||
+ /**
|
||||
+ * Decrements a semaphore.
|
||||
+ *
|
||||
+ * @param directory The sempahore's control directory.
|
||||
+ * @param name The semaphore's name.
|
||||
+ * @param global {@code true} if the semaphore is in the global namespace (only applicable on Windows).
|
||||
+ * @param count The amount of decrements.
|
||||
+ */
|
||||
+ void decrementSemaphore(File directory, String name, boolean global, int count);
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/byte-buddy-dep/src/main/java/net/bytebuddy/dynamic/loading/ClassInjector.java b/byte-buddy-dep/src/main/java/net/bytebuddy/dynamic/loading/ClassInjector.java
|
||||
index 279b6497d2..a63ce63d5c 100644
|
||||
--- a/byte-buddy-dep/src/main/java/net/bytebuddy/dynamic/loading/ClassInjector.java
|
||||
+++ b/byte-buddy-dep/src/main/java/net/bytebuddy/dynamic/loading/ClassInjector.java
|
||||
@@ -15,8 +15,6 @@
|
||||
*/
|
||||
package net.bytebuddy.dynamic.loading;
|
||||
|
||||
-import com.sun.jna.*;
|
||||
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||
import net.bytebuddy.ByteBuddy;
|
||||
import net.bytebuddy.ClassFileVersion;
|
||||
import net.bytebuddy.asm.MemberRemoval;
|
||||
@@ -507,7 +505,6 @@ public interface ClassInjector {
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
- @SuppressFBWarnings(value = "REC_CATCH_EXCEPTION", justification = "Exception should not be rethrown but trigger a fallback")
|
||||
public Initializable run() {
|
||||
try {
|
||||
if (JavaModule.isSupported()) {
|
||||
@@ -583,7 +580,6 @@ public interface ClassInjector {
|
||||
* @return A direct dispatcher for class injection.
|
||||
* @throws Exception If the creation is impossible.
|
||||
*/
|
||||
- @SuppressFBWarnings(value = "DP_DO_INSIDE_DO_PRIVILEGED", justification = "Privilege is explicit caller responsibility")
|
||||
protected static Initializable make() throws Exception {
|
||||
Method getDefinedPackage;
|
||||
if (JavaModule.isSupported()) { // Avoid accidental lookup of method with same name in Java 8 J9 VM.
|
||||
@@ -888,7 +884,6 @@ public interface ClassInjector {
|
||||
* @return An indirect dispatcher for class creation.
|
||||
* @throws Exception If the dispatcher cannot be created.
|
||||
*/
|
||||
- @SuppressFBWarnings(value = "DP_DO_INSIDE_DO_PRIVILEGED", justification = "Privilege is explicit caller responsibility")
|
||||
protected static Initializable make() throws Exception {
|
||||
if (Boolean.getBoolean(UsingUnsafe.SAFE_PROPERTY)) {
|
||||
return new Initializable.Unavailable("Use of Unsafe was disabled by system property");
|
||||
@@ -1150,7 +1145,6 @@ public interface ClassInjector {
|
||||
* @return An appropriate initializable.
|
||||
* @throws Exception If the injector cannot be created.
|
||||
*/
|
||||
- @SuppressFBWarnings(value = "DP_DO_INSIDE_DO_PRIVILEGED", justification = "Privilege is explicit caller responsibility")
|
||||
protected static Initializable make() throws Exception {
|
||||
if (Boolean.getBoolean(UsingUnsafe.SAFE_PROPERTY)) {
|
||||
return new Initializable.Unavailable("Use of Unsafe was disabled by system property");
|
||||
@@ -1888,7 +1882,6 @@ public interface ClassInjector {
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
- @SuppressFBWarnings(value = "REC_CATCH_EXCEPTION", justification = "Exception should not be rethrown but trigger a fallback")
|
||||
public Initializable run() {
|
||||
if (Boolean.getBoolean(SAFE_PROPERTY)) {
|
||||
return new Unavailable("Use of Unsafe was disabled by system property");
|
||||
@@ -2093,7 +2086,6 @@ public interface ClassInjector {
|
||||
*
|
||||
* @param accessResolver The access resolver to use.
|
||||
*/
|
||||
- @SuppressFBWarnings(value = "REC_CATCH_EXCEPTION", justification = "Exception is captured to trigger lazy error upon use.")
|
||||
public Factory(AccessResolver accessResolver) {
|
||||
Dispatcher.Initializable dispatcher;
|
||||
if (DISPATCHER.isAvailable()) {
|
||||
@@ -2151,7 +2143,6 @@ public interface ClassInjector {
|
||||
* other classes within this class's module.
|
||||
* @return An appropriate injection strategy.
|
||||
*/
|
||||
- @SuppressFBWarnings(value = "REC_CATCH_EXCEPTION", justification = "Exception intends to trigger disabled injection strategy.")
|
||||
public static Factory resolve(Instrumentation instrumentation, boolean local) {
|
||||
if (ClassInjector.UsingUnsafe.isAvailable() || !JavaModule.isSupported()) {
|
||||
return new Factory();
|
||||
@@ -2733,85 +2724,18 @@ public interface ClassInjector {
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
- @SuppressWarnings("deprecation")
|
||||
public Dispatcher run() {
|
||||
if (System.getProperty("java.vm.name", "").toUpperCase(Locale.US).contains("J9")) {
|
||||
return new Unavailable("J9 does not support JNA-based class definition");
|
||||
}
|
||||
try {
|
||||
- Map<String, Object> options = new HashMap<String, Object>();
|
||||
- options.put(Library.OPTION_ALLOW_OBJECTS, Boolean.TRUE);
|
||||
- if (Platform.isWindows() && !Platform.is64Bit()) {
|
||||
- options.put(Library.OPTION_FUNCTION_MAPPER, Windows32BitFunctionMapper.INSTANCE);
|
||||
- }
|
||||
- return new Enabled(Native.loadLibrary("jvm", Jvm.class, options));
|
||||
+ return new Unavailable("JNA is not available");
|
||||
} catch (Throwable throwable) {
|
||||
return new Unavailable(throwable.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- /**
|
||||
- * A mapper for 32-bit Windows functions where names are defined with different convention.
|
||||
- */
|
||||
- enum Windows32BitFunctionMapper implements FunctionMapper {
|
||||
-
|
||||
- /**
|
||||
- * The singleton instance.
|
||||
- */
|
||||
- INSTANCE;
|
||||
-
|
||||
- /**
|
||||
- * {@inheritDoc}
|
||||
- */
|
||||
- public String getFunctionName(NativeLibrary library, Method method) {
|
||||
- if (method.getName().equals("JVM_DefineClass")) {
|
||||
- return "_JVM_DefineClass@24";
|
||||
- }
|
||||
- return method.getName();
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- /**
|
||||
- * An enabled dispatcher for JNA-based class injection.
|
||||
- */
|
||||
- @HashCodeAndEqualsPlugin.Enhance
|
||||
- class Enabled implements Dispatcher {
|
||||
-
|
||||
- /**
|
||||
- * The JNA-dispatcher to use for invoking JNI's class definition utilities.
|
||||
- */
|
||||
- private final Jvm jvm;
|
||||
-
|
||||
- /**
|
||||
- * Creates a new dispatcher for a JNI's class definition utilities.
|
||||
- *
|
||||
- * @param jvm The JNA-dispatcher to use for invoking JNI's class definition utilities.
|
||||
- */
|
||||
- protected Enabled(Jvm jvm) {
|
||||
- this.jvm = jvm;
|
||||
- }
|
||||
-
|
||||
- /**
|
||||
- * {@inheritDoc}
|
||||
- */
|
||||
- public boolean isAvailable() {
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- /**
|
||||
- * {@inheritDoc}
|
||||
- */
|
||||
- public Class<?> defineClass(ClassLoader classLoader, String name, byte[] binaryRepresentation, ProtectionDomain protectionDomain) {
|
||||
- return jvm.JVM_DefineClass(JNIEnv.CURRENT,
|
||||
- name.replace('.', '/'),
|
||||
- classLoader,
|
||||
- binaryRepresentation,
|
||||
- binaryRepresentation.length,
|
||||
- protectionDomain);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
/**
|
||||
* An unavailable dispatcher for JNA-based class injection.
|
||||
*/
|
||||
@@ -2846,32 +2770,6 @@ public interface ClassInjector {
|
||||
throw new UnsupportedOperationException("JNA is not available and JNA-based injection cannot be used: " + error);
|
||||
}
|
||||
}
|
||||
-
|
||||
- /**
|
||||
- * A JNA dispatcher for the JVM's <i>JVM_DefineClass</i> method.
|
||||
- */
|
||||
- interface Jvm extends Library {
|
||||
-
|
||||
- /**
|
||||
- * Defines a new class into a given class loader.
|
||||
- *
|
||||
- * @param env The JNI environment.
|
||||
- * @param name The internal name of the class.
|
||||
- * @param classLoader The class loader to inject into or {@code null} if injecting into the bootstrap loader.
|
||||
- * @param binaryRepresentation The class's binary representation.
|
||||
- * @param length The length of the class's binary representation.
|
||||
- * @param protectionDomain The protection domain or {@code null} if no explicit protection domain should be used.
|
||||
- * @return The class that was defined.
|
||||
- * @throws LastErrorException If an error occurs during injection.
|
||||
- */
|
||||
- @SuppressWarnings("checkstyle:methodname")
|
||||
- Class<?> JVM_DefineClass(JNIEnv env,
|
||||
- String name,
|
||||
- ClassLoader classLoader,
|
||||
- byte[] binaryRepresentation,
|
||||
- int length,
|
||||
- ProtectionDomain protectionDomain) throws LastErrorException;
|
||||
- }
|
||||
}
|
||||
}
|
||||
}
|
||||
--
|
||||
2.26.2
|
||||
2.31.1
|
||||
|
53
0004-Remove-JDK-15-sealed-classes.patch
Normal file
53
0004-Remove-JDK-15-sealed-classes.patch
Normal file
@ -0,0 +1,53 @@
|
||||
From b7b286c16c4aba60ce47e0df3f6e97cfb005b21c Mon Sep 17 00:00:00 2001
|
||||
From: Marian Koncek <mkoncek@redhat.com>
|
||||
Date: Tue, 9 Nov 2021 12:23:28 +0100
|
||||
Subject: [PATCH] Remove JDK 15 sealed classes
|
||||
|
||||
---
|
||||
.../bytebuddy/test/precompiled/Sealed.java | 34 -------------------
|
||||
1 file changed, 34 deletions(-)
|
||||
delete mode 100644 byte-buddy-dep/src/precompiled/java/net/bytebuddy/test/precompiled/Sealed.java
|
||||
|
||||
diff --git a/byte-buddy-dep/src/precompiled/java/net/bytebuddy/test/precompiled/Sealed.java b/byte-buddy-dep/src/precompiled/java/net/bytebuddy/test/precompiled/Sealed.java
|
||||
deleted file mode 100644
|
||||
index 28d9835..0000000
|
||||
--- a/byte-buddy-dep/src/precompiled/java/net/bytebuddy/test/precompiled/Sealed.java
|
||||
+++ /dev/null
|
||||
@@ -1,34 +0,0 @@
|
||||
-/*
|
||||
- * Copyright 2014 - Present Rafael Winterhalter
|
||||
- *
|
||||
- * Licensed under the Apache License, Version 2.0 (the "License");
|
||||
- * you may not use this file except in compliance with the License.
|
||||
- * You may obtain a copy of the License at
|
||||
- *
|
||||
- * http://www.apache.org/licenses/LICENSE-2.0
|
||||
- *
|
||||
- * Unless required by applicable law or agreed to in writing, software
|
||||
- * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
- * See the License for the specific language governing permissions and
|
||||
- * limitations under the License.
|
||||
- */
|
||||
-package net.bytebuddy.test.precompiled;
|
||||
-
|
||||
-public sealed class Sealed permits Sealed.SubNonSealed, Sealed.SubSealed, Sealed.SubFinal {
|
||||
-
|
||||
- public static non-sealed class SubNonSealed extends Sealed {
|
||||
- /* empty */
|
||||
- }
|
||||
-
|
||||
- public static sealed class SubSealed extends Sealed permits SubSealed.SubSubFinal {
|
||||
-
|
||||
- public static final class SubSubFinal extends SubSealed {
|
||||
- /* empty */
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- public static final class SubFinal extends Sealed {
|
||||
- /* empty */
|
||||
- }
|
||||
-}
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,8 +1,8 @@
|
||||
%bcond_with bootstrap
|
||||
|
||||
Name: byte-buddy
|
||||
Version: 1.10.20
|
||||
Release: 3%{?dist}
|
||||
Version: 1.12.0
|
||||
Release: 1%{?dist}
|
||||
Summary: Runtime code generation for the Java virtual machine
|
||||
License: ASL 2.0
|
||||
URL: http://bytebuddy.net/
|
||||
@ -11,8 +11,9 @@ Source0: %{name}-%{version}.tar.gz
|
||||
|
||||
# Patch the build to avoid bundling inside shaded jars
|
||||
Patch1: 0001-Avoid-bundling-asm.patch
|
||||
Patch2: 0002-Remove-dependency-on-jna.patch
|
||||
Patch2: 0002-Remove-dependencies.patch
|
||||
Patch3: 0003-Remove-Java-14-tests.patch
|
||||
Patch4: 0004-Remove-JDK-15-sealed-classes.patch
|
||||
|
||||
BuildRequires: maven-local
|
||||
%if %{with bootstrap}
|
||||
@ -78,8 +79,10 @@ This package contains API documentation for %{name}.
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
|
||||
rm byte-buddy-agent/src/test/java/net/bytebuddy/agent/VirtualMachineAttachmentTest.java
|
||||
rm byte-buddy-agent/src/test/java/net/bytebuddy/agent/VirtualMachineForOpenJ9Test.java
|
||||
|
||||
# Cause pre-compiled stuff to be re-compiled
|
||||
mv byte-buddy-dep/src/precompiled/java/net/bytebuddy/build/*.java \
|
||||
@ -105,6 +108,7 @@ mv byte-buddy-dep/src/precompiled/java/net/bytebuddy/test/precompiled/*.java \
|
||||
%pom_remove_plugin :jitwatch-jarscan-maven-plugin
|
||||
%pom_remove_plugin :clirr-maven-plugin
|
||||
%pom_remove_plugin :maven-release-plugin
|
||||
%pom_remove_plugin :nexus-staging-maven-plugin
|
||||
|
||||
# Avoid circural dependency
|
||||
%pom_remove_plugin :byte-buddy-maven-plugin byte-buddy-dep
|
||||
@ -124,8 +128,13 @@ sed -i -e '/SuppressFBWarnings/d' $(grep -lr SuppressFBWarnings)
|
||||
%pom_remove_plugin :maven-shade-plugin byte-buddy
|
||||
%pom_remove_plugin :maven-shade-plugin byte-buddy-benchmark
|
||||
|
||||
%pom_remove_dep :jna byte-buddy-agent
|
||||
%pom_remove_dep :jna-platform byte-buddy-agent
|
||||
%pom_remove_dep net.java.dev.jna:jna byte-buddy
|
||||
%pom_remove_dep net.java.dev.jna:jna byte-buddy-dep
|
||||
%pom_remove_dep net.java.dev.jna:jna byte-buddy-agent
|
||||
|
||||
%pom_remove_dep net.java.dev.jna:jna-platform byte-buddy
|
||||
%pom_remove_dep net.java.dev.jna:jna-platform byte-buddy-dep
|
||||
%pom_remove_dep net.java.dev.jna:jna-platform byte-buddy-agent
|
||||
|
||||
%build
|
||||
# Ignore test failures, there seems to be something different about the
|
||||
@ -152,6 +161,9 @@ sed -i -e '/SuppressFBWarnings/d' $(grep -lr SuppressFBWarnings)
|
||||
%license LICENSE NOTICE
|
||||
|
||||
%changelog
|
||||
* Tue Nov 09 2021 Marian Koncek <mkoncek@redhat.com> - 1.12.0-1
|
||||
- Update to upstream version 1.12.0
|
||||
|
||||
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.10.20-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (byte-buddy-1.10.20.tar.gz) = a1e19f8da58a4320896b4e322048e19c66d23e9c172e0a701f3293f580557b0c274dbe465a89a208af7173a2ca21077349ebfbbb4db8d928c3a12aa44c41bc0e
|
||||
SHA512 (byte-buddy-1.12.0.tar.gz) = a57d983920251f03b7d963d2525d94899d35298ba09a8b698e3f24e78a967b97fd1741f6e8ddda7613fffc4beee4a470e31615b49f9b9cdb12ff0e12391592f3
|
||||
|
Loading…
Reference in New Issue
Block a user