4
4
5
5
import csharp
6
6
private import semmle.code.csharp.dataflow.LibraryTypeDataFlow
7
+ private import semmle.code.csharp.dataflow.ExternalFlow
7
8
8
9
/** Definitions relating to the `Json.NET` package. */
9
10
module JsonNET {
@@ -31,15 +32,9 @@ module JsonNET {
31
32
}
32
33
33
34
/** The class `Newtonsoft.Json.JsonConvert`. */
34
- class JsonConvertClass extends JsonClass , LibraryTypeDataFlow {
35
+ class JsonConvertClass extends JsonClass {
35
36
JsonConvertClass ( ) { this .hasName ( "JsonConvert" ) }
36
37
37
- /** Gets a `ToString` method. */
38
- private Method getAToStringMethod ( ) {
39
- result = this .getAMethod ( "ToString" ) and
40
- result .isStatic ( )
41
- }
42
-
43
38
/** Gets a `Deserialize` method. */
44
39
Method getADeserializeMethod ( ) {
45
40
result = this .getAMethod ( ) and
@@ -51,39 +46,73 @@ module JsonNET {
51
46
result = this .getAMethod ( ) and
52
47
result .getName ( ) .matches ( "Serialize%" )
53
48
}
49
+ }
54
50
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
+ ]
87
116
}
88
117
}
89
118
0 commit comments