diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/CallGraphBuilderUtils.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/CallGraphBuilderUtils.java index c1cbf6a6..5d235cd2 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/CallGraphBuilderUtils.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/CallGraphBuilderUtils.java @@ -143,18 +143,13 @@ public static String convertTypeName(String typeName) { public static CallGraph buildCallGraph(String classPathToAnalyze) { try { // Create a list to store entry points - // TODO: Explain what an entry point is List customEntryPoints = ReachabilityChecker.getEntryPointsFromStudentSubmission(classPathToAnalyze, classHierarchy); // Create AnalysisOptions for call graph AnalysisOptions options = new AnalysisOptions(scope, customEntryPoints); - // TODO: Write why they are important - options.setTraceStringConstants(false); - options.setHandleZeroLengthArray(false); - options.setReflectionOptions(AnalysisOptions.ReflectionOptions.NONE); // Create call graph builder (n-CFA, context-sensitive, etc.) - com.ibm.wala.ipa.callgraph.CallGraphBuilder builder = Util.makeZeroOneCFABuilder(Language.JAVA, options, new AnalysisCacheImpl(), classHierarchy); + CallGraphBuilder builder = Util.makeZeroCFABuilder(Language.JAVA, options, new AnalysisCacheImpl(), classHierarchy); // Generate the call graph return builder.makeCallGraph(options, null); diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/FileHandlerConstants.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/FileHandlerConstants.java index db62f889..ddc9776e 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/FileHandlerConstants.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/FileHandlerConstants.java @@ -28,7 +28,7 @@ public class FileHandlerConstants { public static final Path WALA_FILESYSTEM_METHODS = FileTools.resolveOnResources("templates", "architecture" , "java", "wala", "methods", "file-system-access-methods.txt"); public static final Path WALA_NETWORK_METHODS = FileTools.resolveOnResources("templates", "architecture" , "java", "wala", "methods", "network-access-methods.txt"); public static final Path WALA_JVM_METHODS = FileTools.resolveOnResources("templates", "architecture" , "java", "wala", "methods", "jvm-termination-methods.txt"); - public static final Path WALA_REFLECTION_METHODS = FileTools.resolveOnResources("templates", "architecture" , "java", "wala", "methods", "reflection.txt"); + public static final Path WALA_REFLECTION_METHODS = FileTools.resolveOnResources("templates", "architecture" , "java", "wala", "methods", "reflection-methods.txt"); public static final Path WALA_COMMAND_EXECUTION_METHODS = FileTools.resolveOnResources("templates", "architecture" , "java", "wala", "methods", "command-execution-methods.txt"); public static final Path WALA_SERIALIZATION_METHODS = FileTools.resolveOnResources("templates", "architecture" , "java", "wala", "methods", "serializable-methods.txt"); public static final Path WALA_THREAD_MANIPULATION_METHODS = FileTools.resolveOnResources("templates", "architecture" , "java", "wala", "methods", "thread-manipulation.txt"); diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/CustomDFSPathFinder.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/CustomDFSPathFinder.java new file mode 100644 index 00000000..104c9d3e --- /dev/null +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/CustomDFSPathFinder.java @@ -0,0 +1,230 @@ +package de.tum.cit.ase.ares.api.architecture.java.wala; + +import com.ibm.wala.ipa.callgraph.CGNode; +import com.ibm.wala.util.collections.HashMapFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; +import com.ibm.wala.util.collections.NonNullSingletonIterator; +import com.ibm.wala.util.graph.Graph; + +import java.util.*; +import java.util.function.Predicate; + +import org.jspecify.annotations.Nullable; + +/** + * This class searches depth-first search for node that matches some criteria. If found, it reports + * a path to the first node found. + * + *

This class follows the outNodes of the graph nodes to define the graph, but this behavior can + * be changed by overriding the getConnected method. + * + * @see com.ibm.wala.util.graph.traverse.DFSPathFinder + */ +public class CustomDFSPathFinder extends ArrayList { + /** + * The graph to search + */ + protected final Graph G; + + /** + * The Filter which defines the target set of nodes to find + */ + private final Predicate filter; + + /** + * an enumeration of all nodes to search from + */ + private final Iterator roots; + + /** + * An iterator of child nodes for each node being searched + */ + protected final Map> pendingChildren = HashMapFactory.make(25); + + /** + * Flag recording whether initialization has happened. + */ + private boolean initialized = false; + + /** + * Set of methods to exclude from the path + */ + private static final Set toExcludeMethodsFromPath = Set.of( + "java.io.PrintStream.println", + "sun.net.www.protocol.file.Handler.openConnection", + "java.util.Arrays.stream", + "java.io.PrintStream.format", + "java.lang.Throwable.printStackTrace()", + "java.lang.String" + ); + + /** + * Construct a depth-first enumerator starting with a particular node in a directed graph. + * + * @param G the graph whose nodes to enumerate + * @throws IllegalArgumentException if G is null + */ + public CustomDFSPathFinder(Graph G, CGNode N, Predicate f) throws IllegalArgumentException { + if (G == null) { + throw new IllegalArgumentException("G is null"); + } + if (!G.containsNode(N)) { + throw new IllegalArgumentException("source node not in graph: " + N); + } + this.G = G; + this.roots = new NonNullSingletonIterator<>(N); + this.filter = f; + } + + /** + * Construct a depth-first enumerator across the (possibly improper) subset of nodes reachable + * from the nodes in the given enumeration. + * + * @param nodes the set of nodes from which to start searching + */ + public CustomDFSPathFinder(Graph G, Iterator nodes, Predicate f) { + this.G = G; + this.roots = nodes; + this.filter = f; + if (G == null) { + throw new IllegalArgumentException("G is null"); + } + if (roots == null) { + throw new IllegalArgumentException("roots is null"); + } + if (filter == null) { + throw new IllegalArgumentException("filter is null"); + } + } + + private void init() { + initialized = true; + if (roots.hasNext()) { + CGNode n = roots.next(); + push(n); + setPendingChildren(n, getConnected(n)); + } + } + + /** + * @return a List of nodes that specifies the first path found from a root to a node accepted by + * the filter. Returns null if no path found. + */ + public @Nullable List find() { + if (!initialized) { + init(); + } + while (hasNext()) { + CGNode n = peek(); + if (filter.test(n)) { + List path = currentPath(); + advance(); + return path; + } + advance(); + } + return null; + } + + protected List currentPath() { + ArrayList result = new ArrayList<>(); + for (CGNode cgNode : this) { + result.add(0, cgNode); + } + return result; + } + + /** + * Return whether there are any more nodes left to enumerate. + * + * @return true if there nodes left to enumerate. + */ + public boolean hasNext() { + return !empty(); + } + + /** + * Method getPendingChildren. + * + * @return Object + */ + protected @Nullable Iterator getPendingChildren(CGNode n) { + return pendingChildren.get(n); + } + + /** + * Method setPendingChildren. + */ + protected void setPendingChildren(CGNode v, Iterator iterator) { + pendingChildren.put(v, iterator); + } + + /** + * Advance to the next graph node in discover time order. + */ + private void advance() { + + // we always return the top node on the stack. + CGNode currentNode = peek(); + + // compute the next node to return. + assert getPendingChildren(currentNode) != null; + do { + CGNode stackTop = peek(); + for (CGNode child : Iterator2Iterable.make(getPendingChildren(stackTop))) { + if (getPendingChildren(child) == null) { + if (toExcludeMethodsFromPath.stream().anyMatch(child.getMethod().getSignature()::startsWith)) { + continue; + } + // found a new child. + push(child); + setPendingChildren(child, getConnected(child)); + return; + } + } + // didn'CGNode find any new children. pop the stack and try again. + pop(); + + } while (!empty()); + + // search for the next unvisited root. + while (roots.hasNext()) { + CGNode nextRoot = roots.next(); + if (getPendingChildren(nextRoot) == null) { + push(nextRoot); + setPendingChildren(nextRoot, getConnected(nextRoot)); + } + } + + return; + } + + /** + * get the out edges of a given node + * + * @param n the node of which to get the out edges + * @return the out edges + */ + protected Iterator getConnected(CGNode n) { + return G.getSuccNodes(n); + } + + private boolean empty() { + return size() == 0; + } + + private void push(CGNode elt) { + add(elt); + } + + private CGNode peek() { + return get(size() - 1); + } + + private CGNode pop() { + CGNode e = get(size() - 1); + remove(size() - 1); + return e; + } +} + diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/JavaWalaSecurityTestCaseCollection.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/JavaWalaSecurityTestCaseCollection.java index 598999b5..58941646 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/JavaWalaSecurityTestCaseCollection.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/JavaWalaSecurityTestCaseCollection.java @@ -4,6 +4,9 @@ import com.ibm.wala.ipa.callgraph.CGNode; import com.ibm.wala.ipa.callgraph.CallGraph; import com.ibm.wala.shrike.shrikeCT.InvalidClassFileException; +import com.ibm.wala.ssa.IR; +import com.ibm.wala.ssa.SSAInstruction; +import com.ibm.wala.ssa.SymbolTable; import com.tngtech.archunit.core.domain.JavaClasses; import de.tum.cit.ase.ares.api.architecture.java.FileHandlerConstants; import de.tum.cit.ase.ares.api.architecture.java.archunit.JavaArchUnitTestCaseCollection; @@ -12,6 +15,7 @@ import java.util.List; import java.util.Set; +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.util.FileTools.readMethodsFromGivenPath; // @@ -55,6 +59,10 @@ private static void createNoClassShouldHaveMethodRule( .getMethod() .getSignature() .startsWith(method))); + + if (reachableNodes == null || isEmpty(reachableNodes)) { + return; + } try { String sb = "'" + ruleName + "'\r\n" + "Method <" + diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/ReachabilityChecker.java b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/ReachabilityChecker.java index b538c931..ab6cd5c7 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/ReachabilityChecker.java +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/ReachabilityChecker.java @@ -10,7 +10,6 @@ import com.ibm.wala.ipa.cha.ClassHierarchyException; import com.ibm.wala.ipa.cha.ClassHierarchyFactory; import com.ibm.wala.types.ClassLoaderReference; -import com.ibm.wala.util.graph.traverse.DFSPathFinder; import de.tum.cit.ase.ares.api.architecture.java.FileHandlerConstants; import java.io.IOException; @@ -49,7 +48,7 @@ public static List findReachableMethods(CallGraph callGraph, Iterator(callGraph, startNodes, targetNodeFilter).find(); + return new CustomDFSPathFinder(callGraph, startNodes, targetNodeFilter).find(); } /** diff --git a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/exclusions.txt b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/exclusions.txt index e3fadd46..0070c301 100644 --- a/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/exclusions.txt +++ b/src/main/java/de/tum/cit/ase/ares/api/architecture/java/wala/exclusions.txt @@ -1,3 +1,8 @@ jdk/.* java/time/.* -java/security/.* \ No newline at end of file +java/security/.* +java/lang/ProcessImpl.* +java/util/WeakHashMap.* +java/io/BufferedWriter.* +java/util/stream/.* +java/util/concurrent/locks/.* \ No newline at end of file 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 7180c8f7..96c6f871 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 @@ -296,7 +296,7 @@ public static Set readMethodsFromGivenPath(Path filePath) { String normalizedContent = fileContent.replace("\r\n", "\n").replace("\r", "\n"); List methods = Arrays.stream(normalizedContent.split("\n")) // Filter out comments - .filter(str -> str.startsWith("#")) + .filter(str -> !str.startsWith("#")) .toList(); return new HashSet<>(methods); } 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 25d05b43..8c006d56 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,51 +37,51 @@ 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 -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.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.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.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. -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. +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.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 -security.archunit.violation.error=\n\u0020- Ares Sicherheitsfehler (Grund: Student-Code; Phase: Ausführung):\n\u0020\u0020- %s \n\u0020\u0020\u0020- %s +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 +security.archunit.violation.error=\n\u0020- Ares Sicherheitsfehler (Grund: Student-Code; Phase: Ausführung):\n\u0020\u0020- %s \n\u0020\u0020\u0020- %s # Architektur-Sicherheitstestfall security.architecture.file.system.access=Greift auf das Dateisystem zu security.architecture.network.access=Greift auf das Netzwerk zu security.architecture.terminate.jvm=Beendet die JVM security.architecture.reflection.uses=Verwendet Reflection -security.architecture.execute.command=Führt Befehle aus +security.architecture.execute.command=Führt Befehle aus security.architecture.manipulate.threads=Manipuliert Threads security.architecture.package.import=Importiert verbotene Pakete security.architecture.serialize=Serialisiert Objekte security.architecture.class.loading=Manipuliert das Laden von Klassen # 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.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. @@ -93,16 +93,16 @@ security.architecture.class.type.resolution.error=Ares Sicherheitsfehler (Grund: security.common.unsupported.operation=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): Nicht unterstützte Operation für %s wurde noch nicht implementiert. security.common.not.null=Ares Sicherheitsfehler (Grund: Ares-Code; Phase: Erstellung): %s darf in %s nicht null sein. 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.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.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. @@ -111,28 +111,28 @@ 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 +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. 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 +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 -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 @@ -154,7 +154,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 @@ -172,7 +172,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. @@ -185,41 +185,41 @@ structural.method.parameters=Die Parameter der erwarteten Methode '%s' der Klass structural.method.return=Der Rükgabetyp 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) # 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_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.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_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_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.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_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_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.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 @@ -246,7 +246,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 @@ -256,25 +256,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.arguments=Methode %s konnte Argumente mit den Typen %s für Objekt vom Typ %s nicht entgegennehmen. dynamics.method.cast=Rükgabewert der Methode %s kann nicht nach %s gecastet werden, ist der Rükgabetyp 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ük. +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 diff --git a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/thread-manipulation-methods.txt b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/thread-manipulation-methods.txt index b7bb0ab6..f0d9c7a4 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/thread-manipulation-methods.txt +++ b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/archunit/methods/thread-manipulation-methods.txt @@ -56,8 +56,6 @@ 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) @@ -84,8 +82,6 @@ java.util.concurrent.locks.AbstractQueuedLongSynchronizer$ConditionObject.await( java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitUninterruptibly() java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await() java.awt.EventQueue.() -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() @@ -328,4 +324,5 @@ java.lang.Thread.() sun.jvm.hotspot.HotSpotAgent.() org.graalvm.compiler.core.GraalServiceThread.(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 +jdk.internal.vm.SharedThreadContainer.threads() +java.util.concurrent \ No newline at end of file diff --git a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/classloader.txt b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/classloader.txt index 6ef19547..5832086e 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/classloader.txt +++ b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/classloader.txt @@ -13,10 +13,8 @@ java.lang.ClassLoader.getSystemClassLoader() java.lang.Thread.getContextClassLoader() java.lang.invoke.MethodType.fromMethodDescriptorString(Ljava/lang/String;Ljava/lang/ClassLoader;) java.lang.Module.getClassLoader() -java.lang.ModuleLayer.defineModules(Ljava/lang/module/Configuration;Ljava/util/List;LFunction;) +java.lang.ModuleLayer.defineModules(Ljava/lang/module/Configuration;Ljava/util/List;Ljava/util/Function;) sun.rmi.runtime.NewThreadAction.run() -java.util.concurrent.Executors.privilegedCallableUsingCurrentClassLoader(Ljava/util/concurrent/Callable;) -java.util.concurrent.Executors.privilegedThreadFactory() java.lang.reflect.Proxy.checkProxyAccess(Ljava/lang/Class;Ljava/lang/ClassLoader;[Ljava/lang/Class;) java.util.ResourceBundle.getBundleFromModule(Ljava/lang/Class;Ljava/lang/module/Module;Ljava/lang/String;Ljava/util/Locale;Ljava/util/Control;) java.lang.reflect.Proxy.getProxyConstructor(Ljava/lang/Class;Ljava/lang/ClassLoader;[Ljava/lang/Class;) diff --git a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/file-system-access-methods.txt b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/file-system-access-methods.txt index 1526e5e0..a3dfa7b8 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/file-system-access-methods.txt +++ b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/file-system-access-methods.txt @@ -27,7 +27,6 @@ sun.nio.fs.UnixChannelFactory.open(ILsun/nio/fs/UnixPath;Ljava/lang/String;Lsun/ sun.nio.fs.UnixPath.checkDelete() java.util.zip.ZipFile.(Ljava/io/File;ILjava/nio/charset/Charset;) java.io.File.canExecute() -java.lang.ProcessBuilder.start([Ljava/lang/ProcessBuilder$Redirect;) sun.nio.fs.UnixFileSystemProvider.checkAccess(Ljava/nio/file/Path;[Ljava/nio/file/AccessMode;) sun.nio.fs.UnixUserDefinedFileAttributeView.delete(Ljava/lang/String;) sun.nio.fs.UnixUserDefinedFileAttributeView.list() @@ -50,7 +49,6 @@ java.io.FileInputStream.(Ljava/io/File;) sun.net.httpserver.simpleserver.FileServerHandler.(Ljava/nio/file/Path;Ljava/util/function/UnaryOperator;) com.sun.jmx.remote.security.HashedPasswordManager.loadPasswords() sun.net.www.protocol.jar.JarFileFactory.getCachedJarFile(Ljava/net/URL;) -java.lang.ProcessBuilder.start([Ljava/lang/ProcessBuilder$Redirect;) java.io.RandomAccessFile.(Ljava/io/File;Ljava/lang/String;Z) sun.nio.fs.UnixFileSystem$FileStoreIterator.readNext() sun.awt.shell.ShellFolderManager.checkFile(Ljava/io/File;Ljava/lang/SecurityManager;) @@ -104,7 +102,6 @@ com.apple.eio.FileManager.revealInFinder(Ljava/io/File;) sun.net.httpserver.simpleserver.FileServerHandler.(Ljava/nio/file/Path;Ljava/util/function/UnaryOperator;) com.sun.jmx.remote.security.HashedPasswordManager.loadPasswords() sun.net.www.protocol.jar.JarFileFactory.getCachedJarFile(Ljava/net/URL;) -java.lang.ProcessBuilder.start([Ljava/lang/ProcessBuilder$Redirect;) java.io.RandomAccessFile.(Ljava/io/File;Ljava/lang/String;Z) sun.awt.shell.ShellFolderManager.checkFile(Ljava/io/File;Ljava/lang/SecurityManager;) sun.awt.SunToolkit.checkPermissions(Ljava/lang/String;) @@ -139,8 +136,6 @@ sun.nio.fs.WindowsChannelFactory.open(Ljava/lang/String;Ljava/lang/String;Lsun/n sun.nio.fs.WindowsPath.checkDelete() java.util.zip.ZipFile.(Ljava/io/File;ILjava/nio/charset/Charset;) java.io.File.canExecute() -java.lang.ProcessBuilder.start([Ljava/lang/ProcessBuilder$Redirect;) -java.lang.ProcessImpl.([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[JZZ) sun.nio.fs.WindowsFileSystemProvider.checkAccess(Ljava/nio/file/Path;[Ljava/nio/file/AccessMode;) sun.nio.fs.WindowsUserDefinedFileAttributeView.delete(Ljava/lang/String;) sun.nio.fs.WindowsUserDefinedFileAttributeView.list() @@ -163,7 +158,6 @@ java.io.FileInputStream.(Ljava/io/File;) sun.net.httpserver.simpleserver.FileServerHandler.(Ljava/nio/file/Path;Ljava/util/function/UnaryOperator;) com.sun.jmx.remote.security.HashedPasswordManager.loadPasswords() sun.net.www.protocol.jar.JarFileFactory.getCachedJarFile(Ljava/net/URL;) -java.lang.ProcessBuilder.start([Ljava/lang/ProcessBuilder$Redirect;) java.io.RandomAccessFile.(Ljava/io/File;Ljava/lang/String;Z) sun.awt.shell.ShellFolderManager.checkFile(Ljava/io/File;Ljava/lang/SecurityManager;) sun.awt.SunToolkit.checkPermissions(Ljava/lang/String;) @@ -193,7 +187,6 @@ java.io.File.setReadOnly() java.io.File.setWritable(ZZ) java.io.FileOutputStream.(Ljava/io/File;Z) com.sun.management.internal.HotSpotDiagnostic.dumpHeap(Ljava/lang/String;Z) -java.lang.ProcessImpl.newFileOutputStream(Ljava/io/File;Z) java.io.RandomAccessFile.(Ljava/io/File;Ljava/lang/String;Z) sun.print.Win32PrintJob.getAttributeValues(Ljavax/print/DocFlavor;) sun.nio.fs.WindowsAclFileAttributeView.checkAccess(Lsun/nio/fs/WindowsPath;ZZ) diff --git a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/network-access-methods.txt b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/network-access-methods.txt index 3282a6ba..1fe5632d 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/network-access-methods.txt +++ b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/network-access-methods.txt @@ -64,6 +64,7 @@ java.net.SocksSocketImpl.connect(Ljava/net/SocketAddress;I) sun.awt.SunToolkit.checkPermissions(Ljava/net/URL;) sun.rmi.transport.tcp.TCPChannel.checkConnectPermission() java.net.URL.openConnection(Ljava/net/Proxy;) +java.net.URL.openConnection() jdk.internal.loader.URLClassPath.check(Ljava/net/URL;) sun.awt.image.URLImageSource.(Ljava/net/URL;) sun.nio.ch.AsynchronousServerSocketChannelImpl.bind(Ljava/net/SocketAddress;I) diff --git a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/reflection-methods.txt b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/reflection-methods.txt index 49b61b43..771f7062 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/reflection-methods.txt +++ b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/reflection-methods.txt @@ -2,6 +2,8 @@ java.lang.invoke.MethodHandles$Lookup.checkSecurityManager(Ljava/lang/Class;Ljav java.lang.Class.checkMemberAccess(Ljava/lang/SecurityManager;ILjava/lang/Class;Z) sun.reflect.misc.ReflectUtil.conservativeCheckMemberAccess(Ljava/lang/reflect/Member;) java.lang.reflect.AccessibleObject.checkPermission() +java.lang.reflect.AccessibleObject.checkAccess(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;I) java.lang.invoke.MethodHandles.privateLookupIn(Ljava/lang/Class;Ljava/lang/invoke/MethodHandles$Lookup;) java.lang.invoke.MethodHandles.reflectAs(Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;) -jdk.internal.reflect.ReflectionFactory.getReflectionFactory() \ No newline at end of file +jdk.internal.reflect.ReflectionFactory.getReflectionFactory() +java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;) \ No newline at end of file diff --git a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/thread-manipulation.txt b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/thread-manipulation.txt index baa202d6..cbb3155e 100644 --- a/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/thread-manipulation.txt +++ b/src/main/resources/de/tum/cit/ase/ares/api/templates/architecture/java/wala/methods/thread-manipulation.txt @@ -7,6 +7,7 @@ java.lang.Thread.setName(Ljava/lang/String;) java.lang.Thread.setPriority(I) java.lang.Thread.setUncaughtExceptionHandler(Ljava/lang/Thread$UncaughtExceptionHandler;) java.lang.VirtualThread.interrupt() +java.util.concurrent.ThreadPoolExecutor java.util.concurrent.ThreadPoolExecutor.shutdown() java.util.concurrent.ThreadPoolExecutor.shutdownNow() sun.java2d.marlin.MarlinUtils.getRootThreadGroup() @@ -29,4 +30,5 @@ java.lang.ThreadGroup.enumerate([Ljava/lang/ThreadGroup;Z) java.lang.ThreadGroup.getParent() java.lang.ThreadGroup.interrupt() java.lang.ThreadGroup.setDaemon(Z) -java.lang.ThreadGroup.setMaxPriority(I) \ No newline at end of file +java.lang.ThreadGroup.setMaxPriority(I) +java.util.concurrent.Executors \ No newline at end of file diff --git a/src/test/java/de/tum/cit/ase/ares/integration/testuser/ArchitectureSecurityUser.java b/src/test/java/de/tum/cit/ase/ares/integration/testuser/ArchitectureSecurityUser.java index d124c06e..21670cf4 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/testuser/ArchitectureSecurityUser.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/testuser/ArchitectureSecurityUser.java @@ -10,11 +10,13 @@ public class ArchitectureSecurityUser { @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/classloading") void testArchUnitClassloading() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/classloading") void testWalaClassloading() { // do nothing } @@ -32,61 +34,73 @@ void testWalaCommandExecution() { } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/fileSystem") void testArchUnitFileAccess() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/fileSystem") void testWalaFileAccess() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/network") void testArchUnitNetworkAccess() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/network") void testWalaNetworkAccess() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/reflection") void testArchUnitReflection() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/reflection") void testWalaReflection() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/serialization") void testArchUnitSerialization() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/serialization") void testWalaSerialization() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/thirdpartypackage") void testArchUnitThirdPartyPackageAccess() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/thirdpartypackage") void testWalaThirdPartyPackageAccess() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/jvmTermination") void testArchUnitJVMTermination() { // do nothing } @PublicTest + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/jvmTermination") void testWalaJVMTermination() { // do nothing } diff --git a/src/test/java/de/tum/cit/ase/ares/integration/testuser/CommandExecutionUser.java b/src/test/java/de/tum/cit/ase/ares/integration/testuser/CommandExecutionUser.java index 37768984..9438d46b 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/testuser/CommandExecutionUser.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/testuser/CommandExecutionUser.java @@ -21,7 +21,7 @@ public class CommandExecutionUser { @PublicTest - @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/commandexecution") + @Policy(value = "src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml", withinPath = "test-classes/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/commandexecution") void testExecuteCommand() { // do nothing } diff --git a/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/classloading/ClassloaderAccessPenguin.java b/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/classloading/ClassloaderAccessPenguin.java index 10007435..792aa76a 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/classloading/ClassloaderAccessPenguin.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/classloading/ClassloaderAccessPenguin.java @@ -1,4 +1,10 @@ package de.tum.cit.ase.ares.integration.testuser.subject.architectureTests.classloading; +import static de.tum.cit.ase.ares.api.localization.Messages.localized; + public class ClassloaderAccessPenguin { + + public void accessPenguin2() { + localized("Penguin"); + } } diff --git a/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/jvm_termination/JVMTerminationPenguin.java b/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/jvmTermination/JVMTerminationPenguin.java similarity index 55% rename from src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/jvm_termination/JVMTerminationPenguin.java rename to src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/jvmTermination/JVMTerminationPenguin.java index b80bae03..b424e923 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/jvm_termination/JVMTerminationPenguin.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/jvmTermination/JVMTerminationPenguin.java @@ -1,4 +1,8 @@ -package de.tum.cit.ase.ares.integration.testuser.subject.architectureTests.jvm_termination; +package de.tum.cit.ase.ares.integration.testuser.subject.architectureTests.jvmTermination; public class JVMTerminationPenguin { + + void terminateJVM() { + System.exit(0); + } } diff --git a/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/reflection/ReflectionAccessPenguin.java b/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/reflection/ReflectionAccessPenguin.java index a514be15..3560a0ba 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/reflection/ReflectionAccessPenguin.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/reflection/ReflectionAccessPenguin.java @@ -1,4 +1,46 @@ package de.tum.cit.ase.ares.integration.testuser.subject.architectureTests.reflection; +import de.tum.cit.ase.ares.api.util.ReflectionTestUtils; +import org.junit.platform.commons.util.ReflectionUtils; + +import java.lang.invoke.MethodHandles; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Member; +import java.lang.reflect.Method; + +import static org.junit.platform.commons.util.ReflectionUtils.invokeMethod; + public class ReflectionAccessPenguin { + + static void accessPenguin() throws InvocationTargetException, IllegalAccessException { + try { + // Step 1: Get the Class object + Class clazz = ReflectionAccessPenguin.class; + + // Step 2: Get the Method object for the static method + Method method = clazz.getDeclaredMethod("accessPenguin"); + + // Step 3: Invoke the static method + // Since it's a static method, the 'target' parameter is null + method.invoke(new ReflectionAccessPenguin()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + try { + // Step 1: Get the Class object + Class clazz = ReflectionAccessPenguin.class; + + // Step 2: Get the Method object for the static method + Method method = clazz.getDeclaredMethod("accessPenguin"); + + // Step 3: Invoke the static method + // Since it's a static method, the 'target' parameter is null + method.invoke(null); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/serialization/SerializationPenguin.java b/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/serialization/SerializationPenguin.java index 64a1655a..7674762c 100644 --- a/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/serialization/SerializationPenguin.java +++ b/src/test/java/de/tum/cit/ase/ares/integration/testuser/subject/architectureTests/serialization/SerializationPenguin.java @@ -1,4 +1,18 @@ package de.tum.cit.ase.ares.integration.testuser.subject.architectureTests.serialization; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + public class SerializationPenguin { + + public void serializePenguin() throws IOException { + // do nothing + new ObjectOutputStream(null); + } + + public void deserializePenguin() throws IOException { + // do nothing + new ObjectInputStream(null); + } } diff --git a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml index 3335ef69..61176ebf 100644 --- a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml +++ b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicy.yaml @@ -16,4 +16,4 @@ regardingTheSupervisedCode: - importTheFollowingPackage: "java.awt" - importTheFollowingPackage: "javax.swing" - importTheFollowingPackage: "javax.sound" - - importTheFollowingPackage: "de.tum.cit.ase.ares.integration.testuser.subject.thirdpartypackage" + - importTheFollowingPackage: "de.tum.cit.ase.ares" diff --git a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml index ed24b4dd..f11ac82c 100644 --- a/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml +++ b/src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/EverythingForbiddenPolicyWala.yaml @@ -16,4 +16,5 @@ regardingTheSupervisedCode: - importTheFollowingPackage: "java.awt" - importTheFollowingPackage: "javax.swing" - importTheFollowingPackage: "javax.sound" - - importTheFollowingPackage: "de.tum.cit.ase.ares.integration.testuser.subject.thirdpartypackage" + - importTheFollowingPackage: "de.tum.cit.ase.ares" + - importTheFollowingPackage: "org.junit.platform"