public SQLITaint GetTaintStatus(Dictionary<uint,string> arguments)
{
SQLITaint returnValue = SQLITaint.SQL_ALL;
foreach (var arg in arguments)
{
SQLITaint tmp;
var param = Parameters.FirstOrDefault(x => x.Key.Item1 == arg.Key);
try
{
switch (param.Key.Item2)
{
case "flag":
var flagVal = Int32.Parse(arg.Value);
var flagParam = (FlagParameter<SQLITaint>)param.Value;
tmp = (SQLITaint)flagParam.GetStatus(flagVal);
break;
case "bool":
case "boolean":
var boolVal = Boolean.Parse(arg.Value);
var boolParam = (BooleanParameter<SQLITaint>)param.Value;
tmp = (SQLITaint)boolParam.GetStatus(boolVal);
break;
case "int":
case "integer":
var intVal = Int32.Parse(arg.Value);
var intParam = (IntegerParameter<SQLITaint>)param.Value;
tmp = (SQLITaint)intParam.GetStatus(intVal);
break;
case "str":
case "string":
var stringParam = (StringParameter<SQLITaint>)param.Value;
tmp = (SQLITaint)stringParam.GetStatus(arg.Value);
break;
case "array":
case "object":
default:
continue;
}
if(tmp < returnValue)
returnValue = tmp;
}
catch (NullReferenceException e)
{
Debug.WriteLine("Could not find value, returning default: Exception was: {0}", e);
return this.DefaultStatus;
}
}
return returnValue;
}