Merge pull request #8628 from michaelnebel/csharp/generatedkind

C#: Introduce generated flag as a part of the kind column for flow summaries
This commit is contained in:
Michael Nebel
2022-04-07 08:43:30 +02:00
committed by GitHub
27 changed files with 467 additions and 299 deletions

View File

@@ -24,6 +24,16 @@ public class C {
stepQualArg(argOut);
}
void fooGenerated() {
Object arg1 = new Object();
stepArgResGenerated(arg1);
Object arg2 = new Object();
// The summary for the first parameter is ignored, because it is generated and
// because there is hand written summary for the second parameter.
stepArgResGeneratedIgnored(arg1, arg2);
}
Object stepArgRes(Object x) { return null; }
void stepArgArg(Object in, Object out) { }
@@ -33,4 +43,8 @@ public class C {
Object stepQualRes() { return null; }
void stepQualArg(Object out) { }
Object stepArgResGenerated(Object x) { return null; }
Object stepArgResGeneratedIgnored(Object x, Object y) { return null; }
}

View File

@@ -8,3 +8,5 @@ invalidModelRow
| C.java:20:5:20:8 | this | C.java:20:5:20:22 | stepQualRes(...) |
| C.java:21:5:21:17 | this <.method> | C.java:21:5:21:17 | stepQualRes(...) |
| C.java:24:5:24:23 | this <.method> | C.java:24:17:24:22 | argOut [post update] |
| C.java:29:25:29:28 | arg1 | C.java:29:5:29:29 | stepArgResGenerated(...) |
| C.java:34:38:34:41 | arg2 | C.java:34:5:34:42 | stepArgResGeneratedIgnored(...) |

View File

@@ -13,7 +13,10 @@ class SummaryModelTest extends SummaryModelCsv {
"my.qltest;C;false;stepArgArg;(Object,Object);;Argument[0];Argument[1];taint",
"my.qltest;C;false;stepArgQual;(Object);;Argument[0];Argument[-1];taint",
"my.qltest;C;false;stepQualRes;();;Argument[-1];ReturnValue;taint",
"my.qltest;C;false;stepQualArg;(Object);;Argument[-1];Argument[0];taint"
"my.qltest;C;false;stepQualArg;(Object);;Argument[-1];Argument[0];taint",
"my.qltest;C;false;stepArgResGenerated;(Object);;Argument[0];ReturnValue;generated:taint",
"my.qltest;C;false;stepArgResGeneratedIgnored;(Object,Object);;Argument[0];ReturnValue;generated:taint",
"my.qltest;C;false;stepArgResGeneratedIgnored;(Object,Object);;Argument[1];ReturnValue;taint",
]
}
}

View File

@@ -1,4 +1,4 @@
| p;PrivateFlowViaPublicInterface$SPI;true;openStream;();;Argument[-1];create-file |
| p;Sinks;true;copyFileToDirectory;(Path,Path,CopyOption[]);;Argument[1];create-file |
| p;Sinks;true;readUrl;(URL,Charset);;Argument[0];open-url |
| p;Sources;true;readUrl;(URL);;Argument[0];open-url |
| p;PrivateFlowViaPublicInterface$SPI;true;openStream;();;Argument[-1];generated:create-file |
| p;Sinks;true;copyFileToDirectory;(Path,Path,CopyOption[]);;Argument[1];generated:create-file |
| p;Sinks;true;readUrl;(URL,Charset);;Argument[0];generated:open-url |
| p;Sources;true;readUrl;(URL);;Argument[0];generated:open-url |

View File

@@ -1,5 +1,5 @@
| p;Sources;true;readUrl;(URL);;ReturnValue;remote |
| p;Sources;true;socketStream;();;ReturnValue;remote |
| p;Sources;true;sourceToParameter;(InputStream[],List);;Argument[0].ArrayElement;remote |
| p;Sources;true;sourceToParameter;(InputStream[],List);;Argument[1].Element;remote |
| p;Sources;true;wrappedSocketStream;();;ReturnValue;remote |
| p;Sources;true;readUrl;(URL);;ReturnValue;generated:remote |
| p;Sources;true;socketStream;();;ReturnValue;generated:remote |
| p;Sources;true;sourceToParameter;(InputStream[],List);;Argument[0].ArrayElement;generated:remote |
| p;Sources;true;sourceToParameter;(InputStream[],List);;Argument[1].Element;generated:remote |
| p;Sources;true;wrappedSocketStream;();;ReturnValue;generated:remote |

