joern icon indicating copy to clipboard operation
joern copied to clipboard

Unexpected “METHOD_PARAMETER_IN/OUT” Nodes in PDG Export

Open chenyihao396 opened this issue 5 months ago • 1 comments

When I try to use joern-export command

subprocess.run(
        ["joern-export", "--repr", "pdg", "--out", os.path.abspath(pdg_dir)],
        cwd=output_path,
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL,
    )

to generate a PDG of the java example below

public class PolymorphismDemo {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.speak();
    }
}

class Animal {
    public void speak() {
        System.out.println("Animal speaks");
    }
}

class Dog extends Animal {
    @Override
    public void speak() {
        System.out.println("Dog barks");
    }
}

I found the label of METHOD_PARAMETER_IN and METHOD_PARAMETER_OUT generated an unexpected result for node ID 111669149702 through 111669149708 and 115964116998 through 115964117004 that includes additional parameter nodes (e.g., p0, p1, p2, type ANY) whose origin and meaning are unclear. All label of generated METHOD_PARAMETER_IN and METHOD_PARAMETER_OUT nodes are posted below

  "111669149696" [label="METHOD_PARAMETER_IN" CODE="String[] args" COLUMN_NUMBER="29" EVALUATION_STRATEGY="BY_SHARING" INDEX="1" IS_VARIADIC="false" LINE_NUMBER="2" NAME="args" ORDER="1" TYPE_FULL_NAME="java.lang.String[]"];
  "111669149697" [label="METHOD_PARAMETER_IN" CODE="this" COLUMN_NUMBER="1" DYNAMIC_TYPE_HINT_FULL_NAME="PolymorphismDemo" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="1" NAME="this" ORDER="0" TYPE_FULL_NAME="PolymorphismDemo"];
  "111669149698" [label="METHOD_PARAMETER_IN" CODE="this" COLUMN_NUMBER="5" DYNAMIC_TYPE_HINT_FULL_NAME="Animal" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="9" NAME="this" ORDER="0" TYPE_FULL_NAME="Animal"];
  "111669149699" [label="METHOD_PARAMETER_IN" CODE="this" COLUMN_NUMBER="1" DYNAMIC_TYPE_HINT_FULL_NAME="Animal" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="8" NAME="this" ORDER="0" TYPE_FULL_NAME="Animal"];
  "111669149700" [label="METHOD_PARAMETER_IN" CODE="this" COLUMN_NUMBER="5" DYNAMIC_TYPE_HINT_FULL_NAME="Dog" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="15" NAME="this" ORDER="0" TYPE_FULL_NAME="Dog"];
  "111669149701" [label="METHOD_PARAMETER_IN" CODE="this" COLUMN_NUMBER="1" DYNAMIC_TYPE_HINT_FULL_NAME="Dog" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="14" NAME="this" ORDER="0" TYPE_FULL_NAME="Dog"];
  "111669149702" [label="METHOD_PARAMETER_IN" CODE="p0" EVALUATION_STRATEGY="BY_VALUE" INDEX="0" IS_VARIADIC="false" NAME="p0" ORDER="0" TYPE_FULL_NAME="ANY"];
  "111669149703" [label="METHOD_PARAMETER_IN" CODE="p0" EVALUATION_STRATEGY="BY_VALUE" INDEX="0" IS_VARIADIC="false" NAME="p0" ORDER="0" TYPE_FULL_NAME="ANY"];
  "111669149704" [label="METHOD_PARAMETER_IN" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
  "111669149705" [label="METHOD_PARAMETER_IN" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
  "111669149706" [label="METHOD_PARAMETER_IN" CODE="p2" EVALUATION_STRATEGY="BY_VALUE" INDEX="2" IS_VARIADIC="false" NAME="p2" ORDER="2" TYPE_FULL_NAME="ANY"];
  "111669149707" [label="METHOD_PARAMETER_IN" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
  "111669149708" [label="METHOD_PARAMETER_IN" CODE="p2" EVALUATION_STRATEGY="BY_VALUE" INDEX="2" IS_VARIADIC="false" NAME="p2" ORDER="2" TYPE_FULL_NAME="ANY"];
  "115964116992" [label="METHOD_PARAMETER_OUT" CODE="String[] args" COLUMN_NUMBER="29" EVALUATION_STRATEGY="BY_SHARING" INDEX="1" IS_VARIADIC="false" LINE_NUMBER="2" NAME="args" ORDER="1" TYPE_FULL_NAME="java.lang.String[]"];
  "115964116993" [label="METHOD_PARAMETER_OUT" CODE="this" COLUMN_NUMBER="1" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="1" NAME="this" ORDER="0" TYPE_FULL_NAME="PolymorphismDemo"];
  "115964116994" [label="METHOD_PARAMETER_OUT" CODE="this" COLUMN_NUMBER="5" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="9" NAME="this" ORDER="0" TYPE_FULL_NAME="Animal"];
  "115964116995" [label="METHOD_PARAMETER_OUT" CODE="this" COLUMN_NUMBER="1" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="8" NAME="this" ORDER="0" TYPE_FULL_NAME="Animal"];
  "115964116996" [label="METHOD_PARAMETER_OUT" CODE="this" COLUMN_NUMBER="5" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="15" NAME="this" ORDER="0" TYPE_FULL_NAME="Dog"];
  "115964116997" [label="METHOD_PARAMETER_OUT" CODE="this" COLUMN_NUMBER="1" EVALUATION_STRATEGY="BY_SHARING" INDEX="0" IS_VARIADIC="false" LINE_NUMBER="14" NAME="this" ORDER="0" TYPE_FULL_NAME="Dog"];
  "115964116998" [label="METHOD_PARAMETER_OUT" CODE="p0" EVALUATION_STRATEGY="BY_VALUE" INDEX="0" IS_VARIADIC="false" NAME="p0" ORDER="0" TYPE_FULL_NAME="ANY"];
  "115964116999" [label="METHOD_PARAMETER_OUT" CODE="p0" EVALUATION_STRATEGY="BY_VALUE" INDEX="0" IS_VARIADIC="false" NAME="p0" ORDER="0" TYPE_FULL_NAME="ANY"];
  "115964117000" [label="METHOD_PARAMETER_OUT" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
  "115964117001" [label="METHOD_PARAMETER_OUT" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
  "115964117002" [label="METHOD_PARAMETER_OUT" CODE="p2" EVALUATION_STRATEGY="BY_VALUE" INDEX="2" IS_VARIADIC="false" NAME="p2" ORDER="2" TYPE_FULL_NAME="ANY"];
  "115964117003" [label="METHOD_PARAMETER_OUT" CODE="p1" EVALUATION_STRATEGY="BY_VALUE" INDEX="1" IS_VARIADIC="false" NAME="p1" ORDER="1" TYPE_FULL_NAME="ANY"];
  "115964117004" [label="METHOD_PARAMETER_OUT" CODE="p2" EVALUATION_STRATEGY="BY_VALUE" INDEX="2" IS_VARIADIC="false" NAME="p2" ORDER="2" TYPE_FULL_NAME="ANY"];

I tried to trace the origin but couldn't find a reasonable explanation. I wonder if it is available for you to instruct me:

  • Where these METHOD_PARAMETER_IN and METHOD_PARAMETER_OUT nodes generated from?
  • Is this expected behavior, or possibly a bug in the export or CPG generation process?

Thanks in advance for your help!

Joern version: 4.0.402 OS: Ubuntu 24.04 Java version: openjdk 17.0.15 2025-04-15

chenyihao396 avatar Aug 06 '25 08:08 chenyihao396

@johannescoetzee looks like a javasrc frontend issue - can you please take a look?

mpollmeier avatar Aug 08 '25 07:08 mpollmeier