Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
using System;
using System.Text;
using System.IO;
using System.IO.Compression;
using System.Xml;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;

class Test
{
Expand Down Expand Up @@ -48,9 +49,9 @@ public IDisposable Method()
}

// BAD: No Dispose call
var c1d = new Timer(TimerProc);
var fs = new FileStream("", FileMode.CreateNew, FileAccess.Write);
new FileStream("", FileMode.CreateNew, FileAccess.Write).Fluent();
var c1d = new Timer(TimerProc); // $ Alert
var fs = new FileStream("", FileMode.CreateNew, FileAccess.Write); // $ Alert
new FileStream("", FileMode.CreateNew, FileAccess.Write).Fluent(); // $ Alert

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

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

// GOOD: Passed to a library (False positive as this is disposed in library code).
DisposalTests.Class1.Dispose(new StreamWriter("output.txt"));

// GOOD: Disposed automatically.
using var c2 = new Timer(TimerProc);

Expand All @@ -97,6 +95,15 @@ public IDisposable Method()
return null;
}

public void M(IHttpClientFactory factory)
{
// GOOD: Factory tracks and disposes.
HttpClient client1 = factory.CreateClient();

// BAD: No Dispose call
var client2 = new HttpClient(); // $ Alert
}

// GOOD: Escapes
IDisposable Create() => new Timer(TimerProc);

Expand All @@ -107,6 +114,15 @@ void TimerProc(object obj)
public void Dispose() { }
}

class Bad
{
long GetLength(string file)
{
var stream = new FileStream(file, FileMode.Open); // $ Alert
return stream.Length;
}
}

static class Extensions
{
public static FileStream Fluent(this FileStream fs) => fs;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
| NoDisposeCallOnLocalIDisposable.cs:51:19:51:38 | object creation of type Timer | Disposable 'Timer' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:52:18:52:73 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:53:9:53:64 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:75:25:75:71 | call to method Create | Disposable 'XmlReader' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:75:42:75:64 | object creation of type StringReader | Disposable 'StringReader' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:80:38:80:67 | object creation of type StreamWriter | Disposable 'StreamWriter' is created but not disposed. |
| NoDisposeCallOnLocalIDisposableBad.cs:8:22:8:56 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:52:19:52:38 | object creation of type Timer | Disposable 'Timer' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:53:18:53:73 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:54:9:54:64 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:76:25:76:71 | call to method Create | Disposable 'XmlReader' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:76:42:76:64 | object creation of type StringReader | Disposable 'StringReader' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:104:23:104:38 | object creation of type HttpClient | Disposable 'HttpClient' is created but not disposed. |
| NoDisposeCallOnLocalIDisposable.cs:121:22:121:56 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. |
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
API Abuse/NoDisposeCallOnLocalIDisposable.ql
query: API Abuse/NoDisposeCallOnLocalIDisposable.ql
postprocess: utils/test/InlineExpectationsTestQuery.ql

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
semmle-extractor-options: /r:System.Private.Xml.dll /r:System.IO.Compression.dll
semmle-extractor-options: /nostdlib /noconfig
semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj