mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
80 lines
1.9 KiB
C#
80 lines
1.9 KiB
C#
using System;
|
|
using System.Web;
|
|
using System.Web.UI.WebControls;
|
|
|
|
public class StackTraceHandler : IHttpHandler
|
|
{
|
|
bool b;
|
|
TextBox textBox;
|
|
|
|
public void ProcessRequest(HttpContext ctx)
|
|
{
|
|
try
|
|
{
|
|
doSomeWork();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// BAD: printing a stack trace back to the response
|
|
ctx.Response.Write(ex.ToString());
|
|
// BAD: implicitly printing a stack trace back to the response
|
|
ctx.Response.Write(ex);
|
|
// BAD: writing StackTrace property to response
|
|
ctx.Response.Write(ex.StackTrace);
|
|
// GOOD: writing Message property to response
|
|
ctx.Response.Write(ex.Message);
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
doSomeWork();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// GOOD: log the stack trace, and send back a non-revealing response
|
|
log("Exception occurred", ex);
|
|
ctx.Response.Write("Exception occurred");
|
|
|
|
textBox.Text = ex.InnerException.StackTrace; // BAD
|
|
textBox.Text = ex.StackTrace; // BAD
|
|
textBox.Text = ex.ToString(); // BAD
|
|
textBox.Text = ex.Message; // GOOD
|
|
return;
|
|
}
|
|
|
|
// BAD: printing a stack trace back to the response for a custom exception
|
|
ctx.Response.Write(new MyException().ToString());
|
|
}
|
|
|
|
class MyException : Exception
|
|
{
|
|
private Exception nested;
|
|
string ToString()
|
|
{
|
|
// IGNORED - the outer ToString() should be reported, not this nested call
|
|
return nested.ToString();
|
|
}
|
|
}
|
|
|
|
// Method that may throw an exception
|
|
public void doSomeWork()
|
|
{
|
|
if (b)
|
|
throw new Exception();
|
|
}
|
|
|
|
public void log(string s, Exception e)
|
|
{
|
|
// logging stub
|
|
}
|
|
|
|
public bool IsReusable
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|