C#: Escape IDs in TRAP label definitions

This commit is contained in:
Tom Hvitved
2021-05-06 10:45:37 +02:00
parent 059a5f35fa
commit fab8400ecd
72 changed files with 486 additions and 169 deletions

View File

@@ -15,9 +15,14 @@ namespace Semmle.Extraction
public Label Label { get; set; }
public abstract void WriteId(TextWriter trapFile);
public abstract void WriteId(EscapingTextWriter trapFile);
public abstract void WriteQuotedId(TextWriter trapFile);
public virtual void WriteQuotedId(EscapingTextWriter trapFile)
{
trapFile.WriteUnescaped("@\"");
WriteId(trapFile);
trapFile.WriteUnescaped('\"');
}
public abstract Location? ReportingLocation { get; }
@@ -27,9 +32,10 @@ namespace Semmle.Extraction
{
trapFile.WriteLabel(this);
trapFile.Write("=");
using var escaping = new EscapingTextWriter(trapFile);
try
{
WriteQuotedId(trapFile);
WriteQuotedId(escaping);
}
catch (Exception ex) // lgtm[cs/catch-of-all-exceptions]
{
@@ -51,7 +57,7 @@ namespace Semmle.Extraction
/// </summary>
public string GetDebugLabel()
{
using var writer = new StringWriter();
using var writer = new EscapingTextWriter();
writer.WriteLabel(Label.Value);
writer.Write('=');
WriteQuotedId(writer);

View File

@@ -29,14 +29,14 @@ namespace Semmle.Extraction
/// Writes the unique identifier of this entitiy to a trap file.
/// </summary>
/// <param name="trapFile">The trapfile to write to.</param>
void WriteId(TextWriter trapFile);
void WriteId(EscapingTextWriter trapFile);
/// <summary>
/// Writes the quoted identifier of this entity,
/// which could be @"..." or *
/// </summary>
/// <param name="trapFile">The trapfile to write to.</param>
void WriteQuotedId(TextWriter trapFile);
void WriteQuotedId(EscapingTextWriter trapFile);
/// <summary>
/// The location for reporting purposes.

View File

@@ -7,12 +7,5 @@ namespace Semmle.Extraction
protected LabelledEntity(Context cx) : base(cx)
{
}
public override void WriteQuotedId(TextWriter trapFile)
{
trapFile.Write("@\"");
WriteId(trapFile);
trapFile.Write('\"');
}
}
}

View File

@@ -9,14 +9,14 @@ namespace Semmle.Extraction
cx.AddFreshLabel(this);
}
public sealed override void WriteId(TextWriter writer)
public sealed override void WriteId(EscapingTextWriter writer)
{
writer.Write('*');
}
public sealed override void WriteQuotedId(TextWriter writer)
public sealed override void WriteQuotedId(EscapingTextWriter writer)
{
WriteId(writer);
writer.Write('*');
}
}
}

View File

@@ -17,7 +17,7 @@ namespace Semmle.Extraction.Entities
public override bool NeedsPopulation => true;
public override void WriteId(System.IO.TextWriter trapFile)
public override void WriteId(EscapingTextWriter trapFile)
{
trapFile.Write(TransformedPath.DatabaseId);
trapFile.Write(";sourcefile");

View File

@@ -15,7 +15,7 @@ namespace Semmle.Extraction.Entities
public override bool NeedsPopulation => true;
public override void WriteId(System.IO.TextWriter trapFile)
public override void WriteId(EscapingTextWriter trapFile)
{
trapFile.Write(Symbol.DatabaseId);
trapFile.Write(";folder");

View File

@@ -13,7 +13,7 @@ namespace Semmle.Extraction.Entities
trapFile.files(this, "", "", "");
}
public override void WriteId(TextWriter trapFile)
public override void WriteId(EscapingTextWriter trapFile)
{
trapFile.Write("GENERATED;sourcefile");
}

View File

@@ -17,7 +17,7 @@ namespace Semmle.Extraction.Entities
trapFile.locations_default(this, generatedFile, 0, 0, 0, 0);
}
public override void WriteId(TextWriter trapFile)
public override void WriteId(EscapingTextWriter trapFile)
{
trapFile.Write("loc,");
trapFile.WriteSubId(generatedFile);