Files
codeql/csharp/ql/test/query-tests/Security Features/CWE-119/LocalUnvalidatedArithmetic.cs
2018-08-02 17:53:23 +01:00

30 lines
890 B
C#

public class PossiblyOverridableClass
{
public virtual int getNumber()
{
// By default returns 0, which is safe
return 0;
}
}
public class PointerArithmetic
{
public unsafe void CalcPointer(PossiblyOverridableClass possiblyOverridable, char[] charArray)
{
fixed (char* charPointer = charArray)
{
// BAD: Unvalidate use in pointer arithmetic
char* newCharPointer = charPointer + possiblyOverridable.getNumber();
*newCharPointer = 'A';
// BAD: Unvalidate use in pointer arithmetic
int number = possiblyOverridable.getNumber();
if (number > 0 && number < charArray.Length)
{
// GOOD: number validated first
char* newCharPointer2 = charPointer + number;
*newCharPointer = 'A';
}
}
}
}