Skip to content

Commit

Permalink
Patch: jacoco LabelFlowAnalyzer should ignore jazzer data flow trace …
Browse files Browse the repository at this point in the history
  • Loading branch information
k-melnik committed Apr 13, 2023
1 parent 0420f57 commit d1bce86
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
1 change: 1 addition & 0 deletions repositories.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ def jazzer_dependencies():
Label("//third_party:jacoco-make-probe-adapter-subclassable.patch"),
Label("//third_party:jacoco-make-probe-inserter-subclassable.patch"),
Label("//third_party:jacoco-ignore-offline-instrumentation.patch"),
Label("//third_party:jacoco-skip-instrumentations-in-label-flow-analyzer.patch"),
],
sha256 = "c603cfcc5f3d95ecda46fb369dc54c82a453bb6b640a605c3970607d10896725",
strip_prefix = "jacoco-0.8.8",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// SPDX-License-Identifier: EPL-2.0 and Apache-2.0
// These patches apply to JaCoCo (https://github.com/jacoco/jacoco) and are hereby made available under the terms of the
// Eclipse Public License 2.0 available at:
// http://www.eclipse.org/legal/epl-2.0
diff --git org.jacoco.core/src/org/jacoco/core/internal/flow/LabelFlowAnalyzer.java org.jacoco.core/src/org/jacoco/core/internal/flow/LabelFlowAnalyzer.java
index da70c14..411e317 100644
--- org.jacoco.core/src/org/jacoco/core/internal/flow/LabelFlowAnalyzer.java
+++ org.jacoco.core/src/org/jacoco/core/internal/flow/LabelFlowAnalyzer.java
@@ -183,6 +183,36 @@ public final class LabelFlowAnalyzer extends MethodVisitor {
@Override
public void visitMethodInsn(final int opcode, final String owner,
final String name, final String desc, final boolean itf) {
+ if (opcode == Opcodes.INVOKESTATIC) {
+ if ("traceMemcmp".equals(name) && "([B[BII)V".equals(desc))
+ return;
+ if ("traceStrcmp".equals(name) && "(Ljava/lang/String;Ljava/lang/String;II)V".equals(desc))
+ return;
+ if ("traceStrstr".equals(name) && "(Ljava/lang/String;Ljava/lang/String;I)V".equals(desc))
+ return;
+ if ("traceReflectiveCall".equals(name) && "(Ljava/lang/reflect/Executable;I)V".equals(desc))
+ return;
+ if ("traceCmpLongWrapper".equals(name) && "(JJI)I".equals(desc))
+ return;
+ if ("traceCmpInt".equals(name) && "(III)V".equals(desc))
+ return;
+ if ("traceConstCmpInt".equals(name) && "(III)V".equals(desc))
+ return;
+ if ("traceCmpLong".equals(name) && "(JJI)V".equals(desc))
+ return;
+ if ("traceSwitch".equals(name) && "(J[JI)V".equals(desc))
+ return;
+ if ("traceDivInt".equals(name) && "(II)V".equals(desc))
+ return;
+ if ("traceDivLong".equals(name) && "(JI)V".equals(desc))
+ return;
+ if ("traceDivGep".equals(name) && "(JI)V".equals(desc))
+ return;
+ if ("tracePcIndir".equals(name) && "(II)V".equals(desc))
+ return;
+ if ("traceStrstr0".equals(name) && "([BI)V".equals(desc))
+ return;
+ }
successor = true;
first = false;
markMethodInvocationLine();

0 comments on commit d1bce86

Please sign in to comment.