44
55import csharp
66private import semmle.code.csharp.dataflow.LibraryTypeDataFlow
7+ private import semmle.code.csharp.dataflow.ExternalFlow
78
89/** Definitions relating to the `Json.NET` package. */
910module JsonNET {
@@ -31,15 +32,9 @@ module JsonNET {
3132 }
3233
3334 /** The class `Newtonsoft.Json.JsonConvert`. */
34- class JsonConvertClass extends JsonClass , LibraryTypeDataFlow {
35+ class JsonConvertClass extends JsonClass {
3536 JsonConvertClass ( ) { this .hasName ( "JsonConvert" ) }
3637
37- /** Gets a `ToString` method. */
38- private Method getAToStringMethod ( ) {
39- result = this .getAMethod ( "ToString" ) and
40- result .isStatic ( )
41- }
42-
4338 /** Gets a `Deserialize` method. */
4439 Method getADeserializeMethod ( ) {
4540 result = this .getAMethod ( ) and
@@ -51,39 +46,73 @@ module JsonNET {
5146 result = this .getAMethod ( ) and
5247 result .getName ( ) .matches ( "Serialize%" )
5348 }
49+ }
5450
55- private Method getAPopulateMethod ( ) {
56- result = this .getAMethod ( ) and
57- result .getName ( ) .matches ( "Populate%" )
58- }
59-
60- override predicate callableFlow (
61- CallableFlowSource source , CallableFlowSink sink , SourceDeclarationCallable c ,
62- boolean preservesValue
63- ) {
64- // ToString methods
65- c = this .getAToStringMethod ( ) and
66- preservesValue = false and
67- source = any ( CallableFlowSourceArg arg | arg .getArgumentIndex ( ) = 0 ) and
68- sink instanceof CallableFlowSinkReturn
69- or
70- // Deserialize methods
71- c = this .getADeserializeMethod ( ) and
72- preservesValue = false and
73- source = any ( CallableFlowSourceArg arg | arg .getArgumentIndex ( ) = 0 ) and
74- sink instanceof CallableFlowSinkReturn
75- or
76- // Serialize methods
77- c = this .getASerializeMethod ( ) and
78- preservesValue = false and
79- source = any ( CallableFlowSourceArg arg | arg .getArgumentIndex ( ) = 0 ) and
80- sink instanceof CallableFlowSinkReturn
81- or
82- // Populate methods
83- c = this .getAPopulateMethod ( ) and
84- preservesValue = false and
85- source = any ( CallableFlowSourceArg arg | arg .getArgumentIndex ( ) = 0 ) and
86- sink = any ( CallableFlowSinkArg arg | arg .getArgumentIndex ( ) = 1 )
51+ /** Data flow for `Newtonsoft.Json.JsonConvert`. */
52+ private class JsonConvertClassFlowModelCsv extends SummaryModelCsv {
53+ override predicate row ( string row ) {
54+ row =
55+ [
56+ "Newtonsoft.Json;JsonConvert;false;DeserializeAnonymousType<>;(System.String,T);;Argument[0];ReturnValue;taint" ,
57+ "Newtonsoft.Json;JsonConvert;false;DeserializeAnonymousType<>;(System.String,T,Newtonsoft.Json.JsonSerializerSettings);;Argument[0];ReturnValue;taint" ,
58+ "Newtonsoft.Json;JsonConvert;false;DeserializeObject;(System.String);;Argument[0];ReturnValue;taint" ,
59+ "Newtonsoft.Json;JsonConvert;false;DeserializeObject;(System.String,Newtonsoft.Json.JsonSerializerSettings);;Argument[0];ReturnValue;taint" ,
60+ "Newtonsoft.Json;JsonConvert;false;DeserializeObject;(System.String,System.Type);;Argument[0];ReturnValue;taint" ,
61+ "Newtonsoft.Json;JsonConvert;false;DeserializeObject;(System.String,System.Type,Newtonsoft.Json.JsonConverter[]);;Argument[0];ReturnValue;taint" ,
62+ "Newtonsoft.Json;JsonConvert;false;DeserializeObject;(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings);;Argument[0];ReturnValue;taint" ,
63+ "Newtonsoft.Json;JsonConvert;false;DeserializeObject<>;(System.String);;Argument[0];ReturnValue;taint" ,
64+ "Newtonsoft.Json;JsonConvert;false;DeserializeObject<>;(System.String,Newtonsoft.Json.JsonConverter[]);;Argument[0];ReturnValue;taint" ,
65+ "Newtonsoft.Json;JsonConvert;false;DeserializeObject<>;(System.String,Newtonsoft.Json.JsonSerializerSettings);;Argument[0];ReturnValue;taint" ,
66+ "Newtonsoft.Json;JsonConvert;false;DeserializeXNode;(System.String);;Argument[0];ReturnValue;taint" ,
67+ "Newtonsoft.Json;JsonConvert;false;DeserializeXNode;(System.String,System.String);;Argument[0];ReturnValue;taint" ,
68+ "Newtonsoft.Json;JsonConvert;false;DeserializeXNode;(System.String,System.String,System.Boolean);;Argument[0];ReturnValue;taint" ,
69+ "Newtonsoft.Json;JsonConvert;false;DeserializeXNode;(System.String,System.String,System.Boolean,System.Boolean);;Argument[0];ReturnValue;taint" ,
70+ "Newtonsoft.Json;JsonConvert;false;DeserializeXmlNode;(System.String);;Argument[0];ReturnValue;taint" ,
71+ "Newtonsoft.Json;JsonConvert;false;DeserializeXmlNode;(System.String,System.String);;Argument[0];ReturnValue;taint" ,
72+ "Newtonsoft.Json;JsonConvert;false;DeserializeXmlNode;(System.String,System.String,System.Boolean);;Argument[0];ReturnValue;taint" ,
73+ "Newtonsoft.Json;JsonConvert;false;DeserializeXmlNode;(System.String,System.String,System.Boolean,System.Boolean);;Argument[0];ReturnValue;taint" ,
74+ "Newtonsoft.Json;JsonConvert;false;PopulateObject;(System.String,System.Object);;Argument[0];Argument[1];taint" ,
75+ "Newtonsoft.Json;JsonConvert;false;PopulateObject;(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings);;Argument[0];Argument[1];taint" ,
76+ "Newtonsoft.Json;JsonConvert;false;SerializeObject;(System.Object);;Argument[0];ReturnValue;taint" ,
77+ "Newtonsoft.Json;JsonConvert;false;SerializeObject;(System.Object,Newtonsoft.Json.Formatting);;Argument[0];ReturnValue;taint" ,
78+ "Newtonsoft.Json;JsonConvert;false;SerializeObject;(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[]);;Argument[0];ReturnValue;taint" ,
79+ "Newtonsoft.Json;JsonConvert;false;SerializeObject;(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings);;Argument[0];ReturnValue;taint" ,
80+ "Newtonsoft.Json;JsonConvert;false;SerializeObject;(System.Object,Newtonsoft.Json.JsonConverter[]);;Argument[0];ReturnValue;taint" ,
81+ "Newtonsoft.Json;JsonConvert;false;SerializeObject;(System.Object,Newtonsoft.Json.JsonSerializerSettings);;Argument[0];ReturnValue;taint" ,
82+ "Newtonsoft.Json;JsonConvert;false;SerializeObject;(System.Object,System.Type,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings);;Argument[0];ReturnValue;taint" ,
83+ "Newtonsoft.Json;JsonConvert;false;SerializeObject;(System.Object,System.Type,Newtonsoft.Json.JsonSerializerSettings);;Argument[0];ReturnValue;taint" ,
84+ "Newtonsoft.Json;JsonConvert;false;SerializeXNode;(System.Xml.Linq.XObject);;Argument[0];ReturnValue;taint" ,
85+ "Newtonsoft.Json;JsonConvert;false;SerializeXNode;(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting);;Argument[0];ReturnValue;taint" ,
86+ "Newtonsoft.Json;JsonConvert;false;SerializeXNode;(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting,System.Boolean);;Argument[0];ReturnValue;taint" ,
87+ "Newtonsoft.Json;JsonConvert;false;SerializeXmlNode;(System.Xml.XmlNode);;Argument[0];ReturnValue;taint" ,
88+ "Newtonsoft.Json;JsonConvert;false;SerializeXmlNode;(System.Xml.XmlNode,Newtonsoft.Json.Formatting);;Argument[0];ReturnValue;taint" ,
89+ "Newtonsoft.Json;JsonConvert;false;SerializeXmlNode;(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean);;Argument[0];ReturnValue;taint" ,
90+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Boolean);;Argument[0];ReturnValue;taint" ,
91+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Byte);;Argument[0];ReturnValue;taint" ,
92+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Char);;Argument[0];ReturnValue;taint" ,
93+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.DateTime);;Argument[0];ReturnValue;taint" ,
94+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling);;Argument[0];ReturnValue;taint" ,
95+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.DateTimeOffset);;Argument[0];ReturnValue;taint" ,
96+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.DateTimeOffset,Newtonsoft.Json.DateFormatHandling);;Argument[0];ReturnValue;taint" ,
97+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Decimal);;Argument[0];ReturnValue;taint" ,
98+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Double);;Argument[0];ReturnValue;taint" ,
99+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Enum);;Argument[0];ReturnValue;taint" ,
100+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Guid);;Argument[0];ReturnValue;taint" ,
101+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Int16);;Argument[0];ReturnValue;taint" ,
102+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Int32);;Argument[0];ReturnValue;taint" ,
103+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Int64);;Argument[0];ReturnValue;taint" ,
104+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Object);;Argument[0];ReturnValue;taint" ,
105+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.SByte);;Argument[0];ReturnValue;taint" ,
106+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Single);;Argument[0];ReturnValue;taint" ,
107+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.String);;Argument[0];ReturnValue;taint" ,
108+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.String,System.Char);;Argument[0];ReturnValue;taint" ,
109+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.String,System.Char,Newtonsoft.Json.StringEscapeHandling);;Argument[0];ReturnValue;taint" ,
110+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.TimeSpan);;Argument[0];ReturnValue;taint" ,
111+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.UInt16);;Argument[0];ReturnValue;taint" ,
112+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.UInt32);;Argument[0];ReturnValue;taint" ,
113+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.UInt64);;Argument[0];ReturnValue;taint" ,
114+ "Newtonsoft.Json;JsonConvert;false;ToString;(System.Uri);;Argument[0];ReturnValue;taint" ,
115+ ]
87116 }
88117 }
89118
0 commit comments