Skip to content

Commit a412581

Browse files
author
edvraa
committed
reintroduce UnsafeDeserializer
1 parent 3aedd2c commit a412581

File tree

1 file changed

+41
-38
lines changed

1 file changed

+41
-38
lines changed

csharp/ql/src/semmle/code/csharp/serialization/Deserializers.qll

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
import csharp
77

8+
/** An unsafe deserializer. */
9+
abstract class UnsafeDeserializer extends Callable { }
10+
811
/** Unsafe deserialization calls. */
912
class UnsafeDeserializerCallable extends Callable {
1013
UnsafeDeserializerCallable() {
@@ -140,7 +143,7 @@ class WeakTypeDeserializer extends Class {
140143
* An unsafe deserializer method that calls any unsafe deserializer on any of
141144
* the parameters.
142145
*/
143-
class WrapperDeserializer extends UnsafeDeserializerCallable {
146+
class WrapperDeserializer extends UnsafeDeserializerCallable, UnsafeDeserializer {
144147
WrapperDeserializer() {
145148
exists(Call call |
146149
call.getEnclosingCallable() = this and
@@ -157,21 +160,21 @@ class BinaryFormatterClass extends Class {
157160
}
158161
}
159162

160-
class BinaryFormatterDeserializeMethod extends Method {
163+
class BinaryFormatterDeserializeMethod extends Method, UnsafeDeserializer {
161164
BinaryFormatterDeserializeMethod() {
162165
this.getDeclaringType() instanceof BinaryFormatterClass and
163166
this.hasName("Deserialize")
164167
}
165168
}
166169

167-
class BinaryFormatterUnsafeDeserializeMethod extends Method {
170+
class BinaryFormatterUnsafeDeserializeMethod extends Method, UnsafeDeserializer {
168171
BinaryFormatterUnsafeDeserializeMethod() {
169172
this.getDeclaringType() instanceof BinaryFormatterClass and
170173
this.hasName("UnsafeDeserialize")
171174
}
172175
}
173176

174-
class BinaryFormatterUnsafeDeserializeMethodResponseMethod extends Method {
177+
class BinaryFormatterUnsafeDeserializeMethodResponseMethod extends Method, UnsafeDeserializer {
175178
BinaryFormatterUnsafeDeserializeMethodResponseMethod() {
176179
this.getDeclaringType() instanceof BinaryFormatterClass and
177180
this.hasName("UnsafeDeserializeMethodResponse")
@@ -185,7 +188,7 @@ class SoapFormatterClass extends Class {
185188
}
186189
}
187190

188-
class SoapFormatterDeserializeMethod extends Method {
191+
class SoapFormatterDeserializeMethod extends Method, UnsafeDeserializer {
189192
SoapFormatterDeserializeMethod() {
190193
this.getDeclaringType() instanceof SoapFormatterClass and
191194
this.hasName("Deserialize")
@@ -197,7 +200,7 @@ class ObjectStateFormatterClass extends Class {
197200
ObjectStateFormatterClass() { this.hasQualifiedName("System.Web.UI.ObjectStateFormatter") }
198201
}
199202

200-
class ObjectStateFormatterDeserializeMethod extends Method {
203+
class ObjectStateFormatterDeserializeMethod extends Method, UnsafeDeserializer {
201204
ObjectStateFormatterDeserializeMethod() {
202205
this.getDeclaringType() instanceof ObjectStateFormatterClass and
203206
this.hasName("Deserialize")
@@ -211,14 +214,14 @@ class NetDataContractSerializerClass extends Class {
211214
}
212215
}
213216

214-
class NetDataContractSerializerDeserializeMethod extends Method {
217+
class NetDataContractSerializerDeserializeMethod extends Method, UnsafeDeserializer {
215218
NetDataContractSerializerDeserializeMethod() {
216219
this.getDeclaringType() instanceof NetDataContractSerializerClass and
217220
this.hasName("Deserialize")
218221
}
219222
}
220223

221-
class NetDataContractSerializerReadObjectMethod extends Method {
224+
class NetDataContractSerializerReadObjectMethod extends Method, UnsafeDeserializer {
222225
NetDataContractSerializerReadObjectMethod() {
223226
this.getDeclaringType() instanceof NetDataContractSerializerClass and
224227
this.hasName("ReadObject")
@@ -232,7 +235,7 @@ class DataContractJsonSerializerClass extends Class {
232235
}
233236
}
234237

235-
class DataContractJsonSerializerReadObjectMethod extends Method {
238+
class DataContractJsonSerializerReadObjectMethod extends Method, UnsafeDeserializer {
236239
DataContractJsonSerializerReadObjectMethod() {
237240
this.getDeclaringType() instanceof DataContractJsonSerializerClass and
238241
this.hasName("ReadObject")
@@ -246,14 +249,14 @@ class JavaScriptSerializerClass extends Class {
246249
}
247250
}
248251

249-
class JavaScriptSerializerClassDeserializeMethod extends Method {
252+
class JavaScriptSerializerClassDeserializeMethod extends Method, UnsafeDeserializer {
250253
JavaScriptSerializerClassDeserializeMethod() {
251254
this.getDeclaringType() instanceof JavaScriptSerializerClass and
252255
this.hasName("Deserialize")
253256
}
254257
}
255258

256-
class JavaScriptSerializerClassDeserializeObjectMethod extends Method {
259+
class JavaScriptSerializerClassDeserializeObjectMethod extends Method, UnsafeDeserializer {
257260
JavaScriptSerializerClassDeserializeObjectMethod() {
258261
this.getDeclaringType() instanceof JavaScriptSerializerClass and
259262
this.hasName("DeserializeObject")
@@ -267,7 +270,7 @@ class XmlObjectSerializerClass extends Class {
267270
}
268271
}
269272

270-
class XmlObjectSerializerReadObjectMethod extends Method {
273+
class XmlObjectSerializerReadObjectMethod extends Method, UnsafeDeserializer {
271274
XmlObjectSerializerReadObjectMethod() {
272275
this.getDeclaringType() instanceof XmlObjectSerializerClass and
273276
this.hasName("ReadObject")
@@ -279,7 +282,7 @@ class XmlSerializerClass extends Class {
279282
XmlSerializerClass() { this.hasQualifiedName("System.Xml.Serialization.XmlSerializer") }
280283
}
281284

282-
class XmlSerializerDeserializeMethod extends Method {
285+
class XmlSerializerDeserializeMethod extends Method, UnsafeDeserializer {
283286
XmlSerializerDeserializeMethod() {
284287
this.getDeclaringType() instanceof XmlSerializerClass and
285288
this.hasName("Deserialize")
@@ -293,7 +296,7 @@ class DataContractSerializerClass extends Class {
293296
}
294297
}
295298

296-
class DataContractSerializerReadObjectMethod extends Method {
299+
class DataContractSerializerReadObjectMethod extends Method, UnsafeDeserializer {
297300
DataContractSerializerReadObjectMethod() {
298301
this.getDeclaringType() instanceof DataContractSerializerClass and
299302
this.hasName("ReadObject")
@@ -305,7 +308,7 @@ class XmlMessageFormatterClass extends Class {
305308
XmlMessageFormatterClass() { this.hasQualifiedName("System.Messaging.XmlMessageFormatter") }
306309
}
307310

308-
class XmlMessageFormatterReadMethod extends Method {
311+
class XmlMessageFormatterReadMethod extends Method, UnsafeDeserializer {
309312
XmlMessageFormatterReadMethod() {
310313
this.getDeclaringType() instanceof XmlMessageFormatterClass and
311314
this.hasName("Read")
@@ -317,7 +320,7 @@ class LosFormatterClass extends Class {
317320
LosFormatterClass() { this.hasQualifiedName("System.Web.UI.LosFormatter") }
318321
}
319322

320-
class LosFormatterDeserializeMethod extends Method {
323+
class LosFormatterDeserializeMethod extends Method, UnsafeDeserializer {
321324
LosFormatterDeserializeMethod() {
322325
this.getDeclaringType() instanceof LosFormatterClass and
323326
this.hasName("Deserialize")
@@ -329,7 +332,7 @@ class FastJsonClass extends Class {
329332
FastJsonClass() { this.hasQualifiedName("fastJSON.JSON") }
330333
}
331334

332-
class FastJsonClassToObjectMethod extends Method {
335+
class FastJsonClassToObjectMethod extends Method, UnsafeDeserializer {
333336
FastJsonClassToObjectMethod() {
334337
this.getDeclaringType() instanceof FastJsonClass and
335338
this.hasName("ToObject") and
@@ -342,7 +345,7 @@ class ActivityClass extends Class {
342345
ActivityClass() { this.hasQualifiedName("System.Workflow.ComponentModel.Activity") }
343346
}
344347

345-
class ActivityLoadMethod extends Method {
348+
class ActivityLoadMethod extends Method, UnsafeDeserializer {
346349
ActivityLoadMethod() {
347350
this.getDeclaringType() instanceof ActivityClass and
348351
this.hasName("Load")
@@ -354,7 +357,7 @@ class ResourceReaderClass extends Class {
354357
ResourceReaderClass() { this.hasQualifiedName("System.Resources.ResourceReader") }
355358
}
356359

357-
class ResourceReaderConstructor extends Constructor {
360+
class ResourceReaderConstructor extends Constructor, UnsafeDeserializer {
358361
ResourceReaderConstructor() {
359362
this.getDeclaringType() instanceof ResourceReaderClass and
360363
this.hasName("ResourceReader")
@@ -366,7 +369,7 @@ class BinaryMessageFormatterClass extends Class {
366369
BinaryMessageFormatterClass() { this.hasQualifiedName("System.Messaging.BinaryMessageFormatter") }
367370
}
368371

369-
class BinaryMessageFormatterReadMethod extends Method {
372+
class BinaryMessageFormatterReadMethod extends Method, UnsafeDeserializer {
370373
BinaryMessageFormatterReadMethod() {
371374
this.getDeclaringType() instanceof BinaryMessageFormatterClass and
372375
this.hasName("Read")
@@ -378,23 +381,23 @@ class XamlReaderClass extends Class {
378381
XamlReaderClass() { this.hasQualifiedName("System.Windows.Markup.XamlReader") }
379382
}
380383

381-
class XamlReaderParseMethod extends Method {
384+
class XamlReaderParseMethod extends Method, UnsafeDeserializer {
382385
XamlReaderParseMethod() {
383386
this.getDeclaringType() instanceof XamlReaderClass and
384387
this.hasName("Parse") and
385388
this.isStatic()
386389
}
387390
}
388391

389-
class XamlReaderLoadMethod extends Method {
392+
class XamlReaderLoadMethod extends Method, UnsafeDeserializer {
390393
XamlReaderLoadMethod() {
391394
this.getDeclaringType() instanceof XamlReaderClass and
392395
this.hasName("Load") and
393396
this.isStatic()
394397
}
395398
}
396399

397-
class XamlReaderLoadAsyncMethod extends Method {
400+
class XamlReaderLoadAsyncMethod extends Method, UnsafeDeserializer {
398401
XamlReaderLoadAsyncMethod() {
399402
this.getDeclaringType() instanceof XamlReaderClass and
400403
this.hasName("LoadAsync")
@@ -406,14 +409,14 @@ class ProxyObjectClass extends Class {
406409
ProxyObjectClass() { this.hasQualifiedName("Microsoft.Web.Design.Remote.ProxyObject") }
407410
}
408411

409-
class ProxyObjectDecodeValueMethod extends Method {
412+
class ProxyObjectDecodeValueMethod extends Method, UnsafeDeserializer {
410413
ProxyObjectDecodeValueMethod() {
411414
this.getDeclaringType() instanceof ProxyObjectClass and
412415
this.hasName("DecodeValue")
413416
}
414417
}
415418

416-
class ProxyObjectDecodeSerializedObjectMethod extends Method {
419+
class ProxyObjectDecodeSerializedObjectMethod extends Method, UnsafeDeserializer {
417420
ProxyObjectDecodeSerializedObjectMethod() {
418421
this.getDeclaringType() instanceof ProxyObjectClass and
419422
this.hasName("DecodeSerializedObject")
@@ -425,7 +428,7 @@ class JaysonConverterClass extends Class {
425428
JaysonConverterClass() { this.hasQualifiedName("Sweet.Jayson.JaysonConverter") }
426429
}
427430

428-
class JaysonConverterToObjectMethod extends Method {
431+
class JaysonConverterToObjectMethod extends Method, UnsafeDeserializer {
429432
JaysonConverterToObjectMethod() {
430433
this.getDeclaringType() instanceof JaysonConverterClass and
431434
this.hasName("ToObject") and
@@ -440,23 +443,23 @@ class ServiceStackTextJsonSerializerClass extends Class {
440443
}
441444
}
442445

443-
class ServiceStackTextJsonSerializerDeserializeFromStringMethod extends Method {
446+
class ServiceStackTextJsonSerializerDeserializeFromStringMethod extends Method, UnsafeDeserializer {
444447
ServiceStackTextJsonSerializerDeserializeFromStringMethod() {
445448
this.getDeclaringType() instanceof ServiceStackTextJsonSerializerClass and
446449
this.hasName("DeserializeFromString") and
447450
this.isStatic()
448451
}
449452
}
450453

451-
class ServiceStackTextJsonSerializerDeserializeFromReaderMethod extends Method {
454+
class ServiceStackTextJsonSerializerDeserializeFromReaderMethod extends Method, UnsafeDeserializer {
452455
ServiceStackTextJsonSerializerDeserializeFromReaderMethod() {
453456
this.getDeclaringType() instanceof ServiceStackTextJsonSerializerClass and
454457
this.hasName("DeserializeFromReader") and
455458
this.isStatic()
456459
}
457460
}
458461

459-
class ServiceStackTextJsonSerializerDeserializeFromStreamMethod extends Method {
462+
class ServiceStackTextJsonSerializerDeserializeFromStreamMethod extends Method, UnsafeDeserializer {
460463
ServiceStackTextJsonSerializerDeserializeFromStreamMethod() {
461464
this.getDeclaringType() instanceof ServiceStackTextJsonSerializerClass and
462465
this.hasName("DeserializeFromStream") and
@@ -471,23 +474,23 @@ class ServiceStackTextTypeSerializerClass extends Class {
471474
}
472475
}
473476

474-
class ServiceStackTextTypeSerializerDeserializeFromStringMethod extends Method {
477+
class ServiceStackTextTypeSerializerDeserializeFromStringMethod extends Method, UnsafeDeserializer {
475478
ServiceStackTextTypeSerializerDeserializeFromStringMethod() {
476479
this.getDeclaringType() instanceof ServiceStackTextTypeSerializerClass and
477480
this.hasName("DeserializeFromString") and
478481
this.isStatic()
479482
}
480483
}
481484

482-
class ServiceStackTextTypeSerializerDeserializeFromReaderMethod extends Method {
485+
class ServiceStackTextTypeSerializerDeserializeFromReaderMethod extends Method, UnsafeDeserializer {
483486
ServiceStackTextTypeSerializerDeserializeFromReaderMethod() {
484487
this.getDeclaringType() instanceof ServiceStackTextTypeSerializerClass and
485488
this.hasName("DeserializeFromReader") and
486489
this.isStatic()
487490
}
488491
}
489492

490-
class ServiceStackTextTypeSerializerDeserializeFromStreamMethod extends Method {
493+
class ServiceStackTextTypeSerializerDeserializeFromStreamMethod extends Method, UnsafeDeserializer {
491494
ServiceStackTextTypeSerializerDeserializeFromStreamMethod() {
492495
this.getDeclaringType() instanceof ServiceStackTextTypeSerializerClass and
493496
this.hasName("DeserializeFromStream") and
@@ -500,23 +503,23 @@ class ServiceStackTextCsvSerializerClass extends Class {
500503
ServiceStackTextCsvSerializerClass() { this.hasQualifiedName("ServiceStack.Text.CsvSerializer") }
501504
}
502505

503-
class ServiceStackTextCsvSerializerDeserializeFromStringMethod extends Method {
506+
class ServiceStackTextCsvSerializerDeserializeFromStringMethod extends Method, UnsafeDeserializer {
504507
ServiceStackTextCsvSerializerDeserializeFromStringMethod() {
505508
this.getDeclaringType() instanceof ServiceStackTextCsvSerializerClass and
506509
this.hasName("DeserializeFromString") and
507510
this.isStatic()
508511
}
509512
}
510513

511-
class ServiceStackTextCsvSerializerDeserializeFromReaderMethod extends Method {
514+
class ServiceStackTextCsvSerializerDeserializeFromReaderMethod extends Method, UnsafeDeserializer {
512515
ServiceStackTextCsvSerializerDeserializeFromReaderMethod() {
513516
this.getDeclaringType() instanceof ServiceStackTextCsvSerializerClass and
514517
this.hasName("DeserializeFromReader") and
515518
this.isStatic()
516519
}
517520
}
518521

519-
class ServiceStackTextCsvSerializerDeserializeFromStreamMethod extends Method {
522+
class ServiceStackTextCsvSerializerDeserializeFromStreamMethod extends Method, UnsafeDeserializer {
520523
ServiceStackTextCsvSerializerDeserializeFromStreamMethod() {
521524
this.getDeclaringType() instanceof ServiceStackTextCsvSerializerClass and
522525
this.hasName("DeserializeFromStream") and
@@ -529,23 +532,23 @@ class ServiceStackTextXmlSerializerClass extends Class {
529532
ServiceStackTextXmlSerializerClass() { this.hasQualifiedName("ServiceStack.Text.XmlSerializer") }
530533
}
531534

532-
class ServiceStackTextXmlSerializerDeserializeFromStringMethod extends Method {
535+
class ServiceStackTextXmlSerializerDeserializeFromStringMethod extends Method, UnsafeDeserializer {
533536
ServiceStackTextXmlSerializerDeserializeFromStringMethod() {
534537
this.getDeclaringType() instanceof ServiceStackTextXmlSerializerClass and
535538
this.hasName("DeserializeFromString") and
536539
this.isStatic()
537540
}
538541
}
539542

540-
class ServiceStackTextXmlSerializerDeserializeFromReaderMethod extends Method {
543+
class ServiceStackTextXmlSerializerDeserializeFromReaderMethod extends Method, UnsafeDeserializer {
541544
ServiceStackTextXmlSerializerDeserializeFromReaderMethod() {
542545
this.getDeclaringType() instanceof ServiceStackTextXmlSerializerClass and
543546
this.hasName("DeserializeFromReader") and
544547
this.isStatic()
545548
}
546549
}
547550

548-
class ServiceStackTextXmlSerializerDeserializeFromStreamMethod extends Method {
551+
class ServiceStackTextXmlSerializerDeserializeFromStreamMethod extends Method, UnsafeDeserializer {
549552
ServiceStackTextXmlSerializerDeserializeFromStreamMethod() {
550553
this.getDeclaringType() instanceof ServiceStackTextXmlSerializerClass and
551554
this.hasName("DeserializeFromStream") and

0 commit comments

Comments
 (0)