mirror of
https://github.com/github/codeql.git
synced 2025-12-18 01:33:15 +01:00
112 lines
1.5 KiB
C#
112 lines
1.5 KiB
C#
using System;
|
|
using System.Web.UI;
|
|
using System.ComponentModel;
|
|
|
|
namespace System.Web.UI
|
|
{
|
|
class Page : IDisposable
|
|
{
|
|
public void Dispose() { }
|
|
}
|
|
|
|
class Control : IDisposable
|
|
{
|
|
public void Dispose() { }
|
|
}
|
|
}
|
|
|
|
class C1 : IDisposable
|
|
{
|
|
C1 Field; // GOOD
|
|
|
|
public virtual void Dispose()
|
|
{
|
|
Field.Dispose();
|
|
}
|
|
}
|
|
|
|
class C2 : C1
|
|
{
|
|
C2 Field; // BAD
|
|
}
|
|
|
|
class C3 : C1
|
|
{
|
|
C2 Field; // GOOD
|
|
|
|
public override void Dispose()
|
|
{
|
|
base.Dispose();
|
|
Field.Dispose();
|
|
}
|
|
}
|
|
|
|
class WebPage : Page
|
|
{
|
|
C1 Field1; // BAD
|
|
Control Field2; // GOOD
|
|
}
|
|
|
|
class WebControl : Control
|
|
{
|
|
C1 Field1; // BAD
|
|
Control Field2; // GOOD
|
|
}
|
|
|
|
class C4 : IDisposable
|
|
{
|
|
public void Dispose() { Dispose(true); }
|
|
public virtual void Dispose(bool disposing) { }
|
|
}
|
|
|
|
class C5 : C4
|
|
{
|
|
C2 Field; // GOOD
|
|
|
|
public override void Dispose(bool disposing)
|
|
{
|
|
base.Dispose(disposing);
|
|
if (disposing)
|
|
{
|
|
Field.Dispose();
|
|
}
|
|
}
|
|
}
|
|
|
|
class C6 : C4
|
|
{
|
|
C2 Field; // BAD
|
|
}
|
|
|
|
class C7 : Component
|
|
{
|
|
C2 Field; // BAD
|
|
}
|
|
|
|
class C8 : Component
|
|
{
|
|
C2 Field; // GOOD
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
base.Dispose(disposing);
|
|
if (disposing)
|
|
{
|
|
Field.Dispose();
|
|
}
|
|
}
|
|
}
|
|
|
|
class C9 : C1
|
|
{
|
|
C2 Field; // BAD
|
|
|
|
public virtual void Dispose()
|
|
{ // Typo: virtual instead of override
|
|
base.Dispose();
|
|
Field.Dispose();
|
|
}
|
|
}
|
|
|
|
// semmle-extractor-options: /r:System.ComponentModel.Primitives.dll
|