Skip to content

Commit 6915aa7

Browse files
author
‘niuerzhuang’
committed
fix: policy match.
1 parent 07caac7 commit 6915aa7

File tree

4 files changed

+40
-21
lines changed

4 files changed

+40
-21
lines changed

dongtai-core/src/main/java/io/dongtai/iast/core/bytecode/enhance/ClassContext.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class ClassContext {
1212
private String className;
1313
private String matchedClassName;
1414
private Set<String> ancestors;
15+
private Set<String> matchedClassSet;
1516
private String superClassName;
1617
private String[] interfaces;
1718
private int modifier;
@@ -98,4 +99,12 @@ public boolean isBootstrapClassLoader() {
9899
public void setBootstrapClassLoader(boolean isBootstrapClassLoader) {
99100
this.isBootstrapClassLoader = isBootstrapClassLoader;
100101
}
102+
103+
public Set<String> getMatchedClassSet() {
104+
return matchedClassSet;
105+
}
106+
107+
public void setMatchedClassSet(Set<String> matchedClassSet) {
108+
this.matchedClassSet = matchedClassSet;
109+
}
101110
}

dongtai-core/src/main/java/io/dongtai/iast/core/bytecode/enhance/plugin/core/DispatchClassPlugin.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ public DispatchClassPlugin() {
2929
public ClassVisitor dispatch(ClassVisitor classVisitor, ClassContext classContext, Policy policy) {
3030
ancestors = classContext.getAncestors();
3131
className = classContext.getClassName();
32-
String matchedClassName = policy.getMatchedClass(className, ancestors);
32+
Set<String> matchedClassNameSet = policy.getMatchedClass(classContext,className, ancestors);
3333

34-
if (null == matchedClassName) {
34+
if (0 == matchedClassNameSet.size()) {
3535
return classVisitor;
3636
}
3737

38-
classContext.setMatchedClassName(matchedClassName);
38+
classContext.setMatchedClassSet(matchedClassNameSet);
3939
return new ClassVisit(classVisitor, classContext, policy);
4040
}
4141

@@ -89,17 +89,22 @@ public MethodVisitor visitMethod(final int access, final String name, final Stri
8989
methodContext.setDescriptor(descriptor);
9090
methodContext.setParameters(AsmUtils.buildParameterTypes(descriptor));
9191

92-
String matchedSignature = AsmUtils.buildSignature(context.getMatchedClassName(), name, descriptor);
93-
94-
mv = lazyAop(mv, access, name, descriptor, matchedSignature, methodContext);
95-
boolean methodIsTransformed = mv instanceof MethodAdviceAdapter;
92+
String matchedSignature;
93+
boolean methodIsTransformed = false;
94+
for (String matchedName : context.getMatchedClassSet()) {
95+
context.setMatchedClassName(matchedName);
96+
matchedSignature = AsmUtils.buildSignature(matchedName, name, descriptor);
97+
mv = lazyAop(mv, access, name, descriptor, matchedSignature, methodContext);
98+
methodIsTransformed = mv instanceof MethodAdviceAdapter;
99+
if (methodIsTransformed) break;
96100

101+
}
97102
if (methodIsTransformed && this.classVersion <= Opcodes.V1_6) {
98103
mv = new JSRInlinerAdapter(mv, access, name, descriptor, signature, exceptions);
99104
}
100105

101106
if (methodIsTransformed) {
102-
DongTaiLog.trace("rewrite method {} for listener[class={}]", matchedSignature, context.getClassName());
107+
DongTaiLog.trace("rewrite method {} for listener[class={}]", context.getMatchedClassName(), context.getClassName());
103108
}
104109

105110
return mv;

dongtai-core/src/main/java/io/dongtai/iast/core/handler/hookpoint/models/policy/Policy.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.dongtai.iast.core.handler.hookpoint.models.policy;
22

3+
import io.dongtai.iast.core.bytecode.enhance.ClassContext;
4+
35
import java.util.*;
46

57
public class Policy {
@@ -73,16 +75,19 @@ public void addHooks(String className, Inheritable inheritable) {
7375
}
7476
}
7577

76-
public String getMatchedClass(String className, Set<String> ancestors) {
78+
public Set<String> getMatchedClass(ClassContext classContext, String className, Set<String> ancestors) {
79+
Set<String> matchedClassSet = new HashSet<>();
7780
if (this.classHooks.contains(className)) {
78-
return className;
81+
classContext.setMatchedClassName(className);
82+
matchedClassSet.add(className);
83+
return matchedClassSet;
7984
}
8085
for (String ancestor : ancestors) {
8186
if (this.ancestorClassHooks.contains(ancestor)) {
82-
return ancestor;
87+
matchedClassSet.add(ancestor);
8388
}
8489
}
85-
return null;
90+
return matchedClassSet;
8691
}
8792

8893
public boolean isMatchClass(String className) {

dongtai-core/src/main/resources/com.secnium.iast.resources/blacklist.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63385,17 +63385,17 @@ sun/nio/cs/ext/TIS_620
6338563385
sun/nio/fs/AbstractBasicFileAttributeView
6338663386
sun/nio/fs/AbstractFileSystemProvider
6338763387
sun/nio/fs/AbstractPath
63388-
sun/nio/fs/BsdFileSystem
63389-
sun/nio/fs/BsdFileSystemProvider
63388+
#sun/nio/fs/BsdFileSystem
63389+
#sun/nio/fs/BsdFileSystemProvider
6339063390
sun/nio/fs/BsdNativeDispatcher
63391-
sun/nio/fs/DefaultFileSystemProvider
63392-
sun/nio/fs/DefaultFileSystemProvider$1
63391+
#sun/nio/fs/DefaultFileSystemProvider
63392+
#sun/nio/fs/DefaultFileSystemProvider$1
6339363393
sun/nio/fs/DynamicFileAttributeView
63394-
sun/nio/fs/LinuxFileSystem
63394+
#sun/nio/fs/LinuxFileSystem
6339563395
sun/nio/fs/LinuxFileSystem$SupportedFileFileAttributeViewsHolder
63396-
sun/nio/fs/LinuxFileSystemProvider
63397-
sun/nio/fs/MacOSXFileSystem
63398-
sun/nio/fs/MacOSXFileSystemProvider
63396+
#sun/nio/fs/LinuxFileSystemProvider
63397+
#sun/nio/fs/MacOSXFileSystem
63398+
#sun/nio/fs/MacOSXFileSystemProvider
6339963399
sun/nio/fs/MacOSXNativeDispatcher
6340063400
sun/nio/fs/NativeBuffer
6340163401
sun/nio/fs/NativeBuffer$Deallocator
@@ -63414,7 +63414,7 @@ sun/nio/fs/UnixFileModeAttribute
6341463414
sun/nio/fs/UnixFileModeAttribute$1
6341563415
sun/nio/fs/UnixFileStoreAttributes
6341663416
#sun/nio/fs/UnixFileSystem
63417-
sun/nio/fs/UnixFileSystemProvider
63417+
#sun/nio/fs/UnixFileSystemProvider
6341863418
sun/nio/fs/UnixMountEntry
6341963419
sun/nio/fs/UnixNativeDispatcher
6342063420
sun/nio/fs/UnixNativeDispatcher$1

0 commit comments

Comments
 (0)