Skip to content

Commit 622917d

Browse files
author
‘niuerzhuang’
committed
fix: agent deadlock.
1 parent c5817d5 commit 622917d

File tree

1 file changed

+26
-17
lines changed

1 file changed

+26
-17
lines changed

dongtai-core/src/main/java/io/dongtai/iast/core/bytecode/IastClassFileTransformer.java

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -112,29 +112,39 @@ public byte[] transform(final ClassLoader loader,
112112
final Class<?> classBeingRedefined,
113113
final ProtectionDomain protectionDomain,
114114
final byte[] srcByteCodeArray) {
115+
String threadName = Thread.currentThread().getName();
116+
if (threadName.startsWith("DongTai-IAST-Core")
117+
|| threadName.startsWith("DongTai-IAST-AgentStateMonitor")
118+
|| threadName.startsWith("DongTai-IAST-ConfigMonitor")
119+
|| threadName.startsWith("DongTai-IAST-FallbackConfigMonitor")
120+
|| threadName.startsWith("DongTai-IAST-HearBeatMonitor")
121+
|| threadName.startsWith("DongTai-IAST-PerformanceMonitor")) {
122+
return null;
123+
}
124+
125+
if (internalClassName == null
126+
|| internalClassName.startsWith("io/dongtai/")
127+
|| internalClassName.startsWith("com/secnium/iast/")
128+
|| internalClassName.startsWith("java/lang/iast/")
129+
|| internalClassName.startsWith("cn/huoxian/iast/")
130+
|| internalClassName.startsWith("META-INF/")
131+
|| "module-info".equals(internalClassName)) {
132+
return null;
133+
}
134+
135+
if (null != loader && loader.toString().toLowerCase().contains("rasp")) {
136+
return null;
137+
}
138+
115139
try {
116140
ScopeManager.SCOPE_TRACKER.getPolicyScope().enterAgent();
117141

118-
if (internalClassName == null
119-
|| internalClassName.startsWith("io/dongtai/")
120-
|| internalClassName.startsWith("com/secnium/iast/")
121-
|| internalClassName.startsWith("java/lang/iast/")
122-
|| internalClassName.startsWith("cn/huoxian/iast/")
123-
|| internalClassName.startsWith("META-INF/")
124-
|| "module-info".equals(internalClassName)) {
125-
return null;
126-
}
127-
128142
if (" com/alibaba/fastjson/JSON".substring(1).equals(internalClassName)) {
129143
FastjsonCheck.setJsonClassLoader(loader);
130144
} else if (" com/alibaba/fastjson/parser/ParserConfig".substring(1).equals(internalClassName)) {
131145
FastjsonCheck.setParseConfigClassLoader(loader);
132146
}
133147

134-
if (null != loader && loader.toString().toLowerCase().contains("rasp")) {
135-
return null;
136-
}
137-
138148
if (loader != null && protectionDomain != null) {
139149
final CodeSource codeSource = protectionDomain.getCodeSource();
140150
if (codeSource == null) {
@@ -156,7 +166,6 @@ public byte[] transform(final ClassLoader loader,
156166

157167
ClassContext classContext = new ClassContext(cr, loader);
158168
if (Modifier.isInterface(classContext.getModifier())) {
159-
sourceCodeBak = null;
160169
return null;
161170
}
162171
final String className = classContext.getClassName();
@@ -183,14 +192,14 @@ public byte[] transform(final ClassLoader loader,
183192
transformMap.put(classBeingRedefined, srcByteCodeArray);
184193
}
185194
transformCount++;
195+
classDiagram.setLoader(null);
186196
return dumpClassIfNecessary(cr.getClassName(), cw.toByteArray(), srcByteCodeArray);
187197
}
188198
}
189-
sourceCodeBak = null;
199+
classDiagram.setLoader(null);
190200
} catch (Throwable throwable) {
191201
DongTaiLog.warn(ErrorCode.get("TRANSFORM_CLASS_FAILED"), internalClassName, throwable);
192202
} finally {
193-
classDiagram.setLoader(null);
194203
ScopeManager.SCOPE_TRACKER.getPolicyScope().leaveAgent();
195204
}
196205

0 commit comments

Comments
 (0)