From 197770aef4612ba3898c4abe96f2d16dbf86150b Mon Sep 17 00:00:00 2001 From: sarps Date: Mon, 23 Sep 2024 13:21:05 +0200 Subject: [PATCH 1/4] Fix errors for Instrumentation regarding Pointcuts and configure ArchUnit properties for test cases --- .../pointcut/JavaInstrumentationPointcutDefinitions.java | 9 +++++++-- .../architecture/java/archunit/FileHandlerConstants.java | 1 - .../ase/ares/api/jupiter/JupiterSecurityExtension.java | 1 + .../java/JavaSecurityTestCaseFactoryAndBuilder.java | 5 ----- src/test/resources/archunit.properties | 3 +++ 5 files changed, 11 insertions(+), 8 deletions(-) create mode 100644 src/test/resources/archunit.properties 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 f1b570b7..3f525aed 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 @@ -159,6 +159,7 @@ static ElementMatcher getMethodsMatcher( List.of("createFileExclusively", "delete", "setLastModifiedTime", "createDirectory"), "java.util.prefs.FileSystemPreferences", List.of("lockFile0", "unlockFile0") + ); // @@ -173,7 +174,9 @@ static ElementMatcher getMethodsMatcher( "java.io.WinNTFileSystem", List.of("checkAccess", "setReadOnly"), "java.io.Win32FileSystem", - List.of("checkAccess", "setReadOnly") + List.of("checkAccess", "setReadOnly"), + "java.nio.file.Files", + List.of("setPosixFilePermissions") ); // @@ -184,7 +187,9 @@ static ElementMatcher getMethodsMatcher( */ public static final Map> methodsWhichCanDeleteFiles = Map.of( "java.io.File", - List.of("delete", "deleteOnExit") + List.of("delete", "deleteOnExit"), + "java.nio.file.Files", + List.of("delete") ); // 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 635c4cde..f4d398dc 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 @@ -2,7 +2,6 @@ import de.tum.cit.ase.ares.api.util.FileTools; -import java.io.File; import java.nio.file.Path; /** 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 862c3818..373d6c6b 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 @@ -24,6 +24,7 @@ public final class JupiterSecurityExtension implements UnifiedInvocationIntercep public T interceptGenericInvocation(Invocation invocation, ExtensionContext extensionContext, Optional> invocationContext) throws Throwable { JupiterContext testContext = JupiterContext.of(extensionContext); + /** * Check if the test method has the {@link Policy} annotation. If it does, read * the policy file and run the security test cases. 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 91c7ca65..028ff5a5 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 @@ -324,11 +324,6 @@ public void executeSecurityTestCases() { @Nonnull JavaClasses classes = new ClassFileImporter().importPath(Paths.get(ProjectSourcesFinder.isGradleProject() ? "build" : "target", projectPath.toString()).toString()); //# - // - ArchConfiguration.get().setProperty("archRule.failOnEmptyShould", "false"); - ArchConfiguration.get().setResolveMissingDependenciesFromClassPath(false); - // - // JavaArchitectureTestCaseCollection.NO_CLASSES_SHOULD_USE_REFLECTION.check(classes); JavaArchitectureTestCaseCollection.NO_CLASSES_SHOULD_TERMINATE_JVM.check(classes); diff --git a/src/test/resources/archunit.properties b/src/test/resources/archunit.properties new file mode 100644 index 00000000..8e587f02 --- /dev/null +++ b/src/test/resources/archunit.properties @@ -0,0 +1,3 @@ +# Set to false to ignore missing dependencies in the classpath, as they are resolved manually by the de.tum.cit.ase.ares.api.architecturea.archunit.postcompile.CustomClassResolver +resolveMissingDependenciesFromClassPath=false +archRule.failOnEmptyShould=false \ No newline at end of file From e10d8cb0aeb6f73291c331d32f8d9eed9d3445a9 Mon Sep 17 00:00:00 2001 From: sarps Date: Mon, 23 Sep 2024 13:29:42 +0200 Subject: [PATCH 2/4] Add files write method --- .../pointcut/JavaInstrumentationPointcutDefinitions.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 3f525aed..0d056865 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 @@ -158,7 +158,9 @@ static ElementMatcher getMethodsMatcher( "java.io.Win32FileSystem", List.of("createFileExclusively", "delete", "setLastModifiedTime", "createDirectory"), "java.util.prefs.FileSystemPreferences", - List.of("lockFile0", "unlockFile0") + List.of("lockFile0", "unlockFile0"), + "java.nio.file.Files", + List.of("write", "writeString", "newOutputStream", "writeBytes", "writeAllBytes", "writeLines") ); // From 3e5b7eebaf71cc5b7603fa8e03ea6930023b16e0 Mon Sep 17 00:00:00 2001 From: sarps Date: Mon, 23 Sep 2024 13:33:39 +0200 Subject: [PATCH 3/4] Fix action overwrite --- .../advice/JavaInstrumentationAdviceToolbox.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 29e9ecc6..66d96193 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 @@ -225,7 +225,7 @@ public static void checkFileSystemInteraction( String[] allowedPaths = (String[]) getValueFromSettings( switch (action) { case "read" -> "pathsAllowedToBeRead"; - case "write" -> "pathsAllowedToBeOverwritten"; + case "overwrite" -> "pathsAllowedToBeOverwritten"; case "execute" -> "pathsAllowedToBeExecuted"; case "delete" -> "pathsAllowedToBeDeleted"; default -> throw new IllegalArgumentException("Unknown action: " + action); From a307752850665a4a58598b0e40014da7c9a654b1 Mon Sep 17 00:00:00 2001 From: sarps Date: Thu, 3 Oct 2024 23:01:37 +0200 Subject: [PATCH 4/4] Fix getAccessesFromClass method in Transitive Access --- .../postcompile/TransitivelyAccessesMethodsCondition.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 fc23568a..0cebd074 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 @@ -163,8 +163,7 @@ private Set> getAccessesFromClass(JavaClass javaClass, String meth .getOrigin() .getFullName() .substring(javaClass.getFullName().length()) - .equals(methodName) - && isExceptionOrError(a.getTargetOwner())) + .equals(methodName)) .collect(toSet()); }