View File

@@ -1,46 +1,46 @@
| p;Factory;false;create;(String);;Argument[0];ReturnValue;taint |
| p;Factory;false;create;(String,int);;Argument[0];ReturnValue;taint |
| p;Factory;false;getValue;();;Argument[-1];ReturnValue;taint |
| p;FinalClass;false;returnsInput;(String);;Argument[0];ReturnValue;taint |
| p;FluentAPI;false;returnsThis;(String);;Argument[-1];ReturnValue;value |
| p;ImmutablePojo;false;ImmutablePojo;(String,int);;Argument[0];Argument[-1];taint |
| p;ImmutablePojo;false;getValue;();;Argument[-1];ReturnValue;taint |
| p;ImmutablePojo;false;or;(String);;Argument[-1];ReturnValue;taint |
| p;ImmutablePojo;false;or;(String);;Argument[0];ReturnValue;taint |
| p;InnerClasses$CaptureMe;true;yesCm;(String);;Argument[0];ReturnValue;taint |
| p;InnerClasses;true;yes;(String);;Argument[0];ReturnValue;taint |
| p;InnerHolder;false;append;(String);;Argument[0];Argument[-1];taint |
| p;InnerHolder;false;explicitSetContext;(String);;Argument[0];Argument[-1];taint |
| p;InnerHolder;false;getValue;();;Argument[-1];ReturnValue;taint |
| p;InnerHolder;false;setContext;(String);;Argument[0];Argument[-1];taint |
| p;Joiner;false;Joiner;(CharSequence);;Argument[0];Argument[-1];taint |
| p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[0];Argument[-1];taint |
| p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[1];Argument[-1];taint |
| p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[2];Argument[-1];taint |
| p;Joiner;false;add;(CharSequence);;Argument[-1];ReturnValue;value |
| p;Joiner;false;merge;(Joiner);;Argument[-1];ReturnValue;value |
| p;Joiner;false;setEmptyValue;(CharSequence);;Argument[-1];ReturnValue;value |
| p;Joiner;false;setEmptyValue;(CharSequence);;Argument[0];Argument[-1];taint |
| p;Joiner;false;toString;();;Argument[-1];ReturnValue;taint |
| p;MultipleImpls$Strat2;true;getValue;();;Argument[-1];ReturnValue;taint |
| p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];Argument[-1];taint |
| p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];ReturnValue;taint |
| p;ParamFlow;true;addTo;(String,List);;Argument[0];Argument[1].Element;taint |
| p;ParamFlow;true;returnArrayElement;(String[]);;Argument[0].ArrayElement;ReturnValue;taint |
| p;ParamFlow;true;returnCollectionElement;(List);;Argument[0].Element;ReturnValue;taint |
| p;ParamFlow;true;returnIterableElement;(Iterable);;Argument[0].Element;ReturnValue;taint |
| p;ParamFlow;true;returnIteratorElement;(Iterator);;Argument[0].Element;ReturnValue;taint |
| p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[0];ReturnValue;taint |
| p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[1];ReturnValue;taint |
| p;ParamFlow;true;returnVarArgElement;(String[]);;Argument[0].ArrayElement;ReturnValue;taint |
| p;ParamFlow;true;returnsInput;(String);;Argument[0];ReturnValue;taint |
| p;ParamFlow;true;writeChunked;(byte[],OutputStream);;Argument[0];Argument[1];taint |
| p;ParamFlow;true;writeChunked;(char[],OutputStream);;Argument[0];Argument[1];taint |
| p;Pojo;false;fillIn;(List);;Argument[-1];Argument[0].Element;taint |
| p;Pojo;false;getBoxedBytes;();;Argument[-1];ReturnValue;taint |
| p;Pojo;false;getBoxedChars;();;Argument[-1];ReturnValue;taint |
| p;Pojo;false;getByteArray;();;Argument[-1];ReturnValue;taint |
| p;Pojo;false;getCharArray;();;Argument[-1];ReturnValue;taint |
| p;Pojo;false;getValue;();;Argument[-1];ReturnValue;taint |
| p;Pojo;false;setValue;(String);;Argument[0];Argument[-1];taint |
| p;PrivateFlowViaPublicInterface;true;createAnSPI;(File);;Argument[0];ReturnValue;taint |
| p;Factory;false;create;(String);;Argument[0];ReturnValue;generated:taint |
| p;Factory;false;create;(String,int);;Argument[0];ReturnValue;generated:taint |
| p;Factory;false;getValue;();;Argument[-1];ReturnValue;generated:taint |
| p;FinalClass;false;returnsInput;(String);;Argument[0];ReturnValue;generated:taint |
| p;FluentAPI;false;returnsThis;(String);;Argument[-1];ReturnValue;generated:value |
| p;ImmutablePojo;false;ImmutablePojo;(String,int);;Argument[0];Argument[-1];generated:taint |
| p;ImmutablePojo;false;getValue;();;Argument[-1];ReturnValue;generated:taint |
| p;ImmutablePojo;false;or;(String);;Argument[-1];ReturnValue;generated:taint |
| p;ImmutablePojo;false;or;(String);;Argument[0];ReturnValue;generated:taint |
| p;InnerClasses$CaptureMe;true;yesCm;(String);;Argument[0];ReturnValue;generated:taint |
| p;InnerClasses;true;yes;(String);;Argument[0];ReturnValue;generated:taint |
| p;InnerHolder;false;append;(String);;Argument[0];Argument[-1];generated:taint |
| p;InnerHolder;false;explicitSetContext;(String);;Argument[0];Argument[-1];generated:taint |
| p;InnerHolder;false;getValue;();;Argument[-1];ReturnValue;generated:taint |
| p;InnerHolder;false;setContext;(String);;Argument[0];Argument[-1];generated:taint |
| p;Joiner;false;Joiner;(CharSequence);;Argument[0];Argument[-1];generated:taint |
| p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[0];Argument[-1];generated:taint |
| p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[1];Argument[-1];generated:taint |
| p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[2];Argument[-1];generated:taint |
| p;Joiner;false;add;(CharSequence);;Argument[-1];ReturnValue;generated:value |
| p;Joiner;false;merge;(Joiner);;Argument[-1];ReturnValue;generated:value |
| p;Joiner;false;setEmptyValue;(CharSequence);;Argument[-1];ReturnValue;generated:value |
| p;Joiner;false;setEmptyValue;(CharSequence);;Argument[0];Argument[-1];generated:taint |
| p;Joiner;false;toString;();;Argument[-1];ReturnValue;generated:taint |
| p;MultipleImpls$Strat2;true;getValue;();;Argument[-1];ReturnValue;generated:taint |
| p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];Argument[-1];generated:taint |
| p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];ReturnValue;generated:taint |
| p;ParamFlow;true;addTo;(String,List);;Argument[0];Argument[1].Element;generated:taint |
| p;ParamFlow;true;returnArrayElement;(String[]);;Argument[0].ArrayElement;ReturnValue;generated:taint |
| p;ParamFlow;true;returnCollectionElement;(List);;Argument[0].Element;ReturnValue;generated:taint |
| p;ParamFlow;true;returnIterableElement;(Iterable);;Argument[0].Element;ReturnValue;generated:taint |
| p;ParamFlow;true;returnIteratorElement;(Iterator);;Argument[0].Element;ReturnValue;generated:taint |
| p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[0];ReturnValue;generated:taint |
| p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[1];ReturnValue;generated:taint |
| p;ParamFlow;true;returnVarArgElement;(String[]);;Argument[0].ArrayElement;ReturnValue;generated:taint |
| p;ParamFlow;true;returnsInput;(String);;Argument[0];ReturnValue;generated:taint |
| p;ParamFlow;true;writeChunked;(byte[],OutputStream);;Argument[0];Argument[1];generated:taint |
| p;ParamFlow;true;writeChunked;(char[],OutputStream);;Argument[0];Argument[1];generated:taint |
| p;Pojo;false;fillIn;(List);;Argument[-1];Argument[0].Element;generated:taint |
| p;Pojo;false;getBoxedBytes;();;Argument[-1];ReturnValue;generated:taint |
| p;Pojo;false;getBoxedChars;();;Argument[-1];ReturnValue;generated:taint |
| p;Pojo;false;getByteArray;();;Argument[-1];ReturnValue;generated:taint |
| p;Pojo;false;getCharArray;();;Argument[-1];ReturnValue;generated:taint |
| p;Pojo;false;getValue;();;Argument[-1];ReturnValue;generated:taint |
| p;Pojo;false;setValue;(String);;Argument[0];Argument[-1];generated:taint |
| p;PrivateFlowViaPublicInterface;true;createAnSPI;(File);;Argument[0];ReturnValue;generated:taint |