diff --git a/callgraphs/README.md b/callgraphs/README.md index 3aa2189..5d1ca45 100644 --- a/callgraphs/README.md +++ b/callgraphs/README.md @@ -2,19 +2,33 @@ This folder contains the visualization of the call graphs computed by `Salsa`. -Each PDF provides the call graph computed with and without Salsa, where we can see missing edges and nodes from the call graph. -Please notice that each PDF has only a **subset** of nodes and edges from the original call graph because each call graph includes many nodes from API calls. -For the sake of clarity, each PDF only includes nodes and edges if they fulfill the following criteria: +- Each PDF provides the call graph computed with and without Salsa, where we can see missing edges and nodes from the call graph. +- Nodes in light green are *application nodes*, nodes in light orange are *primordial nodes*, and underlined nodes are *synthetic nodes* added by Salsa to handle the call backs during serialization/deserialization; +- Each node is preceded by an `id` number to avoid labels to be duplicated (when a same method is invoked multiple times in an application). +- Please notice that each PDF has only a **subset** of nodes and edges from the original call graph because each call graph includes many nodes from API calls. -***For nodes***: + For the sake of clarity, each PDF only includes nodes and edges if they fulfill the following criteria: + + ***For nodes***: + + - The node correspond to a method implemented by the application (application-scope); + - The node is non-application (i.e., primordial or extension), but it has a call back edge to an application node; + + + ***For edges***: + + - All the outgoing edges from application nodes; + - All the outgoing edges from non-application nodes but wholse target is an application node (or is in a path that will lead to a call back to the application); -- The node correspond to a method implemented by the application (application-scope); -- The node is non-application (i.e., primordial or extension), but it has a call back edge to an application node; -***For edges***: -- All the outgoing edges from application nodes; -- All the outgoing edges from non-application nodes but wholse target is an application node (or is in a path that will lead to a call back to the application); +## Test Cases +### Ser1 + +- **Expected Output**: It expects a direct call from `ser.Demo.writeObject` to +`java.io.ObjectOutputStream.defaultWriteObject`. + +- **Actual Output**:![]() \ No newline at end of file diff --git a/callgraphs/Ser1-JRE1.8.jar.dot b/callgraphs/Ser1-JRE1.8.jar.dot new file mode 100644 index 0000000..51ed09a --- /dev/null +++ b/callgraphs/Ser1-JRE1.8.jar.dot @@ -0,0 +1,22 @@ +digraph G { + rankdir=LR; + graph[label="Call graph view for Ser1-JRE1.8.jar"]; + node[style=filled,fillcolor ="white",shape=box,margin=0.02,width=0,height=0]; + "4_Object.()"[fillcolor=peachpuff,color=salmon2]; + "5_Demo.main(String[])"[fillcolor=palegreen,color=darkseagreen]; + "8_Demo.()"[fillcolor=palegreen,color=darkseagreen]; + "10_FileOutputStream.(String)"[fillcolor=peachpuff,color=salmon2]; + "12_ObjectOutputStream.(OutputStream)"[fillcolor=peachpuff,color=salmon2]; + "14_salsa.model.ObjectOutputStream.writeObject(Object)"[shape=underline,fillcolor=white,color=darkslategray]; + "15_ObjectOutputStream.close()"[fillcolor=peachpuff,color=salmon2]; + "410_Demo.writeObject(ObjectOutputStream)"[fillcolor=palegreen,color=darkseagreen]; + "411_ObjectOutputStream.defaultWriteObject()"[fillcolor=peachpuff,color=salmon2]; + "5_Demo.main(String[])" -> "8_Demo.()"; + "5_Demo.main(String[])" -> "10_FileOutputStream.(String)"; + "5_Demo.main(String[])" -> "12_ObjectOutputStream.(OutputStream)"; + "5_Demo.main(String[])" -> "14_salsa.model.ObjectOutputStream.writeObject(Object)"; + "5_Demo.main(String[])" -> "15_ObjectOutputStream.close()"; + "8_Demo.()" -> "4_Object.()"; + "14_salsa.model.ObjectOutputStream.writeObject(Object)" -> "410_Demo.writeObject(ObjectOutputStream)"; + "410_Demo.writeObject(ObjectOutputStream)" -> "411_ObjectOutputStream.defaultWriteObject()"; +} diff --git a/callgraphs/Ser1-JRE1.8.jar.pdf b/callgraphs/Ser1-JRE1.8.jar.pdf new file mode 100644 index 0000000..674ab5a Binary files /dev/null and b/callgraphs/Ser1-JRE1.8.jar.pdf differ diff --git a/callgraphs/Ser1-JRE1.8.jar.png b/callgraphs/Ser1-JRE1.8.jar.png new file mode 100644 index 0000000..7059341 Binary files /dev/null and b/callgraphs/Ser1-JRE1.8.jar.png differ diff --git a/jars/Ser1-JRE1.8.jar b/jars/Ser1-JRE1.8.jar index 2938869..b6a7220 100644 Binary files a/jars/Ser1-JRE1.8.jar and b/jars/Ser1-JRE1.8.jar differ diff --git a/jars/Ser2-JRE1.8.jar b/jars/Ser2-JRE1.8.jar deleted file mode 100644 index 3f4a826..0000000 Binary files a/jars/Ser2-JRE1.8.jar and /dev/null differ diff --git a/jars/Ser3-JRE1.8.jar b/jars/Ser3-JRE1.8.jar deleted file mode 100644 index 39ae0dc..0000000 Binary files a/jars/Ser3-JRE1.8.jar and /dev/null differ diff --git a/jars/Ser4-JRE1.8.jar b/jars/Ser4-JRE1.8.jar deleted file mode 100644 index e194645..0000000 Binary files a/jars/Ser4-JRE1.8.jar and /dev/null differ diff --git a/jars/Ser5-JRE1.8.jar b/jars/Ser5-JRE1.8.jar deleted file mode 100644 index ca45b00..0000000 Binary files a/jars/Ser5-JRE1.8.jar and /dev/null differ diff --git a/jars/Ser9-JRE1.8.jar b/jars/Ser9-JRE1.8.jar deleted file mode 100644 index 10f4ad7..0000000 Binary files a/jars/Ser9-JRE1.8.jar and /dev/null differ