From 3ee74a45e1005dbb428ae8b2029d6b133cfa64cb Mon Sep 17 00:00:00 2001 From: sarps Date: Wed, 9 Oct 2024 21:35:28 +0200 Subject: [PATCH 01/20] 1.Make Ares compatible with Windows 2.Improve accuracy of ArchUnit tests --- pom.xml | 2 +- .../postcompile/CustomClassResolver.java | 1 + .../methods/file-system-access-methods.txt | 65 +- .../methods/network-access-methods.txt | 1319 ++++++++++++++++- .../archunit/methods/reflection-methods.txt | 194 ++- .../methods/thread-creation-methods.txt | 334 ++++- 6 files changed, 1840 insertions(+), 75 deletions(-) diff --git a/pom.xml b/pom.xml index d8995ef0..9e6bbaf1 100644 --- a/pom.xml +++ b/pom.xml @@ -446,7 +446,7 @@ 3.3.0 1 - -javaagent:${project.build.directory}/ares-2.0.0-SNAPSHOT-agent.jar -Xbootclasspath/a:${user.home}/.m2/repository/org/aspectj/aspectjrt/${aspectj.version}/aspectjrt-${aspectj.version}.jar + -javaagent:${project.build.directory}${file.separator}ares-2.0.0-SNAPSHOT-agent.jar -Xbootclasspath/a:${user.home}${file.separator}.m2${file.separator}repository${file.separator}org${file.separator}aspectj${file.separator}aspectjrt${file.separator}${aspectj.version}${file.separator}aspectjrt-${aspectj.version}.jar diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/CustomClassResolver.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/CustomClassResolver.java index a3ea5f8f..09cf5113 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/CustomClassResolver.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/CustomClassResolver.java @@ -30,6 +30,7 @@ private CustomClassResolver() { * @return The resolved class if it exists. */ public static Optional tryResolve(String typeName) { + // Advice definition uses Reflection and therefor should not be resolved if (typeName.startsWith("de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemAdviceDefinitions")) { return Optional.empty(); } diff --git a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/file-system-access-methods.txt b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/file-system-access-methods.txt index a9db91a5..3006af40 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/file-system-access-methods.txt +++ b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/file-system-access-methods.txt @@ -42,8 +42,9 @@ java.net.http.HttpResponse$BodyHandlers.ofFile(java.nio.file.Path, [Ljava.nio.fi java.net.http.HttpResponse$BodyHandlers.ofFileDownload(java.nio.file.Path, [Ljava.nio.file.OpenOption;) java.net.http.HttpResponse$BodySubscribers.ofFile(java.nio.file.Path) java.net.http.HttpResponse$BodySubscribers.ofFile(java.nio.file.Path, [Ljava.nio.file.OpenOption;) +java.nio.channels.AsynchronousFileChannel java.nio.channels.FileChannel -java.nio.file.Files +java.nio.file java.security.KeyStore$Builder.newInstance(java.io.File, java.security.KeyStore$ProtectionParameter) java.security.KeyStore$Builder.newInstance(java.lang.String, java.security.Provider, java.io.File, java.security.KeyStore$ProtectionParameter) java.security.KeyStore.getInstance(java.io.File, [C) @@ -182,42 +183,6 @@ javax.naming.spi.NamingManager.getObjectInstance(java.lang.Object, javax.naming. javax.naming.spi.NamingManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable) javax.naming.spi.NamingManager.getURLContext(java.lang.String, java.util.Hashtable) javax.print.ServiceUI.printDialog(java.awt.GraphicsConfiguration, int, int, [Ljavax.print.PrintService;, javax.print.PrintService, javax.print.DocFlavor, javax.print.attribute.PrintRequestAttributeSet) -javax.security.auth.PrivateCredentialPermission.(java.lang.String, java.lang.String) -javax.security.auth.Subject.(boolean, java.util.Set, java.util.Set, java.util.Set) -javax.security.auth.Subject.callAs(javax.security.auth.Subject, java.util.concurrent.Callable) -javax.security.auth.Subject.current() -javax.security.auth.Subject.doAs(javax.security.auth.Subject, java.security.PrivilegedAction) -javax.security.auth.Subject.doAs(javax.security.auth.Subject, java.security.PrivilegedExceptionAction) -javax.security.auth.Subject.doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedAction, java.security.AccessControlContext) -javax.security.auth.Subject.doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedExceptionAction, java.security.AccessControlContext) -javax.security.auth.Subject.getPrincipals(java.lang.Class) -javax.security.auth.Subject.getPrivateCredentials(java.lang.Class) -javax.security.auth.Subject.getPublicCredentials(java.lang.Class) -javax.security.auth.Subject.getSubject(java.security.AccessControlContext) -javax.security.auth.Subject.toString() -javax.security.auth.kerberos.KerberosKey.(javax.security.auth.kerberos.KerberosPrincipal, [C, java.lang.String) -javax.security.auth.kerberos.KerberosPrincipal.(java.lang.String) -javax.security.auth.kerberos.KerberosPrincipal.(java.lang.String, int) -javax.security.auth.kerberos.KerberosTicket.refresh() -javax.security.auth.kerberos.KeyTab.exists() -javax.security.auth.kerberos.KeyTab.getKeys(javax.security.auth.kerberos.KerberosPrincipal) -javax.security.auth.login.AppConfigurationEntry$LoginModuleControlFlag.toString() -javax.security.auth.login.LoginContext.(java.lang.String) -javax.security.auth.login.LoginContext.(java.lang.String, javax.security.auth.Subject) -javax.security.auth.login.LoginContext.(java.lang.String, javax.security.auth.Subject, javax.security.auth.callback.CallbackHandler) -javax.security.auth.login.LoginContext.(java.lang.String, javax.security.auth.Subject, javax.security.auth.callback.CallbackHandler, javax.security.auth.login.Configuration) -javax.security.auth.login.LoginContext.(java.lang.String, javax.security.auth.callback.CallbackHandler) -javax.security.auth.login.LoginContext.logout() -javax.security.auth.x500.X500Principal.(java.lang.String) -javax.security.auth.x500.X500Principal.(java.lang.String, java.util.Map) -javax.security.auth.x500.X500Principal.getName(java.lang.String, java.util.Map) -javax.security.sasl.Sasl.createSaslClient([Ljava.lang.String;, java.lang.String, java.lang.String, java.lang.String, java.util.Map, javax.security.auth.callback.CallbackHandler) -javax.security.sasl.Sasl.createSaslServer(java.lang.String, java.lang.String, java.lang.String, java.util.Map, javax.security.auth.callback.CallbackHandler) -javax.sql.rowset.spi.SyncFactory.getInstance(java.lang.String) -javax.sql.rowset.spi.SyncFactory.getRegisteredProviders() -javax.sql.rowset.spi.SyncFactory.registerProvider(java.lang.String) -javax.sql.rowset.spi.SyncFactory.unregisterProvider(java.lang.String) -javax.sql.rowset.spi.SyncProviderException.getSyncResolver() javax.swing.JFileChooser.() javax.swing.JFileChooser.(java.io.File) javax.swing.JFileChooser.(java.io.File, javax.swing.filechooser.FileSystemView) @@ -281,28 +246,6 @@ javax.xml.validation.SchemaFactory.newSchema(java.io.File) javax.xml.xpath.XPathFactory.newDefaultInstance() javax.xml.xpath.XPathFactory.newInstance() javax.xml.xpath.XPathFactory.newInstance(java.lang.String) -jdk.xml.internal.JdkProperty.(jdk.xml.internal.JdkProperty$ImplPropMap, java.lang.Class, java.lang.Object, jdk.xml.internal.JdkProperty$State) -jdk.xml.internal.JdkXmlFeatures.(boolean) -jdk.xml.internal.JdkXmlFeatures.update() -jdk.xml.internal.JdkXmlUtils.getCatalogFeatures(java.lang.String, java.lang.String, java.lang.String, java.lang.String) -jdk.xml.internal.JdkXmlUtils.getDOMDocument() -jdk.xml.internal.JdkXmlUtils.getDOMFactory(boolean) -jdk.xml.internal.JdkXmlUtils.getSAXFactory(boolean) -jdk.xml.internal.JdkXmlUtils.getSAXTransformFactory(boolean) -jdk.xml.internal.JdkXmlUtils.getXMLReader(boolean, boolean) -jdk.xml.internal.SecuritySupport.doesFileExist(java.io.File) -jdk.xml.internal.SecuritySupport.getErrorMessage(java.util.Locale, java.lang.String, java.lang.String, [Ljava.lang.Object;) -jdk.xml.internal.SecuritySupport.getFileInputStream(java.io.File) -jdk.xml.internal.SecuritySupport.getJAXPSystemProperty(java.lang.Class, java.lang.String, java.lang.String) -jdk.xml.internal.SecuritySupport.getJAXPSystemProperty(java.lang.String) -jdk.xml.internal.SecuritySupport.getResourceAsStream(java.lang.ClassLoader, java.lang.String) -jdk.xml.internal.SecuritySupport.getResourceAsStream(java.lang.String) -jdk.xml.internal.SecuritySupport.getResourceBundle(java.lang.String) -jdk.xml.internal.SecuritySupport.getResourceBundle(java.lang.String, java.util.Locale) -jdk.xml.internal.SecuritySupport.isDirectory(java.io.File) -jdk.xml.internal.SecuritySupport.isFileExists(java.io.File) -jdk.xml.internal.SecuritySupport.readConfig(java.lang.String) -jdk.xml.internal.SecuritySupport.readConfig(java.lang.String, boolean) org.xml.sax.helpers.ParserAdapter.() org.xml.sax.helpers.ParserFactory.makeParser() org.xml.sax.helpers.ParserFactory.makeParser(java.lang.String) @@ -361,10 +304,6 @@ sun.awt.shell.ShellFolder.renameTo(java.io.File) sun.awt.shell.ShellFolder.setLastModified(long) sun.awt.shell.ShellFolder.setReadOnly() sun.awt.shell.ShellFolderManager.checkFile(java.io.File, java.lang.SecurityManager) -sun.jvmstat.perfdata.monitor.protocol.file.FileMonitoredVm.(sun.jvmstat.monitor.VmIdentifier, int) -sun.jvmstat.perfdata.monitor.protocol.file.MonitoredHostProvider.getMonitoredVm(sun.jvmstat.monitor.VmIdentifier) -sun.jvmstat.perfdata.monitor.protocol.file.MonitoredHostProvider.getMonitoredVm(sun.jvmstat.monitor.VmIdentifier, int) -sun.jvmstat.perfdata.monitor.protocol.file.PerfDataBuffer.(sun.jvmstat.monitor.VmIdentifier) sun.launcher.LauncherHelper.checkAndLoadMain(boolean, int, java.lang.String) sun.net.httpserver.simpleserver.FileServerHandler.(java.nio.file.Path, java.util.function.UnaryOperator) sun.net.httpserver.simpleserver.FileServerHandler.create(java.nio.file.Path, java.util.function.UnaryOperator) diff --git a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/network-access-methods.txt b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/network-access-methods.txt index 84cdc663..367dd5cc 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/network-access-methods.txt +++ b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/network-access-methods.txt @@ -1,7 +1,1312 @@ -java.net -java.net.http -javax.net -javax.net.ssl -com.sun.net.httpserver -sun.net.httpserver -jdk.net \ No newline at end of file +java.net.URLClassLoader.findResource(java.lang.String) +java.net.Inet6Address.getAddress() +java.net.Inet6Address.getScopeId() +java.net.Inet6Address.getScopedInterface() +java.net.Inet6Address.isLoopbackAddress() +java.net.Inet6Address.equals(java.lang.Object) +java.net.Inet6Address.isLinkLocalAddress() +java.net.Inet6Address.hashCode() +java.net.Inet6Address.isSiteLocalAddress() +java.net.Inet6Address.isMCNodeLocal() +java.net.Inet6Address.isMCSiteLocal() +java.net.Inet6Address.isAnyLocalAddress() +java.net.Inet6Address.isMCLinkLocal() +java.net.Inet6Address.isMCGlobal() +java.net.Inet6Address.isMulticastAddress() +java.net.Inet6Address.isIPv4CompatibleAddress() +java.net.Inet6Address.getHostAddress() +java.net.Inet6Address.isMCOrgLocal() +java.net.ProxySelector.of(java.net.InetSocketAddress) +java.net.Proxy.type() +java.net.Proxy.<init>(java.net.Proxy$Type, java.net.SocketAddress) +java.net.Proxy.address() +java.net.Socket.<init>(java.net.Proxy) +java.net.URL.openConnection(java.net.Proxy) +sun.net.NetworkClient.<init>() +sun.net.NetworkClient.<init>(java.lang.String, int) +sun.net.www.http.HttpClient.New(java.net.URL, java.net.Proxy, int, boolean, sun.net.www.protocol.http.HttpURLConnection) +sun.net.www.http.HttpClient.New(java.net.URL) +sun.net.www.http.HttpClient.New(java.net.URL, boolean) +sun.net.www.http.HttpClient.<init>(java.net.URL, java.lang.String, int, boolean, int) +sun.net.www.protocol.ftp.FtpURLConnection.connect() +java.net.Proxy.equals(java.lang.Object) +java.net.Proxy.hashCode() +java.net.Proxy.toString() +sun.net.www.protocol.http.HttpURLConnection.usingProxy() +sun.net.www.http.HttpClient.getProxyHostUsed() +sun.net.www.http.HttpClient.getProxyPortUsed() +sun.net.www.protocol.http.HttpURLConnection.<init>(java.net.URL, java.lang.String, int) +java.net.InetSocketAddress.hashCode() +java.net.InetSocketAddress.equals(java.lang.Object) +java.net.InetSocketAddress.toString() +java.net.InetSocketAddress.getAddress() +java.net.InetSocketAddress.isUnresolved() +java.net.InetSocketAddress.getPort() +java.net.InetSocketAddress.getHostName() +java.net.InetSocketAddress.getHostString() +java.net.InetSocketAddress.<init>(java.net.InetAddress, int) +java.net.InetSocketAddress.<init>(java.lang.String, int) +java.net.BindException.<init>(java.lang.String) +java.net.ConnectException.<init>(java.lang.String) +java.net.DatagramSocket.setDatagramSocketImplFactory(java.net.DatagramSocketImplFactory) +java.net.NetworkInterface.networkInterfaces() +java.net.NetworkInterface.getNetworkInterfaces() +java.net.NoRouteToHostException.<init>(java.lang.String) +java.net.PortUnreachableException.<init>(java.lang.String) +java.net.ServerSocket.getReuseAddress() +java.net.ServerSocket.getSoTimeout() +java.net.ServerSocket.accept() +java.net.ServerSocket.bind(java.net.SocketAddress, int) +java.net.ServerSocket.setReceiveBufferSize(int) +java.net.ServerSocket.getReceiveBufferSize() +java.net.ServerSocket.setReuseAddress(boolean) +java.net.ServerSocket.setSoTimeout(int) +java.net.ServerSocket.setSocketFactory(java.net.SocketImplFactory) +java.net.ServerSocket.setOption(java.net.SocketOption, java.lang.Object) +java.net.ServerSocket.getOption(java.net.SocketOption) +java.net.Socket.getOutputStream() +java.net.Socket.setOOBInline(boolean) +java.net.Socket.setSocketImplFactory(java.net.SocketImplFactory) +java.net.Socket.setSoLinger(boolean, int) +java.net.Socket.setTcpNoDelay(boolean) +java.net.Socket.setReuseAddress(boolean) +java.net.Socket.getTcpNoDelay() +java.net.Socket.shutdownInput() +java.net.Socket.getSoLinger() +java.net.Socket.getReceiveBufferSize() +java.net.Socket.getOption(java.net.SocketOption) +java.net.Socket.shutdownOutput() +java.net.Socket.setSendBufferSize(int) +java.net.Socket.bind(java.net.SocketAddress) +java.net.Socket.setOption(java.net.SocketOption, java.lang.Object) +java.net.Socket.setTrafficClass(int) +java.net.Socket.connect(java.net.SocketAddress, int) +java.net.Socket.sendUrgentData(int) +java.net.Socket.getOOBInline() +java.net.Socket.getReuseAddress() +java.net.Socket.getInputStream() +java.net.Socket.getSoTimeout() +java.net.Socket.getSendBufferSize() +java.net.Socket.setKeepAlive(boolean) +java.net.Socket.getKeepAlive() +java.net.Socket.setSoTimeout(int) +java.net.Socket.setReceiveBufferSize(int) +java.rmi.server.RMISocketFactory.setSocketFactory(java.rmi.server.RMISocketFactory) +javax.net.ServerSocketFactory.createServerSocket() +sun.net.ConnectionResetException.<init>(java.lang.String) +sun.net.ResourceManager.beforeUdpCreate() +sun.nio.ch.DatagramSocketAdaptor.getInterface() +sun.nio.ch.DatagramSocketAdaptor.receive(java.net.DatagramPacket) +sun.nio.ch.DatagramSocketAdaptor.getSoTimeout() +sun.nio.ch.DatagramSocketAdaptor.leaveGroup(java.net.SocketAddress, java.net.NetworkInterface) +sun.nio.ch.DatagramSocketAdaptor.setInterface(java.net.InetAddress) +sun.nio.ch.DatagramSocketAdaptor.joinGroup(java.net.SocketAddress, java.net.NetworkInterface) +sun.nio.ch.DatagramSocketAdaptor.setSoTimeout(int) +sun.nio.ch.NioSocketImpl.getOption(int) +sun.nio.ch.NioSocketImpl.setOption(int, java.lang.Object) +sun.security.ssl.SSLSocketImpl.connect(java.net.SocketAddress, int) +sun.security.ssl.SSLSocketImpl.getInputStream() +sun.security.ssl.SSLSocketImpl.getOutputStream() +javax.net.SocketFactory.createSocket() +sun.nio.ch.DatagramSocketAdaptor.joinGroup(java.net.InetAddress) +sun.nio.ch.DatagramSocketAdaptor.leaveGroup(java.net.InetAddress) +sun.nio.ch.DatagramSocketAdaptor.send(java.net.DatagramPacket) +java.net.BindException.<init>() +java.net.ConnectException.<init>() +java.net.NoRouteToHostException.<init>() +java.net.PortUnreachableException.<init>() +sun.net.ConnectionResetException.<init>() +java.net.URLPermission.equals(java.lang.Object) +java.net.URLPermission.hashCode() +java.net.URLPermission.implies(java.security.Permission) +java.net.URLDecoder.decode(java.lang.String) +com.sun.jndi.toolkit.url.UrlUtil.decode(java.lang.String, java.lang.String) +java.net.URLDecoder.decode(java.lang.String, java.lang.String) +java.net.JarURLConnection.getJarEntry() +java.net.JarURLConnection.getEntryName() +java.net.JarURLConnection.getJarFileURL() +sun.net.www.protocol.jar.JarURLConnection.getPermission() +sun.net.www.protocol.jar.JarURLConnection.setAllowUserInteraction(boolean) +sun.net.www.protocol.jar.JarURLConnection.getDefaultUseCaches() +sun.net.www.protocol.jar.JarURLConnection.getRequestProperties() +sun.net.www.protocol.jar.JarURLConnection.getContentLengthLong() +sun.net.www.protocol.jar.JarURLConnection.getAllowUserInteraction() +sun.net.www.protocol.jar.JarURLConnection.getUseCaches() +sun.net.www.protocol.jar.JarURLConnection.setIfModifiedSince(long) +sun.net.www.protocol.jar.JarURLConnection.setDefaultUseCaches(boolean) +sun.net.www.protocol.jar.JarURLConnection.getHeaderField(java.lang.String) +sun.net.www.protocol.jar.JarURLConnection.setUseCaches(boolean) +sun.net.www.protocol.jar.JarURLConnection.addRequestProperty(java.lang.String, java.lang.String) +sun.net.www.protocol.jar.JarURLConnection.setRequestProperty(java.lang.String, java.lang.String) +sun.net.www.protocol.jar.JarURLConnection.getRequestProperty(java.lang.String) +sun.net.www.protocol.jar.JarURLConnection.connect() +sun.net.www.protocol.jar.JarURLConnection.<init>(java.net.URL, sun.net.www.protocol.jar.Handler) +jdk.internal.loader.URLClassPath.check(java.net.URL) +java.net.JarURLConnection.getManifest() +java.net.URLClassLoader.getResourceAsStream(java.lang.String) +java.net.JarURLConnection.getMainAttributes() +java.net.JarURLConnection.getAttributes() +java.net.JarURLConnection.getCertificates() +java.util.ResourceBundle$Control.needsReload(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, java.util.ResourceBundle, long) +sun.net.www.protocol.jar.JarURLConnection.getInputStream() +sun.net.www.protocol.jar.JarURLConnection.getContent() +sun.net.www.protocol.jar.JarURLConnection.getContentType() +java.net.URLClassLoader.findResources(java.lang.String) +java.net.MulticastSocket.joinGroup(java.net.InetAddress) +java.net.MulticastSocket.leaveGroup(java.net.InetAddress) +java.net.MulticastSocket.getInterface() +java.net.MulticastSocket.setNetworkInterface(java.net.NetworkInterface) +java.net.MulticastSocket.send(java.net.DatagramPacket, byte) +java.net.MulticastSocket.setTTL(byte) +java.net.MulticastSocket.getTimeToLive() +java.net.MulticastSocket.getTTL() +java.net.MulticastSocket.setTimeToLive(int) +java.net.MulticastSocket.setLoopbackMode(boolean) +java.net.MulticastSocket.getNetworkInterface() +java.net.MulticastSocket.setInterface(java.net.InetAddress) +java.net.MulticastSocket.getLoopbackMode() +java.net.MulticastSocket.<init>(java.net.SocketAddress) +java.net.MulticastSocket.<init>(int) +java.net.MulticastSocket.<init>() +java.net.Inet6Address.getByAddress(java.lang.String, [B, java.net.NetworkInterface) +java.net.Inet6Address.getByAddress(java.lang.String, [B, int) +java.net.InetAddress.getAllByName(java.lang.String) +java.net.InetAddress.getByAddress(java.lang.String, [B) +java.net.InetAddress.getLocalHost() +java.net.InetAddress.getCanonicalHostName() +java.net.NetworkInterface.getByInetAddress(java.net.InetAddress) +java.net.InetAddress.isReachable(java.net.NetworkInterface, int, int) +java.net.InetAddress.getLoopbackAddress() +java.net.InetAddress.getByName(java.lang.String) +sun.security.krb5.internal.HostAddresses.<init>(sun.security.krb5.PrincipalName) +java.net.InetAddress.toString() +java.net.Inet4Address.getAddress() +java.net.Inet4Address.hashCode() +java.net.Inet4Address.isSiteLocalAddress() +java.net.Inet4Address.isMulticastAddress() +java.net.Inet4Address.isLinkLocalAddress() +java.net.Inet4Address.equals(java.lang.Object) +java.net.Inet4Address.isMCOrgLocal() +java.net.Inet4Address.isAnyLocalAddress() +java.net.Inet4Address.isMCLinkLocal() +java.net.Inet4Address.isMCSiteLocal() +java.net.Socket.getLocalAddress() +sun.nio.ch.DatagramSocketAdaptor.getLocalSocketAddress() +sun.rmi.registry.RegistryImpl.checkAccess(java.lang.String) +java.net.InetAddress.isReachable(int) +java.net.InetAddress.getHostName() +sun.security.krb5.internal.HostAddress.getInetAddress() +sun.security.krb5.internal.HostAddress.<init>(int, [B) +sun.security.x509.IPAddressName.getName() +java.net.NetworkInterface.equals(java.lang.Object) +org.ietf.jgss.ChannelBinding.equals(java.lang.Object) +sun.security.krb5.PrincipalName.<init>(java.lang.String, int, java.lang.String) +com.sun.tools.jdi.SocketTransportService.attach(java.lang.String, long, long) +java.net.ServerSocket.getInetAddress() +javax.management.MBeanServerDelegate.getMBeanServerId() +javax.management.remote.JMXServiceURL.<init>(java.lang.String, java.lang.String, int, java.lang.String) +sun.net.util.IPAddressUtil.toScopedAddress(java.net.InetAddress) +java.net.InetAddress.getByAddress([B) +java.lang.SecurityManager.checkMulticast(java.net.InetAddress, byte) +java.lang.SecurityManager.checkMulticast(java.net.InetAddress) +java.net.NetworkInterface.getInterfaceAddresses() +java.rmi.registry.LocateRegistry.getRegistry(java.lang.String, int, java.rmi.server.RMIClientSocketFactory) +sun.management.jmxremote.ConnectorBootstrap.startLocalConnectorServer() +sun.nio.ch.DatagramSocketAdaptor.getLocalAddress() +com.sun.jndi.dns.DnsClient.<init>([Ljava.lang.String;, int, int) +java.net.Socket.<init>(java.lang.String, int, boolean) +java.net.Socket.<init>(java.lang.String, int, java.net.InetAddress, int) +java.net.Socket.<init>(java.lang.String, int) +jdk.internal.joptsimple.util.InetAddressConverter.convert(java.lang.String) +sun.net.www.protocol.http.HttpCallerInfo.<init>(java.net.URL, java.security.cert.X509Certificate, java.net.Authenticator) +sun.security.krb5.internal.HostAddresses.getLocalAddresses() +java.net.InterfaceAddress.hashCode() +org.ietf.jgss.ChannelBinding.hashCode() +sun.security.krb5.internal.HostAddress.<init>() +sun.security.krb5.internal.HostAddress.<init>(java.net.InetAddress) +javax.security.auth.kerberos.KerberosTicket.toString() +sun.management.jdp.JdpBroadcaster.<init>(java.net.InetAddress, java.net.InetAddress, int, int) +java.net.InetSocketAddress.<init>(int) +java.net.CookieHandler.setDefault(java.net.CookieHandler) +java.net.CookieHandler.getDefault() +java.net.CookieManager.<init>(java.net.CookieStore, java.net.CookiePolicy) +java.net.URLClassLoader.close() +java.net.URLClassLoader.getURLs() +java.net.URLClassLoader.<init>([Ljava.net.URL;, java.lang.ClassLoader, java.net.URLStreamHandlerFactory) +java.net.URLClassLoader.<init>(java.lang.String, [Ljava.net.URL;, java.lang.ClassLoader, java.net.URLStreamHandlerFactory) +java.net.URLClassLoader.<init>(java.lang.String, [Ljava.net.URL;, java.lang.ClassLoader) +java.net.URLClassLoader.<init>([Ljava.net.URL;, java.lang.ClassLoader) +java.net.URLClassLoader.<init>([Ljava.net.URL;) +javax.management.loading.MLet.addURL(java.lang.String) +javax.management.loading.MLet.addURL(java.net.URL) +com.sun.org.apache.bcel.internal.util.ModularRuntimeImage.close() +com.sun.naming.internal.VersionHelper.loadClass(java.lang.String, java.lang.String) +sun.jvm.hotspot.SALauncherLoader.loadClass(java.lang.String, boolean) +com.sun.media.sound.JARSoundbankReader.getSoundbank(java.net.URL) +com.sun.org.apache.bcel.internal.util.ModularRuntimeImage.<init>(java.lang.String) +javax.management.loading.MLet.getURLs() +sun.rmi.server.LoaderHandler.getClassAnnotation(java.lang.Class) +sun.rmi.server.LoaderHandler.getSecurityContext(java.lang.ClassLoader) +javax.management.loading.MLet.<init>([Ljava.net.URL;, java.lang.ClassLoader, java.net.URLStreamHandlerFactory, boolean) +javax.management.loading.MLet.<init>([Ljava.net.URL;, java.lang.ClassLoader, boolean) +sun.jvm.hotspot.SALauncherLoader.<init>(java.lang.ClassLoader) +javax.management.loading.MLet.<init>([Ljava.net.URL;, boolean) +sun.rmi.registry.RegistryImpl.createRegistry(int) +sun.security.tools.jarsigner.Main.run([Ljava.lang.String;) +jdk.internal.net.http.common.Utils.permissionForProxy(java.net.InetSocketAddress) +jdk.internal.net.http.common.Utils.resolveAddress(java.net.InetSocketAddress) +jdk.internal.net.http.common.Utils.getServerName(java.net.InetSocketAddress) +java.net.InetSocketAddress.createUnresolved(java.lang.String, int) +java.net.DatagramPacket.setSocketAddress(java.net.SocketAddress) +sun.net.util.IPAddressUtil.toScopedAddress(java.net.InetSocketAddress) +sun.nio.ch.DatagramSocketAdaptor.getInetAddress() +sun.nio.ch.Net.checkAddress(java.net.SocketAddress) +sun.net.ftp.impl.FtpClient.startSecureSession() +sun.nio.ch.DatagramSocketAdaptor.getLocalPort() +sun.nio.ch.DatagramSocketAdaptor.getPort() +java.net.DatagramPacket.getSocketAddress() +java.net.DatagramSocket.<init>(int, java.net.InetAddress) +java.net.ServerSocket.getLocalSocketAddress() +java.net.ServerSocket.<init>(int, int, java.net.InetAddress) +java.net.Socket.getRemoteSocketAddress() +java.net.Socket.getLocalSocketAddress() +java.net.Socket.<init>(java.net.InetAddress, int, java.net.InetAddress, int) +java.net.Socket.<init>(java.net.InetAddress, int, boolean) +java.net.Socket.<init>(java.net.InetAddress, int) +sun.management.jdp.JdpBroadcaster.sendPacket(sun.management.jdp.JdpPacket) +sun.nio.ch.DatagramSocketAdaptor.connect(java.net.InetAddress, int) +sun.nio.ch.Net.localAddress(java.io.FileDescriptor) +java.net.DatagramSocket.<init>() +sun.nio.ch.DatagramSocketAdaptor.bind(java.net.SocketAddress) +sun.net.ftp.FtpClient.create(java.lang.String) +java.net.URLEncoder.encode(java.lang.String, java.nio.charset.Charset) +java.net.URLEncoder.encode(java.lang.String) +java.net.URLEncoder.encode(java.lang.String, java.lang.String) +sun.security.provider.certpath.OCSP.getOCSPBytes(java.util.List, java.net.URI, java.util.List) +java.net.Socket.getTrafficClass() +java.net.Authenticator$RequestorType.values() +sun.net.www.protocol.http.HttpCallerInfo.<init>(java.net.URL, java.lang.String, int, java.security.cert.X509Certificate, java.net.Authenticator) +java.net.DatagramSocket.connect(java.net.SocketAddress) +java.net.DatagramSocket.getLocalSocketAddress() +java.net.DatagramSocket.setSendBufferSize(int) +java.net.DatagramSocket.getReuseAddress() +java.net.DatagramSocket.isClosed() +java.net.DatagramSocket.getInetAddress() +java.net.DatagramSocket.getBroadcast() +java.net.DatagramSocket.setTrafficClass(int) +java.net.DatagramSocket.getSoTimeout() +java.net.DatagramSocket.setReceiveBufferSize(int) +java.net.DatagramSocket.setBroadcast(boolean) +java.net.DatagramSocket.getPort() +java.net.DatagramSocket.setOption(java.net.SocketOption, java.lang.Object) +jdk.net.Sockets.setOption(java.net.DatagramSocket, java.net.SocketOption, java.lang.Object) +java.net.DatagramSocket.send(java.net.DatagramPacket) +java.net.DatagramSocket.bind(java.net.SocketAddress) +java.net.DatagramSocket.<init>(java.net.SocketAddress) +java.net.DatagramSocket.getLocalAddress() +java.net.DatagramSocket.getSendBufferSize() +java.net.DatagramSocket.getLocalPort() +java.net.DatagramSocket.setSoTimeout(int) +java.net.DatagramSocket.close() +java.net.DatagramSocket.getRemoteSocketAddress() +java.net.DatagramSocket.receive(java.net.DatagramPacket) +java.net.DatagramSocket.joinGroup(java.net.SocketAddress, java.net.NetworkInterface) +java.net.DatagramSocket.supportedOptions() +java.net.DatagramSocket.isConnected() +java.net.DatagramSocket.isBound() +java.net.DatagramSocket.leaveGroup(java.net.SocketAddress, java.net.NetworkInterface) +java.net.DatagramSocket.disconnect() +java.net.DatagramSocket.getOption(java.net.SocketOption) +java.net.DatagramSocket.getReceiveBufferSize() +java.net.DatagramSocket.connect(java.net.InetAddress, int) +java.net.DatagramSocket.getTrafficClass() +java.net.DatagramSocket.setReuseAddress(boolean) +java.net.MulticastSocket.joinGroup(java.net.SocketAddress, java.net.NetworkInterface) +java.net.MulticastSocket.leaveGroup(java.net.SocketAddress, java.net.NetworkInterface) +jdk.net.Sockets.getOption(java.net.DatagramSocket, java.net.SocketOption) +java.net.DatagramSocket.<init>(int) +java.net.ServerSocket.close() +java.net.ServerSocket.<init>() +java.net.ServerSocket.toString() +java.net.ServerSocket.isClosed() +java.net.ServerSocket.supportedOptions() +java.net.ServerSocket.isBound() +com.sun.tools.jdi.SocketTransportService.accept(com.sun.jdi.connect.spi.TransportService$ListenKey, long, long) +java.net.ServerSocket.getLocalPort() +java.net.ServerSocket.bind(java.net.SocketAddress) +com.sun.tools.jdi.SocketTransportService.stopListening(com.sun.jdi.connect.spi.TransportService$ListenKey) +jdk.net.Sockets.setOption(java.net.ServerSocket, java.net.SocketOption, java.lang.Object) +jdk.net.Sockets.getOption(java.net.ServerSocket, java.net.SocketOption) +java.net.ServerSocket.<init>(int, int) +java.net.ServerSocket.<init>(int) +sun.rmi.transport.tcp.TCPDirectSocketFactory.createServerSocket(int) +java.net.URL.equals(java.lang.Object) +java.net.URL.toExternalForm() +java.net.URL.hashCode() +java.net.URL.sameFile(java.net.URL) +java.net.URL.<init>(java.net.URL, java.lang.String, java.net.URLStreamHandler) +java.net.URL.getDefaultPort() +java.net.URL.openConnection() +sun.net.www.protocol.file.Handler.<init>() +sun.net.www.protocol.ftp.Handler.<init>() +sun.net.www.protocol.http.Handler.<init>() +sun.net.www.protocol.http.Handler.<init>(java.lang.String, int) +sun.net.www.protocol.jar.Handler.<init>() +sun.net.www.protocol.jmod.Handler.<init>() +sun.net.www.protocol.jrt.Handler.<init>() +sun.net.www.protocol.mailto.Handler.<init>() +java.net.Proxy$Type.values() +java.net.SecureCacheResponse.<init>() +java.net.ResponseCache.getDefault() +java.net.ResponseCache.setDefault(java.net.ResponseCache) +sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getLocalCertificates() +sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getCipherSuite() +sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getServerCertificates() +java.net.URLClassLoader.newInstance([Ljava.net.URL;, java.lang.ClassLoader) +sun.nio.ch.SelectorProviderImpl.openServerSocketChannel(java.net.ProtocolFamily) +sun.nio.ch.SelectorProviderImpl.openSocketChannel(java.net.ProtocolFamily) +java.net.StandardProtocolFamily.values() +java.nio.channels.SocketChannel.open(java.net.SocketAddress) +java.net.SocketPermission.hashCode() +java.net.SocketPermission.equals(java.lang.Object) +java.net.SocketPermission.getActions() +java.net.SocketPermission.implies(java.security.Permission) +java.net.SocketPermission.<init>(java.lang.String, java.lang.String) +java.lang.SecurityManager.checkAccept(java.lang.String, int) +java.lang.SecurityManager.checkListen(int) +java.lang.SecurityManager.checkConnect(java.lang.String, int) +java.lang.SecurityManager.checkConnect(java.lang.String, int, java.lang.Object) +java.net.HttpURLConnection.getPermission() +sun.net.www.protocol.ftp.FtpURLConnection.getPermission() +sun.net.www.protocol.mailto.MailToURLConnection.getPermission() +sun.rmi.registry.RegistryImpl.<init>(int, java.rmi.server.RMIClientSocketFactory, java.rmi.server.RMIServerSocketFactory, java.io.ObjectInputFilter) +sun.rmi.registry.RegistryImpl.<init>(int) +java.net.IDN.toASCII(java.lang.String, int) +java.net.IDN.toUnicode(java.lang.String, int) +java.net.IDN.toASCII(java.lang.String) +javax.net.ssl.SNIHostName.<init>(java.lang.String) +javax.net.ssl.SNIHostName.<init>([B) +java.net.IDN.toUnicode(java.lang.String) +java.net.DatagramPacket.setData([B, int, int) +java.net.DatagramPacket.setData([B) +java.net.DatagramPacket.setLength(int) +java.net.DatagramPacket.getPort() +java.net.DatagramPacket.setPort(int) +java.net.DatagramPacket.getAddress() +java.net.DatagramPacket.setAddress(java.net.InetAddress) +java.net.DatagramPacket.getOffset() +java.net.DatagramPacket.getLength() +java.net.DatagramPacket.getData() +java.net.DatagramPacket.<init>([B, int, int, java.net.SocketAddress) +java.net.DatagramPacket.<init>([B, int, int, java.net.InetAddress, int) +java.net.DatagramPacket.<init>([B, int, int) +java.net.DatagramPacket.<init>([B, int) +java.net.DatagramPacket.<init>([B, int, java.net.InetAddress, int) +java.net.DatagramPacket.<init>([B, int, java.net.SocketAddress) +java.net.CookieManager.put(java.net.URI, java.util.Map) +java.net.CookieManager.get(java.net.URI, java.util.Map) +java.net.InterfaceAddress.equals(java.lang.Object) +java.net.InterfaceAddress.toString() +java.net.InterfaceAddress.getAddress() +java.net.InterfaceAddress.getBroadcast() +java.net.InterfaceAddress.getNetworkPrefixLength() +java.net.URI.getHost() +java.net.URI.parseServerAuthority() +java.net.URI.compareTo(java.net.URI) +java.net.URI.equals(java.lang.Object) +java.net.URI.getRawSchemeSpecificPart() +java.net.URI.hashCode() +java.net.URI.getSchemeSpecificPart() +java.net.URI.getQuery() +java.net.URI.getAuthority() +java.net.URI.isAbsolute() +java.net.URI.getScheme() +java.net.URI.getUserInfo() +java.net.URI.getRawUserInfo() +java.net.URI.getRawQuery() +java.net.URI.toString() +java.net.URI.getPath() +java.net.URI.getRawPath() +java.net.URI.isOpaque() +java.net.URI.getPort() +java.net.URI.<init>(java.lang.String, java.lang.String, java.lang.String) +java.net.URI.<init>(java.lang.String, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String) +java.net.URI.<init>(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) +java.net.URI.<init>(java.lang.String) +java.net.URI.getRawFragment() +java.net.URI.getFragment() +java.net.URI.getRawAuthority() +java.net.URL.of(java.net.URI, java.net.URLStreamHandler) +jdk.internal.net.http.ResponseBodyHandlers$PushPromisesHandlerWithMap.applyPushPromise(java.net.http.HttpRequest, java.net.http.HttpRequest, java.util.function.Function) +jdk.internal.net.http.common.Utils.hostString(jdk.internal.net.http.HttpRequestImpl) +sun.jvmstat.monitor.HostIdentifier.getHost() +sun.jvmstat.monitor.VmIdentifier.getHost() +sun.net.spi.DefaultProxySelector.select(java.net.URI) +sun.security.provider.certpath.ldap.LDAPCertStore.<init>(java.security.cert.CertStoreParameters) +sun.security.x509.URIName.<init>(java.lang.String) +com.sun.tools.javac.file.PathFileObject.getSimpleName(javax.tools.FileObject) +jdk.nio.zipfs.ZipFileSystemProvider.getPath(java.net.URI) +sun.jvmstat.monitor.HostIdentifier.getSchemeSpecificPart() +sun.jvmstat.monitor.VmIdentifier.getSchemeSpecificPart() +sun.print.Win32PrintService.isAttributeValueSupported(javax.print.attribute.Attribute, javax.print.DocFlavor, javax.print.attribute.AttributeSet) +sun.security.x509.URIName.nameConstraint(sun.security.util.DerValue) +java.io.File.<init>(java.net.URI) +jdk.javadoc.internal.doclets.formats.html.HtmlDocletWriter.resolveExternalSpecURI(java.net.URI) +sun.jvmstat.monitor.HostIdentifier.getScheme() +sun.security.util.PropertyExpander.expand(java.lang.String, boolean) +java.net.URI.resolve(java.lang.String) +jdk.internal.net.http.common.Utils.permissionForServer(java.net.URI, java.lang.String, java.util.stream.Stream) +sun.awt.shell.ShellFolder.getNormalizedFile(java.io.File) +jdk.internal.jrtfs.JrtFileSystemProvider.getPath(java.net.URI) +sun.jvmstat.monitor.HostIdentifier.getQuery() +sun.jvmstat.monitor.VmIdentifier.getQuery() +sun.jvmstat.monitor.HostIdentifier.getPort() +sun.jvmstat.monitor.VmIdentifier.getPort() +com.sun.jndi.ldap.LdapURL.validateURI(java.lang.String) +com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverDirectHTTP.engineResolveURI(com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolverContext) +com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverLocalFilesystem.engineResolveURI(com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolverContext) +com.sun.tools.jdeps.JdepsConfiguration.splitPackages() +java.net.URI.toASCIIString() +java.nio.file.FileSystems.getFileSystem(java.net.URI) +java.security.cert.URICertStoreParameters.toString() +javax.print.attribute.URISyntax.toString() +jdk.internal.net.http.HttpRequestImpl.toString() +sun.awt.datatransfer.DataTransferer.translateTransferable(java.awt.datatransfer.Transferable, java.awt.datatransfer.DataFlavor, long) +sun.jvmstat.monitor.HostIdentifier.toString() +sun.jvmstat.monitor.VmIdentifier.toString() +sun.security.x509.URIName.toString() +sun.security.x509.URIName.getName() +com.sun.org.apache.bcel.internal.util.ModularRuntimeImage.<init>() +com.sun.tools.javac.file.JRTIndex.isAvailable() +javax.xml.crypto.dom.DOMCryptoContext.setBaseURI(java.lang.String) +jdk.internal.module.ModulePatcher$PatchedModuleReader.find(java.lang.String) +jdk.javadoc.internal.doclets.toolkit.util.Utils.checkJavaScriptInOption(java.lang.String, java.lang.String) +jdk.tools.jlink.internal.Utils.jrtFileSystem() +org.jcp.xml.dsig.internal.dom.DOMURIDereferencer.dereference(javax.xml.crypto.URIReference, javax.xml.crypto.XMLCryptoContext) +org.jcp.xml.dsig.internal.dom.Policy.restrictReferenceUriScheme(java.lang.String) +sun.jvmstat.monitor.HostIdentifier.getUserInfo() +sun.jvmstat.monitor.VmIdentifier.getUserInfo() +sun.jvmstat.monitor.VmIdentifier.getLocalVmId() +com.sun.media.sound.JARSoundbankReader.getSoundbank(java.io.File) +com.sun.tools.javac.file.FSInfo.getJarClassPath(java.nio.file.Path) +com.sun.tools.javac.file.JavacFileManager.getClassLoader(javax.tools.JavaFileManager$Location) +java.lang.Package.isSealed(java.net.URL) +java.lang.module.ModuleReader.open(java.lang.String) +sun.security.provider.ConfigFile$Spi.<init>(java.net.URI) +sun.security.provider.PolicySpiFile.<init>(java.security.Policy$Parameters) +sun.security.provider.certpath.ssl.SSLServerCertStore.engineGetCertificates(java.security.cert.CertSelector) +sun.security.timestamp.HttpTimestamper.generateTimestamp(sun.security.timestamp.TSRequest) +sun.security.tools.KeyStoreUtil.getPassWithModifier(java.lang.String, java.lang.String, java.util.ResourceBundle, java.text.Collator) +sun.security.tools.keytool.Main.loadCRLs(java.lang.String) +sun.tools.jstat.Arguments.optionsSources() +com.sun.tools.javap.ClassWriter.write(com.sun.tools.classfile.ClassFile) +com.sun.tools.jdeps.JdepsConfiguration.toModule(java.lang.module.ModuleReference) +java.awt.Desktop.mail(java.net.URI) +java.nio.file.FileSystems.newFileSystem(java.net.URI, java.util.Map, java.lang.ClassLoader) +java.nio.file.Path.of(java.net.URI) +jdk.internal.net.http.HttpRequestImpl.<init>(java.net.http.HttpRequest, java.net.ProxySelector) +jdk.internal.net.http.HttpRequestImpl.<init>(jdk.internal.net.http.HttpRequestBuilderImpl) +sun.jvmstat.monitor.VmIdentifier.getScheme() +sun.security.timestamp.HttpTimestamper.<init>(java.net.URI) +sun.security.x509.URIName.getScheme() +sun.jvmstat.monitor.HostIdentifier.getFragment() +sun.jvmstat.monitor.VmIdentifier.getFragment() +javax.tools.SimpleJavaFileObject.isNameCompatible(java.lang.String, javax.tools.JavaFileObject$Kind) +javax.tools.SimpleJavaFileObject.getName() +sun.jvmstat.monitor.HostIdentifier.getPath() +sun.jvmstat.monitor.VmIdentifier.getPath() +java.net.URI.compareTo(java.lang.Object) +java.net.URI.normalize() +java.net.URI.relativize(java.net.URI) +java.net.URI.resolve(java.net.URI) +com.sun.tools.jdeps.Archive.isSameLocation(com.sun.tools.jdeps.Archive, com.sun.tools.jdeps.Archive) +java.net.http.HttpRequest.equals(java.lang.Object) +java.security.cert.URICertStoreParameters.equals(java.lang.Object) +javax.print.attribute.URISyntax.equals(java.lang.Object) +sun.jvmstat.monitor.HostIdentifier.equals(java.lang.Object) +sun.jvmstat.monitor.VmIdentifier.equals(java.lang.Object) +sun.security.x509.URIName.equals(java.lang.Object) +javax.xml.parsers.DocumentBuilder.parse(java.io.File) +javax.xml.parsers.SAXParser.parse(java.io.File, org.xml.sax.helpers.DefaultHandler) +javax.xml.parsers.SAXParser.parse(java.io.File, org.xml.sax.HandlerBase) +javax.xml.transform.stream.StreamResult.setSystemId(java.io.File) +javax.xml.transform.stream.StreamResult.<init>(java.io.File) +javax.xml.transform.stream.StreamSource.setSystemId(java.io.File) +javax.xml.transform.stream.StreamSource.<init>(java.io.File) +jdk.internal.util.xml.SAXParser.parse(java.io.File, jdk.internal.org.xml.sax.helpers.DefaultHandler) +jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree.A(java.net.URI, jdk.javadoc.internal.doclets.toolkit.Content) +sun.security.x509.URIName.encode(sun.security.util.DerOutputStream) +java.net.http.HttpRequest.hashCode() +java.security.cert.URICertStoreParameters.hashCode() +javax.print.attribute.URISyntax.hashCode() +sun.jvmstat.monitor.HostIdentifier.hashCode() +sun.jvmstat.monitor.VmIdentifier.hashCode() +sun.security.x509.URIName.hashCode() +sun.jvmstat.monitor.VmIdentifier.getAuthority() +java.io.File.toURI() +java.net.URI.<init>(java.lang.String, java.lang.String, java.lang.String, java.lang.String) +sun.jvmstat.monitor.HostIdentifier.<init>(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) +com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(javax.xml.transform.Result) +java.awt.Desktop.mail() +java.net.URI.create(java.lang.String) +java.net.URL.toURI() +jdk.internal.shellsupport.doc.JavadocFormatter.formatJavadoc(java.lang.String, java.lang.String) +org.jcp.xml.dsig.internal.dom.DOMReference.<init>(java.lang.String, java.lang.String, javax.xml.crypto.dsig.DigestMethod, java.util.List, javax.xml.crypto.Data, java.util.List, java.lang.String, [B, java.security.Provider) +org.jcp.xml.dsig.internal.dom.DOMRetrievalMethod.<init>(java.lang.String, java.lang.String, java.util.List) +org.jcp.xml.dsig.internal.dom.Policy.restrictAlg(java.lang.String) +sun.jvmstat.monitor.HostIdentifier.<init>(sun.jvmstat.monitor.VmIdentifier) +sun.print.Win32PrintService.getDefaultAttributeValue(java.lang.Class) +sun.print.Win32PrintService.getSupportedAttributeValues(java.lang.Class, javax.print.DocFlavor, javax.print.attribute.AttributeSet) +java.net.URLConnection.guessContentTypeFromName(java.lang.String) +sun.nio.fs.AbstractFileTypeDetector.probeContentType(java.nio.file.Path) +java.net.UnixDomainSocketAddress.toString() +java.net.UnixDomainSocketAddress.equals(java.lang.Object) +java.net.UnixDomainSocketAddress.getPath() +java.net.UnixDomainSocketAddress.hashCode() +java.net.UnixDomainSocketAddress.of(java.lang.String) +java.net.UnixDomainSocketAddress.of(java.nio.file.Path) +java.net.Authenticator.requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String, java.net.URL, java.net.Authenticator$RequestorType) +java.net.Authenticator.requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String) +java.net.Authenticator.requestPasswordAuthenticationInstance(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String, java.net.URL, java.net.Authenticator$RequestorType) +java.net.Authenticator.requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String) +java.net.Authenticator.requestPasswordAuthentication(java.net.Authenticator, java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String, java.net.URL, java.net.Authenticator$RequestorType) +java.net.Authenticator.setDefault(java.net.Authenticator) +java.net.Authenticator.getDefault() +jdk.internal.loader.URLClassPath.<init>([Ljava.net.URL;, java.net.URLStreamHandlerFactory, java.security.AccessControlContext) +java.net.URLConnection.getInputStream() +java.net.URLConnection.getOutputStream() +java.net.NetworkInterface.isPointToPoint() +java.net.NetworkInterface.getMTU() +java.net.NetworkInterface.getIndex() +java.net.NetworkInterface.isUp() +java.net.NetworkInterface.getHardwareAddress() +java.net.NetworkInterface.isLoopback() +java.net.NetworkInterface.supportsMulticast() +java.net.NetworkInterface.toString() +java.net.NetworkInterface.getDisplayName() +java.net.NetworkInterface.isVirtual() +java.net.NetworkInterface.getName() +java.net.NetworkInterface.hashCode() +java.net.NetworkInterface.getParent() +java.net.NetworkInterface.subInterfaces() +java.net.NetworkInterface.getSubInterfaces() +java.net.NetworkInterface.getInetAddresses() +java.net.NetworkInterface.getByName(java.lang.String) +java.net.NetworkInterface.inetAddresses() +java.net.NetworkInterface.getByIndex(int) +java.net.SocketPermission.newPermissionCollection() +java.net.PasswordAuthentication.getPassword() +java.net.PasswordAuthentication.<init>(java.lang.String, [C) +java.net.PasswordAuthentication.getUserName() +java.net.URL.getPath() +java.net.URL.<init>(java.lang.String, java.lang.String, int, java.lang.String, java.net.URLStreamHandler) +java.net.URL.setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory) +java.net.URL.getProtocol() +java.net.URL.getHost() +java.net.URL.getQuery() +java.net.URL.getPort() +java.net.URL.getAuthority() +java.net.URL.getRef() +java.net.URL.getFile() +java.net.URL.getUserInfo() +com.sun.org.apache.xerces.internal.impl.XMLEntityManager.createOutputStream(java.lang.String) +com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl.writeToURI(org.w3c.dom.Node, java.lang.String) +com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl.write(org.w3c.dom.Node, org.w3c.dom.ls.LSOutput) +jdk.xml.internal.SecuritySupport.checkAccess(java.lang.String, java.lang.String, java.lang.String) +sun.net.www.ParseUtil.toURI(java.net.URL) +sun.net.www.http.HttpClient.getURLFile() +sun.net.www.protocol.file.FileURLConnection.getPermission() +sun.net.www.protocol.ftp.FtpURLConnection.getOutputStream() +sun.net.www.protocol.ftp.FtpURLConnection.getInputStream() +sun.net.www.protocol.http.AuthenticationInfo.<init>(char, sun.net.www.protocol.http.AuthScheme, java.net.URL, java.lang.String) +sun.net.www.protocol.mailto.MailToURLConnection.getOutputStream() +com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(java.net.URL, java.lang.String) +com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(java.net.URL) +com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(boolean, java.lang.String, com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource, boolean, boolean) +java.awt.SplashScreen.getImageURL() +java.rmi.server.RMIClassLoader.loadClass(java.net.URL, java.lang.String) +java.security.AccessControlContext.checkPermission(java.security.Permission) +javax.management.loading.MLet.getMBeansFromURL(java.net.URL) +javax.management.loading.MLet.getMBeansFromURL(java.lang.String) +javax.sql.rowset.serial.SerialDatalink.getDatalink() +javax.swing.text.html.HTMLDocument.processHTMLFrameHyperlinkEvent(javax.swing.text.html.HTMLFrameHyperlinkEvent) +jdk.internal.loader.BuiltinClassLoader.findResources(java.lang.String) +jdk.internal.loader.BuiltinClassLoader.findResource(java.lang.String) +jdk.internal.loader.Loader.findResource(java.lang.String) +jdk.xml.internal.SecuritySupport.getClassSource(java.lang.Class) +sun.net.util.URLUtil.getConnectPermission(java.net.URL) +sun.net.www.http.HttpCapture.getCapture(java.net.URL) +sun.net.www.protocol.http.ntlm.NTLMAuthentication.isTrustedSite(java.net.URL) +javax.swing.JEditorPane.setPage(java.net.URL) +sun.net.www.protocol.file.Handler.openConnection(java.net.URL, java.net.Proxy) +java.security.CodeSource.hashCode() +javax.sql.rowset.serial.SerialDatalink.hashCode() +javax.sql.rowset.serial.SerialDatalink.equals(java.lang.Object) +java.beans.Beans.instantiate(java.lang.ClassLoader, java.lang.String, java.beans.beancontext.BeanContext, java.beans.AppletInitializer) +java.net.URL.toString() +javax.swing.ImageIcon.<init>(java.net.URL) +javax.xml.validation.SchemaFactory.newSchema(java.net.URL) +sun.net.util.IPAddressUtil.checkAuthority(java.net.URL) +sun.net.util.IPAddressUtil.checkExternalForm(java.net.URL) +com.sun.media.sound.DLSSoundbank.<init>(java.net.URL) +com.sun.media.sound.JavaSoundAudioClip.create(java.net.URL) +com.sun.media.sound.SF2Soundbank.<init>(java.net.URL) +com.sun.media.sound.StandardMidiFileReader.getMidiFileFormat(java.net.URL) +com.sun.media.sound.StandardMidiFileReader.getSequence(java.net.URL) +java.lang.Class.getResourceAsStream(java.lang.String) +java.lang.ClassLoader.getSystemResourceAsStream(java.lang.String) +java.lang.ClassLoader.getResourceAsStream(java.lang.String) +java.lang.Module.getResourceAsStream(java.lang.String) +javax.imageio.ImageIO.read(java.net.URL) +javax.swing.plaf.synth.SynthLookAndFeel.load(java.net.URL) +javax.swing.text.html.StyleSheet.importStyleSheet(java.net.URL) +jdk.internal.loader.BuiltinClassLoader.findResourceAsStream(java.lang.String, java.lang.String) +sun.jvmstat.perfdata.monitor.AliasFileParser.parse(java.util.Map) +sun.print.Win32PrintJob.print(javax.print.Doc, javax.print.attribute.PrintRequestAttributeSet) +sun.security.util.PolicyUtil.getKeyStore(java.net.URL, java.lang.String, java.lang.String, java.lang.String, java.lang.String, sun.security.util.Debug) +sun.security.util.PolicyUtil.getInputStream(java.net.URL) +sun.tools.jstat.OptionLister.print(java.io.PrintStream) +java.beans.SimpleBeanInfo.loadImage(java.lang.String) +java.awt.SplashScreen.setImageURL(java.net.URL) +java.net.URL.getContent([Ljava.lang.Class;) +java.net.URL.openStream() +java.net.URL.getContent() +sun.net.www.protocol.http.HttpURLConnection.openConnectionCheckRedirects(java.net.URLConnection) +java.net.URI.toURL() +java.net.URLConnection.setDefaultUseCaches(java.lang.String, boolean) +java.net.URLConnection.getDefaultUseCaches(java.lang.String) +javax.management.loading.MLetContent.<init>(java.net.URL, java.util.Map, java.util.List, java.util.List) +jdk.internal.loader.FileURLMapper.getPath() +sun.net.util.URLUtil.urlNoFragString(java.net.URL) +sun.net.www.URLConnection.canCache() +sun.net.www.URLConnection.getContentType() +sun.awt.image.URLImageSource.<init>(java.net.URL) +sun.net.www.protocol.mailto.Handler.parseURL(java.net.URL, java.lang.String, int, int) +java.net.URL.<init>(java.net.URL, java.lang.String) +java.io.File.toURL() +sun.net.www.ParseUtil.fileToEncodedURL(java.io.File) +java.net.URL.<init>(java.lang.String, java.lang.String, java.lang.String) +java.net.URL.<init>(java.lang.String, java.lang.String, int, java.lang.String) +java.applet.Applet.getImage(java.net.URL, java.lang.String) +java.applet.Applet.getAudioClip(java.net.URL, java.lang.String) +java.net.URL.<init>(java.lang.String) +javax.swing.JEditorPane$JEditorPaneAccessibleHypertextSupport$HTMLLink.getAccessibleActionObject(int) +javax.swing.text.html.ImageView.getImageURL() +javax.swing.JEditorPane.setPage(java.lang.String) +jdk.javadoc.internal.doclets.toolkit.util.Extern.isUrl(java.lang.String) +java.net.HttpRetryException.responseCode() +java.net.HttpRetryException.<init>(java.lang.String, int, java.lang.String) +java.net.HttpRetryException.<init>(java.lang.String, int) +java.net.HttpRetryException.getLocation() +java.net.URLConnection.getFileNameMap() +java.net.HttpURLConnection.setRequestMethod(java.lang.String) +java.net.URLPermission.getActions() +java.net.URLPermission.<init>(java.lang.String, java.lang.String) +java.net.URLPermission.<init>(java.lang.String) +com.sun.jmx.remote.protocol.rmi.ClientProvider.newJMXConnector(javax.management.remote.JMXServiceURL, java.util.Map) +com.sun.jmx.remote.protocol.rmi.ServerProvider.newJMXConnectorServer(javax.management.remote.JMXServiceURL, java.util.Map, javax.management.MBeanServer) +com.sun.jndi.dns.DnsUrl.fromList(java.lang.String) +com.sun.jndi.toolkit.url.UrlUtil.decode(java.lang.String) +javax.management.remote.JMXConnectorFactory.newJMXConnector(javax.management.remote.JMXServiceURL, java.util.Map) +javax.management.remote.JMXConnectorServerFactory.newJMXConnectorServer(javax.management.remote.JMXServiceURL, java.util.Map, javax.management.MBeanServer) +javax.management.remote.JMXServiceURL.<init>(java.lang.String) +javax.management.remote.rmi.RMIConnectorServer.<init>(javax.management.remote.JMXServiceURL, java.util.Map, javax.management.remote.rmi.RMIServerImpl, javax.management.MBeanServer) +java.net.URLConnection.getContent([Ljava.lang.Class;) +java.net.ContentHandler.getContent(java.net.URLConnection, [Ljava.lang.Class;) +java.net.URLConnection.getContent() +sun.awt.www.content.audio.aiff.<init>() +sun.awt.www.content.audio.basic.<init>() +sun.awt.www.content.audio.wav.<init>() +sun.awt.www.content.audio.x_aiff.<init>() +sun.awt.www.content.audio.x_wav.<init>() +sun.awt.www.content.image.gif.<init>() +sun.awt.www.content.image.jpeg.<init>() +sun.awt.www.content.image.png.<init>() +sun.awt.www.content.image.x_xbitmap.<init>() +sun.awt.www.content.image.x_xpixmap.<init>() +sun.net.www.content.text.plain.<init>() +sun.nio.ch.DatagramSocketAdaptor.getReceiveBufferSize() +sun.nio.ch.DatagramSocketAdaptor.setReceiveBufferSize(int) +sun.nio.ch.DatagramSocketAdaptor.setSendBufferSize(int) +sun.nio.ch.DatagramSocketAdaptor.getSendBufferSize() +sun.nio.ch.DatagramSocketAdaptor.setNetworkInterface(java.net.NetworkInterface) +sun.nio.ch.DatagramSocketAdaptor.getTimeToLive() +sun.nio.ch.DatagramSocketAdaptor.setTimeToLive(int) +sun.nio.ch.DatagramSocketAdaptor.getReuseAddress() +sun.nio.ch.DatagramSocketAdaptor.setReuseAddress(boolean) +sun.nio.ch.DatagramSocketAdaptor.getTrafficClass() +sun.nio.ch.DatagramSocketAdaptor.setTrafficClass(int) +sun.nio.ch.DatagramSocketAdaptor.getBroadcast() +sun.nio.ch.DatagramSocketAdaptor.setBroadcast(boolean) +sun.nio.ch.DatagramSocketAdaptor.setLoopbackMode(boolean) +sun.nio.ch.DatagramSocketAdaptor.getLoopbackMode() +jdk.internal.net.http.ResponseTimerEvent.handle() +jdk.internal.net.http.common.Utils.toConnectException(java.lang.Throwable) +java.net.Inet4Address.getHostAddress() +java.net.Inet4Address.isLoopbackAddress() +java.net.Inet4Address.isMCGlobal() +java.net.CookieManager.setCookiePolicy(java.net.CookiePolicy) +java.net.CookieManager.getCookieStore() +java.net.CookieManager.<init>() +java.net.HttpURLConnection.setFollowRedirects(boolean) +java.net.HttpURLConnection.getFollowRedirects() +java.net.HttpURLConnection.setInstanceFollowRedirects(boolean) +java.net.HttpURLConnection.getInstanceFollowRedirects() +java.net.HttpURLConnection.getRequestMethod() +java.net.HttpURLConnection.getResponseMessage() +java.net.HttpURLConnection.getResponseCode() +java.net.HttpURLConnection.setFixedLengthStreamingMode(long) +java.net.HttpURLConnection.setFixedLengthStreamingMode(int) +java.net.HttpURLConnection.setChunkedStreamingMode(int) +sun.net.www.protocol.http.HttpURLConnection.streaming() +sun.net.www.protocol.http.HttpURLConnection.getErrorStream() +sun.net.www.protocol.http.HttpURLConnection.disconnect() +sun.net.www.http.HttpClient.parseHTTP(sun.net.www.MessageHeader, sun.net.www.protocol.http.HttpURLConnection) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getRequestMethod() +sun.net.www.protocol.https.HttpsURLConnectionImpl.getPermission() +sun.net.www.protocol.https.HttpsURLConnectionImpl.setInstanceFollowRedirects(boolean) +sun.net.www.protocol.http.HttpURLConnection.setRequestMethod(java.lang.String) +sun.net.www.protocol.https.HttpsURLConnectionImpl.setFixedLengthStreamingMode(long) +sun.net.www.protocol.https.HttpsURLConnectionImpl.setFixedLengthStreamingMode(int) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseMessage() +sun.net.www.protocol.https.HttpsURLConnectionImpl.getInstanceFollowRedirects() +sun.net.www.protocol.https.HttpsURLConnectionImpl.setChunkedStreamingMode(int) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getHeaderFieldDate(java.lang.String, long) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode() +java.net.Socket.close() +java.net.Socket.<init>() +java.net.Socket.isBound() +java.net.Socket.isClosed() +java.net.Socket.isInputShutdown() +java.net.Socket.isConnected() +java.net.Socket.isOutputShutdown() +java.net.Socket.supportedOptions() +jdk.jshell.execution.RemoteExecutionControl.main([Ljava.lang.String;) +sun.net.NetworkClient.openServer(java.lang.String, int) +sun.net.ftp.impl.FtpClient.putFileStream(java.lang.String, boolean) +sun.net.ftp.impl.FtpClient.appendFile(java.lang.String, java.io.InputStream) +sun.net.ftp.impl.FtpClient.reInit() +sun.net.ftp.impl.FtpClient.endSecureSession() +sun.net.ftp.impl.FtpClient.putFile(java.lang.String, java.io.InputStream, boolean) +sun.net.www.http.HttpClient.openServer(java.lang.String, int) +sun.rmi.transport.tcp.TCPConnection.getOutputStream() +java.net.Socket.getLocalPort() +jdk.net.Sockets.getOption(java.net.Socket, java.net.SocketOption) +sun.net.ftp.impl.FtpClient.getServerAddress() +jdk.net.Sockets.setOption(java.net.Socket, java.net.SocketOption, java.lang.Object) +java.net.Socket.connect(java.net.SocketAddress) +java.net.Socket.getPort() +java.net.Socket.toString() +java.net.Socket.getInetAddress() +sun.net.ftp.impl.FtpClient.getFile(java.lang.String, java.io.OutputStream) +sun.net.ftp.impl.FtpClient.list(java.lang.String) +sun.net.ftp.impl.FtpClient.listFiles(java.lang.String) +sun.net.ftp.impl.FtpClient.getFileStream(java.lang.String) +sun.net.ftp.impl.FtpClient.nameList(java.lang.String) +sun.rmi.transport.tcp.TCPConnection.getInputStream() +sun.net.NetworkClient.closeServer() +sun.net.www.http.HttpClient.closeServer() +sun.rmi.transport.tcp.TCPConnection.close() +com.sun.jndi.ldap.ext.StartTlsResponseImpl.close() +sun.net.NetworkClient.setReadTimeout(int) +sun.rmi.transport.tcp.TCPDirectSocketFactory.createSocket(java.lang.String, int) +java.net.SocketImpl.toString() +sun.nio.ch.NioSocketImpl.<init>(boolean) +java.net.URLClassLoader.newInstance([Ljava.net.URL;) +java.net.ProxySelector.getDefault() +java.net.ProxySelector.setDefault(java.net.ProxySelector) +sun.net.spi.DefaultProxySelector.<init>() +java.net.URISyntaxException.getIndex() +java.net.URISyntaxException.getMessage() +java.net.URISyntaxException.<init>(java.lang.String, java.lang.String, int) +java.net.URISyntaxException.getInput() +java.net.URISyntaxException.<init>(java.lang.String, java.lang.String) +java.net.URLConnection.setFileNameMap(java.net.FileNameMap) +java.net.URLConnection.setDefaultAllowUserInteraction(boolean) +java.net.URLConnection.getDefaultAllowUserInteraction() +java.net.URLConnection.setDefaultUseCaches(boolean) +java.net.URLConnection.getDefaultUseCaches() +java.net.URLConnection.setReadTimeout(int) +java.net.URLConnection.getReadTimeout() +java.net.URLConnection.getRequestProperties() +java.net.URLConnection.addRequestProperty(java.lang.String, java.lang.String) +java.net.URLConnection.getRequestProperty(java.lang.String) +java.net.URLConnection.setRequestProperty(java.lang.String, java.lang.String) +java.net.URLConnection.getAllowUserInteraction() +java.net.URLConnection.setAllowUserInteraction(boolean) +java.net.URLConnection.setContentHandlerFactory(java.net.ContentHandlerFactory) +java.net.URLConnection.getIfModifiedSince() +java.net.URLConnection.setIfModifiedSince(long) +sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(java.lang.String, java.lang.String) +sun.net.www.protocol.http.HttpURLConnection.getRequestProperties() +sun.net.www.protocol.http.HttpURLConnection.addRequestProperty(java.lang.String, java.lang.String) +sun.net.www.protocol.http.HttpURLConnection.setAuthenticator(java.net.Authenticator) +sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.setConnected(boolean) +sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.isConnected() +sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect() +sun.net.www.protocol.file.FileURLConnection.connect() +sun.net.www.protocol.jrt.JavaRuntimeURLConnection.connect() +sun.net.www.URLConnection.setRequestProperty(java.lang.String, java.lang.String) +sun.net.www.URLConnection.addRequestProperty(java.lang.String, java.lang.String) +sun.net.www.URLConnection.getRequestProperties() +sun.net.www.URLConnection.getRequestProperty(java.lang.String) +java.net.URLConnection.toString() +java.net.URLConnection.getURL() +sun.net.www.protocol.http.HttpURLConnection.getInputStream() +sun.net.www.protocol.http.HttpURLConnection.getOutputStream() +sun.net.www.URLConnection.close() +java.net.URLConnection.getConnectTimeout() +java.net.URLConnection.setConnectTimeout(int) +java.net.URLConnection.getUseCaches() +java.net.URLConnection.setUseCaches(boolean) +java.net.URLConnection.setDoInput(boolean) +java.net.URLConnection.getDoInput() +java.net.URLConnection.getDoOutput() +java.net.URLConnection.setDoOutput(boolean) +sun.net.www.protocol.https.HttpsURLConnectionImpl.setDefaultUseCaches(boolean) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getIfModifiedSince() +sun.net.www.protocol.https.HttpsURLConnectionImpl.setDoInput(boolean) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getAllowUserInteraction() +java.net.URLConnection.getContentLength() +sun.net.www.protocol.https.HttpsURLConnectionImpl.getContentLengthLong() +java.net.URLConnection.getHeaderFieldInt(java.lang.String, int) +java.net.URLConnection.getContentType() +java.net.URLConnection.getHeaderFieldDate(java.lang.String, long) +java.net.URLConnection.getHeaderFieldLong(java.lang.String, long) +java.net.URLConnection.getContentEncoding() +java.net.HttpURLConnection.getHeaderFieldDate(java.lang.String, long) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getDefaultUseCaches() +sun.net.www.protocol.https.HttpsURLConnectionImpl.toString() +sun.net.www.protocol.https.HttpsURLConnectionImpl.getHeaderFieldInt(java.lang.String, int) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getContent([Ljava.lang.Class;) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getDate() +sun.net.www.protocol.https.HttpsURLConnectionImpl.getUseCaches() +sun.net.www.protocol.https.HttpsURLConnectionImpl.setUseCaches(boolean) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getContentType() +sun.net.www.protocol.https.HttpsURLConnectionImpl.getDoOutput() +sun.awt.image.URLImageSource.<init>(java.net.URLConnection) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getURL() +java.net.URLConnection.getDate() +java.net.URLConnection.getExpiration() +java.net.URLConnection.getLastModified() +sun.net.www.protocol.https.HttpsURLConnectionImpl.getExpiration() +com.sun.media.sound.JavaSoundAudioClip.create(java.net.URLConnection) +sun.net.www.content.text.plain.getContent(java.net.URLConnection) +sun.net.www.URLConnection.getHeaderField(java.lang.String) +sun.net.www.URLConnection.getHeaderFields() +sun.net.www.URLConnection.getHeaderFieldKey(int) +sun.net.www.URLConnection.getContentLength() +sun.net.www.URLConnection.getHeaderField(int) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getLastModified() +java.net.URLConnection.guessContentTypeFromStream(java.io.InputStream) +sun.net.www.protocol.file.FileURLConnection.getInputStream() +sun.net.www.protocol.https.HttpsURLConnectionImpl.setIfModifiedSince(long) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getDoInput() +sun.net.www.protocol.https.HttpsURLConnectionImpl.getContent() +sun.net.www.protocol.https.HttpsURLConnectionImpl.setDoOutput(boolean) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getContentLength() +java.net.URLConnection.getContentLengthLong() +sun.net.www.protocol.https.HttpsURLConnectionImpl.getHeaderFieldLong(java.lang.String, long) +sun.net.www.protocol.https.HttpsURLConnectionImpl.setAllowUserInteraction(boolean) +sun.net.www.protocol.https.HttpsURLConnectionImpl.getContentEncoding() +sun.net.www.URLConnection.<init>(java.net.URL) +java.net.HttpCookie.getDomain() +java.net.HttpCookie.setDomain(java.lang.String) +java.net.HttpCookie.hashCode() +java.net.HttpCookie.isHttpOnly() +java.net.HttpCookie.setHttpOnly(boolean) +java.net.HttpCookie.hasExpired() +java.net.HttpCookie.getPath() +java.net.HttpCookie.setPath(java.lang.String) +java.net.HttpCookie.setValue(java.lang.String) +java.net.HttpCookie.getValue() +java.net.HttpCookie.getMaxAge() +java.net.HttpCookie.setMaxAge(long) +java.net.HttpCookie.setPortlist(java.lang.String) +java.net.HttpCookie.getPortlist() +java.net.HttpCookie.getSecure() +java.net.HttpCookie.setSecure(boolean) +java.net.HttpCookie.getName() +java.net.HttpCookie.setVersion(int) +java.net.HttpCookie.getVersion() +java.net.HttpCookie.getDiscard() +java.net.HttpCookie.setDiscard(boolean) +java.net.HttpCookie.getComment() +java.net.HttpCookie.setComment(java.lang.String) +java.net.HttpCookie.getCommentURL() +java.net.HttpCookie.setCommentURL(java.lang.String) +java.net.HttpCookie.parse(java.lang.String) +java.net.HttpCookie.equals(java.lang.Object) +java.net.HttpCookie.toString() +java.net.HttpCookie.<init>(java.lang.String, java.lang.String) +jdk.internal.net.http.websocket.OpeningHandshake.<init>(jdk.internal.net.http.websocket.BuilderImpl) +java.net.http.HttpClient$Version.values() +java.net.http.HttpRequest.newBuilder(java.net.http.HttpRequest, java.util.function.BiPredicate) +java.net.http.HttpRequest$Builder.HEAD() +java.net.http.HttpResponse$BodyHandlers.fromLineSubscriber(java.util.concurrent.Flow$Subscriber) +java.net.http.HttpResponse$BodyHandlers.ofLines() +java.net.http.HttpResponse$BodyHandlers.ofString() +java.net.http.HttpResponse$BodyHandlers.fromLineSubscriber(java.util.concurrent.Flow$Subscriber, java.util.function.Function, java.lang.String) +jdk.internal.net.http.ResponseBodyHandlers$FileDownloadBodyHandler.apply(java.net.http.HttpResponse$ResponseInfo) +java.net.http.HttpResponse$BodyHandlers.ofPublisher() +java.net.http.HttpResponse$BodyHandlers.replacing(java.lang.Object) +java.net.http.HttpResponse$BodyHandlers.ofByteArrayConsumer(java.util.function.Consumer) +java.net.http.HttpResponse$BodySubscribers.fromLineSubscriber(java.util.concurrent.Flow$Subscriber) +java.net.http.HttpResponse$BodyHandlers.ofInputStream() +java.net.http.HttpResponse$BodySubscribers.ofFile(java.nio.file.Path) +java.net.http.HttpResponse$BodyHandlers.ofString(java.nio.charset.Charset) +java.net.http.HttpResponse$BodyHandlers.discarding() +java.net.http.HttpResponse$BodyHandlers.buffering(java.net.http.HttpResponse$BodyHandler, int) +java.net.http.HttpResponse$BodyHandlers.fromSubscriber(java.util.concurrent.Flow$Subscriber) +java.net.http.HttpResponse$BodyHandlers.fromSubscriber(java.util.concurrent.Flow$Subscriber, java.util.function.Function) +java.net.http.HttpResponse$BodyHandlers.ofByteArray() +jdk.internal.net.http.BufferingSubscriber.getBody() +jdk.internal.net.http.ResponseSubscribers.getBodyAsync(java.util.concurrent.Executor, java.net.http.HttpResponse$BodySubscriber, java.util.concurrent.CompletableFuture, java.util.function.Consumer) +jdk.internal.net.http.ResponseSubscribers.getBodyAsync(java.util.concurrent.Executor, java.net.http.HttpResponse$BodySubscriber) +jdk.internal.net.http.ResponseSubscribers$MappingSubscriber.getBody() +jdk.internal.net.http.common.HttpBodySubscriberWrapper.getBody() +java.net.http.HttpConnectTimeoutException.<init>(java.lang.String) +java.net.http.HttpResponse$BodyHandlers.ofFile(java.nio.file.Path) +jdk.internal.net.http.websocket.OpeningHandshake.send() +java.net.http.HttpClient$Redirect.values() +java.net.http.HttpClient.newHttpClient() +java.net.http.WebSocketHandshakeException.getResponse() +java.net.http.WebSocketHandshakeException.<init>(java.net.http.HttpResponse) +java.net.http.WebSocketHandshakeException.initCause(java.lang.Throwable) +java.net.http.WebSocket$Listener.onBinary(java.net.http.WebSocket, java.nio.ByteBuffer, boolean) +java.net.http.WebSocket$Listener.onOpen(java.net.http.WebSocket) +java.net.http.WebSocket$Listener.onText(java.net.http.WebSocket, java.lang.CharSequence, boolean) +java.net.http.WebSocket$Listener.onPing(java.net.http.WebSocket, java.nio.ByteBuffer) +java.net.http.WebSocket$Listener.onPong(java.net.http.WebSocket, java.nio.ByteBuffer) +java.net.http.HttpHeaders.map() +java.net.http.HttpHeaders.of(java.util.Map, java.util.function.BiPredicate) +java.net.http.HttpHeaders.hashCode() +java.net.http.HttpHeaders.firstValue(java.lang.String) +java.net.http.HttpHeaders.firstValueAsLong(java.lang.String) +java.net.http.HttpHeaders.equals(java.lang.Object) +java.net.http.HttpHeaders.allValues(java.lang.String) +java.net.http.HttpHeaders.toString() +jdk.internal.net.http.common.Log.dumpHeaders(java.lang.StringBuilder, java.lang.String, java.net.http.HttpHeaders) +jdk.internal.net.http.common.Utils.charsetFrom(java.net.http.HttpHeaders) +jdk.internal.net.http.common.HttpHeadersBuilder.build() +java.net.http.HttpClient.shutdownNow() +java.net.http.HttpClient.close() +jdk.internal.net.http.common.Utils.CONTEXT_RESTRICTED(java.net.http.HttpClient) +jdk.internal.net.http.HttpClientFacade.close() +java.net.http.HttpRequest$BodyPublishers.ofString(java.lang.String) +javax.net.ServerSocketFactory.getDefault() +javax.net.SocketFactory.getDefault() +javax.rmi.ssl.SslRMIServerSocketFactory.<init>(javax.net.ssl.SSLContext, [Ljava.lang.String;, [Ljava.lang.String;, boolean) +javax.rmi.ssl.SslRMIClientSocketFactory.createSocket(java.lang.String, int) +javax.net.ssl.SSLSocketFactory.<init>() +javax.net.ssl.SSLSessionBindingEvent.getName() +javax.net.ssl.SSLSessionBindingEvent.<init>(javax.net.ssl.SSLSession, java.lang.String) +javax.net.ssl.SSLEngineResult$HandshakeStatus.values() +javax.net.ssl.SSLContext.createSSLEngine(java.lang.String, int) +javax.net.ssl.SSLContext.getSupportedSSLParameters() +javax.net.ssl.SSLContext.getServerSocketFactory() +javax.net.ssl.SSLContext.createSSLEngine() +javax.net.ssl.SSLContext.getSocketFactory() +javax.net.ssl.SSLContext.getDefaultSSLParameters() +javax.net.ssl.SSLContext.getServerSessionContext() +javax.net.ssl.SSLContext.init([Ljavax.net.ssl.KeyManager;, [Ljavax.net.ssl.TrustManager;, java.security.SecureRandom) +javax.net.ssl.SSLContext.getClientSessionContext() +com.sun.jndi.ldap.ext.StartTlsResponseImpl.negotiate(javax.net.ssl.SSLSocketFactory) +javax.net.ssl.SNIHostName.createSNIMatcher(java.lang.String) +javax.net.ssl.KeyStoreBuilderParameters.getParameters() +javax.net.ssl.KeyStoreBuilderParameters.<init>(java.security.KeyStore$Builder) +javax.net.ssl.KeyStoreBuilderParameters.<init>(java.util.List) +javax.net.ssl.SSLServerSocketFactory.getDefault() +javax.net.ssl.SSLEngineResult$Status.values() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getLocalSupportedSignatureAlgorithms() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getRequestedServerNames() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getStatusResponses() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getPeerSupportedSignatureAlgorithms() +javax.net.ssl.SSLServerSocket.setSSLParameters(javax.net.ssl.SSLParameters) +javax.net.ssl.SSLServerSocket.getSSLParameters() +javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(javax.net.ssl.HostnameVerifier) +javax.net.ssl.SSLContext.setDefault(javax.net.ssl.SSLContext) +javax.net.ssl.SSLHandshakeException.<init>(java.lang.String) +javax.net.ssl.SSLKeyException.<init>(java.lang.String) +javax.net.ssl.SSLPeerUnverifiedException.<init>(java.lang.String) +javax.net.ssl.SSLProtocolException.<init>(java.lang.String) +javax.net.ssl.SSLHandshakeException.<init>(java.lang.String, java.lang.Throwable) +javax.net.ssl.SSLKeyException.<init>(java.lang.String, java.lang.Throwable) +javax.net.ssl.SSLPeerUnverifiedException.<init>(java.lang.String, java.lang.Throwable) +javax.net.ssl.SSLProtocolException.<init>(java.lang.String, java.lang.Throwable) +javax.net.ssl.SNIMatcher.getType() +javax.net.ssl.SSLParameters.setSNIMatchers(java.util.Collection) +javax.net.ssl.CertPathTrustManagerParameters.getParameters() +javax.net.ssl.CertPathTrustManagerParameters.<init>(java.security.cert.CertPathParameters) +javax.net.ssl.SSLParameters.setSignatureSchemes([Ljava.lang.String;) +javax.net.ssl.SSLParameters.getSignatureSchemes() +javax.net.ssl.SSLParameters.<init>() +javax.net.ssl.SSLParameters.<init>([Ljava.lang.String;) +javax.net.ssl.SSLParameters.<init>([Ljava.lang.String;, [Ljava.lang.String;) +javax.net.ssl.SSLParameters.getApplicationProtocols() +javax.net.ssl.SSLParameters.setApplicationProtocols([Ljava.lang.String;) +javax.net.ssl.SSLParameters.getSNIMatchers() +javax.net.ssl.SSLParameters.getNeedClientAuth() +javax.net.ssl.SSLParameters.setNeedClientAuth(boolean) +javax.net.ssl.SSLParameters.setWantClientAuth(boolean) +javax.net.ssl.SSLParameters.getEndpointIdentificationAlgorithm() +javax.net.ssl.SSLParameters.setEndpointIdentificationAlgorithm(java.lang.String) +javax.net.ssl.SSLParameters.getAlgorithmConstraints() +javax.net.ssl.SSLParameters.setAlgorithmConstraints(java.security.AlgorithmConstraints) +javax.net.ssl.SSLParameters.getServerNames() +javax.net.ssl.SSLParameters.setServerNames(java.util.List) +javax.net.ssl.SSLParameters.setEnableRetransmissions(boolean) +javax.net.ssl.SSLParameters.getEnableRetransmissions() +javax.net.ssl.SSLParameters.setUseCipherSuitesOrder(boolean) +javax.net.ssl.SSLParameters.getUseCipherSuitesOrder() +javax.net.ssl.SSLParameters.setCipherSuites([Ljava.lang.String;) +javax.net.ssl.SSLParameters.getCipherSuites() +javax.net.ssl.SSLParameters.getMaximumPacketSize() +javax.net.ssl.SSLParameters.setMaximumPacketSize(int) +javax.net.ssl.SSLParameters.getWantClientAuth() +javax.net.ssl.SSLParameters.getNamedGroups() +javax.net.ssl.SSLParameters.setNamedGroups([Ljava.lang.String;) +javax.net.ssl.SSLParameters.getProtocols() +javax.net.ssl.SSLParameters.setProtocols([Ljava.lang.String;) +jdk.internal.net.http.common.Log.logParams(javax.net.ssl.SSLParameters) +jdk.internal.net.http.common.Utils.copySSLParameters(javax.net.ssl.SSLParameters) +javax.net.ssl.SSLEngine.setSSLParameters(javax.net.ssl.SSLParameters) +javax.net.ssl.SSLSocket.setSSLParameters(javax.net.ssl.SSLParameters) +javax.net.ssl.SSLEngine.getSSLParameters() +javax.net.ssl.SSLSocket.getSSLParameters() +javax.net.ssl.TrustManagerFactory.init(javax.net.ssl.ManagerFactoryParameters) +javax.net.ssl.TrustManagerFactory.init(java.security.KeyStore) +javax.net.ssl.TrustManagerFactory.getTrustManagers() +sun.security.ssl.SSLServerSocketFactoryImpl.<init>() +javax.net.ssl.KeyManagerFactory.getAlgorithm() +javax.net.ssl.KeyManagerFactory.init(java.security.KeyStore, [C) +javax.net.ssl.KeyManagerFactory.init(javax.net.ssl.ManagerFactoryParameters) +javax.net.ssl.KeyManagerFactory.getKeyManagers() +javax.net.ssl.KeyManagerFactory.getProvider() +javax.net.ssl.KeyManagerFactory.getInstance(java.lang.String, java.lang.String) +javax.net.ssl.KeyManagerFactory.getInstance(java.lang.String) +javax.net.ssl.KeyManagerFactory.getInstance(java.lang.String, java.security.Provider) +javax.net.ssl.SSLSocketFactory.getDefault() +javax.net.ssl.SSLEngineResult.bytesConsumed() +javax.net.ssl.SSLEngineResult.toString() +javax.net.ssl.SSLEngineResult.<init>(javax.net.ssl.SSLEngineResult$Status, javax.net.ssl.SSLEngineResult$HandshakeStatus, int, int, long) +javax.net.ssl.SSLEngineResult.sequenceNumber() +javax.net.ssl.SSLEngineResult.getStatus() +javax.net.ssl.SSLEngineResult.bytesProduced() +javax.net.ssl.SSLEngineResult.getHandshakeStatus() +javax.net.ssl.SSLEngineResult.<init>(javax.net.ssl.SSLEngineResult$Status, javax.net.ssl.SSLEngineResult$HandshakeStatus, int, int) +javax.net.ssl.SNIServerName.hashCode() +javax.net.ssl.SNIServerName.getEncoded() +javax.net.ssl.SNIServerName.equals(java.lang.Object) +javax.net.ssl.SNIServerName.toString() +javax.net.ssl.SNIServerName.getType() +javax.net.ssl.SSLContext.getDefault() +javax.net.ssl.SSLContext.getProvider() +javax.net.ssl.SSLContext.getProtocol() +com.sun.net.httpserver.HttpsConfigurator.configure(com.sun.net.httpserver.HttpsParameters) +javax.rmi.ssl.SslRMIServerSocketFactory.createServerSocket(int) +javax.net.ssl.SSLContext.getInstance(java.lang.String) +javax.net.ssl.SSLContext.getInstance(java.lang.String, java.security.Provider) +javax.net.ssl.SSLContext.getInstance(java.lang.String, java.lang.String) +com.sun.jndi.ldap.Connection.setHandshakeCompletedListener(javax.net.ssl.SSLSocket) +javax.net.ssl.HandshakeCompletedEvent.getPeerCertificates() +javax.net.ssl.HandshakeCompletedEvent.getPeerCertificateChain() +javax.net.ssl.HandshakeCompletedEvent.getPeerPrincipal() +javax.net.ssl.HandshakeCompletedEvent.getLocalCertificates() +javax.net.ssl.HandshakeCompletedEvent.getCipherSuite() +javax.net.ssl.HandshakeCompletedEvent.getLocalPrincipal() +javax.net.ssl.HandshakeCompletedEvent.getSession() +javax.net.ssl.HandshakeCompletedEvent.<init>(javax.net.ssl.SSLSocket, javax.net.ssl.SSLSession) +javax.net.ssl.HttpsURLConnection.getSSLSocketFactory() +javax.net.ssl.HttpsURLConnection.setSSLSocketFactory(javax.net.ssl.SSLSocketFactory) +javax.net.ssl.HttpsURLConnection.getDefaultHostnameVerifier() +javax.net.ssl.HttpsURLConnection.getDefaultSSLSocketFactory() +javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(javax.net.ssl.SSLSocketFactory) +javax.net.ssl.HttpsURLConnection.setHostnameVerifier(javax.net.ssl.HostnameVerifier) +javax.net.ssl.HttpsURLConnection.getHostnameVerifier() +javax.net.ssl.HttpsURLConnection.getLocalPrincipal() +javax.net.ssl.HttpsURLConnection.getPeerPrincipal() +javax.net.ssl.SSLEngine.getPeerHost() +javax.net.ssl.SSLEngine.getPeerPort() +javax.net.ssl.SSLEngine.unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer) +javax.net.ssl.SSLEngine.unwrap(java.nio.ByteBuffer, [Ljava.nio.ByteBuffer;) +javax.net.ssl.SSLEngine.wrap(java.nio.ByteBuffer, java.nio.ByteBuffer) +javax.net.ssl.SSLEngine.wrap([Ljava.nio.ByteBuffer;, java.nio.ByteBuffer) +jdk.internal.net.http.common.SSLFlowDelegate.monitor() +javax.net.ssl.SNIHostName.equals(java.lang.Object) +javax.net.ssl.SNIHostName.toString() +javax.net.ssl.SNIHostName.hashCode() +javax.net.ssl.SNIHostName.getAsciiName() +sun.security.ssl.SSLSocketFactoryImpl.<init>() +jdk.internal.net.http.common.ImmutableSSLSession.getLocalPrincipal() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getLocalPrincipal() +jdk.internal.net.http.common.ImmutableSSLSession.getId() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getId() +jdk.internal.net.http.common.ImmutableSSLSession.getLastAccessedTime() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getLastAccessedTime() +jdk.internal.net.http.common.ImmutableSSLSession.getPeerPrincipal() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getPeerPrincipal() +jdk.internal.net.http.common.ImmutableSSLSession.getSessionContext() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getSessionContext() +jdk.internal.net.http.common.ImmutableSSLSession.getCreationTime() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getCreationTime() +jdk.internal.net.http.common.ImmutableSSLSession.getPeerHost() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getPeerHost() +jdk.internal.net.http.common.ImmutableSSLSession.isValid() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.isValid() +jdk.internal.net.http.common.ImmutableSSLSession.getCipherSuite() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getCipherSuite() +jdk.internal.net.http.common.ImmutableSSLSession.getProtocol() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getProtocol() +jdk.internal.net.http.common.ImmutableSSLSession.getLocalCertificates() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getLocalCertificates() +jdk.internal.net.http.common.ImmutableSSLSession.getPeerPort() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getPeerPort() +jdk.internal.net.http.common.ImmutableSSLSession.getApplicationBufferSize() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getApplicationBufferSize() +jdk.internal.net.http.common.ImmutableSSLSession.getValue(java.lang.String) +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getValue(java.lang.String) +jdk.internal.net.http.common.ImmutableSSLSession.getPacketBufferSize() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getPacketBufferSize() +jdk.internal.net.http.common.ImmutableSSLSession.getPeerCertificates() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getPeerCertificates() +jdk.internal.net.http.common.ImmutableSSLSession.getValueNames() +jdk.internal.net.http.common.ImmutableExtendedSSLSession.getValueNames() +javax.net.ssl.TrustManagerFactory.getAlgorithm() +javax.net.ssl.TrustManagerFactory.getProvider() +javax.net.ssl.TrustManagerFactory.getInstance(java.lang.String) +javax.net.ssl.TrustManagerFactory.getInstance(java.lang.String, java.security.Provider) +javax.net.ssl.TrustManagerFactory.getInstance(java.lang.String, java.lang.String) +com.sun.net.httpserver.HttpServer.create(java.net.InetSocketAddress, int, java.lang.String, com.sun.net.httpserver.HttpHandler, [Lcom.sun.net.httpserver.Filter;) +com.sun.net.httpserver.HttpsServer.create(java.net.InetSocketAddress, int, java.lang.String, com.sun.net.httpserver.HttpHandler, [Lcom.sun.net.httpserver.Filter;) +com.sun.net.httpserver.Authenticator$Failure.<init>(int) +com.sun.net.httpserver.Authenticator$Retry.<init>(int) +com.sun.net.httpserver.Authenticator$Success.<init>(com.sun.net.httpserver.HttpPrincipal) +com.sun.net.httpserver.Filter.afterHandler(java.lang.String, java.util.function.Consumer) +com.sun.net.httpserver.Headers.get(java.lang.Object) +com.sun.net.httpserver.Headers.hashCode() +com.sun.net.httpserver.Headers.clear() +com.sun.net.httpserver.Headers.containsKey(java.lang.Object) +com.sun.net.httpserver.Headers.values() +com.sun.net.httpserver.Headers.containsValue(java.lang.Object) +com.sun.net.httpserver.Headers.getFirst(java.lang.String) +com.sun.net.httpserver.Headers.keySet() +com.sun.net.httpserver.Headers.put(java.lang.String, java.util.List) +com.sun.net.httpserver.Headers.isEmpty() +com.sun.net.httpserver.Headers.remove(java.lang.Object) +com.sun.net.httpserver.Headers.toString() +com.sun.net.httpserver.Headers.entrySet() +com.sun.net.httpserver.Headers.add(java.lang.String, java.lang.String) +com.sun.net.httpserver.Headers.size() +com.sun.net.httpserver.Headers.equals(java.lang.Object) +com.sun.net.httpserver.Headers.<init>(java.util.Map) +com.sun.net.httpserver.Headers.<init>() +com.sun.net.httpserver.HttpHandlers.of(int, com.sun.net.httpserver.Headers, java.lang.String) +sun.net.httpserver.UnmodifiableHeaders.get(java.lang.Object) +sun.net.httpserver.UnmodifiableHeaders.hashCode() +com.sun.net.httpserver.Request.with(java.lang.String, java.util.List) +sun.net.httpserver.UnmodifiableHeaders.containsKey(java.lang.Object) +sun.net.httpserver.UnmodifiableHeaders.containsValue(java.lang.Object) +com.sun.net.httpserver.BasicAuthenticator.authenticate(com.sun.net.httpserver.HttpExchange) +sun.net.httpserver.UnmodifiableHeaders.getFirst(java.lang.String) +com.sun.net.httpserver.Headers.set(java.lang.String, java.lang.String) +com.sun.net.httpserver.Headers.put(java.lang.Object, java.lang.Object) +sun.net.httpserver.UnmodifiableHeaders.<init>(com.sun.net.httpserver.Headers) +sun.net.httpserver.UnmodifiableHeaders.isEmpty() +com.sun.net.httpserver.Headers.of([Ljava.lang.String;) +sun.net.httpserver.UnmodifiableHeaders.size() +sun.net.httpserver.UnmodifiableHeaders.equals(java.lang.Object) +com.sun.net.httpserver.Headers.of(java.util.Map) +com.sun.net.httpserver.Headers.replaceAll(java.util.function.BiFunction) +com.sun.net.httpserver.Headers.putAll(java.util.Map) +com.sun.net.httpserver.Authenticator$Retry.getResponseCode() +sun.net.httpserver.AuthFilter.doFilter(com.sun.net.httpserver.HttpExchange, com.sun.net.httpserver.Filter$Chain) +com.sun.net.httpserver.HttpsConfigurator.getSSLContext() +com.sun.net.httpserver.HttpsConfigurator.<init>(javax.net.ssl.SSLContext) +com.sun.net.httpserver.Filter$Chain.doFilter(com.sun.net.httpserver.HttpExchange) +com.sun.net.httpserver.HttpHandlers.handleOrElse(java.util.function.Predicate, com.sun.net.httpserver.HttpHandler, com.sun.net.httpserver.HttpHandler) +com.sun.net.httpserver.SimpleFileServer.createFileServer(java.net.InetSocketAddress, java.nio.file.Path, com.sun.net.httpserver.SimpleFileServer$OutputLevel) +com.sun.net.httpserver.SimpleFileServer.createFileHandler(java.nio.file.Path) +sun.net.httpserver.simpleserver.FileServerHandler.create(java.nio.file.Path, java.util.function.UnaryOperator) +com.sun.net.httpserver.Filter.beforeHandler(java.lang.String, java.util.function.Consumer) +sun.net.httpserver.DelegatingHttpExchange.getResponseBody() +sun.net.httpserver.DelegatingHttpExchange.getAttribute(java.lang.String) +sun.net.httpserver.DelegatingHttpExchange.getHttpContext() +sun.net.httpserver.AuthFilter.consumeInput(com.sun.net.httpserver.HttpExchange) +sun.net.httpserver.DelegatingHttpExchange.getRequestBody() +sun.net.httpserver.DelegatingHttpExchange.getProtocol() +sun.net.httpserver.simpleserver.FileServerHandler.handle(com.sun.net.httpserver.HttpExchange) +sun.net.httpserver.DelegatingHttpExchange.getResponseCode() +sun.net.httpserver.DelegatingHttpExchange.getRemoteAddress() +sun.net.httpserver.DelegatingHttpExchange.setAttribute(java.lang.String, java.lang.Object) +sun.net.httpserver.DelegatingHttpExchange.getPrincipal() +sun.net.httpserver.DelegatingHttpExchange.close() +sun.net.httpserver.DelegatingHttpExchange.getResponseHeaders() +sun.net.httpserver.DelegatingHttpExchange.sendResponseHeaders(int, long) +sun.net.httpserver.DelegatingHttpExchange.setStreams(java.io.InputStream, java.io.OutputStream) +sun.net.httpserver.DelegatingHttpExchange.getLocalAddress() +sun.net.httpserver.DelegatingHttpExchange.<init>(com.sun.net.httpserver.HttpExchange) +com.sun.net.httpserver.HttpServer.create() +com.sun.net.httpserver.Filter.adaptRequest(java.lang.String, java.util.function.UnaryOperator) +com.sun.net.httpserver.Filter$Chain.<init>(java.util.List, com.sun.net.httpserver.HttpHandler) +com.sun.net.httpserver.Authenticator$Success.getPrincipal() +com.sun.net.httpserver.Authenticator$Failure.getResponseCode() +sun.net.httpserver.simpleserver.OutputFilter.doFilter(com.sun.net.httpserver.HttpExchange, com.sun.net.httpserver.Filter$Chain) +sun.net.httpserver.simpleserver.OutputFilter.description() +sun.net.httpserver.AuthFilter.<init>(com.sun.net.httpserver.Authenticator) +com.sun.net.httpserver.BasicAuthenticator.getRealm() +com.sun.net.httpserver.BasicAuthenticator.<init>(java.lang.String, java.nio.charset.Charset) +com.sun.net.httpserver.BasicAuthenticator.<init>(java.lang.String) +com.sun.net.httpserver.HttpsParameters.setCipherSuites([Ljava.lang.String;) +com.sun.net.httpserver.HttpsParameters.getCipherSuites() +com.sun.net.httpserver.HttpsParameters.setProtocols([Ljava.lang.String;) +com.sun.net.httpserver.HttpsParameters.getProtocols() +com.sun.net.httpserver.HttpsParameters.getWantClientAuth() +com.sun.net.httpserver.HttpsParameters.setWantClientAuth(boolean) +com.sun.net.httpserver.HttpsParameters.getNeedClientAuth() +com.sun.net.httpserver.HttpsParameters.setNeedClientAuth(boolean) +com.sun.net.httpserver.HttpPrincipal.equals(java.lang.Object) +com.sun.net.httpserver.HttpPrincipal.getName() +com.sun.net.httpserver.HttpPrincipal.hashCode() +com.sun.net.httpserver.HttpPrincipal.getUsername() +com.sun.net.httpserver.HttpPrincipal.<init>(java.lang.String, java.lang.String) +com.sun.net.httpserver.HttpPrincipal.getRealm() +com.sun.net.httpserver.HttpPrincipal.toString() +com.sun.net.httpserver.HttpsServer.create() +sun.net.httpserver.simpleserver.OutputFilter.create(java.io.OutputStream, com.sun.net.httpserver.SimpleFileServer$OutputLevel) +com.sun.net.httpserver.SimpleFileServer$OutputLevel.values() +sun.net.httpserver.Utils.isQuotedStringContent(java.lang.String) +sun.net.httpserver.Utils.isValidName(java.lang.String) +sun.net.httpserver.HttpServerImpl.getAddress() +sun.net.httpserver.HttpServerImpl.bind(java.net.InetSocketAddress, int) +sun.net.httpserver.HttpServerImpl.stop(int) +sun.net.httpserver.HttpServerImpl.removeContext(com.sun.net.httpserver.HttpContext) +sun.net.httpserver.HttpServerImpl.start() +sun.net.httpserver.HttpServerImpl.createContext(java.lang.String, com.sun.net.httpserver.HttpHandler) +sun.net.httpserver.HttpServerImpl.createContext(java.lang.String) +sun.net.httpserver.HttpServerImpl.getExecutor() +sun.net.httpserver.HttpServerImpl.removeContext(java.lang.String) +sun.net.httpserver.HttpServerImpl.setExecutor(java.util.concurrent.Executor) +sun.net.httpserver.DefaultHttpServerProvider.createHttpServer(java.net.InetSocketAddress, int) +sun.net.httpserver.HttpsServerImpl.bind(java.net.InetSocketAddress, int) +sun.net.httpserver.HttpsServerImpl.getExecutor() +sun.net.httpserver.HttpsServerImpl.stop(int) +sun.net.httpserver.HttpsServerImpl.setExecutor(java.util.concurrent.Executor) +sun.net.httpserver.HttpsServerImpl.removeContext(com.sun.net.httpserver.HttpContext) +sun.net.httpserver.HttpsServerImpl.getAddress() +sun.net.httpserver.HttpsServerImpl.createContext(java.lang.String) +sun.net.httpserver.HttpsServerImpl.start() +sun.net.httpserver.HttpsServerImpl.getHttpsConfigurator() +sun.net.httpserver.HttpsServerImpl.setHttpsConfigurator(com.sun.net.httpserver.HttpsConfigurator) +sun.net.httpserver.HttpsServerImpl.removeContext(java.lang.String) +sun.net.httpserver.HttpsServerImpl.createContext(java.lang.String, com.sun.net.httpserver.HttpHandler) +sun.net.httpserver.AuthFilter.setAuthenticator(com.sun.net.httpserver.Authenticator) +sun.net.httpserver.HttpConnection$State.values() +sun.net.httpserver.DefaultHttpServerProvider.createHttpsServer(java.net.InetSocketAddress, int) +sun.net.httpserver.UnmodifiableHeaders.values() +sun.net.httpserver.UnmodifiableHeaders.entrySet() +sun.net.httpserver.UnmodifiableHeaders.keySet() +sun.net.httpserver.UnmodifiableHeaders.remove(java.lang.Object) +sun.net.httpserver.UnmodifiableHeaders.put(java.lang.Object, java.lang.Object) +sun.net.httpserver.UnmodifiableHeaders.replace(java.lang.Object, java.lang.Object) +sun.net.httpserver.UnmodifiableHeaders.replace(java.lang.Object, java.lang.Object, java.lang.Object) \ No newline at end of file diff --git a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/reflection-methods.txt b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/reflection-methods.txt index a496edb8..2cbb0495 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/reflection-methods.txt +++ b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/reflection-methods.txt @@ -1,4 +1,196 @@ sun.reflect.misc java.lang.reflect java.lang.invoke -java.lang.Class.forName \ No newline at end of file +jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(java.lang.reflect.Constructor) +java.lang.reflect.Method.invoke(java.lang.Object, [Ljava.lang.Object;) +jdk.internal.reflect.ReflectionFactory.newFieldAccessor(java.lang.reflect.Field, boolean) +java.lang.reflect.Field.getBoolean(java.lang.Object) +java.lang.reflect.Field.setShort(java.lang.Object, short) +java.lang.reflect.Field.get(java.lang.Object) +java.lang.reflect.Field.getChar(java.lang.Object) +java.lang.reflect.Field.setBoolean(java.lang.Object, boolean) +java.lang.reflect.Field.setInt(java.lang.Object, int) +java.lang.reflect.Field.getLong(java.lang.Object) +java.lang.reflect.Field.set(java.lang.Object, java.lang.Object) +java.lang.reflect.Field.setByte(java.lang.Object, byte) +java.lang.reflect.Field.getFloat(java.lang.Object) +java.lang.reflect.Field.getInt(java.lang.Object) +java.lang.reflect.Field.getShort(java.lang.Object) +java.lang.reflect.Field.setFloat(java.lang.Object, float) +java.lang.reflect.Field.getByte(java.lang.Object) +java.lang.reflect.Field.setChar(java.lang.Object, char) +java.lang.reflect.Field.setLong(java.lang.Object, long) +java.lang.reflect.Field.setDouble(java.lang.Object, double) +java.lang.reflect.Field.getDouble(java.lang.Object) +jdk.internal.reflect.ReflectionFactory.newMethodAccessor(java.lang.reflect.Method, boolean) +jdk.internal.reflect.Reflection.filterFields(java.lang.Class, [Ljava.lang.reflect.Field;) +jdk.internal.reflect.Reflection.registerFieldsToFilter(java.lang.Class, java.util.Set) +jdk.internal.reflect.Reflection.filterMethods(java.lang.Class, [Ljava.lang.reflect.Method;) +jdk.internal.reflect.Reflection.registerMethodsToFilter(java.lang.Class, java.util.Set) +jdk.internal.reflect.Reflection.verifyMemberAccess(java.lang.Class, java.lang.Class, java.lang.Class, int) +jdk.internal.reflect.Reflection.ensureMemberAccess(java.lang.Class, java.lang.Class, java.lang.Class, int) +jdk.internal.reflect.Reflection.newIllegalAccessException(java.lang.Class, java.lang.Class, java.lang.Class, int) +sun.invoke.util.VerifyAccess.isMemberAccessible(java.lang.Class, java.lang.Class, int, java.lang.Class, java.lang.Class, int) +jdk.internal.reflect.Reflection.verifyPublicMemberAccess(java.lang.Class, int) +java.lang.ModuleLayer$Controller.enableNativeAccess(java.lang.Module) +java.lang.foreign.SymbolLookup.libraryLookup(java.nio.file.Path, java.lang.foreign.Arena) +java.lang.foreign.SymbolLookup.libraryLookup(java.lang.String, java.lang.foreign.Arena) +jdk.internal.foreign.AbstractMemorySegmentImpl.reinterpretInternal(java.lang.Class, long, java.lang.foreign.MemorySegment$Scope, java.util.function.Consumer) +jdk.internal.foreign.abi.AbstractLinker.downcallHandle(java.lang.foreign.MemorySegment, java.lang.foreign.FunctionDescriptor, [Ljava.lang.foreign.Linker$Option;) +jdk.internal.foreign.abi.AbstractLinker.upcallStub(java.lang.invoke.MethodHandle, java.lang.foreign.FunctionDescriptor, java.lang.foreign.Arena, [Ljava.lang.foreign.Linker$Option;) +jdk.internal.foreign.abi.AbstractLinker.downcallHandle(java.lang.foreign.FunctionDescriptor, [Ljava.lang.foreign.Linker$Option;) +jdk.internal.foreign.layout.ValueLayouts$OfAddressImpl.withTargetLayout(java.lang.foreign.MemoryLayout) +java.io.ObjectStreamClass.forClass() +java.io.ObjectStreamField.getType() +java.lang.Class.getNestMembers() +java.lang.Class.newInstance() +java.lang.Class.getDeclaredFields() +java.lang.Class.getField(java.lang.String) +java.lang.Class.getConstructors() +java.lang.Class.getResourceAsStream(java.lang.String) +java.lang.Class.getDeclaredConstructors() +java.lang.Class.getMethod(java.lang.String, [Ljava.lang.Class;) +java.lang.Class.getDeclaredClasses() +java.lang.Class.getClassLoader() +java.lang.Class.getDeclaredMethods() +java.lang.Class.forName(java.lang.String) +java.lang.Class.getMethods() +java.lang.Class.getNestHost() +java.lang.Class.getEnclosingMethod() +java.lang.Class.forName(java.lang.Module, java.lang.String) +java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) +java.lang.Class.getEnclosingClass() +java.lang.Class.getFields() +java.lang.Class.getDeclaredMethod(java.lang.String, [Ljava.lang.Class;) +java.lang.Class.getDeclaredConstructor([Ljava.lang.Class;) +java.lang.Class.getEnclosingConstructor() +java.lang.Class.getConstructor([Ljava.lang.Class;) +java.lang.Class.getResource(java.lang.String) +java.lang.Class.getRecordComponents() +java.lang.Class.getPermittedSubclasses() +java.lang.Class.getDeclaredField(java.lang.String) +java.lang.Class.getClasses() +java.lang.Class.getDeclaringClass() +java.lang.ClassLoader.getParent() +java.lang.ClassLoader.getSystemClassLoader() +java.lang.ClassLoader.getPlatformClassLoader() +java.lang.Module.addReads(java.lang.Module) +java.lang.Module.getResourceAsStream(java.lang.String) +java.lang.Module.addExports(java.lang.String, java.lang.Module) +java.lang.Module.addOpens(java.lang.String, java.lang.Module) +java.lang.Module.addUses(java.lang.Class) +java.lang.Package.getPackages() +java.lang.Package.getPackage(java.lang.String) +java.lang.Runtime.loadLibrary(java.lang.String) +java.lang.Runtime.load(java.lang.String) +java.lang.System.getLogger(java.lang.String) +java.lang.System.getLogger(java.lang.String, java.util.ResourceBundle) +java.lang.System.setSecurityManager(java.lang.SecurityManager) +java.lang.System.loadLibrary(java.lang.String) +java.lang.System.load(java.lang.String) +java.lang.Thread.getContextClassLoader() +java.lang.foreign.SymbolLookup.loaderLookup() +java.lang.invoke.MethodHandleProxies.asInterfaceInstance(java.lang.Class, java.lang.invoke.MethodHandle) +java.lang.invoke.MethodHandles.lookup() +java.lang.reflect.AccessibleObject.canAccess(java.lang.Object) +java.lang.reflect.AccessibleObject.trySetAccessible() +java.lang.reflect.AccessibleObject.setAccessible([Ljava.lang.reflect.AccessibleObject;, boolean) +java.lang.reflect.Constructor.newInstance([Ljava.lang.Object;) +java.lang.reflect.Constructor.setAccessible(boolean) +java.lang.reflect.Field.setAccessible(boolean) +java.lang.reflect.InvocationHandler.invokeDefault(java.lang.Object, java.lang.reflect.Method, [Ljava.lang.Object;) +java.lang.reflect.Method.setAccessible(boolean) +java.lang.reflect.Proxy.getProxyClass(java.lang.ClassLoader, [Ljava.lang.Class;) +java.lang.reflect.Proxy.newProxyInstance(java.lang.ClassLoader, [Ljava.lang.Class;, java.lang.reflect.InvocationHandler) +java.lang.reflect.Proxy.getInvocationHandler(java.lang.Object) +java.security.AccessController.doPrivileged(java.security.PrivilegedExceptionAction, java.security.AccessControlContext) +java.security.AccessController.doPrivileged(java.security.PrivilegedAction, java.security.AccessControlContext) +java.security.AccessController.doPrivileged(java.security.PrivilegedAction) +java.security.AccessController.doPrivilegedWithCombiner(java.security.PrivilegedExceptionAction, java.security.AccessControlContext, [Ljava.security.Permission;) +java.security.AccessController.doPrivilegedWithCombiner(java.security.PrivilegedAction, java.security.AccessControlContext, [Ljava.security.Permission;) +java.security.AccessController.doPrivilegedWithCombiner(java.security.PrivilegedAction) +java.security.AccessController.doPrivileged(java.security.PrivilegedAction, java.security.AccessControlContext, [Ljava.security.Permission;) +java.security.AccessController.doPrivileged(java.security.PrivilegedExceptionAction) +java.security.AccessController.doPrivileged(java.security.PrivilegedExceptionAction, java.security.AccessControlContext, [Ljava.security.Permission;) +java.security.AccessController.doPrivilegedWithCombiner(java.security.PrivilegedExceptionAction) +java.sql.DriverManager.deregisterDriver(java.sql.Driver) +java.sql.DriverManager.getConnection(java.lang.String, java.lang.String, java.lang.String) +java.sql.DriverManager.drivers() +java.sql.DriverManager.getDriver(java.lang.String) +java.sql.DriverManager.getConnection(java.lang.String, java.util.Properties) +java.sql.DriverManager.getConnection(java.lang.String) +java.sql.DriverManager.getDrivers() +java.util.ResourceBundle.getBundle(java.lang.String) +java.util.ResourceBundle.getBundle(java.lang.String, java.lang.Module) +java.util.ResourceBundle.getBundle(java.lang.String, java.util.Locale) +java.util.ResourceBundle.getBundle(java.lang.String, java.util.Locale, java.util.ResourceBundle$Control) +java.util.ResourceBundle.getBundle(java.lang.String, java.util.ResourceBundle$Control) +java.util.ResourceBundle.getBundle(java.lang.String, java.util.Locale, java.lang.Module) +java.util.ResourceBundle.getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader) +java.util.ResourceBundle.clearCache() +java.util.ResourceBundle.getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader, java.util.ResourceBundle$Control) +java.util.ServiceLoader.load(java.lang.ModuleLayer, java.lang.Class) +java.util.ServiceLoader.load(java.lang.Class, java.lang.ClassLoader) +java.util.ServiceLoader.load(java.lang.Class) +java.util.ServiceLoader.loadInstalled(java.lang.Class) +java.util.concurrent.atomic.AtomicIntegerFieldUpdater.newUpdater(java.lang.Class, java.lang.String) +java.util.concurrent.atomic.AtomicLongFieldUpdater.newUpdater(java.lang.Class, java.lang.String) +java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(java.lang.Class, java.lang.Class, java.lang.String) +java.util.logging.Logger.getAnonymousLogger(java.lang.String) +java.util.logging.Logger.getLogger(java.lang.String) +java.util.logging.Logger.getLogger(java.lang.String, java.lang.String) +javax.sql.rowset.serial.SerialJavaObject.getFields() +jdk.internal.foreign.AbstractMemorySegmentImpl.reinterpret(long, java.lang.foreign.Arena, java.util.function.Consumer) +jdk.internal.foreign.AbstractMemorySegmentImpl.reinterpret(long) +jdk.internal.foreign.AbstractMemorySegmentImpl.reinterpret(java.lang.foreign.Arena, java.util.function.Consumer) +sun.misc.Unsafe.getUnsafe() +sun.reflect.misc.ReflectUtil.ensureMemberAccess(java.lang.Class, java.lang.Class, java.lang.Object, int) +jdk.internal.reflect.ConstantPool$Tag.values() +jdk.internal.reflect.ConstantPool.getTagAt(int) +jdk.internal.reflect.ReflectionFactory$GetReflectionFactoryAction.run() +jdk.internal.reflect.ConstantPool.getMethodAt(int) +jdk.internal.reflect.ConstantPool.getMemberRefInfoAt(int) +jdk.internal.reflect.ConstantPool.getFieldAt(int) +jdk.internal.reflect.ConstantPool.getMethodAtIfLoaded(int) +jdk.internal.reflect.ConstantPool.getStringAt(int) +jdk.internal.reflect.ConstantPool.getFieldAtIfLoaded(int) +jdk.internal.reflect.ConstantPool.getClassRefIndexAt(int) +jdk.internal.reflect.ConstantPool.getLongAt(int) +jdk.internal.reflect.ConstantPool.getNameAndTypeRefIndexAt(int) +jdk.internal.reflect.ConstantPool.getFloatAt(int) +jdk.internal.reflect.ConstantPool.getUTF8At(int) +jdk.internal.reflect.ConstantPool.getSize() +jdk.internal.reflect.ConstantPool.getClassAt(int) +jdk.internal.reflect.ConstantPool.getIntAt(int) +jdk.internal.reflect.ConstantPool.getDoubleAt(int) +jdk.internal.reflect.ConstantPool.getNameAndTypeRefInfoAt(int) +jdk.internal.reflect.ConstantPool.getClassAtIfLoaded(int) +jdk.internal.reflect.ReflectionFactory.copyConstructor(java.lang.reflect.Constructor) +jdk.internal.reflect.ReflectionFactory.newConstructor(java.lang.Class, [Ljava.lang.Class;, [Ljava.lang.Class;, int, int, java.lang.String, [B, [B) +jdk.internal.reflect.ReflectionFactory.copyField(java.lang.reflect.Field) +jdk.internal.reflect.ReflectionFactory.getExecutableTypeAnnotationBytes(java.lang.reflect.Executable) +jdk.internal.reflect.ReflectionFactory.copyMethod(java.lang.reflect.Method) +jdk.internal.reflect.ReflectionFactory.getConstructorAccessor(java.lang.reflect.Constructor) +jdk.internal.reflect.ReflectionFactory.leafCopyMethod(java.lang.reflect.Method) +jdk.internal.reflect.ReflectionFactory.newInstance(java.lang.reflect.Constructor, [Ljava.lang.Object;, java.lang.Class) +jdk.internal.reflect.ReflectionFactory.setConstructorAccessor(java.lang.reflect.Constructor, jdk.internal.reflect.ConstructorAccessor) +jdk.internal.reflect.ReflectionFactory.getExecutableSharedParameterTypes(java.lang.reflect.Executable) +jdk.internal.reflect.ReflectionFactory.hasStaticInitializerForSerialization(java.lang.Class) +jdk.internal.reflect.ReflectionFactory.getReflectionFactory() +sun.reflect.ReflectionFactory.readResolveForSerialization(java.lang.Class) +jdk.internal.reflect.ReflectionFactory.newConstructorForSerialization(java.lang.Class) +jdk.internal.reflect.ReflectionFactory.newConstructorForSerialization(java.lang.Class, java.lang.reflect.Constructor) +sun.reflect.ReflectionFactory.readObjectForSerialization(java.lang.Class) +jdk.internal.reflect.ReflectionFactory.readResolveForSerialization(java.lang.Class) +jdk.internal.reflect.ReflectionFactory.writeReplaceForSerialization(java.lang.Class) +sun.reflect.ReflectionFactory.readObjectNoDataForSerialization(java.lang.Class) +sun.reflect.ReflectionFactory.writeReplaceForSerialization(java.lang.Class) +sun.reflect.ReflectionFactory.newConstructorForSerialization(java.lang.Class, java.lang.reflect.Constructor) +sun.reflect.ReflectionFactory.newConstructorForExternalization(java.lang.Class) +jdk.internal.reflect.ReflectionFactory.readObjectForSerialization(java.lang.Class) +jdk.internal.reflect.ReflectionFactory.readObjectNoDataForSerialization(java.lang.Class) +jdk.internal.reflect.ReflectionFactory.writeObjectForSerialization(java.lang.Class) +sun.reflect.ReflectionFactory.newOptionalDataExceptionForSerialization(boolean) +sun.reflect.ReflectionFactory.writeObjectForSerialization(java.lang.Class) +sun.reflect.ReflectionFactory.newConstructorForSerialization(java.lang.Class) +sun.reflect.ReflectionFactory.hasStaticInitializerForSerialization(java.lang.Class) \ No newline at end of file diff --git a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/thread-creation-methods.txt b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/thread-creation-methods.txt index e61fe70a..748365e7 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/thread-creation-methods.txt +++ b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/thread-creation-methods.txt @@ -1,3 +1,331 @@ -java.lang.Thread.start -java.lang.Thread.run -java.lang.Thread.unstarted \ No newline at end of file +java.lang.Thread.isInterrupted() +java.lang.Thread.interrupt() +java.lang.Thread.setName(java.lang.String) +java.lang.Thread.getName() +java.lang.Thread.setDefaultUncaughtExceptionHandler(java.lang.Thread$UncaughtExceptionHandler) +java.lang.Thread.getDefaultUncaughtExceptionHandler() +java.lang.Thread.getStackTrace() +java.lang.Thread.getUncaughtExceptionHandler() +java.lang.Thread.threadId() +java.lang.Thread.getContextClassLoader() +java.lang.Thread.setContextClassLoader(java.lang.ClassLoader) +java.lang.Thread.start() +java.lang.Thread.isDaemon() +java.lang.Thread.getThreadGroup() +java.lang.Thread.getPriority() +java.lang.Thread.run() +java.lang.Thread.sleep(java.time.Duration) +java.lang.Thread.sleep(long) +java.lang.Thread.sleep(long, int) +java.lang.Thread.yield() +com.sun.java.accessibility.internal.AccessBridge.<init>() +com.sun.jmx.remote.internal.ClientCommunicatorAdmin.<init>(long) +com.sun.jmx.remote.internal.ServerCommunicatorAdmin.<init>(long) +com.sun.media.sound.SoftAudioPusher.start() +com.sun.org.apache.xml.internal.utils.ThreadControllerWrapper$ThreadController.run(java.lang.Runnable, int) +java.awt.image.renderable.RenderableImageProducer.startProduction(java.awt.image.ImageConsumer) +java.lang.Thread.startVirtualThread(java.lang.Runnable) +javax.swing.JTable.print(javax.swing.JTable$PrintMode, java.text.MessageFormat, java.text.MessageFormat, boolean, javax.print.attribute.PrintRequestAttributeSet, boolean, javax.print.PrintService) +javax.swing.text.JTextComponent.print(java.text.MessageFormat, java.text.MessageFormat, boolean, javax.print.PrintService, javax.print.attribute.PrintRequestAttributeSet, boolean) +javax.swing.text.LayoutQueue.addTask(java.lang.Runnable) +jdk.internal.jshell.tool.StopDetectingInputStream.setInputStream(java.io.InputStream) +jdk.internal.org.jline.terminal.impl.AbstractWindowsTerminal.resume() +jdk.internal.org.jline.terminal.impl.ExternalTerminal.resume() +jdk.internal.org.jline.terminal.impl.PosixPtyTerminal.resume() +jdk.internal.ref.CleanerImpl.start(java.lang.ref.Cleaner, java.util.concurrent.ThreadFactory) +jdk.jfr.internal.consumer.AbstractEventStream.startAsync(long) +jdk.jpackage.internal.IOUtils.getProcessOutput(java.util.List, [Ljava.lang.String;) +org.graalvm.compiler.hotspot.debug.BenchmarkCounters.initialize(jdk.vm.ci.hotspot.HotSpotJVMCIRuntime, org.graalvm.compiler.options.OptionValues) +sun.awt.im.InputMethodManager.getInstance() +sun.awt.windows.WToolkit.<init>() +sun.jvm.hotspot.utilities.StreamMonitor.<init>(java.io.InputStream, java.lang.String, boolean) +sun.jvm.hotspot.utilities.WorkerThread.<init>() +sun.management.jdp.JdpController.startDiscoveryService(java.net.InetAddress, int, java.lang.String, java.lang.String) +sun.print.PrintServiceLookupProvider.<init>() +java.util.Timer.<init>(java.lang.String, boolean) +sun.tools.jconsole.CreateMBeanDialog.actionPerformed(java.awt.event.ActionEvent) +sun.jvm.hotspot.debugger.bsd.BsdDebuggerLocal.<init>(sun.jvm.hotspot.debugger.MachineDescription, boolean) +sun.tools.jconsole.Tab.workerAdd(java.lang.Runnable) +sun.tools.jconsole.VMPanel.connect() +jdk.jshell.execution.Util.forwardExecutionControlAndIO(jdk.jshell.spi.ExecutionControl, java.io.InputStream, java.io.OutputStream, java.util.Map, java.util.Map) +jdk.jshell.execution.Util.remoteInputOutput(java.io.InputStream, java.io.OutputStream, java.util.Map, java.util.Map, java.util.function.BiFunction) +sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.<init>(sun.jvm.hotspot.debugger.MachineDescription, boolean) +org.graalvm.collections.LockFreePrefixTree$ObjectPoolingAllocator.<init>(int) +com.sun.java.accessibility.util.EventQueueMonitor.<init>() +java.util.concurrent.TimeUnit.timedJoin(java.lang.Thread, long) +com.sun.org.apache.xerces.internal.parsers.DOMParserImpl.parseURI(java.lang.String) +com.sun.org.apache.xerces.internal.parsers.DOMParserImpl.parse(org.w3c.dom.ls.LSInput) +java.awt.Robot.delay(int) +java.net.Socket.connect(java.net.SocketAddress, int) +javax.swing.filechooser.FileSystemView.getFiles(java.io.File, boolean) +sun.awt.image.InputStreamImageSource.doFetch() +sun.net.www.http.HttpClient.parseHTTP(sun.net.www.MessageHeader, sun.net.www.protocol.http.HttpURLConnection) +sun.nio.ch.DatagramSocketAdaptor.receive(java.net.DatagramPacket) +java.lang.Thread.getState() +java.lang.Thread.join(java.time.Duration) +com.sun.media.sound.RIFFReader.readFully([B, int, int) +com.sun.media.sound.RIFFReader.skip(long) +com.sun.media.sound.SoftMixingClip.open(javax.sound.sampled.AudioInputStream) +com.sun.tools.example.debug.tty.TTY.exceptionEvent(com.sun.jdi.event.ExceptionEvent) +com.sun.tools.example.debug.tty.TTY.methodExitEvent(com.sun.jdi.event.MethodExitEvent) +com.sun.tools.example.debug.tty.TTY.methodEntryEvent(com.sun.jdi.event.MethodEntryEvent) +com.sun.tools.example.debug.tty.TTY.breakpointEvent(com.sun.jdi.event.BreakpointEvent) +com.sun.tools.example.debug.tty.TTY.fieldWatchEvent(com.sun.jdi.event.WatchpointEvent) +com.sun.tools.example.debug.tty.TTY.stepEvent(com.sun.jdi.event.StepEvent) +com.sun.tools.example.debug.tty.TTY.vmInterrupted() +com.sun.tools.example.debug.tty.TTY.vmStartEvent(com.sun.jdi.event.VMStartEvent) +java.util.concurrent.FutureTask.state() +jdk.internal.vm.ThreadContainers.container(java.lang.Thread) +java.lang.Thread.setUncaughtExceptionHandler(java.lang.Thread$UncaughtExceptionHandler) +java.lang.Thread.setPriority(int) +java.lang.Thread.setDaemon(boolean) +java.util.concurrent.locks.AbstractQueuedLongSynchronizer$ConditionObject.awaitUninterruptibly() +java.util.concurrent.locks.AbstractQueuedLongSynchronizer$ConditionObject.await() +java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitUninterruptibly() +java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await() +java.awt.EventQueue.<init>() +java.lang.SecurityManager.getThreadGroup() +java.lang.SecurityManager.checkAccess(java.lang.Thread) +java.lang.Thread.activeCount() +java.lang.Thread.enumerate([Ljava.lang.Thread;) +java.lang.Thread.toString() +java.lang.ThreadGroup.list() +java.lang.ThreadGroup.interrupt() +java.lang.ThreadGroup.activeCount() +java.lang.ThreadGroup.enumerate([Ljava.lang.Thread;, boolean) +java.lang.ThreadGroup.<init>(java.lang.String) +sun.awt.AppContext.dispose() +sun.awt.SunToolkit.createNewAppContext() +sun.awt.util.ThreadGroupUtils.getRootThreadGroup() +sun.java2d.marlin.MarlinUtils.getRootThreadGroup() +org.graalvm.compiler.nodes.OptimizationLogImpl.emit(java.util.function.Function) +org.graalvm.compiler.serviceprovider.GraalServices.getThreadId(java.lang.Thread) +com.sun.tools.example.debug.tty.TTY.<init>() +sun.awt.windows.WToolkit.run() +org.graalvm.compiler.core.CompilerThread.<init>(java.lang.Runnable, java.lang.String) +sun.tools.jconsole.Worker.<init>(java.lang.String) +com.sun.media.sound.SoftMixingSourceDataLine.drain() +com.sun.media.sound.SoftMixingSourceDataLine.write([B, int, int) +java.lang.Process.waitFor(long, java.util.concurrent.TimeUnit) +java.rmi.server.UID.<init>() +javax.swing.AbstractButton.doClick(int) +jdk.internal.net.http.common.SSLFlowDelegate$Monitor.run() +jdk.jfr.internal.Utils.takeNap(long) +jdk.jfr.snippets.Snippets.main([Ljava.lang.String;) +org.graalvm.compiler.core.CompilationWatchDog.run() +sun.net.www.http.KeepAliveCache.run() +sun.rmi.registry.RegistryImpl.main([Ljava.lang.String;) +sun.tools.jstat.JStatLogger.logSamples(sun.tools.jstat.OutputFormatter, int, int, int, java.io.PrintStream) +java.util.concurrent.TimeUnit.sleep(long) +com.sun.beans.finder.ClassFinder.findClass(java.lang.String) +com.sun.jmx.remote.internal.ClientNotifForwarder.postReconnection([Lcom.sun.jmx.remote.internal.ClientListenerInfo;) +com.sun.jmx.remote.util.EnvHelp.resolveClientClassLoader(java.util.Map) +com.sun.jmx.remote.util.EnvHelp.resolveServerClassLoader(java.util.Map, javax.management.MBeanServer) +com.sun.management.ThreadMXBean.getCurrentThreadAllocatedBytes() +com.sun.media.sound.SoftMixingMixer.open(javax.sound.sampled.SourceDataLine) +com.sun.media.sound.SoftMixingMixerProvider.getMixer(javax.sound.sampled.Mixer$Info) +com.sun.org.apache.xerces.internal.parsers.DOMParserImpl.abort() +com.sun.org.apache.xml.internal.security.Init.getResource(java.lang.String, java.lang.Class) +com.sun.org.apache.xml.internal.utils.SafeThread.run() +java.awt.Container.print(java.awt.Graphics) +java.awt.Container.paint(java.awt.Graphics) +java.awt.Window.applyResourceBundle(java.lang.String) +java.io.PipedInputStream.read() +java.io.PipedReader.read() +java.io.PrintStream.format(java.lang.String, [Ljava.lang.Object;) +java.io.PrintStream.format(java.util.Locale, java.lang.String, [Ljava.lang.Object;) +java.io.PrintStream.write(int) +java.io.PrintStream.write([B, int, int) +java.lang.Object.wait(long) +java.lang.ProcessBuilder.startPipeline(java.util.List) +java.lang.Thread.interrupted() +java.lang.ThreadLocal.set(java.lang.Object) +java.lang.ThreadLocal.remove() +java.lang.ThreadLocal.get() +java.lang.foreign.Arena.ofConfined() +java.lang.invoke.MethodHandleProxies.asInterfaceInstance(java.lang.Class, java.lang.invoke.MethodHandle) +java.net.http.HttpClient.close() +java.rmi.server.LogStream.write(int) +java.util.ServiceLoader.load(java.lang.Class) +java.util.concurrent.CountedCompleter.helpComplete(int) +java.util.concurrent.DelayQueue.poll(long, java.util.concurrent.TimeUnit) +java.util.concurrent.DelayQueue.take() +java.util.concurrent.ExecutorService.close() +java.util.concurrent.ForkJoinPool.managedBlock(java.util.concurrent.ForkJoinPool$ManagedBlocker) +java.util.concurrent.ForkJoinPool.close() +java.util.concurrent.ForkJoinTask.inForkJoinPool() +java.util.concurrent.ForkJoinTask.fork() +java.util.concurrent.ForkJoinTask.getPool() +java.util.concurrent.ForkJoinTask.tryUnfork() +java.util.concurrent.ForkJoinTask.getQueuedTaskCount() +java.util.concurrent.Future.state() +java.util.concurrent.Future.resultNow() +java.util.concurrent.Future.exceptionNow() +java.util.concurrent.FutureTask.run() +java.util.concurrent.StructuredTaskScope.fork(java.util.concurrent.Callable) +java.util.concurrent.SubmissionPublisher.subscribe(java.util.concurrent.Flow$Subscriber) +java.util.concurrent.ThreadLocalRandom.current() +java.util.concurrent.locks.AbstractQueuedLongSynchronizer.hasQueuedPredecessors() +java.util.concurrent.locks.AbstractQueuedLongSynchronizer$ConditionObject.awaitUntil(java.util.Date) +java.util.concurrent.locks.AbstractQueuedLongSynchronizer$ConditionObject.await(long, java.util.concurrent.TimeUnit) +java.util.concurrent.locks.AbstractQueuedLongSynchronizer$ConditionObject.awaitNanos(long) +java.util.concurrent.locks.AbstractQueuedSynchronizer.hasQueuedPredecessors() +java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(long) +java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(long, java.util.concurrent.TimeUnit) +java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitUntil(java.util.Date) +java.util.concurrent.locks.LockSupport.parkUntil(java.lang.Object, long) +java.util.concurrent.locks.LockSupport.park() +java.util.concurrent.locks.LockSupport.parkNanos(java.lang.Object, long) +java.util.concurrent.locks.LockSupport.parkNanos(long) +java.util.concurrent.locks.LockSupport.setCurrentBlocker(java.lang.Object) +java.util.concurrent.locks.LockSupport.parkUntil(long) +java.util.concurrent.locks.LockSupport.park(java.lang.Object) +java.util.logging.LogManager.readConfiguration() +java.util.logging.LogRecord.<init>(java.util.logging.Level, java.lang.String) +javax.imageio.spi.IIORegistry.registerApplicationClasspathSpis() +javax.naming.spi.NamingManager.getInitialContext(java.util.Hashtable) +javax.print.SimpleDoc.<init>(java.lang.Object, javax.print.DocFlavor, javax.print.attribute.DocAttributeSet) +javax.script.ScriptEngineManager.<init>() +javax.sql.rowset.spi.SyncFactory.getInstance(java.lang.String) +javax.swing.JEditorPane.registerEditorKitForContentType(java.lang.String, java.lang.String) +javax.swing.text.AbstractDocument.readLock() +javax.swing.text.AbstractDocument.readUnlock() +jdk.internal.foreign.MemorySessionImpl.checkValidStateRaw() +jdk.internal.loader.Resource.getBytes() +jdk.internal.misc.InnocuousThread.run() +jdk.internal.misc.ThreadFlock.close() +jdk.internal.misc.ThreadFlock.wakeup() +jdk.internal.misc.ThreadTracker.begin() +jdk.internal.misc.ThreadTracker.tryBegin() +jdk.internal.misc.ThreadTracker.end(java.lang.Object) +jdk.internal.org.jline.reader.impl.LineReaderImpl.readLine(java.lang.String, java.lang.String, jdk.internal.org.jline.reader.MaskingCallback, java.lang.String) +jdk.internal.org.jline.terminal.spi.TerminalProvider.load(java.lang.String) +jdk.internal.ref.CleanerImpl.run() +jdk.internal.vm.ScopedValueContainer.latest(java.lang.Class) +jdk.internal.vm.StackableScope.push() +jdk.internal.vm.StackableScope.popForcefully() +jdk.internal.vm.StackableScope.tryPop() +jdk.internal.vm.StackableScope.popAll() +jdk.jfr.internal.management.StreamBarrier.check() +jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.attachCurrentThread(boolean, [J) +jdk.vm.ci.hotspot.HotSpotStackFrameReference.materializeVirtualObjects(boolean) +jdk.vm.ci.hotspot.HotSpotStackIntrospection.canMaterializeVirtualObjects() +jdk.xml.internal.SecuritySupport.getClassLoader() +jdk.xml.internal.SecuritySupport.getContextClassLoader() +org.graalvm.compiler.core.CompilationWatchDog.watch(org.graalvm.compiler.core.common.CompilationIdentifier, org.graalvm.compiler.options.OptionValues, boolean, org.graalvm.compiler.core.CompilationWatchDog$EventHandler) +org.graalvm.compiler.debug.TTY$Filter.remove() +org.graalvm.compiler.debug.TTY$Filter.<init>(org.graalvm.compiler.debug.LogStream) +org.graalvm.compiler.debug.TTY$Filter.<init>() +org.graalvm.compiler.serviceprovider.GraalServices.getCurrentThreadId() +org.graalvm.nativeimage.hosted.RuntimeClassInitialization.initializeAtRunTime([Ljava.lang.Class;) +org.graalvm.nativeimage.hosted.RuntimeClassInitialization.initializeAtBuildTime([Ljava.lang.String;) +org.graalvm.nativeimage.hosted.RuntimeClassInitialization.initializeAtBuildTime([Ljava.lang.Class;) +org.graalvm.nativeimage.hosted.RuntimeClassInitialization.initializeAtRunTime([Ljava.lang.String;) +sun.awt.AWTAutoShutdown.run() +sun.awt.Mutex.lock() +sun.awt.Mutex.unlock() +sun.awt.dnd.SunDropTargetContextPeer.getTransferData(java.awt.datatransfer.DataFlavor) +sun.awt.image.ImageDecoder.<init>(sun.awt.image.InputStreamImageSource, java.io.InputStream) +sun.awt.image.ImageRepresentation.reconstruct(int) +sun.awt.shell.ShellFolder.invoke(java.util.concurrent.Callable, java.lang.Class) +sun.java2d.d3d.D3DRenderQueue.isRenderQueueThread() +sun.java2d.opengl.OGLRenderQueue.isQueueFlusherThread() +sun.jvm.hotspot.utilities.ProcImageClassLoader.<init>() +sun.management.ThreadImpl.getCurrentThreadUserTime() +sun.management.ThreadImpl.getCurrentThreadCpuTime() +sun.nio.ch.NativeThread.current() +sun.nio.ch.SelChImpl.park(int, long) +sun.rmi.registry.RegistryImpl.createRegistry(int) +sun.rmi.transport.Target.<init>(java.rmi.Remote, sun.rmi.server.Dispatcher, java.rmi.Remote, java.rmi.server.ObjID, boolean) +sun.rmi.transport.Transport.serviceCall(java.rmi.server.RemoteCall) +sun.swing.DefaultLookup.setDefaultLookup(sun.swing.DefaultLookup) +sun.swing.DefaultLookup.get(javax.swing.JComponent, javax.swing.plaf.ComponentUI, java.lang.String) +sun.tools.jconsole.VMPanel.getProxyClient() +java.io.PipedReader.ready() +java.io.PipedReader.read([C, int, int) +java.lang.Thread.join(long, int) +java.lang.Thread.join(long) +sun.net.www.http.KeepAliveCache.put(java.net.URL, java.lang.Object, sun.net.www.http.HttpClient) +sun.print.PrintJob2D.end() +java.util.concurrent.Exchanger.exchange(java.lang.Object) +java.util.concurrent.Exchanger.exchange(java.lang.Object, long, java.util.concurrent.TimeUnit) +java.util.concurrent.ForkJoinTask.get(long, java.util.concurrent.TimeUnit) +java.util.concurrent.ForkJoinTask.quietlyJoin(long, java.util.concurrent.TimeUnit) +java.util.concurrent.ForkJoinTask.get() +java.util.concurrent.LinkedTransferQueue.tryTransfer(java.lang.Object, long, java.util.concurrent.TimeUnit) +java.util.concurrent.LinkedTransferQueue.take() +java.util.concurrent.LinkedTransferQueue.transfer(java.lang.Object) +java.util.concurrent.LinkedTransferQueue.poll(long, java.util.concurrent.TimeUnit) +java.util.concurrent.SynchronousQueue.take() +java.util.concurrent.SynchronousQueue.offer(java.lang.Object, long, java.util.concurrent.TimeUnit) +java.util.concurrent.SynchronousQueue.put(java.lang.Object) +java.util.concurrent.SynchronousQueue.poll(long, java.util.concurrent.TimeUnit) +java.util.concurrent.locks.AbstractQueuedLongSynchronizer.tryAcquireSharedNanos(long, long) +java.util.concurrent.locks.AbstractQueuedLongSynchronizer.tryAcquireNanos(long, long) +java.util.concurrent.locks.AbstractQueuedLongSynchronizer.acquireInterruptibly(long) +java.util.concurrent.locks.AbstractQueuedLongSynchronizer.acquireSharedInterruptibly(long) +java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireNanos(int, long) +java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(int) +java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(int, long) +java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(int) +java.util.concurrent.locks.StampedLock.tryWriteLock(long, java.util.concurrent.TimeUnit) +java.util.concurrent.locks.StampedLock.readLockInterruptibly() +java.util.concurrent.locks.StampedLock.tryReadLock(long, java.util.concurrent.TimeUnit) +java.util.concurrent.locks.StampedLock.writeLockInterruptibly() +jdk.internal.misc.ThreadFlock.awaitAll() +jdk.internal.misc.ThreadFlock.awaitAll(java.time.Duration) +jdk.internal.org.jline.utils.NonBlockingInputStreamImpl.read(long, boolean) +java.lang.Thread.isAlive() +java.lang.ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable) +java.lang.ThreadGroup.setMaxPriority(int) +jdk.jfr.internal.PlatformRecorder.newTemporaryRecording() +jdk.jfr.internal.PlatformRecording.newSnapshotClone(java.lang.String, java.lang.Boolean) +java.lang.Thread.getAllStackTraces() +java.util.concurrent.Executors.newVirtualThreadPerTaskExecutor() +java.util.concurrent.StructuredTaskScope.<init>() +java.util.concurrent.StructuredTaskScope$ShutdownOnFailure.<init>() +java.util.concurrent.StructuredTaskScope$ShutdownOnSuccess.<init>() +java.lang.Thread.getId() +java.security.AccessControlContext.checkPermission(java.security.Permission) +java.security.AccessController.checkPermission(java.security.Permission) +sun.font.SunFontManager.loadFontFiles() +jdk.jfr.internal.SecuritySupport.setDaemonThread(java.lang.Thread, boolean) +sun.awt.windows.WToolkit.displayChanged() +sun.rmi.runtime.NewThreadAction.run() +java.lang.Thread.<init>(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String, long, boolean) +java.lang.Thread.<init>(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String) +java.lang.Thread.<init>(java.lang.ThreadGroup, java.lang.String) +java.lang.Thread.<init>(java.lang.String) +java.lang.Thread.<init>(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String, long) +java.lang.Thread.<init>(java.lang.Runnable, java.lang.String) +java.lang.Thread.join() +com.sun.media.sound.SoftAudioPusher.stop() +com.sun.org.apache.xml.internal.utils.ThreadControllerWrapper$ThreadController.waitThread(java.lang.Thread, java.lang.Runnable) +jdk.internal.org.jline.terminal.impl.AbstractWindowsTerminal.pause(boolean) +jdk.internal.org.jline.terminal.impl.ExternalTerminal.pause(boolean) +jdk.internal.org.jline.terminal.impl.PosixPtyTerminal.pause(boolean) +org.graalvm.collections.LockFreePrefixTree$ObjectPoolingAllocator.shutdown() +org.graalvm.compiler.core.CompilerThread.run() +java.util.concurrent.locks.LockSupport.unpark(java.lang.Thread) +jdk.internal.vm.SharedThreadContainer.onStart(java.lang.Thread) +jdk.internal.vm.SharedThreadContainer.onExit(java.lang.Thread) +java.util.concurrent.FutureTask.cancel(boolean) +javax.swing.plaf.basic.BasicDirectoryModel.invalidateFileCache() +javax.swing.plaf.basic.BasicDirectoryModel.validateFileCache() +jdk.jshell.execution.LocalExecutionControl.stop() +java.util.concurrent.locks.ReentrantLock.toString() +java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.toString() +org.graalvm.compiler.core.CompilationWatchDog.toString() +com.sun.imageio.stream.StreamCloser.addToQueue(com.sun.imageio.stream.StreamCloser$CloseAction) +jdk.internal.misc.InnocuousThread.setContextClassLoader(java.lang.ClassLoader) +sun.font.SunFontManager.createFont2D(java.io.File, int, boolean, boolean, sun.font.CreatedFontTracker) +sun.java2d.d3d.D3DScreenUpdateManager.<init>() +sun.java2d.loops.GraphicsPrimitive$TraceReporter.setShutdownHook() +com.sun.org.apache.xml.internal.utils.SafeThread.<init>(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String) +java.lang.Thread.<init>(java.lang.Runnable) +java.lang.Thread.<init>(java.lang.ThreadGroup, java.lang.Runnable) +java.lang.Thread.<init>() +sun.jvm.hotspot.HotSpotAgent.<init>() +org.graalvm.compiler.core.GraalServiceThread.<init>(java.lang.String, java.lang.Runnable) +jdk.jfr.internal.SecuritySupport.createThreadWitNoPermissions(java.lang.String, java.lang.Runnable) +jdk.internal.vm.SharedThreadContainer.threads() \ No newline at end of file From 9179eb3ae2410bb3bce0f1a58d18fac437d4e041 Mon Sep 17 00:00:00 2001 From: sarps Date: Sun, 13 Oct 2024 01:55:49 +0200 Subject: [PATCH 02/20] Improve Aspectj and take a look at translations --- .../JavaAspectJFileSystemAdviceDefinitions.aj | 9 +++------ .../JavaAspectJFileSystemPointcutDefinitions.aj | 12 ------------ 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj b/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj index 360fdde2..d9233009 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj @@ -232,7 +232,7 @@ public aspect JavaAspectJFileSystemAdviceDefinitions { de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.bufferedReaderInitMethods() || de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.scannerInitMethods() || de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.fileReaderInitMethods() || - de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.lineNumberReaderInitMethods() || + de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.desktopExecuteMethods() || de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.randomAccessFileInitMethods() { checkFileSystemInteraction("read", thisJoinPoint); } @@ -246,11 +246,7 @@ public aspect JavaAspectJFileSystemAdviceDefinitions { de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.fileHandlerMethods() || de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.fileSystemProviderWriteMethods() || de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.printWriterInitMethods() || - de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.bufferedWriterInitMethods() || - de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.outputStreamWriterInitMethods() || - de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.dataOutputStreamInitMethods() || - de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.objectOutputStreamInitMethods() || - de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.printStreamInitMethods() { + de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.desktopExecuteMethods() { checkFileSystemInteraction("write", thisJoinPoint); } @@ -268,6 +264,7 @@ public aspect JavaAspectJFileSystemAdviceDefinitions { before(): de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.fileDeleteMethods() || de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.filesDeleteMethods() || + de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.desktopExecuteMethods() || de.tum.cit.ase.ares.api.aop.java.aspectj.adviceandpointcut.JavaAspectJFileSystemPointcutDefinitions.fileSystemProviderDeleteMethods() { checkFileSystemInteraction("delete", thisJoinPoint); } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemPointcutDefinitions.aj b/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemPointcutDefinitions.aj index db9ace23..f493382f 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemPointcutDefinitions.aj +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemPointcutDefinitions.aj @@ -222,20 +222,8 @@ public aspect JavaAspectJFileSystemPointcutDefinitions { pointcut fileReaderInitMethods(): call(java.io.FileReader.new(..)); - pointcut lineNumberReaderInitMethods(): call(java.io.LineNumberReader.new(..)); - pointcut printWriterInitMethods(): call(java.io.PrintWriter.new(..)); - pointcut bufferedWriterInitMethods(): call(java.io.BufferedWriter.new(..)); - - pointcut outputStreamWriterInitMethods(): call(java.io.OutputStreamWriter.new(..)); - - pointcut dataOutputStreamInitMethods(): call(java.io.DataOutputStream.new(..)); - - pointcut objectOutputStreamInitMethods(): call(java.io.ObjectOutputStream.new(..)); - - pointcut printStreamInitMethods(): call(java.io.PrintStream.new(..)); - //TODO Sarp: These should definitely be considered in different pointcut files or this one pointcut desktopExecuteMethods(): (call(* java.awt.Desktop.browse(..)) || From 62708b8f7568caa721be7db3a81144473c1acfe7 Mon Sep 17 00:00:00 2001 From: sarps Date: Mon, 14 Oct 2024 16:04:37 +0200 Subject: [PATCH 03/20] Translation of error messages not yet complete check the AOP methods again and also the SecurityAdviceSettings, JavaSecurityTestCaseFactoryAndBuilder, JqwikSecurityExtension and JupiterSecurityException --- .../ase/ares/api/aop/java/JavaAOPMode.java | 10 +++-- .../JavaAspectJFileSystemAdviceDefinitions.aj | 26 ++++++------ .../JavaInstrumentationAgent.java | 4 +- .../JavaInstrumentationAdviceToolbox.java | 26 ++++++------ ...InstrumentationDeletePathMethodAdvice.java | 17 +++----- ...nstrumentationExecutePathMethodAdvice.java | 17 +++----- ...trumentationOverwritePathMethodAdvice.java | 19 ++++----- ...vaInstrumentationReadPathMethodAdvice.java | 17 +++----- ...JavaInstrumentationBindingDefinitions.java | 24 ++++++----- ...avaInstrumentationPointcutDefinitions.java | 4 +- .../java/archunit/FileHandlerConstants.java | 4 +- .../JavaArchUnitSecurityTestCase.java | 3 +- .../JavaArchitectureTestCaseCollection.java | 3 +- .../TransitivelyAccessesMethodsCondition.java | 15 +------ ...JavaSecurityTestCaseFactoryAndBuilder.java | 1 - .../ares/api/localization/messages.properties | 40 +++++++++++++++++++ .../api/localization/messages_de.properties | 40 +++++++++++++++++++ 17 files changed, 167 insertions(+), 103 deletions(-) diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaAOPMode.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaAOPMode.java index ea46c8ff..064b5260 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaAOPMode.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaAOPMode.java @@ -9,6 +9,8 @@ import java.util.List; import java.util.stream.Stream; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; + /** * Enum representing the different modes of Aspect-Oriented Programming (AOP) * available for Java in Ares. @@ -212,16 +214,16 @@ public void reset() { method.setAccessible(false); } catch (ClassNotFoundException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): The class for the specific security test case settings could not be found. Ensure the class name is correct and the class is available at runtime.", e); + throw new SecurityException(localized("security.creation.reset.class.not.found.exception"), e); } catch (NoSuchMethodException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): The 'reset' method could not be found in the specified class. Ensure the method exists and is correctly named.", e); + throw new SecurityException(localized("security.creation.reset.no.method.exception"), e); } catch (IllegalAccessException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Access to the 'reset' method was denied. Ensure the method is public and accessible.", e); + throw new SecurityException(localized("security.creation.reset.illegal.access.exception"), e); } catch (InvocationTargetException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): An error occurred while invoking the 'reset' method. This could be due to an underlying issue within the method implementation.", e); + throw new SecurityException(localized("security.creation.reset.invocation.target.exception"), e); } } // diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj b/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj index d9233009..6a296ae7 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj @@ -8,6 +8,8 @@ import java.lang.reflect.InaccessibleObjectException; import java.nio.file.InvalidPathException; import java.nio.file.Path; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; + public aspect JavaAspectJFileSystemAdviceDefinitions { // @@ -30,17 +32,17 @@ public aspect JavaAspectJFileSystemAdviceDefinitions { field.setAccessible(false); return value; } catch (LinkageError e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Linkage error while accessing field '" + fieldName + "' in AdviceSettings", e); + throw new SecurityException(localized("security.advice.linkage.exception").formatted(fieldName), e); } catch (ClassNotFoundException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Could not find 'JavaSecurityTestCaseSettings' class to access field '" + fieldName + "'", e); + throw new SecurityException(localized("security.advice.class.not.found.exception").formatted(fieldName), e); } catch (NoSuchFieldException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '" + fieldName + "' not found in AdviceSettings", e); + throw new SecurityException(localized("security.advice.no.such.field.exception").formatted(fieldName), e); } catch (NullPointerException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Null pointer exception while accessing field '" + fieldName + "' in AdviceSettings", e); + throw new SecurityException(localized("security.advice.null.pointer.exception").formatted(fieldName), e); } catch (IllegalAccessException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '" + fieldName + "' is not accessible in AdviceSettings", e); + throw new SecurityException(localized("security.advice.illegal.access.exception").formatted(fieldName), e); } catch (InaccessibleObjectException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '" + fieldName + "' is inaccessible in AdviceSettings", e); + throw new SecurityException(localized("security.advice.inaccessible.object.exception").formatted(fieldName), e); } } // @@ -109,30 +111,30 @@ public aspect JavaAspectJFileSystemAdviceDefinitions { */ private static Path variableToPath(Object variableValue) { if (variableValue == null) { - throw new InvalidPathException("null", "Cannot transform to path"); + throw new InvalidPathException("null", localized("security.advice.transform.path.exception")); } else if (variableValue instanceof Path) { Path path = (Path) variableValue; try { return path.normalize().toAbsolutePath(); } catch (InvalidPathException e) { - throw new InvalidPathException(path.toString(), "Cannot transform to path"); + throw new InvalidPathException(path.toString(), localized("security.advice.transform.path.exception")); } } else if (variableValue instanceof String) { String string = (String) variableValue; try { return Path.of(string).normalize().toAbsolutePath(); } catch (InvalidPathException e) { - throw new InvalidPathException(string, "Cannot transform to path"); + throw new InvalidPathException(string, localized("security.advice.transform.path.exception")); } } else if (variableValue instanceof File) { File file = (File) variableValue; try { return Path.of(file.toURI()).normalize().toAbsolutePath(); } catch (InvalidPathException e) { - throw new InvalidPathException(file.toString(), "Cannot transform to path"); + throw new InvalidPathException(file.toString(), localized("security.advice.transform.path.exception")); } } else { - throw new InvalidPathException(variableValue.toString(), "Cannot transform to path"); + throw new InvalidPathException(variableValue.toString(), localized("security.advice.transform.path.exception")); } } @@ -214,7 +216,7 @@ public aspect JavaAspectJFileSystemAdviceDefinitions { if (illegallyReadingMethod != null) { String illegallyReadPath = (parameters == null || parameters.length == 0) ? null : checkIfVariableCriteriaIsViolated(parameters, allowedPaths); if (illegallyReadPath != null) { - throw new SecurityException("Ares Security Error (Reason: Student-Code; Stage: Execution):" + illegallyReadingMethod + " tried to illegally " + action + " from " + illegallyReadPath + " via " + fullMethodSignature + "but was blocked by Ares."); + throw new SecurityException(localized("security.advice.illegal.method.execution").formatted(illegallyReadingMethod, action, illegallyReadPath, fullMethodSignature)); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/JavaInstrumentationAgent.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/JavaInstrumentationAgent.java index ee3fec8a..03769069 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/JavaInstrumentationAgent.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/JavaInstrumentationAgent.java @@ -9,6 +9,8 @@ import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.matcher.ElementMatchers; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; + /** * This class is the entry point for the Java instrumentation agent. * It installs the agent builder for the different types of file operations. @@ -58,7 +60,7 @@ private static void installAgentBuilder( .transform(transformer) .installOn(inst); } catch (Exception e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Failed to install agent builder on " + String.join(", ", methodsMap.keySet()) + ".", e); + throw new SecurityException(localized("security.instrumentation.agent.installation.error").formatted(String.join(", ", methodsMap.keySet())), e); } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java index ded44033..28bdc49b 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java @@ -6,6 +6,8 @@ import java.nio.file.InvalidPathException; import java.nio.file.Path; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; + /** * Utility class for the Java instrumentation advice. *

@@ -50,17 +52,17 @@ private static Object getValueFromSettings(String fieldName) { field.setAccessible(false); return value; } catch (LinkageError e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Linkage error while accessing field '" + fieldName + "' in AdviceSettings", e); + throw new SecurityException(localized("security.advice.linkage.exception").formatted(fieldName), e); } catch (ClassNotFoundException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Could not find 'JavaSecurityTestCaseSettings' class to access field '" + fieldName + "'", e); + throw new SecurityException(localized("security.advice.class.not.found.exception").formatted(fieldName), e); } catch (NoSuchFieldException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '" + fieldName + "' not found in AdviceSettings", e); + throw new SecurityException(localized("security.advice.no.such.field.exception").formatted(fieldName), e); } catch (NullPointerException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Null pointer exception while accessing field '" + fieldName + "' in AdviceSettings", e); + throw new SecurityException(localized("security.advice.null.pointer.exception").formatted(fieldName), e); } catch (IllegalAccessException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '" + fieldName + "' is not accessible in AdviceSettings", e); + throw new SecurityException(localized("security.advice.illegal.access.exception").formatted(fieldName), e); } catch (InaccessibleObjectException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '" + fieldName + "' is inaccessible in AdviceSettings", e); + throw new SecurityException(localized("security.advice.inaccessible.object.exception").formatted(fieldName), e); } } // @@ -130,30 +132,30 @@ private static String checkIfCallstackCriteriaIsViolated(String restrictedPackag */ private static Path variableToPath(Object variableValue) { if (variableValue == null) { - throw new InvalidPathException("null", "Cannot transform to path"); + throw new InvalidPathException("null", localized("security.advice.transform.path.exception")); } else if (variableValue instanceof Path) { Path path = (Path) variableValue; try { return path.normalize().toAbsolutePath(); } catch (InvalidPathException e) { - throw new InvalidPathException(path.toString(), "Cannot transform to path"); + throw new InvalidPathException(path.toString(), localized("security.advice.transform.path.exception")); } } else if (variableValue instanceof String) { String string = (String) variableValue; try { return Path.of(string).normalize().toAbsolutePath(); } catch (InvalidPathException e) { - throw new InvalidPathException(string, "Cannot transform to path"); + throw new InvalidPathException(string, localized("security.advice.transform.path.exception")); } } else if (variableValue instanceof File) { File file = (File) variableValue; try { return Path.of(file.toURI()).normalize().toAbsolutePath(); } catch (InvalidPathException e) { - throw new InvalidPathException(file.toString(), "Cannot transform to path"); + throw new InvalidPathException(file.toString(), localized("security.advice.transform.path.exception")); } } else { - throw new InvalidPathException(variableValue.toString(), "Cannot transform to path"); + throw new InvalidPathException(variableValue.toString(), localized("security.advice.transform.path.exception")); } } @@ -245,7 +247,7 @@ public static void checkFileSystemInteraction( illegallyReadPath = (attributes == null || attributes.length == 0) ? null : checkIfVariableCriteriaIsViolated(attributes, allowedPaths); } if (illegallyReadPath != null) { - throw new SecurityException("Ares Security Error (Reason: Student-Code; Stage: Execution):" + illegallyReadingMethod + " tried to illegally " + action + " from " + illegallyReadPath + " via " + fullMethodSignature + "but was blocked by Ares."); + throw new SecurityException(localized("security.advice.illegal.method.execution").formatted(illegallyReadingMethod, action, illegallyReadPath, fullMethodSignature)); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationDeletePathMethodAdvice.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationDeletePathMethodAdvice.java index 415984e7..ba9634bd 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationDeletePathMethodAdvice.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationDeletePathMethodAdvice.java @@ -3,6 +3,7 @@ import java.lang.reflect.Field; import java.lang.reflect.InaccessibleObjectException; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; import static net.bytebuddy.asm.Advice.*; /** @@ -50,21 +51,15 @@ public static void onEnter( fields[i].setAccessible(true); attributes[i] = fields[i].get(instance); } catch (InaccessibleObjectException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Unable to make field '" + fields[i].getName() + "' in class '" - + instance.getClass().getName() + "' accessible due to JVM security restrictions.", e); + throw new SecurityException(localized("security.instrumentation.inaccessible.object.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalAccessException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Access denied to field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "'. Field access is not permitted.", e); + throw new SecurityException(localized("security.instrumentation.illegal.access.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalArgumentException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '" + fields[i].getName() + "' in class '" - + fields[i].getDeclaringClass().getName() + "' cannot be accessed because the provided instance is of type '" - + instance.getClass().getName() + "', which is not the declaring class or interface.", e); + throw new SecurityException(localized("security.instrumentation.illegal.argument.exception").formatted(fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); } catch (NullPointerException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): The field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "' is unexpectedly null. This may indicate a corrupt or improperly initialized object.", e); + throw new SecurityException(localized("security.instrumentation.null.pointer.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (ExceptionInInitializerError e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Initialization of the field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "' failed due to an error during static initialization or field setup.", e); + throw new SecurityException(localized("security.instrumentation.exception.in-initializer.error").formatted(fields[i].getName(), instance.getClass().getName()), e); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationExecutePathMethodAdvice.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationExecutePathMethodAdvice.java index 62b3c964..94999e3a 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationExecutePathMethodAdvice.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationExecutePathMethodAdvice.java @@ -3,6 +3,7 @@ import java.lang.reflect.Field; import java.lang.reflect.InaccessibleObjectException; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; import static net.bytebuddy.asm.Advice.OnMethodEnter; import static net.bytebuddy.asm.Advice.Origin; import static net.bytebuddy.asm.Advice.This; @@ -53,21 +54,15 @@ public static void onEnter( fields[i].setAccessible(true); attributes[i] = fields[i].get(instance); } catch (InaccessibleObjectException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Unable to make field '" + fields[i].getName() + "' in class '" - + instance.getClass().getName() + "' accessible due to JVM security restrictions.", e); + throw new SecurityException(localized("security.instrumentation.inaccessible.object.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalAccessException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Access denied to field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "'. Field access is not permitted.", e); + throw new SecurityException(localized("security.instrumentation.illegal.access.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalArgumentException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '" + fields[i].getName() + "' in class '" - + fields[i].getDeclaringClass().getName() + "' cannot be accessed because the provided instance is of type '" - + instance.getClass().getName() + "', which is not the declaring class or interface.", e); + throw new SecurityException(localized("security.instrumentation.illegal.argument.exception").formatted(fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); } catch (NullPointerException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): The field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "' is unexpectedly null. This may indicate a corrupt or improperly initialized object.", e); + throw new SecurityException(localized("security.instrumentation.null.pointer.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (ExceptionInInitializerError e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Initialization of the field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "' failed due to an error during static initialization or field setup.", e); + throw new SecurityException(localized("security.instrumentation.exception.in-initializer.error").formatted(fields[i].getName(), instance.getClass().getName()), e); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationOverwritePathMethodAdvice.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationOverwritePathMethodAdvice.java index c9d57d98..339a6ed9 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationOverwritePathMethodAdvice.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationOverwritePathMethodAdvice.java @@ -3,6 +3,7 @@ import java.lang.reflect.Field; import java.lang.reflect.InaccessibleObjectException; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; import static net.bytebuddy.asm.Advice.OnMethodEnter; import static net.bytebuddy.asm.Advice.Origin; import static net.bytebuddy.asm.Advice.This; @@ -52,22 +53,16 @@ public static void onEnter( try { fields[i].setAccessible(true); attributes[i] = fields[i].get(instance); - }catch (InaccessibleObjectException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Unable to make field '" + fields[i].getName() + "' in class '" - + instance.getClass().getName() + "' accessible due to JVM security restrictions.", e); + } catch (InaccessibleObjectException e) { + throw new SecurityException(localized("security.instrumentation.inaccessible.object.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalAccessException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Access denied to field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "'. Field access is not permitted.", e); + throw new SecurityException(localized("security.instrumentation.illegal.access.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalArgumentException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '" + fields[i].getName() + "' in class '" - + fields[i].getDeclaringClass().getName() + "' cannot be accessed because the provided instance is of type '" - + instance.getClass().getName() + "', which is not the declaring class or interface.", e); + throw new SecurityException(localized("security.instrumentation.illegal.argument.exception").formatted(fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); } catch (NullPointerException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): The field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "' is unexpectedly null. This may indicate a corrupt or improperly initialized object.", e); + throw new SecurityException(localized("security.instrumentation.null.pointer.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (ExceptionInInitializerError e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Initialization of the field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "' failed due to an error during static initialization or field setup.", e); + throw new SecurityException(localized("security.instrumentation.exception.in-initializer.error").formatted(fields[i].getName(), instance.getClass().getName()), e); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationReadPathMethodAdvice.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationReadPathMethodAdvice.java index b491024a..89ab5780 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationReadPathMethodAdvice.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationReadPathMethodAdvice.java @@ -3,6 +3,7 @@ import java.lang.reflect.Field; import java.lang.reflect.InaccessibleObjectException; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; import static net.bytebuddy.asm.Advice.OnMethodEnter; import static net.bytebuddy.asm.Advice.Origin; import static net.bytebuddy.asm.Advice.This; @@ -53,21 +54,15 @@ public static void onEnter( fields[i].setAccessible(true); attributes[i] = fields[i].get(instance); } catch (InaccessibleObjectException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Unable to make field '" + fields[i].getName() + "' in class '" - + instance.getClass().getName() + "' accessible due to JVM security restrictions.", e); + throw new SecurityException(localized("security.instrumentation.inaccessible.object.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalAccessException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Access denied to field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "'. Field access is not permitted.", e); + throw new SecurityException(localized("security.instrumentation.illegal.access.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalArgumentException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '" + fields[i].getName() + "' in class '" - + fields[i].getDeclaringClass().getName() + "' cannot be accessed because the provided instance is of type '" - + instance.getClass().getName() + "', which is not the declaring class or interface.", e); + throw new SecurityException(localized("security.instrumentation.illegal.argument.exception").formatted(fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); } catch (NullPointerException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): The field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "' is unexpectedly null. This may indicate a corrupt or improperly initialized object.", e); + throw new SecurityException(localized("security.instrumentation.null.pointer.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); } catch (ExceptionInInitializerError e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Initialization of the field '" + fields[i].getName() - + "' in class '" + instance.getClass().getName() + "' failed due to an error during static initialization or field setup.", e); + throw new SecurityException(localized("security.instrumentation.exception.in-initializer.error").formatted(fields[i].getName(), instance.getClass().getName()), e); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationBindingDefinitions.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationBindingDefinitions.java index 5f11f137..e971ed91 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationBindingDefinitions.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationBindingDefinitions.java @@ -21,6 +21,8 @@ import java.util.List; import java.util.Map; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; + /** * This class provides the definitions for the bindings of the Java instrumentation. * It is responsible for creating the bindings for different pointcuts, which represent file system @@ -36,7 +38,7 @@ public class JavaInstrumentationBindingDefinitions { * This class is a utility class and should not be instantiated. */ private JavaInstrumentationBindingDefinitions() { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): JavaInstrumentationBindingDefinitions is a utility class and should not be instantiated."); + throw new SecurityException(localized("security.general.utility.initialization")); } // @@ -63,7 +65,7 @@ private static DynamicType.Builder createMethodBinding( loadToolbox(classLoader); return builder.visit(Advice.to(advice).on(JavaInstrumentationPointcutDefinitions.getMethodsMatcher(typeDescription, pointcuts))); } catch (Exception e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create a binding in general.", e); + throw new SecurityException(localized("security.instrumentation.binding.error"), e); } } @@ -75,7 +77,7 @@ private static DynamicType.Builder createConstructorBinding( loadToolbox(classLoader); return builder.visit(Advice.to(advice).on(JavaInstrumentationPointcutDefinitions.getConstructorsMatcher(typeDescription, pointcuts))); } catch (Exception e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create a binding in general.", e); + throw new SecurityException(localized("security.instrumentation.binding.error"), e); } } @@ -134,7 +136,7 @@ public static DynamicType.Builder createReadPathMethodBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanReadFiles, JavaInstrumentationReadPathMethodAdvice.class ); } catch (Exception e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for read path method.", e); + throw new SecurityException(localized("security.instrumentation.read.method.binding.error"), e); } } @@ -149,7 +151,7 @@ public static DynamicType.Builder createReadPathConstructorBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanReadFiles, JavaInstrumentationReadPathConstructorAdvice.class ); } catch (Exception e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for read path constructor.", e); + throw new SecurityException(localized("security.instrumentation.read.constructor.binding.error"), e); } } // @@ -180,7 +182,7 @@ public static DynamicType.Builder createOverwritePathMethodBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanOverwriteFiles, JavaInstrumentationOverwritePathMethodAdvice.class ); } catch (Exception e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for overwrite path method.", e); + throw new SecurityException(localized("security.instrumentation.overwrite.method.binding.error"), e); } } @@ -196,7 +198,7 @@ public static DynamicType.Builder createOverwritePathConstructorBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanOverwriteFiles, JavaInstrumentationOverwritePathConstructorAdvice.class ); } catch (Exception e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for overwrite path constructor.", e); + throw new SecurityException(localized("security.instrumentation.overwrite.constructor.binding.error"), e); } } @@ -228,7 +230,7 @@ public static DynamicType.Builder createExecutePathMethodBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanExecuteFiles, JavaInstrumentationExecutePathMethodAdvice.class ); } catch (Exception e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for execute path method.", e); + throw new SecurityException(localized("security.instrumentation.execute.method.binding.error"), e); } } @@ -243,7 +245,7 @@ public static DynamicType.Builder createExecutePathConstructorBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanExecuteFiles, JavaInstrumentationExecutePathConstructorAdvice.class ); } catch (Exception e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for execute path constructor.", e); + throw new SecurityException(localized("security.instrumentation.execute.constructor.binding.error"), e); } } // @@ -274,7 +276,7 @@ public static DynamicType.Builder createDeletePathMethodBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanDeleteFiles, JavaInstrumentationDeletePathMethodAdvice.class ); } catch (Exception e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for delete path method.", e); + throw new SecurityException(localized("security.instrumentation.delete.method.binding.error"), e); } } @@ -289,7 +291,7 @@ public static DynamicType.Builder createDeletePathConstructorBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanDeleteFiles, JavaInstrumentationDeletePathConstructorAdvice.class ); } catch (Exception e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for delete path constructor.", e); + throw new SecurityException(localized("security.instrumentation.delete.constructor.binding.error"), e); } } // diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationPointcutDefinitions.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationPointcutDefinitions.java index 72820016..bcfe1f69 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationPointcutDefinitions.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationPointcutDefinitions.java @@ -10,6 +10,8 @@ import java.util.Map; import java.util.Set; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; + /** * This class contains the pointcut definitions for the Java instrumentation agent. * These pointcuts are used to identify methods that perform file system operations @@ -25,7 +27,7 @@ public class JavaInstrumentationPointcutDefinitions { * This constructor is private to prevent instantiation of this utility class. */ private JavaInstrumentationPointcutDefinitions() { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): JavaInstrumentationPointcutDefinitions is a utility class and should not be instantiated."); + throw new SecurityException(localized("security.general.utility.initialization")); } // diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/FileHandlerConstants.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/FileHandlerConstants.java index 1e7e5ecb..e2fd0c05 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/FileHandlerConstants.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/FileHandlerConstants.java @@ -4,6 +4,8 @@ import java.nio.file.Path; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; + /** * Constants for the path of the files used in the ArchitectureTestCaseStorage */ @@ -17,6 +19,6 @@ public class FileHandlerConstants { public static final Path JAVA_THREAD_CREATION_METHODS = FileTools.resolveOnResources("templates", "architecture" , "java", "archunit", "methods", "thread-creation-methods.txt"); private FileHandlerConstants() { - throw new UnsupportedOperationException("Ares Security Error (Reason: Ares-Code; Stage: Execution): FileHandlerConstants is a utility class and should not be instantiated."); + throw new UnsupportedOperationException(localized("security.general.utility.initialization")); } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java index fbf97a51..c514e804 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java @@ -11,6 +11,7 @@ import java.util.stream.Collectors; import static de.tum.cit.ase.ares.api.architecture.java.archunit.postcompile.JavaArchitectureTestCaseCollection.getArchitectureRuleFileContent; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; // /** @@ -95,7 +96,7 @@ public void executeArchitectureTestCase(JavaClasses classes) { default -> throw new UnsupportedOperationException("Not implemented yet"); } } catch (AssertionError e) { - throw new SecurityException("Ares Security Error (Reason: Student-Code; Stage: Execution): Illegal Statement found: " + e.getMessage()); + throw new SecurityException(localized("security.archunit.illegal.statement") + e.getMessage()); } } // diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/JavaArchitectureTestCaseCollection.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/JavaArchitectureTestCaseCollection.java index d996f33a..d2076d7e 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/JavaArchitectureTestCaseCollection.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/JavaArchitectureTestCaseCollection.java @@ -101,7 +101,8 @@ public static ArchRule noClassesShouldImportForbiddenPackages(Set allowe public boolean test(JavaClass javaClass) { return allowedPackages.stream().noneMatch(allowedPackage -> javaClass.getPackageName().startsWith(allowedPackage)); } - }); + }) + .as("TEST TEST"); } private static ArchRule createNoClassShouldHaveMethodRule( diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java index 9c1b706d..2dd980fc 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java @@ -19,7 +19,7 @@ import static com.tngtech.archunit.lang.ConditionEvent.createMessage; import static com.tngtech.archunit.thirdparty.com.google.common.base.Preconditions.checkNotNull; import static com.tngtech.archunit.thirdparty.com.google.common.collect.Iterables.getLast; -import static java.util.stream.Collectors.joining; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; import static java.util.stream.Collectors.toSet; // @@ -71,18 +71,7 @@ public void check(JavaClass item, ConditionEvents events) { * @return a satisfied event if a transitive dependency path was found, a violated event otherwise */ private static ConditionEvent newTransitiveAccessPathFoundEvent(JavaAccess javaClass, List> transitiveDependencyPath) { - String message = (transitiveDependencyPath.size() > 1 ? "transitively " : "") + "accesses <" + getLast(transitiveDependencyPath).getTarget().getFullName() + ">"; - - if (transitiveDependencyPath.size() > 1) { - message += " by [" + - transitiveDependencyPath - .stream() - .map(access -> access.getOrigin().getFullName()) - .collect(joining("->")) + - "]"; - } - - return SimpleConditionEvent.satisfied(javaClass, createMessage(javaClass, message)); + return SimpleConditionEvent.satisfied(javaClass, localized("security.archunit.illegal.file-system.method.execution").formatted(javaClass.getDescription(), getLast(transitiveDependencyPath).getTarget().getFullName())); } /** diff --git a/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java b/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java index 028ff5a5..5eb3bf9b 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java +++ b/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java @@ -3,7 +3,6 @@ // import com.google.common.collect.Streams; -import com.tngtech.archunit.ArchConfiguration; import com.tngtech.archunit.core.domain.JavaClasses; import com.tngtech.archunit.core.importer.ClassFileImporter; import de.tum.cit.ase.ares.api.aop.java.JavaSecurityTestCaseSupported; diff --git a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties index 04f97bbf..e8c931d7 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties +++ b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties @@ -42,6 +42,46 @@ security.configuration_invalid_port_negative=allow local port: port number must security.configuration_invalid_port_over_max=allow local port: port number must not exceed MAXIMUM security.configuration_invalid_port_allowed_in_rage=allowed local port values must not be greater than allowPortsAbove security.configuration_invalid_port_exclude_outside_rage=local ports exclusion values must be greater than allowPortsAbove + +# Ares Code Execution +security.advice.error.ares.stage.execution.prefix=Ares Security Error (Reason: Ares-Code; Stage: Execution): +security.advice.linkage.exception=${security.advice.error.ares.stage.execution.prefix} Linkage error while accessing field '%s' in AdviceSettings +security.advice.class.not.found.exception=${security.advice.error.ares.stage.execution.prefix} Could not find 'JavaSecurityTestCaseSettings' class to access field '%s' +security.advice.no.such.field.exception=${security.advice.error.ares.stage.execution.prefix} Field '%s' not found in AdviceSettings +security.advice.null.pointer.exception=${security.advice.error.ares.stage.execution.prefix} Null pointer exception while accessing field '%s' in AdviceSettings +security.advice.illegal.access.exception=${security.advice.error.ares.stage.execution.prefix} Field '%s' is not accessible in AdviceSettings +security.advice.inaccessible.object.exception=${security.advice.error.ares.stage.execution.prefix} Field '%s' is inaccessible in AdviceSettings +security.advice.transform.path.exception=Cannot transform to path +security.instrumentation.inaccessible.object.exception=${security.advice.error.ares.stage.execution.prefix} Unable to make field '%s' in class '%s' accessible due to JVM security restrictions. +security.instrumentation.illegal.access.exception=${security.advice.error.ares.stage.execution.prefix} Access denied to field '%s' in class '%s'. Field access is not permitted. +security.instrumentation.illegal.argument.exception=${security.advice.error.ares.stage.execution.prefix} Field '%s' in class '%s' cannot be accessed because the provided instance is of type '%s', which is not the declaring class or interface. +security.instrumentation.null.pointer.exception=${security.advice.error.ares.stage.execution.prefix} The field '%s' is unexpectedly null. This may indicate a corrupt or improperly initialized object. +security.instrumentation.exception.in-initializer.error=${security.advice.error.ares.stage.execution.prefix} Initialization of the field '%s' in class '%s' failed due to an error during static initialization or field setup. + +# Student Code Execution +security.advice.error.student.stage.execution.prefix=Ares Security Error (Reason: Student-Code; Stage: Execution): +security.advice.illegal.method.execution=${security.advice.error.student.stage.execution.prefix} %s tried to illegally %s from %s via %s but was blocked by Ares. +security.archunit.illegal.file-system.method.execution=${security.advice.error.student.stage.execution.prefix} %s tried to illegally access FileSystem via %s but was blocked by Ares. +security.archunit.illegal.statement=${security.advice.error.student.stage.execution.prefix} Illegal Statement found: + +# error messages in Creation phase +security.advice.error.ares.stage.creation.prefix=Ares Security Error (Reason: Ares-Code; Stage: Creation): +security.general.utility.initialization=${security.advice.error.ares.stage.creation.prefix} Utility class should not be instantiated. +security.instrumentation.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create a binding in general. +security.instrumentation.read.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for read path method. +security.instrumentation.read.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for read path constructor. +security.instrumentation.overwrite.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for overwrite path method. +security.instrumentation.overwrite.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for overwrite path constructor. +security.instrumentation.delete.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for delete path method. +security.instrumentation.delete.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for delete path constructor. +security.instrumentation.execute.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for execute path method. +security.instrumentation.execute.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for execute path constructor. +security.instrumentation.agent.installation.error=${security.advice.error.ares.stage.creation.prefix} Failed to install agent builder on %s. +security.creation.reset.class.not.found.exception=${security.advice.error.ares.stage.creation.prefix} The class for the specific security test case settings could not be found. Ensure the class name is correct and the class is available at runtime. +security.creation.reset.no.method.exception=${security.advice.error.ares.stage.creation.prefix} The 'reset' method could not be found in the specified class. Ensure the method exists and is correctly named. +security.creation.reset.illegal.access.exception=${security.advice.error.ares.stage.creation.prefix} Access to the 'reset' method was denied. Ensure the method is public and accessible. +security.creation.reset.invocation.target.exception=${security.advice.error.ares.stage.creation.prefix} An error occurred while invoking the 'reset' method. This could be due to an underlying issue within the method implementation. + # test guard and deadline handling test_guard.extended_deadline_zero_or_negative=deadline extension must not be ZERO or negative: %s test_guard.hidden_test_before_deadline_message=hidden tests will be executed after the deadline. diff --git a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties index 45dcf517..fbe4b97b 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties +++ b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties @@ -42,6 +42,46 @@ security.configuration_invalid_port_negative=Erlaubte lokalen Ports: Portnummer security.configuration_invalid_port_over_max=Erlaubte lokalen Ports: Portnummer darf nicht MAXIMUM nicht überschreiten security.configuration_invalid_port_allowed_in_rage=Erlaubte lokale Portnummern dürfen nicht größer sein als allowPortsAbove security.configuration_invalid_port_exclude_outside_rage=Ausgeschlossene lokale Ports müssen größer sein als allowPortsAbove + +# Ares Code Execution +security.advice.error.ares.stage.execution.prefix=Ares-Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): +security.advice.linkage.exception=${security.advice.error.ares.stage.execution.prefix} Verknüpfungsfehler beim Zugriff auf Feld '%s' in AdviceSettings +security.advice.class.not.found.exception=${security.advice.error.ares.stage.execution.prefix} Klasse 'JavaSecurityTestCaseSettings' zum Zugriff auf Feld '%s' nicht gefunden +security.advice.no.such.field.exception=${security.advice.error.ares.stage.execution.prefix} Feld '%s' in AdviceSettings nicht gefunden +security.advice.null.pointer.exception=${security.advice.error.ares.stage.execution.prefix} Nullzeiger-Ausnahme beim Zugriff auf Feld '%s' in AdviceSettings +security.advice.illegal.access.exception=${security.advice.error.ares.stage.execution.prefix} Feld '%s' ist in AdviceSettings nicht zugänglich +security.advice.inaccessible.object.exception=${security.advice.error.ares.stage.execution.prefix} Feld '%s' ist in AdviceSettings nicht zugänglich +security.advice.transform.path.exception=Kann nicht in Pfad umgewandelt werden +security.instrumentation.inaccessible.object.exception=${security.advice.error.ares.stage.execution.prefix} Feld '%s' in Klasse '%s' kann aufgrund von JVM-Sicherheitsbeschränkungen nicht zugänglich gemacht werden. +security.instrumentation.illegal.access.exception=${security.advice.error.ares.stage.execution.prefix} Zugriff auf Feld '%s' in Klasse '%s' verweigert. Feldzugriff ist nicht gestattet. +security.instrumentation.illegal.argument.exception=${security.advice.error.ares.stage.execution.prefix} Feld '%s' in Klasse '%s' kann nicht zugegriffen werden, da die bereitgestellte Instanz vom Typ '%s' ist, der nicht der deklarierenden Klasse oder Schnittstelle entspricht. +security.instrumentation.null.pointer.exception=${security.advice.error.ares.stage.execution.prefix} Das Feld '%s' ist unerwartet null. Dies kann auf ein beschädigtes oder nicht ordnungsgemäß initialisiertes Objekt hinweisen. +security.instrumentation.exception.in-initializer.error=${security.advice.error.ares.stage.execution.prefix} Initialisierung des Feldes '%s' in Klasse '%s' aufgrund eines Fehlers während der statischen Initialisierung oder Feldeinrichtung fehlgeschlagen. + +# Student Code Execution +security.advice.error.student.stage.execution.prefix=Ares-Sicherheitsfehler (Grund: Studenten-Code; Phase: Ausführung): +security.advice.illegal.method.execution=${security.advice.error.student.stage.execution.prefix} %s versuchte, illegal %s von %s über %s auszuführen, wurde jedoch von Ares blockiert. +security.archunit.illegal.file-system.method.execution=${security.advice.error.student.stage.execution.prefix} %s versuchte, illegal auf das Dateisystem über %s zuzugreifen, wurde jedoch von Ares blockiert. +security.archunit.illegal.statement=${security.advice.error.student.stage.execution.prefix} Illegale Anweisung gefunden: + +# Fehlernachrichten in der Erstellungsphase +security.advice.error.ares.stage.creation.prefix=Ares-Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): +security.general.utility.initialization=${security.advice.error.ares.stage.creation.prefix} Dienstprogramm-Klasse sollte nicht instanziiert werden. +security.instrumentation.binding.error=${security.advice.error.ares.stage.creation.prefix} Allgemeines Binding konnte nicht erstellt werden. +security.instrumentation.read.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Leseweg-Methode konnte nicht erstellt werden. +security.instrumentation.read.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Leseweg-Konstruktor konnte nicht erstellt werden. +security.instrumentation.overwrite.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Überschreibungsweg-Methode konnte nicht erstellt werden. +security.instrumentation.overwrite.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Überschreibungsweg-Konstruktor konnte nicht erstellt werden. +security.instrumentation.delete.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Löschweg-Methode konnte nicht erstellt werden. +security.instrumentation.delete.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Löschweg-Konstruktor konnte nicht erstellt werden. +security.instrumentation.execute.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Ausführungsweg-Methode konnte nicht erstellt werden. +security.instrumentation.execute.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Ausführungsweg-Konstruktor konnte nicht erstellt werden. +security.instrumentation.agent.installation.error=${security.advice.error.ares.stage.creation.prefix} Agent-Builder auf %s konnte nicht installiert werden. +security.creation.reset.class.not.found.exception=${security.advice.error.ares.stage.creation.prefix} Die Klasse für die spezifischen Sicherheitstestfall-Einstellungen konnte nicht gefunden werden. Stellen Sie sicher, dass der Klassenname korrekt ist und die Klasse zur Laufzeit verfügbar ist. +security.creation.reset.no.method.exception=${security.advice.error.ares.stage.creation.prefix} Die 'reset'-Methode konnte in der angegebenen Klasse nicht gefunden werden. Stellen Sie sicher, dass die Methode existiert und korrekt benannt ist. +security.creation.reset.illegal.access.exception=${security.advice.error.ares.stage.creation.prefix} Der Zugriff auf die 'reset'-Methode wurde verweigert. Stellen Sie sicher, dass die Methode öffentlich und zugänglich ist. +security.creation.reset.invocation.target.exception=${security.advice.error.ares.stage.creation.prefix} Beim Aufrufen der 'reset'-Methode ist ein Fehler aufgetreten. Dies könnte auf ein zugrunde liegendes Problem in der Methodenumsetzung hinweisen. + # test guard and deadline handling test_guard.extended_deadline_zero_or_negative=Deadline Verlängerung muss positiv sein: %s test_guard.hidden_test_before_deadline_message=Versteckte Tests werden nach der Deadline ausgeführt. From 56ee332c129e6a6b0117c7f488dd1e120777c059 Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 00:25:56 +0200 Subject: [PATCH 04/20] Trying to fix issues regarding the Instrumentation --- ...avaAspectJFileSystemPointcutDefinitions.aj | 1 - .../JavaInstrumentationAdviceToolbox.java | 2 + .../JavaArchUnitSecurityTestCase.java | 3 +- .../TransitivelyAccessesMethodsCondition.java | 14 +++- .../api/jupiter/JupiterSecurityExtension.java | 11 +-- .../ase/ares/api/localization/Messages.java | 3 - .../ares/api/localization/messages.properties | 64 ++++++++--------- .../integration/FileSystemAccessTest.java | 68 +------------------ 8 files changed, 58 insertions(+), 108 deletions(-) diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemPointcutDefinitions.aj b/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemPointcutDefinitions.aj index f493382f..3125dac6 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemPointcutDefinitions.aj +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemPointcutDefinitions.aj @@ -40,7 +40,6 @@ public aspect JavaAspectJFileSystemPointcutDefinitions { (call(* java.io.File.canExecute(..)) || call(* java.io.File.renameTo(..)) || call(* java.io.File.toPath(..)) || - call(* java.io.File.toURI(..)) || call(* java.io.File.mkdirs(..)) || call(* java.io.File.listFiles(..))); diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java index 28bdc49b..e3c8f223 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java @@ -5,6 +5,8 @@ import java.lang.reflect.InaccessibleObjectException; import java.nio.file.InvalidPathException; import java.nio.file.Path; +import java.util.Locale; +import java.util.ResourceBundle; import static de.tum.cit.ase.ares.api.localization.Messages.localized; diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java index c514e804..46391913 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java @@ -96,7 +96,8 @@ public void executeArchitectureTestCase(JavaClasses classes) { default -> throw new UnsupportedOperationException("Not implemented yet"); } } catch (AssertionError e) { - throw new SecurityException(localized("security.archunit.illegal.statement") + e.getMessage()); + assert e.getMessage().split("\n").length > 1; + throw new SecurityException(localized("security.archunit.illegal.execution").formatted(e.getMessage().split("\n")[1])); } } // diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java index 2dd980fc..7c82c282 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java @@ -20,6 +20,7 @@ import static com.tngtech.archunit.thirdparty.com.google.common.base.Preconditions.checkNotNull; import static com.tngtech.archunit.thirdparty.com.google.common.collect.Iterables.getLast; import static de.tum.cit.ase.ares.api.localization.Messages.localized; +import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toSet; // @@ -71,7 +72,18 @@ public void check(JavaClass item, ConditionEvents events) { * @return a satisfied event if a transitive dependency path was found, a violated event otherwise */ private static ConditionEvent newTransitiveAccessPathFoundEvent(JavaAccess javaClass, List> transitiveDependencyPath) { - return SimpleConditionEvent.satisfied(javaClass, localized("security.archunit.illegal.file-system.method.execution").formatted(javaClass.getDescription(), getLast(transitiveDependencyPath).getTarget().getFullName())); + String message = (transitiveDependencyPath.size() > 1 ? "transitively " : "") + "accesses <" + getLast(transitiveDependencyPath).getTarget().getFullName() + ">"; + + if (transitiveDependencyPath.size() > 1) { + message += " by [" + + transitiveDependencyPath + .stream() + .map(access -> access.getOrigin().getFullName()) + .collect(joining("->")) + + "]"; + } + + return SimpleConditionEvent.satisfied(javaClass, createMessage(javaClass, message)); } /** diff --git a/src/main/java/de/tum/cit/ase/ares/api/jupiter/JupiterSecurityExtension.java b/src/main/java/de/tum/cit/ase/ares/api/jupiter/JupiterSecurityExtension.java index 373d6c6b..e5b7e356 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/jupiter/JupiterSecurityExtension.java +++ b/src/main/java/de/tum/cit/ase/ares/api/jupiter/JupiterSecurityExtension.java @@ -8,12 +8,14 @@ import java.util.stream.Stream; import de.tum.cit.ase.ares.api.Policy; +import de.tum.cit.ase.ares.api.localization.Messages; import de.tum.cit.ase.ares.api.policy.SecurityPolicyReaderAndDirector; import org.apiguardian.api.API; import org.apiguardian.api.API.Status; import org.junit.jupiter.api.extension.*; import static de.tum.cit.ase.ares.api.internal.TestGuardUtils.hasAnnotation; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; import static org.junit.platform.commons.support.AnnotationSupport.findAnnotation; //REMOVED: Import of ArtemisSecurityManager @@ -48,7 +50,7 @@ public T interceptGenericInvocation(Invocation invocation, ExtensionConte javaSecurityTestCaseSettingsClass = Class.forName("de.tum.cit.ase.ares.api.aop.java.JavaSecurityTestCaseSettings", true, null); resetSettings(javaSecurityTestCaseSettingsClass); } catch (ClassNotFoundException e) { - throw new SecurityException("Security configuration error: The class for the specific security test case settings could not be found. Ensure the class name is correct and the class is available at runtime.", e); + throw new SecurityException(localized("security.settings.error"), e); } } //REMOVED: Installing of ArtemisSecurityManager @@ -78,14 +80,15 @@ public static void resetSettings(Class javaSecurityTestCaseSettingsClass) { resetMethod.invoke(null); resetMethod.setAccessible(false); } catch (NoSuchMethodException e) { - throw new SecurityException("Security configuration error: The 'reset' method could not be found in the specified class. Ensure the method exists and is correctly named.", e); + throw new SecurityException(localized("security.settings.reset.method.not.found"), e); } catch (IllegalAccessException e) { - throw new SecurityException("Security configuration error: Access to the 'reset' method was denied. Ensure the method is public and accessible.", e); + throw new SecurityException(localized("security.settings.reset.access.denied"), e); } catch (InvocationTargetException e) { - throw new SecurityException("Security configuration error: An error occurred while invoking the 'reset' method. This could be due to an underlying issue within the method implementation.", e); + throw new SecurityException(localized("security.settings.error.within.method"), e); } } + // TODO: Further take a look at these! public static Path testAndGetPolicyValue(Policy policyAnnotation) { String policyValue = policyAnnotation.value(); if (policyValue.isBlank()) { diff --git a/src/main/java/de/tum/cit/ase/ares/api/localization/Messages.java b/src/main/java/de/tum/cit/ase/ares/api/localization/Messages.java index ff1c08c3..cffa1623 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/localization/Messages.java +++ b/src/main/java/de/tum/cit/ase/ares/api/localization/Messages.java @@ -3,13 +3,10 @@ import java.util.*; import java.util.Locale.Category; -import org.apiguardian.api.API; -import org.apiguardian.api.API.Status; import org.opentest4j.AssertionFailedError; import de.tum.cit.ase.ares.api.util.LruCache; -@API(status = Status.INTERNAL) public final class Messages { private static final String BUNDLE_NAME = "de.tum.cit.ase.ares.api.localization.messages"; //$NON-NLS-1$ diff --git a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties index e8c931d7..1dc98405 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties +++ b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties @@ -44,43 +44,43 @@ security.configuration_invalid_port_allowed_in_rage=allowed local port values mu security.configuration_invalid_port_exclude_outside_rage=local ports exclusion values must be greater than allowPortsAbove # Ares Code Execution -security.advice.error.ares.stage.execution.prefix=Ares Security Error (Reason: Ares-Code; Stage: Execution): -security.advice.linkage.exception=${security.advice.error.ares.stage.execution.prefix} Linkage error while accessing field '%s' in AdviceSettings -security.advice.class.not.found.exception=${security.advice.error.ares.stage.execution.prefix} Could not find 'JavaSecurityTestCaseSettings' class to access field '%s' -security.advice.no.such.field.exception=${security.advice.error.ares.stage.execution.prefix} Field '%s' not found in AdviceSettings -security.advice.null.pointer.exception=${security.advice.error.ares.stage.execution.prefix} Null pointer exception while accessing field '%s' in AdviceSettings -security.advice.illegal.access.exception=${security.advice.error.ares.stage.execution.prefix} Field '%s' is not accessible in AdviceSettings -security.advice.inaccessible.object.exception=${security.advice.error.ares.stage.execution.prefix} Field '%s' is inaccessible in AdviceSettings +security.advice.linkage.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Linkage error while accessing field '%s' in AdviceSettings +security.advice.class.not.found.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Could not find 'JavaSecurityTestCaseSettings' class to access field '%s' +security.advice.no.such.field.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '%s' not found in AdviceSettings +security.advice.null.pointer.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Null pointer exception while accessing field '%s' in AdviceSettings +security.advice.illegal.access.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '%s' is not accessible in AdviceSettings +security.advice.inaccessible.object.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '%s' is inaccessible in AdviceSettings security.advice.transform.path.exception=Cannot transform to path -security.instrumentation.inaccessible.object.exception=${security.advice.error.ares.stage.execution.prefix} Unable to make field '%s' in class '%s' accessible due to JVM security restrictions. -security.instrumentation.illegal.access.exception=${security.advice.error.ares.stage.execution.prefix} Access denied to field '%s' in class '%s'. Field access is not permitted. -security.instrumentation.illegal.argument.exception=${security.advice.error.ares.stage.execution.prefix} Field '%s' in class '%s' cannot be accessed because the provided instance is of type '%s', which is not the declaring class or interface. -security.instrumentation.null.pointer.exception=${security.advice.error.ares.stage.execution.prefix} The field '%s' is unexpectedly null. This may indicate a corrupt or improperly initialized object. -security.instrumentation.exception.in-initializer.error=${security.advice.error.ares.stage.execution.prefix} Initialization of the field '%s' in class '%s' failed due to an error during static initialization or field setup. +security.instrumentation.inaccessible.object.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Unable to make field '%s' in class '%s' accessible due to JVM security restrictions. +security.instrumentation.illegal.access.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Access denied to field '%s' in class '%s'. Field access is not permitted. +security.instrumentation.illegal.argument.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '%s' in class '%s' cannot be accessed because the provided instance is of type '%s', which is not the declaring class or interface. +security.instrumentation.null.pointer.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): The field '%s' is unexpectedly null. This may indicate a corrupt or improperly initialized object. +security.instrumentation.exception.in-initializer.error=Ares Security Error (Reason: Ares-Code; Stage: Execution): Initialization of the field '%s' in class '%s' failed due to an error during static initialization or field setup. # Student Code Execution -security.advice.error.student.stage.execution.prefix=Ares Security Error (Reason: Student-Code; Stage: Execution): -security.advice.illegal.method.execution=${security.advice.error.student.stage.execution.prefix} %s tried to illegally %s from %s via %s but was blocked by Ares. -security.archunit.illegal.file-system.method.execution=${security.advice.error.student.stage.execution.prefix} %s tried to illegally access FileSystem via %s but was blocked by Ares. -security.archunit.illegal.statement=${security.advice.error.student.stage.execution.prefix} Illegal Statement found: +security.advice.illegal.method.execution=Ares Security Error (Reason: Student-Code; Stage: Execution): %s tried to illegally %s from %s via %s but was blocked by Ares. +security.archunit.illegal.execution=\n\u0020- Ares Security Error (Reason: Student-Code; Stage: Execution):\n\u0020\u0020- %s # error messages in Creation phase -security.advice.error.ares.stage.creation.prefix=Ares Security Error (Reason: Ares-Code; Stage: Creation): -security.general.utility.initialization=${security.advice.error.ares.stage.creation.prefix} Utility class should not be instantiated. -security.instrumentation.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create a binding in general. -security.instrumentation.read.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for read path method. -security.instrumentation.read.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for read path constructor. -security.instrumentation.overwrite.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for overwrite path method. -security.instrumentation.overwrite.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for overwrite path constructor. -security.instrumentation.delete.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for delete path method. -security.instrumentation.delete.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for delete path constructor. -security.instrumentation.execute.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for execute path method. -security.instrumentation.execute.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Could not create binding for execute path constructor. -security.instrumentation.agent.installation.error=${security.advice.error.ares.stage.creation.prefix} Failed to install agent builder on %s. -security.creation.reset.class.not.found.exception=${security.advice.error.ares.stage.creation.prefix} The class for the specific security test case settings could not be found. Ensure the class name is correct and the class is available at runtime. -security.creation.reset.no.method.exception=${security.advice.error.ares.stage.creation.prefix} The 'reset' method could not be found in the specified class. Ensure the method exists and is correctly named. -security.creation.reset.illegal.access.exception=${security.advice.error.ares.stage.creation.prefix} Access to the 'reset' method was denied. Ensure the method is public and accessible. -security.creation.reset.invocation.target.exception=${security.advice.error.ares.stage.creation.prefix} An error occurred while invoking the 'reset' method. This could be due to an underlying issue within the method implementation. +security.settings.error=Security configuration error: The class for the specific security test case settings could not be found. Ensure the class name is correct and the class is available at runtime. +security.settings.reset.method.not.found=Security configuration error: The 'reset' method could not be found in the specified class. Ensure the method exists and is correctly named. +security.settings.reset.access.denied=Security configuration error: Access to the 'reset' method was denied. Ensure the method is public and accessible. +security.settings.error.within.method=Security configuration error: An error occurred while invoking the 'reset' method. This could be due to an underlying issue within the method implementation. +security.general.utility.initialization=Ares Security Error (Reason: Ares-Code; Stage: Creation): Utility class should not be instantiated. +security.instrumentation.binding.error=Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create a binding in general. +security.instrumentation.read.method.binding.error=Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for read path method. +security.instrumentation.read.constructor.binding.error=Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for read path constructor. +security.instrumentation.overwrite.method.binding.error=Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for overwrite path method. +security.instrumentation.overwrite.constructor.binding.error=Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for overwrite path constructor. +security.instrumentation.delete.method.binding.error=Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for delete path method. +security.instrumentation.delete.constructor.binding.error=Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for delete path constructor. +security.instrumentation.execute.method.binding.error=Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for execute path method. +security.instrumentation.execute.constructor.binding.error=Ares Security Error (Reason: Ares-Code; Stage: Creation): Could not create binding for execute path constructor. +security.instrumentation.agent.installation.error=Ares Security Error (Reason: Ares-Code; Stage: Creation): Failed to install agent builder on %s. +security.creation.reset.class.not.found.exception=Ares Security Error (Reason: Ares-Code; Stage: Creation): The class for the specific security test case settings could not be found. Ensure the class name is correct and the class is available at runtime. +security.creation.reset.no.method.exception=Ares Security Error (Reason: Ares-Code; Stage: Creation): The 'reset' method could not be found in the specified class. Ensure the method exists and is correctly named. +security.creation.reset.illegal.access.exception=Ares Security Error (Reason: Ares-Code; Stage: Creation): Access to the 'reset' method was denied. Ensure the method is public and accessible. +security.creation.reset.invocation.target.exception=Ares Security Error (Reason: Ares-Code; Stage: Creation): An error occurred while invoking the 'reset' method. This could be due to an underlying issue within the method implementation. # test guard and deadline handling test_guard.extended_deadline_zero_or_negative=deadline extension must not be ZERO or negative: %s diff --git a/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java b/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java index 3dd259c1..623dd79e 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java @@ -119,72 +119,8 @@ void test_weAccessPath() { void test_accessFileSystem() { tests.assertThatEvents().haveExactly(1, testFailedWith("accessFileSystem", SecurityException.class, """ - Ares Security Error (Reason: Student-Code; Stage: Execution): Illegal Statement found: Architecture Violation [Priority: MEDIUM] - Rule 'no classes should transitively depend on classes that accesses file system' was violated (65 times): - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:84) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:84) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:182) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:182) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:101) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:101) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:198) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:198) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:270) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:270) - Method calls method in (FileSystemAccessPenguin.java:270) accesses in (FileSystemAccessPenguin.java:270) - Method calls method in (FileSystemAccessPenguin.java:125) accesses in (FileSystemAccessPenguin.java:125) - Method calls method in (FileSystemAccessPenguin.java:126) accesses in (FileSystemAccessPenguin.java:126) - Method calls method in (FileSystemAccessPenguin.java:230) accesses in (FileSystemAccessPenguin.java:230) - Method calls method in (FileSystemAccessPenguin.java:231) accesses in (FileSystemAccessPenguin.java:231) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:259) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:259) - Method calls method in (FileSystemAccessPenguin.java:260) accesses in (FileSystemAccessPenguin.java:260) - Method calls method in (FileSystemAccessPenguin.java:261) accesses in (FileSystemAccessPenguin.java:261) - Method calls method in (FileSystemAccessPenguin.java:262) accesses in (FileSystemAccessPenguin.java:262) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:246) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:246) - Method calls method in (FileSystemAccessPenguin.java:248) accesses in (FileSystemAccessPenguin.java:248) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:69) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:69) - Method calls method in (FileSystemAccessPenguin.java:69) accesses in (FileSystemAccessPenguin.java:69) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:164) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:164) - Method calls method in (FileSystemAccessPenguin.java:164) accesses in (FileSystemAccessPenguin.java:164) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:51) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:51) - Method calls method in (FileSystemAccessPenguin.java:52) accesses in (FileSystemAccessPenguin.java:52) - Method calls method in (FileSystemAccessPenguin.java:53) accesses in (FileSystemAccessPenguin.java:53) - Method calls method in (FileSystemAccessPenguin.java:54) accesses in (FileSystemAccessPenguin.java:54) - Method calls method in (FileSystemAccessPenguin.java:55) accesses in (FileSystemAccessPenguin.java:55) - Method calls method in (FileSystemAccessPenguin.java:56) accesses in (FileSystemAccessPenguin.java:56) - Method calls method in (FileSystemAccessPenguin.java:57) accesses in (FileSystemAccessPenguin.java:57) - Method calls method in (FileSystemAccessPenguin.java:58) accesses in (FileSystemAccessPenguin.java:58) - Method calls method in (FileSystemAccessPenguin.java:59) accesses in (FileSystemAccessPenguin.java:59) - Method calls method in (FileSystemAccessPenguin.java:60) accesses in (FileSystemAccessPenguin.java:60) - Method calls method in (FileSystemAccessPenguin.java:61) accesses in (FileSystemAccessPenguin.java:61) - Method calls method in (FileSystemAccessPenguin.java:62) accesses in (FileSystemAccessPenguin.java:62) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:76) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:76) - Method calls method in (FileSystemAccessPenguin.java:77) accesses in (FileSystemAccessPenguin.java:77) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:152) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:152) - Method calls method in (FileSystemAccessPenguin.java:153) accesses in (FileSystemAccessPenguin.java:153) - Method calls method in (FileSystemAccessPenguin.java:154) accesses in (FileSystemAccessPenguin.java:154) - Method calls method in (FileSystemAccessPenguin.java:155) accesses in (FileSystemAccessPenguin.java:155) - Method calls method in (FileSystemAccessPenguin.java:156) accesses in (FileSystemAccessPenguin.java:156) - Method calls method in (FileSystemAccessPenguin.java:157) accesses in (FileSystemAccessPenguin.java:157) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:171) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:171) - Method calls method in (FileSystemAccessPenguin.java:173) accesses in (FileSystemAccessPenguin.java:173) - Method calls method in (FileSystemAccessPenguin.java:175) accesses in (FileSystemAccessPenguin.java:175) - Method calls method in (FileSystemAccessPenguin.java:174) accesses in (FileSystemAccessPenguin.java:174) - Method calls method in (FileSystemAccessPenguin.java:172) accesses in (FileSystemAccessPenguin.java:172) - Method calls method in (FileSystemAccessPenguin.java:281) accesses in (FileSystemAccessPenguin.java:281) - Method calls method in (FileSystemAccessPenguin.java:133) accesses in (FileSystemAccessPenguin.java:133) - Method calls method in (FileSystemAccessPenguin.java:239) accesses in (FileSystemAccessPenguin.java:239) - Method calls method in (FileSystemAccessPenguin.java:238) accesses in (FileSystemAccessPenguin.java:238) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:117) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:117) - Method calls constructor ()> in (FileSystemAccessPenguin.java:297) accesses ()> in (FileSystemAccessPenguin.java:297) - Method calls method in (FileSystemAccessPenguin.java:298) accesses in (FileSystemAccessPenguin.java:298) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:109) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:109) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:214) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:214) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:206) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:206) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:222) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:222) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:190) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:190) - Method calls constructor (java.lang.String, java.lang.String)> in (FileSystemAccessPenguin.java:43) accesses (java.lang.String, java.lang.String)> in (FileSystemAccessPenguin.java:43) - Method calls method in (FileSystemAccessPenguin.java:44) accesses in (FileSystemAccessPenguin.java:44) - Method calls constructor (java.lang.String, java.lang.String)> in (FileSystemAccessPenguin.java:144) accesses (java.lang.String, java.lang.String)> in (FileSystemAccessPenguin.java:144) - Method calls method in (FileSystemAccessPenguin.java:145) accesses in (FileSystemAccessPenguin.java:145) - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:93) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:93) - Method calls constructor (java.io.InputStream)> in (FileSystemAccessPenguin.java:93) accesses (java.io.InputStream)> in (FileSystemAccessPenguin.java:93) - Method calls method in (FileSystemAccessPenguin.java:27) accesses in (FileSystemAccessPenguin.java:27) - Method calls method in (FileSystemAccessPenguin.java:303) transitively accesses by [de.tum.cit.ase.ares.integration.testuser.subject.fileSystem.FileSystemAccessPenguin.accessPathThroughThirdPartyPackage()->de.tum.cit.ase.ares.integration.testuser.subject.thirdpartypackage.ThirdPartyPackagePenguin.accessFileSystem()] in (FileSystemAccessPenguin.java:303)""")); + \n - Ares Security Error (Reason: Student-Code; Stage: Execution): + - Method calls constructor (java.lang.String)> in (FileSystemAccessPenguin.java:84) accesses (java.lang.String)> in (FileSystemAccessPenguin.java:84)""")); } // From 13a023a5e80524940d04d9bfbfdd713217635aaf Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 17:56:21 +0200 Subject: [PATCH 05/20] Fix bug regarding the messages and fix it in the instrumentation --- .../ase/ares/api/aop/java/JavaAOPMode.java | 10 +-- .../api/aop/java/JavaSecurityTestCase.java | 1 + .../JavaAspectJFileSystemAdviceDefinitions.aj | 14 ++-- .../JavaInstrumentationAgent.java | 4 +- .../JavaInstrumentationAdviceToolbox.java | 60 ++++++++----- ...InstrumentationDeletePathMethodAdvice.java | 12 +-- ...nstrumentationExecutePathMethodAdvice.java | 12 +-- ...trumentationOverwritePathMethodAdvice.java | 12 +-- ...vaInstrumentationReadPathMethodAdvice.java | 12 +-- ...JavaInstrumentationBindingDefinitions.java | 24 +++--- ...avaInstrumentationPointcutDefinitions.java | 4 +- .../JavaArchUnitSecurityTestCase.java | 2 +- .../TransitivelyAccessesMethodsCondition.java | 1 - .../api/jupiter/JupiterSecurityExtension.java | 23 +++-- .../SecurityPolicyReaderAndDirector.java | 10 ++- ...JavaSecurityTestCaseFactoryAndBuilder.java | 19 +++-- .../tum/cit/ase/ares/api/util/FileTools.java | 11 +-- .../ares/api/localization/messages.properties | 20 ++++- .../api/localization/messages_de.properties | 84 +++++++++++-------- .../OnePathAllowedInstrumentationDelete.yaml | 1 + .../OnePathAllowedInstrumentationExecute.yaml | 1 + .../OnePathAllowedInstrumentationRead.yaml | 1 + .../OnePathAllowedInstrumentationWrite.yaml | 1 + 23 files changed, 197 insertions(+), 142 deletions(-) diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaAOPMode.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaAOPMode.java index 064b5260..9169b96a 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaAOPMode.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaAOPMode.java @@ -9,7 +9,7 @@ import java.util.List; import java.util.stream.Stream; -import static de.tum.cit.ase.ares.api.localization.Messages.localized; +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; /** * Enum representing the different modes of Aspect-Oriented Programming (AOP) @@ -214,16 +214,16 @@ public void reset() { method.setAccessible(false); } catch (ClassNotFoundException e) { - throw new SecurityException(localized("security.creation.reset.class.not.found.exception"), e); + throw new SecurityException(localize("security.creation.reset.class.not.found.exception"), e); } catch (NoSuchMethodException e) { - throw new SecurityException(localized("security.creation.reset.no.method.exception"), e); + throw new SecurityException(localize("security.creation.reset.no.method.exception"), e); } catch (IllegalAccessException e) { - throw new SecurityException(localized("security.creation.reset.illegal.access.exception"), e); + throw new SecurityException(localize("security.creation.reset.illegal.access.exception"), e); } catch (InvocationTargetException e) { - throw new SecurityException(localized("security.creation.reset.invocation.target.exception"), e); + throw new SecurityException(localize("security.creation.reset.invocation.target.exception"), e); } } // diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaSecurityTestCase.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaSecurityTestCase.java index 5eb54456..e731dad8 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaSecurityTestCase.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaSecurityTestCase.java @@ -79,6 +79,7 @@ private static String generateAdviceSettingValue(@Nonnull String dataType, @Nonn return switch (dataType) { case "String" -> { + // TODO: Refactor the error messages here if (!(value instanceof String)) { throw new SecurityException(String.format( "Ares Security Error (Reason: Ares-Code; Stage: Creation): " diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj b/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj index 6a296ae7..81cd19d4 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/aspectj/adviceandpointcut/JavaAspectJFileSystemAdviceDefinitions.aj @@ -32,17 +32,17 @@ public aspect JavaAspectJFileSystemAdviceDefinitions { field.setAccessible(false); return value; } catch (LinkageError e) { - throw new SecurityException(localized("security.advice.linkage.exception").formatted(fieldName), e); + throw new SecurityException(localized("security.advice.linkage.exception", fieldName), e); } catch (ClassNotFoundException e) { - throw new SecurityException(localized("security.advice.class.not.found.exception").formatted(fieldName), e); + throw new SecurityException(localized("security.advice.class.not.found.exception", fieldName), e); } catch (NoSuchFieldException e) { - throw new SecurityException(localized("security.advice.no.such.field.exception").formatted(fieldName), e); + throw new SecurityException(localized("security.advice.no.such.field.exception", fieldName), e); } catch (NullPointerException e) { - throw new SecurityException(localized("security.advice.null.pointer.exception").formatted(fieldName), e); + throw new SecurityException(localized("security.advice.null.pointer.exception", fieldName), e); } catch (IllegalAccessException e) { - throw new SecurityException(localized("security.advice.illegal.access.exception").formatted(fieldName), e); + throw new SecurityException(localized("security.advice.illegal.access.exception", fieldName), e); } catch (InaccessibleObjectException e) { - throw new SecurityException(localized("security.advice.inaccessible.object.exception").formatted(fieldName), e); + throw new SecurityException(localized("security.advice.inaccessible.object.exception", fieldName), e); } } // @@ -216,7 +216,7 @@ public aspect JavaAspectJFileSystemAdviceDefinitions { if (illegallyReadingMethod != null) { String illegallyReadPath = (parameters == null || parameters.length == 0) ? null : checkIfVariableCriteriaIsViolated(parameters, allowedPaths); if (illegallyReadPath != null) { - throw new SecurityException(localized("security.advice.illegal.method.execution").formatted(illegallyReadingMethod, action, illegallyReadPath, fullMethodSignature)); + throw new SecurityException(localized("security.advice.illegal.method.execution", illegallyReadingMethod, action, illegallyReadPath, fullMethodSignature)); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/JavaInstrumentationAgent.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/JavaInstrumentationAgent.java index 03769069..34806e6d 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/JavaInstrumentationAgent.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/JavaInstrumentationAgent.java @@ -9,7 +9,7 @@ import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.matcher.ElementMatchers; -import static de.tum.cit.ase.ares.api.localization.Messages.localized; +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; /** * This class is the entry point for the Java instrumentation agent. @@ -60,7 +60,7 @@ private static void installAgentBuilder( .transform(transformer) .installOn(inst); } catch (Exception e) { - throw new SecurityException(localized("security.instrumentation.agent.installation.error").formatted(String.join(", ", methodsMap.keySet())), e); + throw new SecurityException(localize("security.instrumentation.agent.installation.error", String.join(", ", methodsMap.keySet())), e); } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java index e3c8f223..2cfd784f 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java @@ -3,12 +3,10 @@ import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.InaccessibleObjectException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.nio.file.InvalidPathException; import java.nio.file.Path; -import java.util.Locale; -import java.util.ResourceBundle; - -import static de.tum.cit.ase.ares.api.localization.Messages.localized; /** * Utility class for the Java instrumentation advice. @@ -54,17 +52,17 @@ private static Object getValueFromSettings(String fieldName) { field.setAccessible(false); return value; } catch (LinkageError e) { - throw new SecurityException(localized("security.advice.linkage.exception").formatted(fieldName), e); + throw new SecurityException(localize("security.advice.linkage.exception", fieldName), e); } catch (ClassNotFoundException e) { - throw new SecurityException(localized("security.advice.class.not.found.exception").formatted(fieldName), e); + throw new SecurityException(localize("security.advice.class.not.found.exception", fieldName), e); } catch (NoSuchFieldException e) { - throw new SecurityException(localized("security.advice.no.such.field.exception").formatted(fieldName), e); + throw new SecurityException(localize("security.advice.no.such.field.exception", fieldName), e); } catch (NullPointerException e) { - throw new SecurityException(localized("security.advice.null.pointer.exception").formatted(fieldName), e); + throw new SecurityException(localize("security.advice.null.pointer.exception", fieldName), e); } catch (IllegalAccessException e) { - throw new SecurityException(localized("security.advice.illegal.access.exception").formatted(fieldName), e); + throw new SecurityException(localize("security.advice.illegal.access.exception", fieldName), e); } catch (InaccessibleObjectException e) { - throw new SecurityException(localized("security.advice.inaccessible.object.exception").formatted(fieldName), e); + throw new SecurityException(localize("security.advice.inaccessible.object.exception", fieldName), e); } } // @@ -108,7 +106,10 @@ private static String checkIfCallstackCriteriaIsViolated(String restrictedPackag // Skip the OutputTester and InputTester classes, as they intercept the output and input for System.out and System.in // Therefore, they cause false positives. // Also, X11FontManager needs to be set when using AWT therefore we have to allow it - if (element.getClassName().equals("de.tum.cit.ase.ares.api.io.OutputTester") || element.getClassName().equals("de.tum.cit.ase.ares.api.io.InputTester") || element.getClassName().equals("sun.awt.X11FontManager")) { + if (element.getClassName().equals("de.tum.cit.ase.ares.api.io.OutputTester") + || element.getClassName().equals("de.tum.cit.ase.ares.api.io.InputTester") + || element.getClassName().equals("sun.awt.X11FontManager") + || element.getClassName().equals("de.tum.cit.ase.ares.api.localization.Messages")) { return null; } if (!checkIfCallstackElementIsAllowed(allowedClasses, element)) { @@ -134,30 +135,27 @@ private static String checkIfCallstackCriteriaIsViolated(String restrictedPackag */ private static Path variableToPath(Object variableValue) { if (variableValue == null) { - throw new InvalidPathException("null", localized("security.advice.transform.path.exception")); - } else if (variableValue instanceof Path) { - Path path = (Path) variableValue; + throw new InvalidPathException("null", localize("security.advice.transform.path.exception")); + } else if (variableValue instanceof Path path) { try { return path.normalize().toAbsolutePath(); } catch (InvalidPathException e) { - throw new InvalidPathException(path.toString(), localized("security.advice.transform.path.exception")); + throw new InvalidPathException(path.toString(), localize("security.advice.transform.path.exception")); } - } else if (variableValue instanceof String) { - String string = (String) variableValue; + } else if (variableValue instanceof String string) { try { return Path.of(string).normalize().toAbsolutePath(); } catch (InvalidPathException e) { - throw new InvalidPathException(string, localized("security.advice.transform.path.exception")); + throw new InvalidPathException(string, localize("security.advice.transform.path.exception")); } - } else if (variableValue instanceof File) { - File file = (File) variableValue; + } else if (variableValue instanceof File file) { try { return Path.of(file.toURI()).normalize().toAbsolutePath(); } catch (InvalidPathException e) { - throw new InvalidPathException(file.toString(), localized("security.advice.transform.path.exception")); + throw new InvalidPathException(file.toString(), localize("security.advice.transform.path.exception")); } } else { - throw new InvalidPathException(variableValue.toString(), localized("security.advice.transform.path.exception")); + throw new InvalidPathException(variableValue.toString(), localize("security.advice.transform.path.exception")); } } @@ -249,10 +247,26 @@ public static void checkFileSystemInteraction( illegallyReadPath = (attributes == null || attributes.length == 0) ? null : checkIfVariableCriteriaIsViolated(attributes, allowedPaths); } if (illegallyReadPath != null) { - throw new SecurityException(localized("security.advice.illegal.method.execution").formatted(illegallyReadingMethod, action, illegallyReadPath, fullMethodSignature)); + throw new SecurityException(localize("security.advice.illegal.method.execution", illegallyReadingMethod, action, illegallyReadPath, fullMethodSignature)); } } } // // + + public static String localize(String key, Object... args) { + try { + Class messagesClass = Class.forName("de.tum.cit.ase.ares.api.localization.Messages", true, Thread.currentThread().getContextClassLoader()); + Method localized = messagesClass.getDeclaredMethod("localized", String.class, Object[].class); + Object result = localized.invoke(null, key, args); + if (result instanceof String str) { + return str; + } else { + throw new IllegalStateException("Method does not return a String"); + } + } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + // TODO: Add a correct implementation of the localization + throw new RuntimeException(e.getMessage()); + } + } } \ No newline at end of file diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationDeletePathMethodAdvice.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationDeletePathMethodAdvice.java index ba9634bd..6bfdf030 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationDeletePathMethodAdvice.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationDeletePathMethodAdvice.java @@ -3,7 +3,7 @@ import java.lang.reflect.Field; import java.lang.reflect.InaccessibleObjectException; -import static de.tum.cit.ase.ares.api.localization.Messages.localized; +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; import static net.bytebuddy.asm.Advice.*; /** @@ -51,15 +51,15 @@ public static void onEnter( fields[i].setAccessible(true); attributes[i] = fields[i].get(instance); } catch (InaccessibleObjectException e) { - throw new SecurityException(localized("security.instrumentation.inaccessible.object.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.inaccessible.object.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalAccessException e) { - throw new SecurityException(localized("security.instrumentation.illegal.access.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.illegal.access.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalArgumentException e) { - throw new SecurityException(localized("security.instrumentation.illegal.argument.exception").formatted(fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.illegal.argument.exception", fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); } catch (NullPointerException e) { - throw new SecurityException(localized("security.instrumentation.null.pointer.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.null.pointer.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (ExceptionInInitializerError e) { - throw new SecurityException(localized("security.instrumentation.exception.in-initializer.error").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.exception.in-initializer.error", fields[i].getName(), instance.getClass().getName()), e); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationExecutePathMethodAdvice.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationExecutePathMethodAdvice.java index 94999e3a..dd75f983 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationExecutePathMethodAdvice.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationExecutePathMethodAdvice.java @@ -3,7 +3,7 @@ import java.lang.reflect.Field; import java.lang.reflect.InaccessibleObjectException; -import static de.tum.cit.ase.ares.api.localization.Messages.localized; +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; import static net.bytebuddy.asm.Advice.OnMethodEnter; import static net.bytebuddy.asm.Advice.Origin; import static net.bytebuddy.asm.Advice.This; @@ -54,15 +54,15 @@ public static void onEnter( fields[i].setAccessible(true); attributes[i] = fields[i].get(instance); } catch (InaccessibleObjectException e) { - throw new SecurityException(localized("security.instrumentation.inaccessible.object.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.inaccessible.object.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalAccessException e) { - throw new SecurityException(localized("security.instrumentation.illegal.access.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.illegal.access.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalArgumentException e) { - throw new SecurityException(localized("security.instrumentation.illegal.argument.exception").formatted(fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.illegal.argument.exception", fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); } catch (NullPointerException e) { - throw new SecurityException(localized("security.instrumentation.null.pointer.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.null.pointer.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (ExceptionInInitializerError e) { - throw new SecurityException(localized("security.instrumentation.exception.in-initializer.error").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.exception.in-initializer.error", fields[i].getName(), instance.getClass().getName()), e); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationOverwritePathMethodAdvice.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationOverwritePathMethodAdvice.java index 339a6ed9..56115deb 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationOverwritePathMethodAdvice.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationOverwritePathMethodAdvice.java @@ -3,7 +3,7 @@ import java.lang.reflect.Field; import java.lang.reflect.InaccessibleObjectException; -import static de.tum.cit.ase.ares.api.localization.Messages.localized; +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; import static net.bytebuddy.asm.Advice.OnMethodEnter; import static net.bytebuddy.asm.Advice.Origin; import static net.bytebuddy.asm.Advice.This; @@ -54,15 +54,15 @@ public static void onEnter( fields[i].setAccessible(true); attributes[i] = fields[i].get(instance); } catch (InaccessibleObjectException e) { - throw new SecurityException(localized("security.instrumentation.inaccessible.object.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.inaccessible.object.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalAccessException e) { - throw new SecurityException(localized("security.instrumentation.illegal.access.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.illegal.access.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalArgumentException e) { - throw new SecurityException(localized("security.instrumentation.illegal.argument.exception").formatted(fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.illegal.argument.exception", fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); } catch (NullPointerException e) { - throw new SecurityException(localized("security.instrumentation.null.pointer.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.null.pointer.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (ExceptionInInitializerError e) { - throw new SecurityException(localized("security.instrumentation.exception.in-initializer.error").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.exception.in-initializer.error", fields[i].getName(), instance.getClass().getName()), e); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationReadPathMethodAdvice.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationReadPathMethodAdvice.java index 89ab5780..9c201281 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationReadPathMethodAdvice.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationReadPathMethodAdvice.java @@ -3,7 +3,7 @@ import java.lang.reflect.Field; import java.lang.reflect.InaccessibleObjectException; -import static de.tum.cit.ase.ares.api.localization.Messages.localized; +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; import static net.bytebuddy.asm.Advice.OnMethodEnter; import static net.bytebuddy.asm.Advice.Origin; import static net.bytebuddy.asm.Advice.This; @@ -54,15 +54,15 @@ public static void onEnter( fields[i].setAccessible(true); attributes[i] = fields[i].get(instance); } catch (InaccessibleObjectException e) { - throw new SecurityException(localized("security.instrumentation.inaccessible.object.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.inaccessible.object.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalAccessException e) { - throw new SecurityException(localized("security.instrumentation.illegal.access.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.illegal.access.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (IllegalArgumentException e) { - throw new SecurityException(localized("security.instrumentation.illegal.argument.exception").formatted(fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.illegal.argument.exception", fields[i].getName(), fields[i].getDeclaringClass().getName(), instance.getClass().getName()), e); } catch (NullPointerException e) { - throw new SecurityException(localized("security.instrumentation.null.pointer.exception").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.null.pointer.exception", fields[i].getName(), instance.getClass().getName()), e); } catch (ExceptionInInitializerError e) { - throw new SecurityException(localized("security.instrumentation.exception.in-initializer.error").formatted(fields[i].getName(), instance.getClass().getName()), e); + throw new SecurityException(localize("security.instrumentation.exception.in-initializer.error", fields[i].getName(), instance.getClass().getName()), e); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationBindingDefinitions.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationBindingDefinitions.java index e971ed91..dd307d05 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationBindingDefinitions.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationBindingDefinitions.java @@ -21,7 +21,7 @@ import java.util.List; import java.util.Map; -import static de.tum.cit.ase.ares.api.localization.Messages.localized; +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; /** * This class provides the definitions for the bindings of the Java instrumentation. @@ -38,7 +38,7 @@ public class JavaInstrumentationBindingDefinitions { * This class is a utility class and should not be instantiated. */ private JavaInstrumentationBindingDefinitions() { - throw new SecurityException(localized("security.general.utility.initialization")); + throw new SecurityException(localize("security.general.utility.initialization")); } // @@ -65,7 +65,7 @@ private static DynamicType.Builder createMethodBinding( loadToolbox(classLoader); return builder.visit(Advice.to(advice).on(JavaInstrumentationPointcutDefinitions.getMethodsMatcher(typeDescription, pointcuts))); } catch (Exception e) { - throw new SecurityException(localized("security.instrumentation.binding.error"), e); + throw new SecurityException(localize("security.instrumentation.binding.error"), e); } } @@ -77,7 +77,7 @@ private static DynamicType.Builder createConstructorBinding( loadToolbox(classLoader); return builder.visit(Advice.to(advice).on(JavaInstrumentationPointcutDefinitions.getConstructorsMatcher(typeDescription, pointcuts))); } catch (Exception e) { - throw new SecurityException(localized("security.instrumentation.binding.error"), e); + throw new SecurityException(localize("security.instrumentation.binding.error"), e); } } @@ -136,7 +136,7 @@ public static DynamicType.Builder createReadPathMethodBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanReadFiles, JavaInstrumentationReadPathMethodAdvice.class ); } catch (Exception e) { - throw new SecurityException(localized("security.instrumentation.read.method.binding.error"), e); + throw new SecurityException(localize("security.instrumentation.read.method.binding.error"), e); } } @@ -151,7 +151,7 @@ public static DynamicType.Builder createReadPathConstructorBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanReadFiles, JavaInstrumentationReadPathConstructorAdvice.class ); } catch (Exception e) { - throw new SecurityException(localized("security.instrumentation.read.constructor.binding.error"), e); + throw new SecurityException(localize("security.instrumentation.read.constructor.binding.error"), e); } } // @@ -182,7 +182,7 @@ public static DynamicType.Builder createOverwritePathMethodBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanOverwriteFiles, JavaInstrumentationOverwritePathMethodAdvice.class ); } catch (Exception e) { - throw new SecurityException(localized("security.instrumentation.overwrite.method.binding.error"), e); + throw new SecurityException(localize("security.instrumentation.overwrite.method.binding.error"), e); } } @@ -198,7 +198,7 @@ public static DynamicType.Builder createOverwritePathConstructorBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanOverwriteFiles, JavaInstrumentationOverwritePathConstructorAdvice.class ); } catch (Exception e) { - throw new SecurityException(localized("security.instrumentation.overwrite.constructor.binding.error"), e); + throw new SecurityException(localize("security.instrumentation.overwrite.constructor.binding.error"), e); } } @@ -230,7 +230,7 @@ public static DynamicType.Builder createExecutePathMethodBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanExecuteFiles, JavaInstrumentationExecutePathMethodAdvice.class ); } catch (Exception e) { - throw new SecurityException(localized("security.instrumentation.execute.method.binding.error"), e); + throw new SecurityException(localize("security.instrumentation.execute.method.binding.error"), e); } } @@ -245,7 +245,7 @@ public static DynamicType.Builder createExecutePathConstructorBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanExecuteFiles, JavaInstrumentationExecutePathConstructorAdvice.class ); } catch (Exception e) { - throw new SecurityException(localized("security.instrumentation.execute.constructor.binding.error"), e); + throw new SecurityException(localize("security.instrumentation.execute.constructor.binding.error"), e); } } // @@ -276,7 +276,7 @@ public static DynamicType.Builder createDeletePathMethodBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanDeleteFiles, JavaInstrumentationDeletePathMethodAdvice.class ); } catch (Exception e) { - throw new SecurityException(localized("security.instrumentation.delete.method.binding.error"), e); + throw new SecurityException(localize("security.instrumentation.delete.method.binding.error"), e); } } @@ -291,7 +291,7 @@ public static DynamicType.Builder createDeletePathConstructorBinding( JavaInstrumentationPointcutDefinitions.methodsWhichCanDeleteFiles, JavaInstrumentationDeletePathConstructorAdvice.class ); } catch (Exception e) { - throw new SecurityException(localized("security.instrumentation.delete.constructor.binding.error"), e); + throw new SecurityException(localize("security.instrumentation.delete.constructor.binding.error"), e); } } // diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationPointcutDefinitions.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationPointcutDefinitions.java index bcfe1f69..84e53b57 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationPointcutDefinitions.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/pointcut/JavaInstrumentationPointcutDefinitions.java @@ -10,7 +10,7 @@ import java.util.Map; import java.util.Set; -import static de.tum.cit.ase.ares.api.localization.Messages.localized; +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; /** * This class contains the pointcut definitions for the Java instrumentation agent. @@ -27,7 +27,7 @@ public class JavaInstrumentationPointcutDefinitions { * This constructor is private to prevent instantiation of this utility class. */ private JavaInstrumentationPointcutDefinitions() { - throw new SecurityException(localized("security.general.utility.initialization")); + throw new SecurityException(localize("security.general.utility.initialization")); } // diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java index 46391913..e7fc67aa 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java @@ -97,7 +97,7 @@ public void executeArchitectureTestCase(JavaClasses classes) { } } catch (AssertionError e) { assert e.getMessage().split("\n").length > 1; - throw new SecurityException(localized("security.archunit.illegal.execution").formatted(e.getMessage().split("\n")[1])); + throw new SecurityException(localized("security.archunit.illegal.execution", e.getMessage().split("\n")[1])); } } // diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java index 7c82c282..9c1b706d 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/TransitivelyAccessesMethodsCondition.java @@ -19,7 +19,6 @@ import static com.tngtech.archunit.lang.ConditionEvent.createMessage; import static com.tngtech.archunit.thirdparty.com.google.common.base.Preconditions.checkNotNull; import static com.tngtech.archunit.thirdparty.com.google.common.collect.Iterables.getLast; -import static de.tum.cit.ase.ares.api.localization.Messages.localized; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toSet; // diff --git a/src/main/java/de/tum/cit/ase/ares/api/jupiter/JupiterSecurityExtension.java b/src/main/java/de/tum/cit/ase/ares/api/jupiter/JupiterSecurityExtension.java index e5b7e356..4ba30022 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/jupiter/JupiterSecurityExtension.java +++ b/src/main/java/de/tum/cit/ase/ares/api/jupiter/JupiterSecurityExtension.java @@ -5,17 +5,15 @@ import java.nio.file.InvalidPathException; import java.nio.file.Path; import java.util.Optional; -import java.util.stream.Stream; import de.tum.cit.ase.ares.api.Policy; -import de.tum.cit.ase.ares.api.localization.Messages; import de.tum.cit.ase.ares.api.policy.SecurityPolicyReaderAndDirector; import org.apiguardian.api.API; import org.apiguardian.api.API.Status; import org.junit.jupiter.api.extension.*; +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; import static de.tum.cit.ase.ares.api.internal.TestGuardUtils.hasAnnotation; -import static de.tum.cit.ase.ares.api.localization.Messages.localized; import static org.junit.platform.commons.support.AnnotationSupport.findAnnotation; //REMOVED: Import of ArtemisSecurityManager @@ -50,7 +48,7 @@ public T interceptGenericInvocation(Invocation invocation, ExtensionConte javaSecurityTestCaseSettingsClass = Class.forName("de.tum.cit.ase.ares.api.aop.java.JavaSecurityTestCaseSettings", true, null); resetSettings(javaSecurityTestCaseSettingsClass); } catch (ClassNotFoundException e) { - throw new SecurityException(localized("security.settings.error"), e); + throw new SecurityException(localize("security.settings.error"), e); } } //REMOVED: Installing of ArtemisSecurityManager @@ -80,28 +78,27 @@ public static void resetSettings(Class javaSecurityTestCaseSettingsClass) { resetMethod.invoke(null); resetMethod.setAccessible(false); } catch (NoSuchMethodException e) { - throw new SecurityException(localized("security.settings.reset.method.not.found"), e); + throw new SecurityException(localize("security.settings.reset.method.not.found"), e); } catch (IllegalAccessException e) { - throw new SecurityException(localized("security.settings.reset.access.denied"), e); + throw new SecurityException(localize("security.settings.reset.access.denied"), e); } catch (InvocationTargetException e) { - throw new SecurityException(localized("security.settings.error.within.method"), e); + throw new SecurityException(localize("security.settings.error.within.method"), e); } } - // TODO: Further take a look at these! public static Path testAndGetPolicyValue(Policy policyAnnotation) { String policyValue = policyAnnotation.value(); if (policyValue.isBlank()) { - throw new SecurityException("The policy file path is not specified."); + throw new SecurityException(localize("security.policy.reader.path.blank")); } try { Path policyPath = Path.of(policyValue); if (!policyPath.toFile().exists()) { - throw new SecurityException("The following policy file path does not exist: " + policyPath); + throw new SecurityException(localize("security.policy.reader.path.not.exists", policyPath)); } return policyPath; } catch (InvalidPathException e) { - throw new SecurityException("The following policy file path is invalid: " + policyValue); + throw new SecurityException(localize("security.policy.reader.path.invalid", policyValue)); } } @@ -110,11 +107,11 @@ public static Path testAndGetPolicyWithinPath(Policy policyAnnotation) { try { Path policyWithinPath = Path.of(policyValue); if (!policyWithinPath.startsWith("classes") && !policyWithinPath.startsWith("test-classes")) { - throw new SecurityException("The following path is invalid for withinPath it should start with classes or test-classes: " + policyValue); + throw new SecurityException(localize("security.policy.within.path.wrong.bytecode.path", policyValue)); } return policyWithinPath; } catch (InvalidPathException e) { - throw new SecurityException("The following path is invalid for withinPath: " + policyValue); + throw new SecurityException(localize("security.policy.within.path.invalid", policyValue)); } } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/policy/SecurityPolicyReaderAndDirector.java b/src/main/java/de/tum/cit/ase/ares/api/policy/SecurityPolicyReaderAndDirector.java index d7cfe274..7c869938 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/policy/SecurityPolicyReaderAndDirector.java +++ b/src/main/java/de/tum/cit/ase/ares/api/policy/SecurityPolicyReaderAndDirector.java @@ -17,6 +17,8 @@ import java.io.IOException; import java.nio.file.Path; import java.util.List; + +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; // /** @@ -62,13 +64,13 @@ public SecurityPolicyReaderAndDirector(@Nonnull Path securityPolicyPath, @Nonnul projectPath ); } catch (StreamReadException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Failed to read the security policy file '" + securityPolicyPath + "'.", e); + throw new SecurityException(localize("security.policy.read.failed", securityPolicyPath.toString()), e); } catch (DatabindException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Failed to bind data from the security policy file '" + securityPolicyPath + "'.", e); + throw new SecurityException(localize("security.policy.data.bind.failed", securityPolicyPath.toString()), e); } catch (UnsupportedOperationException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): The security policy contains unsupported operations.", e); + throw new SecurityException(localize("security.policy.unsupported.operation"), e); } catch (IOException e) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Execution): Error occurred while accessing the security policy file '" + securityPolicyPath + "'.", e); + throw new SecurityException(localize("security.policy.io.exception", securityPolicyPath.toString()), e); } } // diff --git a/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java b/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java index 5eb3bf9b..5feb1525 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java +++ b/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java @@ -29,6 +29,7 @@ import java.util.stream.Stream; import static com.google.common.collect.Iterables.isEmpty; +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; // /** @@ -127,37 +128,37 @@ public JavaSecurityTestCaseFactoryAndBuilder( @Nonnull Path projectPath ) { if (securityPolicy.regardingTheSupervisedCode().theProgrammingLanguageUsesTheFollowingPackage() == null) { - throw new IllegalArgumentException("Ares Security Error (Reason: Ares-Code; Stage: Execution): The package name cannot be null."); + throw new IllegalArgumentException(localize("security.policy.restricted.package.null")); } else if (securityPolicy.regardingTheSupervisedCode().theMainClassInsideThisPackageIs() == null) { - throw new IllegalArgumentException("Ares Security Error (Reason: Ares-Code; Stage: Execution): The main class inside the package cannot be null."); + throw new IllegalArgumentException(localize("security.policy.package.main.class.null")); } if (javaBuildMode == null) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): The build mode cannot be null."); + throw new SecurityException(localize("security.policy.java.build.mode.null")); } this.javaBuildMode = javaBuildMode; if (javaArchitectureMode == null) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): The architecture mode cannot be null."); + throw new SecurityException(localize("security.policy.java.architecture.mode.null")); } this.javaArchitectureMode = javaArchitectureMode; if (javaAOPMode == null) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): The AOP mode cannot be null."); + throw new SecurityException(localize("security.policy.java.aop.mode.null")); } this.javaAOPMode = javaAOPMode; if (securityPolicy.regardingTheSupervisedCode().theProgrammingLanguageUsesTheFollowingPackage() == null) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): The x cannot be null."); + throw new SecurityException(localize("security.policy.java.not.correct.set")); } this.packageName = securityPolicy.regardingTheSupervisedCode().theProgrammingLanguageUsesTheFollowingPackage(); if (securityPolicy.regardingTheSupervisedCode().theMainClassInsideThisPackageIs() == null) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): The x cannot be null."); + throw new SecurityException(localize("security.policy.java.not.correct.set")); } this.mainClassInPackageName = securityPolicy.regardingTheSupervisedCode().theMainClassInsideThisPackageIs(); if (securityPolicy.regardingTheSupervisedCode().theFollowingResourceAccessesArePermitted() == null) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): The x cannot be null."); + throw new SecurityException(localize("security.policy.java.not.correct.set")); } this.resourceAccesses = securityPolicy.regardingTheSupervisedCode().theFollowingResourceAccessesArePermitted(); if (securityPolicy.regardingTheSupervisedCode().theFollowingClassesAreTestClasses() == null) { - throw new SecurityException("Ares Security Error (Reason: Ares-Code; Stage: Creation): The x cannot be null."); + throw new SecurityException(localize("security.policy.java.not.correct.set")); } this.testClasses = securityPolicy.regardingTheSupervisedCode().theFollowingClassesAreTestClasses(); // TODO Markus: projectPath is configured wrongly, since for AOP and Architecture tests different paths are used (for Architectural path to bytecode, for AOP path to source code) diff --git a/src/main/java/de/tum/cit/ase/ares/api/util/FileTools.java b/src/main/java/de/tum/cit/ase/ares/api/util/FileTools.java index 2e55429a..bd41e282 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/util/FileTools.java +++ b/src/main/java/de/tum/cit/ase/ares/api/util/FileTools.java @@ -17,15 +17,16 @@ import java.util.stream.IntStream; import java.util.stream.Stream; +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; + /** * Utility class providing file-related operations such as copying files, reading file content, * and writing content to files. These methods are intended for use in scenarios where * secure and reliable file handling is required. */ public class FileTools { - - public static final String ARES_ERROR_MESSAGE = "Ares Security Error (Stage: Creation): Failed to read content from source file."; + // TODO: This is only needed for the pre-compile mode, translation not that necessary /** * Private constructor to prevent instantiation of this utility class. *

