Skip to content

Commit 4681f28

Browse files
authored
Merge pull request #19005 from michaelnebel/csharp/local-not-disposed
C#: Revisit `cs/local-not-disposed` tests.
2 parents f30ebf1 + b1edd92 commit 4681f28

File tree

7 files changed

+36
-71
lines changed

7 files changed

+36
-71
lines changed

csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/Class1.cs_

Lines changed: 0 additions & 42 deletions
This file was deleted.

csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.cs

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
using System;
2-
using System.Text;
32
using System.IO;
43
using System.IO.Compression;
5-
using System.Xml;
4+
using System.Net.Http;
5+
using System.Text;
66
using System.Threading;
77
using System.Threading.Tasks;
8+
using System.Xml;
89

910
class Test
1011
{
@@ -48,9 +49,9 @@ public IDisposable Method()
4849
}
4950

5051
// BAD: No Dispose call
51-
var c1d = new Timer(TimerProc);
52-
var fs = new FileStream("", FileMode.CreateNew, FileAccess.Write);
53-
new FileStream("", FileMode.CreateNew, FileAccess.Write).Fluent();
52+
var c1d = new Timer(TimerProc); // $ Alert
53+
var fs = new FileStream("", FileMode.CreateNew, FileAccess.Write); // $ Alert
54+
new FileStream("", FileMode.CreateNew, FileAccess.Write).Fluent(); // $ Alert
5455

5556
// GOOD: Disposed via wrapper
5657
fs = new FileStream("", FileMode.CreateNew, FileAccess.Write);
@@ -72,13 +73,10 @@ public IDisposable Method()
7273
;
7374

7475
// GOOD: XmlDocument.Load disposes incoming XmlReader (False positive as this is disposed in library code)
75-
var xmlReader = XmlReader.Create(new StringReader("xml"), null);
76+
var xmlReader = XmlReader.Create(new StringReader("xml"), null); // $ Alert
7677
var xmlDoc = new XmlDocument();
7778
xmlDoc.Load(xmlReader);
7879

79-
// GOOD: Passed to a library (False positive as this is disposed in library code).
80-
DisposalTests.Class1.Dispose(new StreamWriter("output.txt"));
81-
8280
// GOOD: Disposed automatically.
8381
using var c2 = new Timer(TimerProc);
8482

@@ -97,6 +95,15 @@ public IDisposable Method()
9795
return null;
9896
}
9997

98+
public void M(IHttpClientFactory factory)
99+
{
100+
// GOOD: Factory tracks and disposes.
101+
HttpClient client1 = factory.CreateClient();
102+
103+
// BAD: No Dispose call
104+
var client2 = new HttpClient(); // $ Alert
105+
}
106+
100107
// GOOD: Escapes
101108
IDisposable Create() => new Timer(TimerProc);
102109

@@ -107,6 +114,15 @@ void TimerProc(object obj)
107114
public void Dispose() { }
108115
}
109116

117+
class Bad
118+
{
119+
long GetLength(string file)
120+
{
121+
var stream = new FileStream(file, FileMode.Open); // $ Alert
122+
return stream.Length;
123+
}
124+
}
125+
110126
static class Extensions
111127
{
112128
public static FileStream Fluent(this FileStream fs) => fs;
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
| NoDisposeCallOnLocalIDisposable.cs:51:19:51:38 | object creation of type Timer | Disposable 'Timer' is created but not disposed. |
2-
| NoDisposeCallOnLocalIDisposable.cs:52:18:52:73 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
3-
| NoDisposeCallOnLocalIDisposable.cs:53:9:53:64 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
4-
| NoDisposeCallOnLocalIDisposable.cs:75:25:75:71 | call to method Create | Disposable 'XmlReader' is created but not disposed. |
5-
| NoDisposeCallOnLocalIDisposable.cs:75:42:75:64 | object creation of type StringReader | Disposable 'StringReader' is created but not disposed. |
6-
| NoDisposeCallOnLocalIDisposable.cs:80:38:80:67 | object creation of type StreamWriter | Disposable 'StreamWriter' is created but not disposed. |
7-
| NoDisposeCallOnLocalIDisposableBad.cs:8:22:8:56 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
1+
| NoDisposeCallOnLocalIDisposable.cs:52:19:52:38 | object creation of type Timer | Disposable 'Timer' is created but not disposed. |
2+
| NoDisposeCallOnLocalIDisposable.cs:53:18:53:73 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
3+
| NoDisposeCallOnLocalIDisposable.cs:54:9:54:64 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
4+
| NoDisposeCallOnLocalIDisposable.cs:76:25:76:71 | call to method Create | Disposable 'XmlReader' is created but not disposed. |
5+
| NoDisposeCallOnLocalIDisposable.cs:76:42:76:64 | object creation of type StringReader | Disposable 'StringReader' is created but not disposed. |
6+
| NoDisposeCallOnLocalIDisposable.cs:104:23:104:38 | object creation of type HttpClient | Disposable 'HttpClient' is created but not disposed. |
7+
| NoDisposeCallOnLocalIDisposable.cs:121:22:121:56 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
API Abuse/NoDisposeCallOnLocalIDisposable.ql
1+
query: API Abuse/NoDisposeCallOnLocalIDisposable.ql
2+
postprocess: utils/test/InlineExpectationsTestQuery.ql

csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposableBad.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
semmle-extractor-options: /r:System.Private.Xml.dll /r:System.IO.Compression.dll
1+
semmle-extractor-options: /nostdlib /noconfig
2+
semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj

0 commit comments

Comments
 (0)