@@ -103,7 +104,7 @@ public static List copyJavaFiles(List sourceFilePaths, List ta StandardOpenOption.WRITE ); } catch (IOException e) { - throw new SecurityException(ARES_ERROR_MESSAGE, e); + throw new SecurityException(localize("security.file-tools.read.content.failure"), e); } } return copiedFiles; @@ -142,7 +143,7 @@ public static String readFile(Path sourceFilePath) { } } catch (IOException e) { - throw new SecurityException(ARES_ERROR_MESSAGE, e); + throw new SecurityException(localize("security.file-tools.read.content.failure"), e); } catch (OutOfMemoryError e) { throw new SecurityException("Ares Security Error (Stage: Creation): Out of memory while reading content.", e); } catch (IllegalFormatException e) { @@ -268,7 +269,7 @@ public static Path createThreePartedJavaFile( StandardOpenOption.WRITE ); } catch (IOException e) { - throw new SecurityException(ARES_ERROR_MESSAGE, e); + throw new SecurityException(localize("security.file-tools.read.content.failure"), e); } return createdFile; } diff --git a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties index 1dc98405..01abe729 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties +++ b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties @@ -56,12 +56,18 @@ security.instrumentation.illegal.access.exception=Ares Security Error (Reason: A security.instrumentation.illegal.argument.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '%s' in class '%s' cannot be accessed because the provided instance is of type '%s', which is not the declaring class or interface. security.instrumentation.null.pointer.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): The field '%s' is unexpectedly null. This may indicate a corrupt or improperly initialized object. security.instrumentation.exception.in-initializer.error=Ares Security Error (Reason: Ares-Code; Stage: Execution): Initialization of the field '%s' in class '%s' failed due to an error during static initialization or field setup. +security.policy.read.failed=Ares Security Error (Reason: Ares-Code; Stage: Execution): Failed to read the security policy file '%s'. +security.policy.data.bind.failed=Ares Security Error (Reason: Ares-Code; Stage: Execution): Failed to bind data from the security policy file '%s'. +security.policy.unsupported.operation=Ares Security Error (Reason: Ares-Code; Stage: Execution): The security policy contains unsupported operations. +security.policy.io.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Error occurred while accessing the security policy file '%s'. +security.policy.restricted.package.null=Ares Security Error (Reason: Ares-Code; Stage: Execution): The restricted package name cannot be null. +security.policy.package.main.class.null=Ares Security Error (Reason: Ares-Code; Stage: Execution): The main class inside the package cannot be null. # Student Code Execution security.advice.illegal.method.execution=Ares Security Error (Reason: Student-Code; Stage: Execution): %s tried to illegally %s from %s via %s but was blocked by Ares. security.archunit.illegal.execution=\n\u0020- Ares Security Error (Reason: Student-Code; Stage: Execution):\n\u0020\u0020- %s -# error messages in Creation phase +# Ares Code Creation security.settings.error=Security configuration error: The class for the specific security test case settings could not be found. Ensure the class name is correct and the class is available at runtime. security.settings.reset.method.not.found=Security configuration error: The 'reset' method could not be found in the specified class. Ensure the method exists and is correctly named. security.settings.reset.access.denied=Security configuration error: Access to the 'reset' method was denied. Ensure the method is public and accessible. @@ -81,6 +87,18 @@ security.creation.reset.class.not.found.exception=Ares Security Error (Reason: A security.creation.reset.no.method.exception=Ares Security Error (Reason: Ares-Code; Stage: Creation): The 'reset' method could not be found in the specified class. Ensure the method exists and is correctly named. security.creation.reset.illegal.access.exception=Ares Security Error (Reason: Ares-Code; Stage: Creation): Access to the 'reset' method was denied. Ensure the method is public and accessible. security.creation.reset.invocation.target.exception=Ares Security Error (Reason: Ares-Code; Stage: Creation): An error occurred while invoking the 'reset' method. This could be due to an underlying issue within the method implementation. +security.policy.java.build.mode.null=Ares Security Error (Reason: Ares-Code; Stage: Creation): The build mode cannot be null. +security.policy.java.architecture.mode.null=Ares Security Error (Reason: Ares-Code; Stage: Creation): The architecture mode cannot be null. +security.policy.java.aop.mode.null=Ares Security Error (Reason: Ares-Code; Stage: Creation): The AOP mode cannot be null. +security.policy.java.not.correct.set=Ares Security Error (Reason: Ares-Code; Stage: Creation): The x cannot be null. +security.file-tools.read.content.failure=Ares Security Error (Stage: Creation): Failed to read content from source file. + +# Policy reader and configurer +security.policy.reader.path.blank=The policy file path is not specified. +security.policy.reader.path.not.exists=The following policy file path does not exist: %s +security.policy.reader.path.invalid=The following policy file path is invalid: %s +security.policy.within.path.wrong.bytecode.path=The following path is invalid for withinPath it should start with classes or test-classes: %s +security.policy.within.path.invalid=The following path is invalid for withinPath: %s # test guard and deadline handling test_guard.extended_deadline_zero_or_negative=deadline extension must not be ZERO or negative: %s diff --git a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties index fbe4b97b..05df4d0a 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties +++ b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties @@ -44,43 +44,61 @@ security.configuration_invalid_port_allowed_in_rage=Erlaubte lokale Portnummern security.configuration_invalid_port_exclude_outside_rage=Ausgeschlossene lokale Ports müssen größer sein als allowPortsAbove # Ares Code Execution -security.advice.error.ares.stage.execution.prefix=Ares-Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): -security.advice.linkage.exception=${security.advice.error.ares.stage.execution.prefix} Verknüpfungsfehler beim Zugriff auf Feld '%s' in AdviceSettings -security.advice.class.not.found.exception=${security.advice.error.ares.stage.execution.prefix} Klasse 'JavaSecurityTestCaseSettings' zum Zugriff auf Feld '%s' nicht gefunden -security.advice.no.such.field.exception=${security.advice.error.ares.stage.execution.prefix} Feld '%s' in AdviceSettings nicht gefunden -security.advice.null.pointer.exception=${security.advice.error.ares.stage.execution.prefix} Nullzeiger-Ausnahme beim Zugriff auf Feld '%s' in AdviceSettings -security.advice.illegal.access.exception=${security.advice.error.ares.stage.execution.prefix} Feld '%s' ist in AdviceSettings nicht zugänglich -security.advice.inaccessible.object.exception=${security.advice.error.ares.stage.execution.prefix} Feld '%s' ist in AdviceSettings nicht zugänglich +security.advice.linkage.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Verknüpfungsfehler beim Zugriff auf das Feld '%s' in AdviceSettings +security.advice.class.not.found.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Die Klasse 'JavaSecurityTestCaseSettings' konnte nicht gefunden werden, um auf das Feld '%s' zuzugreifen +security.advice.no.such.field.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Das Feld '%s' wurde in AdviceSettings nicht gefunden +security.advice.null.pointer.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): NullPointerException beim Zugriff auf das Feld '%s' in AdviceSettings +security.advice.illegal.access.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Das Feld '%s' ist in AdviceSettings nicht zugänglich +security.advice.inaccessible.object.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Das Feld '%s' ist in AdviceSettings unzugänglich security.advice.transform.path.exception=Kann nicht in Pfad umgewandelt werden -security.instrumentation.inaccessible.object.exception=${security.advice.error.ares.stage.execution.prefix} Feld '%s' in Klasse '%s' kann aufgrund von JVM-Sicherheitsbeschränkungen nicht zugänglich gemacht werden. -security.instrumentation.illegal.access.exception=${security.advice.error.ares.stage.execution.prefix} Zugriff auf Feld '%s' in Klasse '%s' verweigert. Feldzugriff ist nicht gestattet. -security.instrumentation.illegal.argument.exception=${security.advice.error.ares.stage.execution.prefix} Feld '%s' in Klasse '%s' kann nicht zugegriffen werden, da die bereitgestellte Instanz vom Typ '%s' ist, der nicht der deklarierenden Klasse oder Schnittstelle entspricht. -security.instrumentation.null.pointer.exception=${security.advice.error.ares.stage.execution.prefix} Das Feld '%s' ist unerwartet null. Dies kann auf ein beschädigtes oder nicht ordnungsgemäß initialisiertes Objekt hinweisen. -security.instrumentation.exception.in-initializer.error=${security.advice.error.ares.stage.execution.prefix} Initialisierung des Feldes '%s' in Klasse '%s' aufgrund eines Fehlers während der statischen Initialisierung oder Feldeinrichtung fehlgeschlagen. +security.instrumentation.inaccessible.object.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Das Feld '%s' in der Klasse '%s' kann aufgrund von JVM-Sicherheitsbeschränkungen nicht zugänglich gemacht werden. +security.instrumentation.illegal.access.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Der Zugriff auf das Feld '%s' in der Klasse '%s' wurde verweigert. Der Zugriff auf das Feld ist nicht gestattet. +security.instrumentation.illegal.argument.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Das Feld '%s' in der Klasse '%s' kann nicht abgerufen werden, da die bereitgestellte Instanz vom Typ '%s' ist, der nicht die deklarierende Klasse oder Schnittstelle ist. +security.instrumentation.null.pointer.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Das Feld '%s' ist unerwartet null. Dies kann auf ein beschädigtes oder fehlerhaft initialisiertes Objekt hinweisen. +security.instrumentation.exception.in-initializer.error=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Die Initialisierung des Feldes '%s' in der Klasse '%s' ist aufgrund eines Fehlers bei der statischen Initialisierung oder Einrichtung des Feldes fehlgeschlagen. +security.policy.read.failed=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Die Sicherheitsrichtliniendatei '%s' konnte nicht gelesen werden. +security.policy.data.bind.failed=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Daten aus der Sicherheitsrichtliniendatei '%s' konnten nicht gebunden werden. +security.policy.unsupported.operation=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Die Sicherheitsrichtlinie enthält nicht unterstützte Vorgänge. +security.policy.io.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Beim Zugriff auf die Sicherheitsrichtliniendatei '%s' ist ein Fehler aufgetreten. +security.policy.restricted.package.null=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Der Name des eingeschränkten Pakets darf nicht null sein. +security.policy.package.main.class.null=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Die Hauptklasse innerhalb des Pakets darf nicht null sein. # Student Code Execution -security.advice.error.student.stage.execution.prefix=Ares-Sicherheitsfehler (Grund: Studenten-Code; Phase: Ausführung): -security.advice.illegal.method.execution=${security.advice.error.student.stage.execution.prefix} %s versuchte, illegal %s von %s über %s auszuführen, wurde jedoch von Ares blockiert. -security.archunit.illegal.file-system.method.execution=${security.advice.error.student.stage.execution.prefix} %s versuchte, illegal auf das Dateisystem über %s zuzugreifen, wurde jedoch von Ares blockiert. -security.archunit.illegal.statement=${security.advice.error.student.stage.execution.prefix} Illegale Anweisung gefunden: +security.advice.illegal.method.execution=Ares Sicherheitsfehler (Grund: Student-Code; Phase: Ausführung): %s hat versucht, illegal %s von %s über %s auszuführen, wurde jedoch von Ares blockiert. +security.archunit.illegal.execution=\n\u0020- Ares Sicherheitsfehler (Grund: Student-Code; Phase: Ausführung):\n\u0020\u0020- %s -# Fehlernachrichten in der Erstellungsphase -security.advice.error.ares.stage.creation.prefix=Ares-Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): -security.general.utility.initialization=${security.advice.error.ares.stage.creation.prefix} Dienstprogramm-Klasse sollte nicht instanziiert werden. -security.instrumentation.binding.error=${security.advice.error.ares.stage.creation.prefix} Allgemeines Binding konnte nicht erstellt werden. -security.instrumentation.read.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Leseweg-Methode konnte nicht erstellt werden. -security.instrumentation.read.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Leseweg-Konstruktor konnte nicht erstellt werden. -security.instrumentation.overwrite.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Überschreibungsweg-Methode konnte nicht erstellt werden. -security.instrumentation.overwrite.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Überschreibungsweg-Konstruktor konnte nicht erstellt werden. -security.instrumentation.delete.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Löschweg-Methode konnte nicht erstellt werden. -security.instrumentation.delete.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Löschweg-Konstruktor konnte nicht erstellt werden. -security.instrumentation.execute.method.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Ausführungsweg-Methode konnte nicht erstellt werden. -security.instrumentation.execute.constructor.binding.error=${security.advice.error.ares.stage.creation.prefix} Binding für Ausführungsweg-Konstruktor konnte nicht erstellt werden. -security.instrumentation.agent.installation.error=${security.advice.error.ares.stage.creation.prefix} Agent-Builder auf %s konnte nicht installiert werden. -security.creation.reset.class.not.found.exception=${security.advice.error.ares.stage.creation.prefix} Die Klasse für die spezifischen Sicherheitstestfall-Einstellungen konnte nicht gefunden werden. Stellen Sie sicher, dass der Klassenname korrekt ist und die Klasse zur Laufzeit verfügbar ist. -security.creation.reset.no.method.exception=${security.advice.error.ares.stage.creation.prefix} Die 'reset'-Methode konnte in der angegebenen Klasse nicht gefunden werden. Stellen Sie sicher, dass die Methode existiert und korrekt benannt ist. -security.creation.reset.illegal.access.exception=${security.advice.error.ares.stage.creation.prefix} Der Zugriff auf die 'reset'-Methode wurde verweigert. Stellen Sie sicher, dass die Methode öffentlich und zugänglich ist. -security.creation.reset.invocation.target.exception=${security.advice.error.ares.stage.creation.prefix} Beim Aufrufen der 'reset'-Methode ist ein Fehler aufgetreten. Dies könnte auf ein zugrunde liegendes Problem in der Methodenumsetzung hinweisen. +# Ares Code Creation +security.settings.error=Sicherheitskonfigurationsfehler: Die Klasse für die spezifischen Sicherheitstestfalleinstellungen konnte nicht gefunden werden. Stellen Sie sicher, dass der Klassenname korrekt ist und die Klasse zur Laufzeit verfügbar ist. +security.settings.reset.method.not.found=Sicherheitskonfigurationsfehler: Die 'reset'-Methode konnte in der angegebenen Klasse nicht gefunden werden. Stellen Sie sicher, dass die Methode existiert und korrekt benannt ist. +security.settings.reset.access.denied=Sicherheitskonfigurationsfehler: Der Zugriff auf die 'reset'-Methode wurde verweigert. Stellen Sie sicher, dass die Methode öffentlich und zugänglich ist. +security.settings.error.within.method=Sicherheitskonfigurationsfehler: Beim Aufruf der 'reset'-Methode ist ein Fehler aufgetreten. Dies könnte auf ein zugrunde liegendes Problem in der Methodenimplementierung hinweisen. +security.general.utility.initialization=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Dienstprogrammsklasse sollte nicht instanziiert werden. +security.instrumentation.binding.error=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Konnte keine allgemeine Bindung erstellen. +security.instrumentation.read.method.binding.error=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Konnte keine Bindung für die Leseweg-Methode erstellen. +security.instrumentation.read.constructor.binding.error=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Konnte keine Bindung für den Leseweg-Konstruktor erstellen. +security.instrumentation.overwrite.method.binding.error=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Konnte keine Bindung für die Überschreibweg-Methode erstellen. +security.instrumentation.overwrite.constructor.binding.error=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Konnte keine Bindung für den Überschreibweg-Konstruktor erstellen. +security.instrumentation.delete.method.binding.error=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Konnte keine Bindung für die Löschweg-Methode erstellen. +security.instrumentation.delete.constructor.binding.error=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Konnte keine Bindung für den Löschweg-Konstruktor erstellen. +security.instrumentation.execute.method.binding.error=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Konnte keine Bindung für die Ausführweg-Methode erstellen. +security.instrumentation.execute.constructor.binding.error=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Konnte keine Bindung für den Ausführweg-Konstruktor erstellen. +security.instrumentation.agent.installation.error=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Die Installation des Agenten auf %s ist fehlgeschlagen. +security.creation.reset.class.not.found.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Die Klasse für die spezifischen Sicherheitstestfalleinstellungen konnte nicht gefunden werden. Stellen Sie sicher, dass der Klassenname korrekt ist und die Klasse zur Laufzeit verfügbar ist. +security.creation.reset.no.method.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Die 'reset'-Methode konnte in der angegebenen Klasse nicht gefunden werden. Stellen Sie sicher, dass die Methode existiert und korrekt benannt ist. +security.creation.reset.illegal.access.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Der Zugriff auf die 'reset'-Methode wurde verweigert. Stellen Sie sicher, dass die Methode öffentlich und zugänglich ist. +security.creation.reset.invocation.target.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Beim Aufruf der 'reset'-Methode ist ein Fehler aufgetreten. Dies könnte auf ein zugrunde liegendes Problem in der Methodenimplementierung hinweisen. +security.policy.java.build.mode.null=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Der Build-Modus darf nicht null sein. +security.policy.java.architecture.mode.null=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Der Architekturmodus darf nicht null sein. +security.policy.java.aop.mode.null=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Der AOP-Modus darf nicht null sein. +security.policy.java.not.correct.set=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Die x darf nicht null sein. +security.file-tools.read.content.failure=Ares Sicherheitsfehler (Phase: Erstellung): Konnte den Inhalt der Quelldatei nicht lesen. + +# Policy reader and configurer +security.policy.reader.path.blank=Der Pfad zur Richtliniendatei ist nicht angegeben. +security.policy.reader.path.not.exists=Der folgende Pfad zur Richtliniendatei existiert nicht: %s +security.policy.reader.path.invalid=Der folgende Pfad zur Richtliniendatei ist ungültig: %s +security.policy.within.path.wrong.bytecode.path=Der folgende Pfad ist für withinPath ungültig. Er sollte mit 'classes' oder 'test-classes' beginnen: %s +security.policy.within.path.invalid=Der folgende Pfad ist für withinPath ungültig: %s # test guard and deadline handling test_guard.extended_deadline_zero_or_negative=Deadline Verlängerung muss positiv sein: %s diff --git a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationDelete.yaml b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationDelete.yaml index 3ce5459c..90d3a599 100644 --- a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationDelete.yaml +++ b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationDelete.yaml @@ -14,6 +14,7 @@ regardingTheSupervisedCode: - "de.tum.cit.ase.ares.api.architecture.java.archunit.postcompile.TransitivelyAccessesMethodsCondition" - "de.tum.cit.ase.ares.api.architecture.java.archunit.JavaArchUnitSecurityTestCase" - "de.tum.cit.ase.ares.testutilities.TestUserExtension" + - "de.tum.cit.ase.ares.api.localization.Messages" theFollowingResourceAccessesArePermitted: regardingFileSystemInteractions: - readAllFiles: false diff --git a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationExecute.yaml b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationExecute.yaml index 637511ca..36ea4a90 100644 --- a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationExecute.yaml +++ b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationExecute.yaml @@ -14,6 +14,7 @@ regardingTheSupervisedCode: - "de.tum.cit.ase.ares.api.architecture.java.archunit.postcompile.TransitivelyAccessesMethodsCondition" - "de.tum.cit.ase.ares.api.architecture.java.archunit.JavaArchUnitSecurityTestCase" - "de.tum.cit.ase.ares.testutilities.TestUserExtension" + - "de.tum.cit.ase.ares.api.localization.Messages" theFollowingResourceAccessesArePermitted: regardingFileSystemInteractions: - readAllFiles: false diff --git a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationRead.yaml b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationRead.yaml index 495777b4..e9785c82 100644 --- a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationRead.yaml +++ b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationRead.yaml @@ -14,6 +14,7 @@ regardingTheSupervisedCode: - "de.tum.cit.ase.ares.api.architecture.java.archunit.postcompile.TransitivelyAccessesMethodsCondition" - "de.tum.cit.ase.ares.api.architecture.java.archunit.JavaArchUnitSecurityTestCase" - "de.tum.cit.ase.ares.testutilities.TestUserExtension" + - "de.tum.cit.ase.ares.api.localization.Messages" theFollowingResourceAccessesArePermitted: regardingFileSystemInteractions: - readAllFiles: true diff --git a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationWrite.yaml b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationWrite.yaml index 83dd726c..50e89547 100644 --- a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationWrite.yaml +++ b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationWrite.yaml @@ -14,6 +14,7 @@ regardingTheSupervisedCode: - "de.tum.cit.ase.ares.api.architecture.java.archunit.postcompile.TransitivelyAccessesMethodsCondition" - "de.tum.cit.ase.ares.api.architecture.java.archunit.JavaArchUnitSecurityTestCase" - "de.tum.cit.ase.ares.testutilities.TestUserExtension" + - "de.tum.cit.ase.ares.api.localization.Messages" theFollowingResourceAccessesArePermitted: regardingFileSystemInteractions: - readAllFiles: false From 7c6d76cddcdd4763137994dcddb191b60f0f3fb3 Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 18:03:26 +0200 Subject: [PATCH 06/20] Fix failing tests --- .../api/localization/messages_de.properties | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties index 05df4d0a..3c8f9bab 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties +++ b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties @@ -1,7 +1,7 @@ # localization active_localization=de_DE # security manager and similar -security.access_token_invalid=Access token ist ungültig +security.access_token_invalid=Access token ist ungültig security.already_created=ArtemisSecurityManager schon initialisiert security.already_disabled=ArtemisSecurityManager ist schon deaktiviert security.already_installed=ArtemisSecurityManager schon installiert @@ -10,7 +10,7 @@ security.error_awt=AWT nicht nutzten security.error_blacklist=Unerlaubte Operation security.error_classloader=Das ist nun wirklich nicht nötig. security.error_disallowed_package=Unerlaubter package Zugriff auf %s -security.error_execute=Befehle / Dateien ausführen ist nicht gestattet +security.error_execute=Befehle / Dateien ausführen ist nicht gestattet security.error_link=Das Einbinden von Bibliotheken ist nicht gestattet security.error_management=Management nicht modifizieren security.error_modify_auth=Authentifizierung nicht modifizieren @@ -37,11 +37,11 @@ security.error_package_definition=In package %s darf nichts definiert werden security.stackframe_add_info=%s in Zeile %d in %s security.privileged_throw_not_allowed=Aufrufende Klasse darf keine privilegierten Exceptions werfen security.configuration_invalid_negative_threads=Erlaubte Threadanzahl muss nicht-negativ sein -security.configuration_invalid_port_rule_intersection=Erlaubte und ausgeschlossene lokale Ports dürfen sich nicht überschneiden +security.configuration_invalid_port_rule_intersection=Erlaubte und ausgeschlossene lokale Ports dürfen sich nicht überschneiden security.configuration_invalid_port_negative=Erlaubte lokalen Ports: Portnummer darf nicht negativ sein -security.configuration_invalid_port_over_max=Erlaubte lokalen Ports: Portnummer darf nicht MAXIMUM nicht überschreiten -security.configuration_invalid_port_allowed_in_rage=Erlaubte lokale Portnummern dürfen nicht größer sein als allowPortsAbove -security.configuration_invalid_port_exclude_outside_rage=Ausgeschlossene lokale Ports müssen größer sein als allowPortsAbove +security.configuration_invalid_port_over_max=Erlaubte lokalen Ports: Portnummer darf nicht MAXIMUM nicht überschreiten +security.configuration_invalid_port_allowed_in_rage=Erlaubte lokale Portnummern dürfen nicht größer sein als allowPortsAbove +security.configuration_invalid_port_exclude_outside_rage=Ausgeschlossene lokale Ports müssen größer sein als allowPortsAbove # Ares Code Execution security.advice.linkage.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Verknüpfungsfehler beim Zugriff auf das Feld '%s' in AdviceSettings @@ -102,10 +102,10 @@ security.policy.within.path.invalid=Der folgende Pfad ist f # test guard and deadline handling test_guard.extended_deadline_zero_or_negative=Deadline Verlängerung muss positiv sein: %s -test_guard.hidden_test_before_deadline_message=Versteckte Tests werden nach der Deadline ausgeführt. -test_guard.hidden_test_missing_deadline=Für den versteckten Test %s konnte keine Deadline gefunden werden -test_guard.invalid_deadline_format=Ungültiges ExtendedDeadline Format: %s -test_guard.invalid_extended_deadline_format=Ungültiges ExtendedDeadline Format: %s +test_guard.hidden_test_before_deadline_message=Versteckte Tests werden nach der Deadline ausgeführt. +test_guard.hidden_test_missing_deadline=Für den versteckten Test %s konnte keine Deadline gefunden werden +test_guard.invalid_deadline_format=Ungültiges ExtendedDeadline Format: %s +test_guard.invalid_extended_deadline_format=Ungültiges ExtendedDeadline Format: %s test_guard.obfuscate_hidden_test_missing_deadline=Dem versteckten Test %s fehlt ein Deadline test_guard.public_test_cannot_have_deadline=Öffentlicher Test %s kann keine Deadline haben test_guard.test_cannot_be_public_and_hidden=Test %s kann nicht öffentlich und versteckt sein @@ -127,7 +127,7 @@ reporting.problem_location_hint=/// Mögliche Problemstelle: %s /// sanitization.sanitization_exception_message=%s warf eine Exception beim Erfassen von Informationen. (%s) sanitization.sanitization_failure=%s geworfen, kann aber nicht angezeigt werden: %s # timeout -timeout.failure_message=Zeitüberschreitung der Ausführung nach %s +timeout.failure_message=Zeitüberschreitung der Ausführung nach %s # jqwik jqwik.duplicate_locale_extension_failure=Locale-Erweiterung bereits aktiv # structural @@ -145,7 +145,7 @@ structural.class.extends=Die Klasse '%s' ist nicht wie erwartet eine Unterklasse structural.class.implements=Die Klasse '%s' implementiert die Schnittstelle '%s' nicht wie erwartet. Implementiere die Schnittstelle und ihre Methoden. structural.class.interface=Der Typ '%s' ist keine, wie erwartet. structural.class.modifiers=Der/die Modifikator(en) (Zugriffstyp, abstrakt, etc.) von %s sind nicht wie erwartet implementiert. -structural.common.classLoadFailed=Problem während des %s-Tests: %s. Ãœberprüfe noch einmal, ob du die Klasse korrekt implementiert hast\! +structural.common.classLoadFailed=Problem während des %s-Tests: %s. Ãœberprüfe noch einmal, ob du die Klasse korrekt implementiert hast\! structural.common.noParams=keinen Parametern structural.common.withParams=den Parametern: %s structural.constructor.annotations=Die Annotation(en) des erwarteten Konstruktors der Klasse '%s' mit %s sind nicht wie erwartet implementiert. @@ -155,18 +155,18 @@ structural.method.annoations=Die Annotation(en) der erwarteten Methode '%s' der structural.method.modifiers=Die Modifikatoren (Zugriffstyp, abstrakt, etc.) der erwarteten Methode '%s' der Klasse '%s' mit %s sind nicht wie erwartet implementiert. structural.method.name=Die erwartete Methode '%s' der Klasse '%s' mit %s wurde nicht gefunden oder ist falsch benannt. structural.method.parameters=Die Parameter der erwarteten Methode '%s' der Klasse '%s' mit %s sind nicht wie erwartet implementiert. -structural.method.return=Der Rückgabetyp der erwarteten Methode '%s' der Klasse '%s' mit %s ist nicht wie erwartet implementiert. +structural.method.return=Der Rückgabetyp der erwarteten Methode '%s' der Klasse '%s' mit %s ist nicht wie erwartet implementiert. structural.scan.correctNameCorrectPlace=Die Klasse %s hat den richtigen Namen und befindet sich im richtigen Paket. structural.scan.correctNameMisplaced=Die Klasse %s hat den richtigen Namen, aber das Paket, in dem sie sich befindet, %s, weicht von der Erwartung ab. Stelle sicher, dass sie dem richtigen Paket zugeordnet ist. -structural.scan.correctNameMultiple=Die Klasse %s hat den richtigen Namen, aber sie befindet sich mehrfach im Projekt und in den Paketen: %s, was von der Erwartung abweicht. Stelle sicher, dass du die Klasse dem richtigen Paket zuordnest und alle überflüssigen Pakete entfernst. +structural.scan.correctNameMultiple=Die Klasse %s hat den richtigen Namen, aber sie befindet sich mehrfach im Projekt und in den Paketen: %s, was von der Erwartung abweicht. Stelle sicher, dass du die Klasse dem richtigen Paket zuordnest und alle überflüssigen Pakete entfernst. structural.scan.default=Die Klasse konnte nicht gescannt werden. structural.scan.notFound=Die Aufgabe erwartet eine Klasse mit dem Namen %s in dem Paket %s. Du hast die Klasse in der Aufgabe nicht implementiert. -structural.scan.typosCorrectPlace=Die Aufgabe erwartet eine Klasse mit dem Namen %s. Wir haben festgestellt, dass du eine Klasse %s implementiert hast, die von der Erwartung abweicht. Ãœberprüfe auf Tippfehler im Klassennamen. -structural.scan.typosMisplaced=Die Aufgabe erwartet eine Klasse mit dem Namen %s im Paket %s. Wir haben festgestellt, dass du eine Klasse %s im Paket %s implementiert hast, die von der Erwartung abweicht. Ãœberprüfe den Klassennamen auf Tippfehler und stelle sicher, dass du die Klasse dem richtigen Paket zuordnest. -structural.scan.typosMultiple=Die Aufgabe erwartet eine Klasse mit dem Namen %s in dem Paket %s. Wir haben festgestellt, dass du eine Klasse %s im Paket %s implementiert hast, die von der Erwartung abweicht. Ãœberprüfe den Klassennamen auf Tippfehler und stelle sicher, dass du die Klasse in das richtige Paket einordnest und alle überflüssigen Klassen entfernst. -structural.scan.wrongCaseCorrectPlace=Die Aufgabe erwartet eine Klasse mit dem Namen %s. Wir haben festgestellt, dass du eine Klasse %s implementiert hast, die von der Erwartung abweicht. Prüfe auf falsche Groß-/Kleinschreibung. -structural.scan.wrongCaseMisplaced=Die Aufgabe erwartet eine Klasse mit dem Namen %s im Paket %s. Wir haben festgestellt, dass du eine Klasse %s im Paket %s implementiert hast, die von der Erwartung abweicht. Ãœberprüfe auf falsche Groß-/Kleinschreibung und stelle sicher, dass du sie in das richtige Paket einordnest. -structural.scan.wrongCaseMultiple=Die Aufgabe erwartet eine Klasse mit dem Namen %s im Paket %s. Wir haben festgestellt, dass du eine Klasse %s im Paket %s implementiert hast, die von der Erwartung abweicht. Prüfe auf falsche Groß-/Kleinschreibung und stelle sicher, dass du eine Klasse dem richtigen Paket zuordnest und alle überflüssigen Klassen entfernst. +structural.scan.typosCorrectPlace=Die Aufgabe erwartet eine Klasse mit dem Namen %s. Wir haben festgestellt, dass du eine Klasse %s implementiert hast, die von der Erwartung abweicht. Ãœberprüfe auf Tippfehler im Klassennamen. +structural.scan.typosMisplaced=Die Aufgabe erwartet eine Klasse mit dem Namen %s im Paket %s. Wir haben festgestellt, dass du eine Klasse %s im Paket %s implementiert hast, die von der Erwartung abweicht. Ãœberprüfe den Klassennamen auf Tippfehler und stelle sicher, dass du die Klasse dem richtigen Paket zuordnest. +structural.scan.typosMultiple=Die Aufgabe erwartet eine Klasse mit dem Namen %s in dem Paket %s. Wir haben festgestellt, dass du eine Klasse %s im Paket %s implementiert hast, die von der Erwartung abweicht. Ãœberprüfe den Klassennamen auf Tippfehler und stelle sicher, dass du die Klasse in das richtige Paket einordnest und alle überflüssigen Klassen entfernst. +structural.scan.wrongCaseCorrectPlace=Die Aufgabe erwartet eine Klasse mit dem Namen %s. Wir haben festgestellt, dass du eine Klasse %s implementiert hast, die von der Erwartung abweicht. Prüfe auf falsche Groß-/Kleinschreibung. +structural.scan.wrongCaseMisplaced=Die Aufgabe erwartet eine Klasse mit dem Namen %s im Paket %s. Wir haben festgestellt, dass du eine Klasse %s im Paket %s implementiert hast, die von der Erwartung abweicht. Ãœberprüfe auf falsche Groß-/Kleinschreibung und stelle sicher, dass du sie in das richtige Paket einordnest. +structural.scan.wrongCaseMultiple=Die Aufgabe erwartet eine Klasse mit dem Namen %s im Paket %s. Wir haben festgestellt, dass du eine Klasse %s im Paket %s implementiert hast, die von der Erwartung abweicht. Prüfe auf falsche Groß-/Kleinschreibung und stelle sicher, dass du eine Klasse dem richtigen Paket zuordnest und alle überflüssigen Klassen entfernst. structural.scan.defaultPackage= (d.h. kein Paket) # dynamics dynamics.check.final=%s ist final. @@ -187,7 +187,7 @@ dynamics.constructor.abstract=Objekt der Klasse %s konnte nicht erzeugt werden, dynamics.constructor.access=Zugriff auf den Konstruktor %s nicht möglich, sind die Zugriffsmodifikatoren korrekt? dynamics.constructor.arguments=Konstruktor %s konnte Argumente mit den Typen %s nicht entgegennehmen. dynamics.constructor.name=Konstruktor %s -dynamics.constructor.not_found=Kein Konstruktor für %s mit Parametern %s gefunden. +dynamics.constructor.not_found=Kein Konstruktor für %s mit Parametern %s gefunden. dynamics.field.access=Zugriff auf das Attribut %s der Klasse %s nicht möglich, sind die Zugriffsmodifikatoren korrekt? dynamics.field.cast=Attribut %s der Klasse %s kann nicht nach %s gecastet werden. dynamics.field.name=Attribut %s @@ -197,25 +197,25 @@ dynamics.field.target=Attribut %s von Klasse %s wurde nicht auf einem passenden dynamics.field.final=Attribut %s der Klasse %s kann nicht gesetzt werden, da es final ist. dynamics.field.cast_set=Attribut %s der Klasse %s vom Typ %s kann keine Instanz der Klasse %s zugewiesen werden. dynamics.method.access=Zugriff auf die Methode %s nicht möglich, sind die Zugriffsmodifikatoren korrekt? -dynamics.method.arguments=Methode %s konnte Argumente mit den Typen %s für Objekt vom Typ %s nicht entgegennehmen. -dynamics.method.cast=Rückgabewert der Methode %s kann nicht nach %s gecastet werden, ist der Rückgabetyp korrekt? +dynamics.method.arguments=Methode %s konnte Argumente mit den Typen %s für Objekt vom Typ %s nicht entgegennehmen. +dynamics.method.cast=Rückgabewert der Methode %s kann nicht nach %s gecastet werden, ist der Rückgabetyp korrekt? dynamics.method.name=Methode %s dynamics.method.not_found=Keine Methode %s %s gefunden. dynamics.method.null=Methode %s konnte nicht aufgerufen werden, das Objekt ist null. -dynamics.method.return=Methode %s gibt nicht %s zurück. +dynamics.method.return=Methode %s gibt nicht %s zurück. dynamics.method.static=Methode %s ist nicht statisch. #AST -ast.method.has_no=Unerwünschte Anweisung gefunden: +ast.method.has_no=Unerwünschte Anweisung gefunden: ast.method.convert_from_file=Die Datei %s konnte nicht gelesen werden. ast.method.read_from_directory=Der Ordner %s konnte nicht gelesen werden. ast.method.to_string=Zwischen %s und %s ast.check.has_begin_end=Zeile %s (Spalte %s) -ast.check.not_has_begin=kein Anfang verügbar -ast.check.not_has_end=kein Ende verügbar +ast.check.not_has_begin=kein Anfang verügbar +ast.check.not_has_end=kein Ende verügbar ast.check.begin_end_prefix=\u0020\u0020\u0020- %s bei der Methode %s ast.method.get_formatted_unwanted_node_string_prefix= - %s wurde gefunden: ast.method.get_formatted_file_string_prefix= - In %s: -ast.recursion.has.recursion=Erwünschte Rekursion nicht gefunden: +ast.recursion.has.recursion=Erwünschte Rekursion nicht gefunden: ast.recursion.no.recursion.found=Kein rekursiver Aufruf festgestellt ast.enum.loop_type.for=For-Anweisung From 5e71b40aa6baaef8dc10b7aa23210e9101e54eee Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 18:18:45 +0200 Subject: [PATCH 07/20] Fix Github workflow --- .github/workflows/maven.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 1c15cb04..29b0aeeb 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -32,8 +32,9 @@ jobs: - name: Build and Test with Maven run: | + mvn clean mvn -B package --file pom.xml -DskipTests - mvn test + mvn test -Djava.awt.headless=true" - name: Run Tests on Student Submission run: | From 2977bfcd43b6899ef245f5f8f4d27adc675c15ec Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 18:26:12 +0200 Subject: [PATCH 08/20] Fix headless execution of Desktop and JFileChooser --- .github/workflows/maven.yml | 2 +- .../ase/ares/integration/FileSystemAccessTest.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 29b0aeeb..f224f8e5 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -34,7 +34,7 @@ jobs: run: | mvn clean mvn -B package --file pom.xml -DskipTests - mvn test -Djava.awt.headless=true" + mvn test - name: Run Tests on Student Submission run: | diff --git a/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java b/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java index 623dd79e..df76f2df 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java @@ -12,6 +12,7 @@ import de.tum.cit.ase.ares.integration.testuser.FileSystemAccessUser; import de.tum.cit.ase.ares.testutilities.*; +import java.awt.*; import java.io.IOException; @UserBased(FileSystemAccessUser.class) @@ -801,6 +802,10 @@ void test_accessFileSystemViaFileExecuteInstrumentation() { @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedAspectJExecute.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/student") void test_accessFileSystemViaDesktopAspectJ() throws IOException { try { + if (GraphicsEnvironment.isHeadless()) { + // Skip or mark the test as ignored + return; + } FileSystemAccessPenguin.accessFileSystemViaDesktop(); fail(errorMessage); } catch (SecurityException e) { @@ -813,6 +818,10 @@ void test_accessFileSystemViaDesktopAspectJ() throws IOException { @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationExecute.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/student") void test_accessFileSystemViaDesktopInstrumentation() throws IOException { try { + if (GraphicsEnvironment.isHeadless()) { + // Skip or mark the test as ignored + return; + } FileSystemAccessPenguin.accessFileSystemViaDesktop(); fail(errorMessage); } catch (SecurityException e) { @@ -886,6 +895,10 @@ void test_accessFileSystemViaFileSystemProviderInstrumentation() throws IOExcept @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedAspectJDelete.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/student") void test_accessFileSystemViaJFileChooserAspectJ() throws IOException { try { + if (GraphicsEnvironment.isHeadless()) { + // Skip or mark the test as ignored + return; + } FileSystemAccessPenguin.accessFileSystemViaFileSystemProvider(); fail(errorMessage); } catch (SecurityException e) { From 3cef35ade344d447885b634601737ef36909b300 Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 18:31:48 +0200 Subject: [PATCH 09/20] Fix test --- .github/workflows/maven.yml | 2 +- .../cit/ase/ares/integration/FileSystemAccessTest.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index f224f8e5..3e757729 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -33,7 +33,7 @@ jobs: - name: Build and Test with Maven run: | mvn clean - mvn -B package --file pom.xml -DskipTests + mvn package -DskipTests mvn test - name: Run Tests on Student Submission diff --git a/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java b/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java index df76f2df..5c2750eb 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java @@ -895,10 +895,6 @@ void test_accessFileSystemViaFileSystemProviderInstrumentation() throws IOExcept @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedAspectJDelete.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/student") void test_accessFileSystemViaJFileChooserAspectJ() throws IOException { try { - if (GraphicsEnvironment.isHeadless()) { - // Skip or mark the test as ignored - return; - } FileSystemAccessPenguin.accessFileSystemViaFileSystemProvider(); fail(errorMessage); } catch (SecurityException e) { @@ -911,6 +907,10 @@ void test_accessFileSystemViaJFileChooserAspectJ() throws IOException { @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationDelete.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/student") void test_accessFileSystemViaJFileChooserInstrumentation() { try { + if (GraphicsEnvironment.isHeadless()) { + // Skip or mark the test as ignored + return; + } FileSystemAccessPenguin.accessFileSystemViaJFileChooser(); fail(errorMessage); } catch (SecurityException e) { From cdd2f48b5e7ae00db3abb31c9520e53510c0f601 Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 18:38:20 +0200 Subject: [PATCH 10/20] Remove fork count --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9e6bbaf1..c91a847f 100644 --- a/pom.xml +++ b/pom.xml @@ -445,7 +445,6 @@ maven-surefire-plugin 3.3.0 - 1 -javaagent:${project.build.directory}${file.separator}ares-2.0.0-SNAPSHOT-agent.jar -Xbootclasspath/a:${user.home}${file.separator}.m2${file.separator}repository${file.separator}org${file.separator}aspectj${file.separator}aspectjrt${file.separator}${aspectj.version}${file.separator}aspectjrt-${aspectj.version}.jar From 105a4a037e24564b70a2fbede3b6ee49d8212d07 Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 18:48:02 +0200 Subject: [PATCH 11/20] Remove cache of maven to fix failing tests --- .github/workflows/maven.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 3e757729..13cb3f15 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -30,6 +30,13 @@ jobs: sudo wget -q -O - "https://apache.osuosl.org/maven/maven-3/3.9.8/binaries/apache-maven-3.9.8-bin.tar.gz" | sudo tar xzf - -C /usr/share sudo ln -s /usr/share/apache-maven-3.9.8/bin/mvn /usr/bin/mvn + - uses: actions/cache@v3 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Build and Test with Maven run: | mvn clean From 1a5cd1faf0a8ad2b72b15e628df78055b6e8963d Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 18:54:52 +0200 Subject: [PATCH 12/20] Possible problem reset? --- .github/workflows/maven.yml | 7 ------- .../java/JavaSecurityTestCaseFactoryAndBuilder.java | 11 ++++++++++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 13cb3f15..3e757729 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -30,13 +30,6 @@ jobs: sudo wget -q -O - "https://apache.osuosl.org/maven/maven-3/3.9.8/binaries/apache-maven-3.9.8-bin.tar.gz" | sudo tar xzf - -C /usr/share sudo ln -s /usr/share/apache-maven-3.9.8/bin/mvn /usr/bin/mvn - - uses: actions/cache@v3 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven- - - name: Build and Test with Maven run: | mvn clean diff --git a/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java b/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java index 5feb1525..3a0b6258 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java +++ b/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java @@ -30,6 +30,7 @@ import static com.google.common.collect.Iterables.isEmpty; import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; +import static de.tum.cit.ase.ares.api.jupiter.JupiterSecurityExtension.resetSettings; // /** @@ -197,7 +198,15 @@ public JavaSecurityTestCaseFactoryAndBuilder( */ private void createSecurityTestCases() { // - //javaAOPMode.reset(); + try { + // We have to reset both the settings classes in the runtime and the bootstrap class loader to be able to run multiple tests in the same JVM instance. + Class javaSecurityTestCaseSettingsClass = Class.forName("de.tum.cit.ase.ares.api.aop.java.JavaSecurityTestCaseSettings"); + resetSettings(javaSecurityTestCaseSettingsClass); + javaSecurityTestCaseSettingsClass = Class.forName("de.tum.cit.ase.ares.api.aop.java.JavaSecurityTestCaseSettings", true, null); + resetSettings(javaSecurityTestCaseSettingsClass); + } catch (ClassNotFoundException e) { + throw new SecurityException(localize("security.settings.error"), e); + } // // From ec692d238b01ec8608f3aed3baa8f57c4c0298ac Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 20:27:12 +0200 Subject: [PATCH 13/20] Update Surefire plugin version --- pom.xml | 3 ++- .../cit/ase/ares/api/jqwik/JqwikSecurityExtension.java | 3 --- .../java/JavaSecurityTestCaseFactoryAndBuilder.java | 10 +--------- 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index c91a847f..626eb6aa 100644 --- a/pom.xml +++ b/pom.xml @@ -443,8 +443,9 @@ org.apache.maven.plugins maven-surefire-plugin - 3.3.0 + 3.5.1 + 1 -javaagent:${project.build.directory}${file.separator}ares-2.0.0-SNAPSHOT-agent.jar -Xbootclasspath/a:${user.home}${file.separator}.m2${file.separator}repository${file.separator}org${file.separator}aspectj${file.separator}aspectjrt${file.separator}${aspectj.version}${file.separator}aspectjrt-${aspectj.version}.jar diff --git a/src/main/java/de/tum/cit/ase/ares/api/jqwik/JqwikSecurityExtension.java b/src/main/java/de/tum/cit/ase/ares/api/jqwik/JqwikSecurityExtension.java index 087a2fe4..6c300e3f 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/jqwik/JqwikSecurityExtension.java +++ b/src/main/java/de/tum/cit/ase/ares/api/jqwik/JqwikSecurityExtension.java @@ -1,10 +1,7 @@ package de.tum.cit.ase.ares.api.jqwik; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.nio.file.Path; import java.util.Optional; -import java.util.stream.Stream; import de.tum.cit.ase.ares.api.Policy; import de.tum.cit.ase.ares.api.jupiter.JupiterSecurityExtension; diff --git a/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java b/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java index 3a0b6258..24bb5d98 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java +++ b/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java @@ -198,15 +198,7 @@ public JavaSecurityTestCaseFactoryAndBuilder( */ private void createSecurityTestCases() { // - try { - // We have to reset both the settings classes in the runtime and the bootstrap class loader to be able to run multiple tests in the same JVM instance. - Class javaSecurityTestCaseSettingsClass = Class.forName("de.tum.cit.ase.ares.api.aop.java.JavaSecurityTestCaseSettings"); - resetSettings(javaSecurityTestCaseSettingsClass); - javaSecurityTestCaseSettingsClass = Class.forName("de.tum.cit.ase.ares.api.aop.java.JavaSecurityTestCaseSettings", true, null); - resetSettings(javaSecurityTestCaseSettingsClass); - } catch (ClassNotFoundException e) { - throw new SecurityException(localize("security.settings.error"), e); - } + // Reset // // From 70b696d6091a6a62e9e773b12fe5c8bc28a8d240 Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 20:33:47 +0200 Subject: [PATCH 14/20] Upgrade actions to version 3 --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 3e757729..ddafc39e 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Checkout Repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up JDK 21 uses: actions/setup-java@v3 From 602c6342a7d2af99f13b6663a1016465ab0b777e Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 21:09:21 +0200 Subject: [PATCH 15/20] Remove student submission tests --- .github/workflows/maven.yml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index ddafc39e..f20f8b0f 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -16,10 +16,10 @@ jobs: steps: - name: Checkout Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up JDK 21 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: '21' distribution: 'adopt' @@ -35,13 +35,3 @@ jobs: mvn clean mvn package -DskipTests mvn test - - - name: Run Tests on Student Submission - run: | - git config --global url.https://github.com/.insteadOf git://github.com/ - git clone https://github.com/sarpsahinalp/test-student-submission.git - mkdir test-student-submission/libs - cp target/*.jar test-student-submission/libs - cd test-student-submission - ./gradlew build - ./gradlew test From 5db535b3d426bfb3143c622fb940a311d7ddb048 Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 21:23:14 +0200 Subject: [PATCH 16/20] Tested with act --- .github/workflows/maven.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index f20f8b0f..bcf7b553 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -23,6 +23,7 @@ jobs: with: java-version: '21' distribution: 'adopt' + cache: maven - name: Install Maven run: | @@ -30,8 +31,8 @@ jobs: sudo wget -q -O - "https://apache.osuosl.org/maven/maven-3/3.9.8/binaries/apache-maven-3.9.8-bin.tar.gz" | sudo tar xzf - -C /usr/share sudo ln -s /usr/share/apache-maven-3.9.8/bin/mvn /usr/bin/mvn - - name: Build and Test with Maven - run: | - mvn clean - mvn package -DskipTests - mvn test + - name: Build + run: mvn clean package -DskipTests + + - name: Test + run: mvn test From 89135ce83892e1d69d5b013b248b073504ad6370 Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 21:53:10 +0200 Subject: [PATCH 17/20] Workflow stopped working? --- .github/workflows/maven.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index bcf7b553..d2705789 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -12,18 +12,17 @@ on: jobs: build-and-test: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout Repository uses: actions/checkout@v4 - - name: Set up JDK 21 + - name: Set up JDK 22 uses: actions/setup-java@v4 with: - java-version: '21' + java-version: '22' distribution: 'adopt' - cache: maven - name: Install Maven run: | From f552b9e2c830a067453fd1f032bc4833c3d9193e Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 21:55:03 +0200 Subject: [PATCH 18/20] Turn back to java 21 --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index d2705789..b058c58f 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -21,7 +21,7 @@ jobs: - name: Set up JDK 22 uses: actions/setup-java@v4 with: - java-version: '22' + java-version: '21' distribution: 'adopt' - name: Install Maven From ec8a35024de02cf6c47269e14a762a2fe7cc659e Mon Sep 17 00:00:00 2001 From: sarps Date: Tue, 15 Oct 2024 22:31:04 +0200 Subject: [PATCH 19/20] Added test to check whether the translation keys are complete --- .../api/aop/java/JavaSecurityTestCase.java | 90 ++++--------------- .../JavaInstrumentationAdviceToolbox.java | 4 +- .../ares/api/localization/messages.properties | 9 ++ .../api/localization/messages_de.properties | 41 +++++++++ .../integration/FileSystemAccessTest.java | 16 +--- .../cit/ase/ares/integration/LocaleTest.java | 27 ++++++ .../testuser/FileSystemAccessUser.java | 1 - 7 files changed, 101 insertions(+), 87 deletions(-) diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaSecurityTestCase.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaSecurityTestCase.java index e731dad8..044c874e 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaSecurityTestCase.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/JavaSecurityTestCase.java @@ -18,6 +18,8 @@ import java.util.Map; import java.util.function.Predicate; import java.util.stream.Collectors; + +import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; // /** @@ -79,23 +81,14 @@ private static String generateAdviceSettingValue(@Nonnull String dataType, @Nonn return switch (dataType) { case "String" -> { - // TODO: Refactor the error messages here if (!(value instanceof String)) { - throw new SecurityException(String.format( - "Ares Security Error (Reason: Ares-Code; Stage: Creation): " - + "Invalid value type for String advice setting: " - + "%s but should be String.", - value.getClass())); + throw new SecurityException(localize("security.advice.settings.data.type.mismatch.string", value.getClass())); } yield String.format("private static String %s = \"%s\";%n", adviceSetting, value); } case "String[]" -> { if (!(value instanceof List)) { - throw new SecurityException(String.format( - "Ares Security Error (Reason: Ares-Code; Stage: Creation): " - + "Invalid value type for String[] advice setting: " - + "%s but should be List.", - value.getClass())); + throw new SecurityException(localize("security.advice.settings.data.type.mismatch.string[]", value.getClass())); } String stringArrayValue = ((List) value).stream() .map(Object::toString) @@ -105,11 +98,7 @@ private static String generateAdviceSettingValue(@Nonnull String dataType, @Nonn } case "String[][]" -> { if (!(value instanceof List)) { - throw new SecurityException(String.format( - "Ares Security Error (Reason: Ares-Code; Stage: Creation): " - + "Invalid value type for String[][] advice setting: " - + "%s but should be List>.", - value.getClass())); + throw new SecurityException(localize("security.advice.settings.data.type.mismatch.string[][]", value.getClass())); } String stringArrayArrayValue = ((List) value).stream() .filter(e -> e instanceof List) @@ -124,38 +113,17 @@ private static String generateAdviceSettingValue(@Nonnull String dataType, @Nonn } case "int[]" -> { if (!(value instanceof List)) { - throw new SecurityException(String.format( - "Ares Security Error (Reason: Ares-Code; Stage: Creation): " - + "Invalid value type for int[] advice setting: " - + "%s but should be List.", - value.getClass())); + throw new SecurityException(localize("security.advice.settings.data.type.mismatch.int[]", value.getClass())); } String intArrayValue = ((List) value).stream() .map(Object::toString) .collect(Collectors.joining(", ")); yield String.format("private static int[] %s = new int[] {%s};%n", adviceSetting, intArrayValue); } - default -> throw new SecurityException( - "Ares Security Error (Reason: Ares-Code; Stage: Creation): " - + "Unknown data type while creating the value " - + value - + " for the advice settings " - + dataType - + " " - + adviceSetting - ); + default -> throw new SecurityException(localize("security.advice.settings.data.type.unknown", value, dataType, adviceSetting)); }; } catch (IllegalFormatException e) { - throw new SecurityException( - "Ares Security Error (Reason: Ares-Code; Stage: Creation): " - + "Format error while creating the value " - + value - + " for the advice settings " - + dataType - + " " - + adviceSetting, - e - ); + throw new SecurityException(localize("security.advice.invalid.format", value, dataType, adviceSetting)); } } @@ -180,53 +148,31 @@ public static void setJavaAdviceSettingValue(@Nonnull String adviceSetting, @Nul field.setAccessible(false); } catch (LinkageError e) { throw new SecurityException( - "Ares Security Error (Reason: Ares-Code; Stage: Creation):" - + "Linkage error while accessing field '" - + adviceSetting - + "' in AdviceSettings", + localize("security.advice.linkage.exception", adviceSetting), e); } catch (ClassNotFoundException e) { throw new SecurityException( - "Ares Security Error (Reason: Ares-Code; Stage: Creation):" - + "Could not find 'JavaSecurityTestCaseSettings' class to access field '" - + adviceSetting - + "'", + localize("security.advice.class.not.found.exception", adviceSetting), e); } catch (NoSuchFieldException e) { throw new SecurityException( - "Ares Security Error (Reason: Ares-Code; Stage: Creation):" - + "Field '" - + adviceSetting - + "' not found in AdviceSettings", + localize("security.advice.no.such.field.exception", adviceSetting), e); } catch (NullPointerException e) { throw new SecurityException( - "Ares Security Error (Reason: Ares-Code; Stage: Creation):" - + "Null pointer exception while accessing field '" - + adviceSetting - + "' in AdviceSettings", + localize("security.advice.null.pointer.exception", adviceSetting), e); } catch (IllegalAccessException e) { throw new SecurityException( - "Ares Security Error (Reason: Ares-Code; Stage: Creation):" - + "Field '" - + adviceSetting - + "' is not accessible in AdviceSettings", + localize("security.advice.illegal.access.exception", adviceSetting), e); } catch (IllegalArgumentException e) { throw new SecurityException( - "Ares Security Error (Reason: Ares-Code; Stage: Creation):" - + "Illegal argument while setting field '" - + adviceSetting - + "' in AdviceSettings with value " - + value, + localize("security.advice.illegal.argument.exception", adviceSetting, value), e); } catch (InaccessibleObjectException e) { throw new SecurityException( - "Ares Security Error (Reason: Ares-Code; Stage: Creation):" - + "Field '" - + adviceSetting - + "' is inaccessible in AdviceSettings", + localize("security.advice.inaccessible.object.exception", adviceSetting), e); } } @@ -266,7 +212,7 @@ private List getPermittedFilePaths(@Nonnull String filePermission) { case "execute" -> FilePermission::executeAllFiles; case "delete" -> FilePermission::deleteAllFiles; default -> - throw new IllegalArgumentException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Invalid file permission: " + filePermission); + throw new IllegalArgumentException(localize("security.advice.settings.invalid.file.permission", filePermission)); }; return resourceAccesses.regardingFileSystemInteractions() .stream() @@ -329,7 +275,7 @@ private List getPermittedNetworkHosts(@Nonnull String networkPermission) case "send" -> NetworkPermission::sendData; case "receive" -> NetworkPermission::receiveData; default -> - throw new IllegalArgumentException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Invalid network permission: " + networkPermission); + throw new IllegalArgumentException(localize("security.advice.settings.invalid.network.permission", networkPermission)); }; return resourceAccesses.regardingNetworkConnections() .stream() @@ -351,7 +297,7 @@ private List getPermittedNetworkPorts(@Nonnull String networkPermission case "send" -> NetworkPermission::sendData; case "receive" -> NetworkPermission::receiveData; default -> - throw new IllegalArgumentException("Ares Security Error (Reason: Ares-Code; Stage: Creation): Invalid network permission: " + networkPermission); + throw new IllegalArgumentException(localize("security.advice.settings.invalid.network.permission", networkPermission)); }; return resourceAccesses.regardingNetworkConnections() .stream() diff --git a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java index 2cfd784f..92b1c695 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java +++ b/src/main/java/de/tum/cit/ase/ares/api/aop/java/instrumentation/advice/JavaInstrumentationAdviceToolbox.java @@ -265,8 +265,8 @@ public static String localize(String key, Object... args) { throw new IllegalStateException("Method does not return a String"); } } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { - // TODO: Add a correct implementation of the localization - throw new RuntimeException(e.getMessage()); + // Fallback: Return the key if localization fails + return key; } } } \ No newline at end of file diff --git a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties index 01abe729..b0168fb5 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties +++ b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties @@ -49,6 +49,7 @@ security.advice.class.not.found.exception=Ares Security Error (Reason: Ares-Code security.advice.no.such.field.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '%s' not found in AdviceSettings security.advice.null.pointer.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Null pointer exception while accessing field '%s' in AdviceSettings security.advice.illegal.access.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '%s' is not accessible in AdviceSettings +security.advice.illegal.argument.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Illegal argument while setting field '%s' in AdviceSettings with value %s security.advice.inaccessible.object.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Field '%s' is inaccessible in AdviceSettings security.advice.transform.path.exception=Cannot transform to path security.instrumentation.inaccessible.object.exception=Ares Security Error (Reason: Ares-Code; Stage: Execution): Unable to make field '%s' in class '%s' accessible due to JVM security restrictions. @@ -92,6 +93,14 @@ security.policy.java.architecture.mode.null=Ares Security Error (Reason: Ares-Co security.policy.java.aop.mode.null=Ares Security Error (Reason: Ares-Code; Stage: Creation): The AOP mode cannot be null. security.policy.java.not.correct.set=Ares Security Error (Reason: Ares-Code; Stage: Creation): The x cannot be null. security.file-tools.read.content.failure=Ares Security Error (Stage: Creation): Failed to read content from source file. +security.advice.settings.data.type.mismatch.string=Ares Security Error (Reason: Ares-Code; Stage: Creation): Invalid value type for String advice setting: %s but should be String. +security.advice.settings.data.type.mismatch.string[]=Ares Security Error (Reason: Ares-Code; Stage: Creation): Invalid value type for String[] advice setting: %s but should be List. +security.advice.settings.data.type.mismatch.string[][]=Ares Security Error (Reason: Ares-Code; Stage: Creation): Invalid value type for String[][] advice setting: %s but should be List>. +security.advice.settings.data.type.mismatch.int[]=Ares Security Error (Reason: Ares-Code; Stage: Creation): Invalid value type for int[] advice setting: %s but should be List. +security.advice.settings.data.type.unknown=Ares Security Error (Reason: Ares-Code; Stage: Creation): Unknown data type while creating the value %s for the advice settings %s %s +security.advice.invalid.format=Ares Security Error (Reason: Ares-Code; Stage: Creation): Format error while creating the value %s for the advice settings %s %s +security.advice.settings.invalid.file.permission=Ares Security Error (Reason: Ares-Code; Stage: Creation): Invalid file permission: %s +security.advice.settings.invalid.network.permission=Ares Security Error (Reason: Ares-Code; Stage: Creation): Invalid network permission: %s # Policy reader and configurer security.policy.reader.path.blank=The policy file path is not specified. diff --git a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties index 3c8f9bab..54642f5f 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties +++ b/src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties @@ -49,6 +49,7 @@ security.advice.class.not.found.exception=Ares Sicherheitsfehler (Grund: Ares-Co security.advice.no.such.field.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Das Feld '%s' wurde in AdviceSettings nicht gefunden security.advice.null.pointer.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): NullPointerException beim Zugriff auf das Feld '%s' in AdviceSettings security.advice.illegal.access.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Das Feld '%s' ist in AdviceSettings nicht zugänglich +security.advice.illegal.argument.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Ungültiges Argument beim Setzen des Feldes '%s' in AdviceSettings mit dem Wert %s security.advice.inaccessible.object.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Das Feld '%s' ist in AdviceSettings unzugänglich security.advice.transform.path.exception=Kann nicht in Pfad umgewandelt werden security.instrumentation.inaccessible.object.exception=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Ausführung): Das Feld '%s' in der Klasse '%s' kann aufgrund von JVM-Sicherheitsbeschränkungen nicht zugänglich gemacht werden. @@ -92,6 +93,14 @@ security.policy.java.architecture.mode.null=Ares Sicherheitsfehler (Grund: Ares- security.policy.java.aop.mode.null=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Der AOP-Modus darf nicht null sein. security.policy.java.not.correct.set=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Die x darf nicht null sein. security.file-tools.read.content.failure=Ares Sicherheitsfehler (Phase: Erstellung): Konnte den Inhalt der Quelldatei nicht lesen. +security.advice.settings.data.type.mismatch.string=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Ungültiger Datentyp für String-Rateneinstellung: %s, erwartet wurde String. +security.advice.settings.data.type.mismatch.string[]=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Ungültiger Datentyp für String[]-Rateneinstellung: %s, erwartet wurde Liste. +security.advice.settings.data.type.mismatch.string[][]=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Ungültiger Datentyp für String[][]-Rateneinstellung: %s, erwartet wurde Liste>. +security.advice.settings.data.type.mismatch.int[]=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Ungültiger Datentyp für int[]-Rateneinstellung: %s, erwartet wurde Liste. +security.advice.settings.data.type.unknown=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Unbekannter Datentyp beim Erstellen des Wertes %s für die Rateneinstellungen %s %s +security.advice.invalid.format=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Formatfehler beim Erstellen des Wertes %s für die Rateneinstellungen %s %s +security.advice.settings.invalid.file.permission=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Ungültige Dateiberechtigung: %s +security.advice.settings.invalid.network.permission=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Ungültige Netzwerkberechtigung: %s # Policy reader and configurer security.policy.reader.path.blank=Der Pfad zur Richtliniendatei ist nicht angegeben. @@ -168,6 +177,38 @@ structural.scan.wrongCaseCorrectPlace=Die Aufgabe erwartet eine Klasse mit dem N structural.scan.wrongCaseMisplaced=Die Aufgabe erwartet eine Klasse mit dem Namen %s im Paket %s. Wir haben festgestellt, dass du eine Klasse %s im Paket %s implementiert hast, die von der Erwartung abweicht. Ãœberprüfe auf falsche Groß-/Kleinschreibung und stelle sicher, dass du sie in das richtige Paket einordnest. structural.scan.wrongCaseMultiple=Die Aufgabe erwartet eine Klasse mit dem Namen %s im Paket %s. Wir haben festgestellt, dass du eine Klasse %s im Paket %s implementiert hast, die von der Erwartung abweicht. Prüfe auf falsche Groß-/Kleinschreibung und stelle sicher, dass du eine Klasse dem richtigen Paket zuordnest und alle überflüssigen Klassen entfernst. structural.scan.defaultPackage= (d.h. kein Paket) + +# reflection test utils +reflection_test_utils.attribute_access=Das Attribut '%s' konnte aus der Klasse %s nicht abgerufen werden, da der Zugriff auf das Attribut verweigert wurde. Stellen Sie sicher, dass Sie die Modifizierer des %s überprüfen. +reflection_test_utils.attribute_not_found=Das Attribut '%s' konnte aus der Klasse %s nicht abgerufen werden, da das Attribut nicht existiert. Stellen Sie sicher, dass das Attribut korrekt implementiert ist. +reflection_test_utils.attribute_null=Der Wert des Attributs '%s' konnte nicht abgerufen werden, da das Objekt null war. +reflection_test_utils.attribute_set_final=Der Wert des Attributs '%s' aus der Klasse %s konnte nicht gesetzt werden, da es final ist. Stellen Sie sicher, dass Sie die Modifizierer des Attributs überprüfen. +reflection_test_utils.class_initialization=Die Klasse '%s' konnte nicht initialisiert werden, da eine Ausnahme in einem statischen Initialisierungsblock ausgelöst wurde. Stellen Sie sicher, dass die statische Initialisierung fehlerfrei implementiert ist. +reflection_test_utils.class_not_found=Die Klasse '%s' wurde innerhalb der Übermittlung nicht gefunden. Stellen Sie sicher, dass sie korrekt implementiert ist. +reflection_test_utils.constructor_abstract_class=Die Klasse %s konnte nicht instanziiert werden, da die Klasse abstrakt ist und keinen Konstruktor haben sollte. Stellen Sie sicher, dass der Konstruktor der Klasse entfernt wird. +reflection_test_utils.constructor_access=Die Klasse %s konnte nicht instanziiert werden, da der Zugriff auf ihren Konstruktor mit den Parametern: %s verweigert wurde. Stellen Sie sicher, dass Sie die Modifizierer des %s überprüfen. +reflection_test_utils.constructor_arguments=Die Klasse %s konnte nicht instanziiert werden, da der tatsächliche Konstruktor oder keiner der tatsächlichen Konstruktoren dieser Klasse mit dem erwarteten übereinstimmt. Wir erwarten unter anderem einen mit %s Parametern, der nicht existiert. Stellen Sie sicher, dass Sie diesen Konstruktor korrekt implementieren. +reflection_test_utils.constructor_class_init=Die Klasse %s konnte nicht instanziiert werden, da der Konstruktor mit %d Parametern nicht initialisiert werden konnte. +reflection_test_utils.constructor_internal_exception=Die Klasse %s konnte nicht instanziiert werden, da der Konstruktor mit %d Parametern eine Ausnahme ausgelöst hat und nicht initialisiert werden konnte. Stellen Sie sicher, dass Sie die Implementierung des Konstruktors überprüfen. +reflection_test_utils.constructor_not_found_args=Die Klasse %s konnte nicht instanziiert werden, da die Klasse keinen Konstruktor mit den Argumenten: %s hat. Stellen Sie sicher, dass Sie diesen Konstruktor korrekt implementieren. +reflection_test_utils.constructor_not_found_params=Der Konstruktor %s in der Klasse %s konnte nicht gefunden werden, da der Konstruktor nicht existiert. Stellen Sie sicher, dass Sie diesen Konstruktor korrekt implementieren. +reflection_test_utils.constructor_null_args=Die Klasse %s konnte nicht instanziiert werden, da kein passender Konstruktor gefunden werden konnte, weil eines der übergebenen Argumente null war. +reflection_test_utils.method_access=Die Methode '%s' in der Klasse %s konnte nicht aufgerufen werden, da der Zugriff auf die Methode verweigert wurde. Stellen Sie sicher, dass Sie die Modifizierer des %s überprüfen. +reflection_test_utils.method_class_init=Die Methode '%s' in der Klasse %s konnte nicht aufgerufen werden, da die durch diese Methode ausgelöste statische Initialisierung fehlgeschlagen ist. Stellen Sie sicher, dass Sie die durch diese Methode ausgelöste Initialisierung überprüfen. +reflection_test_utils.method_internal_exception=Die Methode '%s' in der Klasse %s konnte nicht aufgerufen werden, aufgrund einer Ausnahme innerhalb der Methode: %s +reflection_test_utils.method_name_null=Die Methode '%s' in der Klasse %s konnte nicht gefunden werden, da der Name der Methode null ist. Stellen Sie sicher, dass Sie den Namen der Methode überprüfen. +reflection_test_utils.method_not_found=Die Methode '%s' in der Klasse %s konnte nicht gefunden werden, da die Methode nicht existiert. Stellen Sie sicher, dass Sie diese Methode korrekt implementieren. +reflection_test_utils.method_null_args=Die Methode '%s' konnte nicht gefunden werden, da eines der übergebenen Argumente null war. +reflection_test_utils.method_null_target=Die Methode '%s' konnte nicht gefunden werden, da das Objekt null war. +reflection_test_utils.method_null_target_instance=Die Methode '%s' in der Klasse %s konnte nicht aufgerufen werden, da das Objekt null war und die Methode eine Instanzmethode ist. Stellen Sie sicher, dass Sie den statischen Modifikator der Methode überprüfen. +reflection_test_utils.method_parameters=Die Methode '%s' in der Klasse %s konnte nicht aufgerufen werden, da die Parameter nicht korrekt implementiert sind. Stellen Sie sicher, dass Sie die Parameter der Methode überprüfen. +reflection_test_utils.no_parameters= +reflection_test_utils.with_parameters=mit den Parametern: %s\u0020 +reflection_test_utils.construct.class=Klasse +reflection_test_utils.construct.constructor=Konstruktor +reflection_test_utils.construct.field=Attribut +reflection_test_utils.construct.method=Methode + # dynamics dynamics.check.final=%s ist final. dynamics.check.not_final=%s ist nicht final. diff --git a/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java b/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java index 5c2750eb..c6b84a1d 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/FileSystemAccessTest.java @@ -6,6 +6,7 @@ import de.tum.cit.ase.ares.api.Policy; import de.tum.cit.ase.ares.api.jupiter.PublicTest; import de.tum.cit.ase.ares.integration.testuser.subject.fileSystem.FileSystemAccessPenguin; +import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Nested; import org.junit.platform.testkit.engine.Events; @@ -802,10 +803,7 @@ void test_accessFileSystemViaFileExecuteInstrumentation() { @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedAspectJExecute.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/student") void test_accessFileSystemViaDesktopAspectJ() throws IOException { try { - if (GraphicsEnvironment.isHeadless()) { - // Skip or mark the test as ignored - return; - } + Assumptions.assumeFalse(GraphicsEnvironment.isHeadless(), "Skipping test in headless environment"); FileSystemAccessPenguin.accessFileSystemViaDesktop(); fail(errorMessage); } catch (SecurityException e) { @@ -818,10 +816,7 @@ void test_accessFileSystemViaDesktopAspectJ() throws IOException { @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationExecute.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/student") void test_accessFileSystemViaDesktopInstrumentation() throws IOException { try { - if (GraphicsEnvironment.isHeadless()) { - // Skip or mark the test as ignored - return; - } + Assumptions.assumeFalse(GraphicsEnvironment.isHeadless(), "Skipping test in headless environment"); FileSystemAccessPenguin.accessFileSystemViaDesktop(); fail(errorMessage); } catch (SecurityException e) { @@ -907,10 +902,7 @@ void test_accessFileSystemViaJFileChooserAspectJ() throws IOException { @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentationDelete.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/student") void test_accessFileSystemViaJFileChooserInstrumentation() { try { - if (GraphicsEnvironment.isHeadless()) { - // Skip or mark the test as ignored - return; - } + Assumptions.assumeFalse(GraphicsEnvironment.isHeadless(), "Skipping test in headless environment"); FileSystemAccessPenguin.accessFileSystemViaJFileChooser(); fail(errorMessage); } catch (SecurityException e) { diff --git a/src/test/java/de/tum/cit/ase/ares/integration/LocaleTest.java b/src/test/java/de/tum/cit/ase/ares/integration/LocaleTest.java index ce757b78..95e7bf04 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/LocaleTest.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/LocaleTest.java @@ -1,6 +1,7 @@ package de.tum.cit.ase.ares.integration; import static de.tum.cit.ase.ares.testutilities.CustomConditions.finishedSuccessfully; +import static org.assertj.core.api.Assertions.assertThat; import org.junit.platform.testkit.engine.Events; @@ -8,6 +9,12 @@ import de.tum.cit.ase.ares.integration.testuser.LocaleUser.*; import de.tum.cit.ase.ares.testutilities.*; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import java.util.Set; + @UserBased({ LocaleUser.class, LocaleEn.class, LocaleUnsupported.class }) class LocaleTest { @@ -20,6 +27,9 @@ class LocaleTest { private final String testUnknownFormatted = "testUnknownFormatted"; private final String testUnknownNormal = "testUnknownNormal"; + private static final String ENGLISH_FILE_PATH = "src/main/resources/de/tum/cit/ase/ares/api/localization/messages.properties"; // Replace with actual path + private static final String GERMAN_FILE_PATH = "src/main/resources/de/tum/cit/ase/ares/api/localization/messages_de.properties"; // Replace with actual path + @TestTest void test_testLocaleEn() { tests.assertThatEvents().haveExactly(1, finishedSuccessfully(testLocaleEn)); @@ -44,4 +54,21 @@ void test_testUnknownFormatted() { void test_testUnknownNormal() { tests.assertThatEvents().haveExactly(1, finishedSuccessfully(testUnknownNormal)); } + + @TestTest + public void testTranslationsCompleteness() throws IOException { + Set englishKeys = loadPropertiesKeys(ENGLISH_FILE_PATH); + Set germanKeys = loadPropertiesKeys(GERMAN_FILE_PATH); + + assertThat(germanKeys).containsAll(englishKeys); + } + + private Set loadPropertiesKeys(String filePath) throws IOException { + Properties properties = new Properties(); + try (InputStream input = new FileInputStream(filePath)) { + properties.load(input); + } + return properties.stringPropertyNames(); + } + } diff --git a/src/test/java/de/tum/cit/ase/ares/integration/testuser/FileSystemAccessUser.java b/src/test/java/de/tum/cit/ase/ares/integration/testuser/FileSystemAccessUser.java index b3898721..8d8709c7 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/testuser/FileSystemAccessUser.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/testuser/FileSystemAccessUser.java @@ -36,7 +36,6 @@ void accessPathAllowed() throws IOException { PathAccessPenguin.accessPath(Path.of("pom.xml")); }*/ - // TODO this test should fail with the given agent SecurityException currently not working @PublicTest @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/OnePathAllowedInstrumentation.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/pathaccess") public void accessPathNormalInstrumentation() throws IOException { From 20b97677db6a20b9a3d34fc20c9d2b1c6a572e0b Mon Sep 17 00:00:00 2001 From: sarps Date: Mon, 21 Oct 2024 21:36:29 +0200 Subject: [PATCH 20/20] Address feedback --- .../java/archunit/JavaArchUnitSecurityTestCase.java | 4 +++- .../postcompile/JavaArchitectureTestCaseCollection.java | 3 +-- .../java/JavaSecurityTestCaseFactoryAndBuilder.java | 5 ----- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java index e7fc67aa..57e9a5c9 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/JavaArchUnitSecurityTestCase.java @@ -96,7 +96,9 @@ public void executeArchitectureTestCase(JavaClasses classes) { default -> throw new UnsupportedOperationException("Not implemented yet"); } } catch (AssertionError e) { - assert e.getMessage().split("\n").length > 1; + if (e.getMessage() == null || e.getMessage().split("\n").length < 2) { + throw new SecurityException(localized("security.archunit.illegal.execution", e.getMessage())); + } throw new SecurityException(localized("security.archunit.illegal.execution", e.getMessage().split("\n")[1])); } } diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/JavaArchitectureTestCaseCollection.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/JavaArchitectureTestCaseCollection.java index d2076d7e..d996f33a 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/JavaArchitectureTestCaseCollection.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/archunit/postcompile/JavaArchitectureTestCaseCollection.java @@ -101,8 +101,7 @@ public static ArchRule noClassesShouldImportForbiddenPackages(Set allowe public boolean test(JavaClass javaClass) { return allowedPackages.stream().noneMatch(allowedPackage -> javaClass.getPackageName().startsWith(allowedPackage)); } - }) - .as("TEST TEST"); + }); } private static ArchRule createNoClassShouldHaveMethodRule( diff --git a/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java b/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java index 24bb5d98..e7635d4c 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java +++ b/src/main/java/de/tum/cit/ase/ares/api/securitytest/java/JavaSecurityTestCaseFactoryAndBuilder.java @@ -30,7 +30,6 @@ import static com.google.common.collect.Iterables.isEmpty; import static de.tum.cit.ase.ares.api.aop.java.instrumentation.advice.JavaInstrumentationAdviceToolbox.localize; -import static de.tum.cit.ase.ares.api.jupiter.JupiterSecurityExtension.resetSettings; // /** @@ -197,10 +196,6 @@ public JavaSecurityTestCaseFactoryAndBuilder( *

*/ private void createSecurityTestCases() { - // - // Reset - // - // Set allowedPackages = new HashSet<>(resourceAccesses.regardingPackageImports()); // Add default imports needed for the execution