mirror of
https://github.com/SabreTools/MPF.git
synced 2026-07-02 17:24:48 +00:00
Add as many validations as humanly possible
This commit is contained in:
414
Utilities.cs
414
Utilities.cs
@@ -1262,6 +1262,7 @@ namespace DICUI
|
||||
/// </summary>
|
||||
/// <param name="parameters">String representing all parameters</param>
|
||||
/// <returns>True if it would be valid, false otherwise</returns>
|
||||
/// <remarks>TODO: Refactor this to make it cleaner</remarks>
|
||||
public static bool ValidateParameters(string parameters)
|
||||
{
|
||||
// The string has to be valid by itself first
|
||||
@@ -1302,41 +1303,113 @@ namespace DICUI
|
||||
// Loop through all auxilary flags
|
||||
for (int i = 4; i < parts.Count; i++)
|
||||
{
|
||||
switch (parts[i])
|
||||
{
|
||||
case Constants.DisableBeepFlag:
|
||||
case Constants.CDD8OpcodeFlag:
|
||||
case Constants.CDMCNFlag:
|
||||
case Constants.CDAMSFFlag:
|
||||
case Constants.CDReverseFlag:
|
||||
case Constants.CDMultiSessionFlag:
|
||||
case Constants.CDScanSectorProtectFlag:
|
||||
case Constants.CDScanAnitModFlag:
|
||||
case Constants.CDNoFixSubPFlag:
|
||||
case Constants.CDNoFixSubQFlag:
|
||||
case Constants.CDNoFixSubRtoWFlag:
|
||||
case Constants.CDNoFixSubQLibCryptFlag:
|
||||
case Constants.CDNoFixSubQSecuROMFlag:
|
||||
// No-op, all of these are single flags
|
||||
break;
|
||||
case Constants.CDScanFileProtectFlag:
|
||||
// TODO: Check if next is a valid number (timeout)
|
||||
break;
|
||||
case Constants.ForceUnitAccessFlag:
|
||||
// TODO: Check next as valid number
|
||||
break;
|
||||
case Constants.CDAddOffsetFlag:
|
||||
// TODO: Check next as valid number
|
||||
break;
|
||||
case Constants.CDBEOpcodeFlag:
|
||||
// TODO: Check next as valid (raw/pack)
|
||||
break;
|
||||
switch (parts[i])
|
||||
{
|
||||
case Constants.DisableBeepFlag:
|
||||
case Constants.CDD8OpcodeFlag:
|
||||
case Constants.CDMCNFlag:
|
||||
case Constants.CDAMSFFlag:
|
||||
case Constants.CDReverseFlag:
|
||||
case Constants.CDMultiSessionFlag:
|
||||
case Constants.CDScanSectorProtectFlag:
|
||||
case Constants.CDScanAnitModFlag:
|
||||
case Constants.CDNoFixSubPFlag:
|
||||
case Constants.CDNoFixSubQFlag:
|
||||
case Constants.CDNoFixSubRtoWFlag:
|
||||
case Constants.CDNoFixSubQLibCryptFlag:
|
||||
case Constants.CDNoFixSubQSecuROMFlag:
|
||||
// No-op, all of these are single flags
|
||||
break;
|
||||
case Constants.CDScanFileProtectFlag:
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int sfp1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (sfp1 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
case Constants.ForceUnitAccessFlag:
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int fua1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (fua1 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
case Constants.CDAddOffsetFlag:
|
||||
// If the next item isn't a valid number
|
||||
if (!Int32.TryParse(parts[i + 1], out int af1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case Constants.CDBEOpcodeFlag:
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (parts[i + 1] != "raw"
|
||||
&& (parts[i + 1] != "pack"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
case Constants.CDC2OpcodeFlag:
|
||||
// TODO: Check next (0-4) are valid numbers
|
||||
break;
|
||||
for (int j = 1; j < 4; j++)
|
||||
{
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + j].StartsWith("\\"))
|
||||
{
|
||||
i += (j - 1);
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + j], out int c2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (c2 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Constants.CDSubchannelReadLevelFlag:
|
||||
// TODO: Check next as valid number (0-2)
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int sub))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (sub < 0 || sub > 2)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -1374,17 +1447,72 @@ namespace DICUI
|
||||
// No-op, all of these are single flags
|
||||
break;
|
||||
case Constants.ForceUnitAccessFlag:
|
||||
// TODO: Check next as valid number
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int fua1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (fua1 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
case Constants.CDBEOpcodeFlag:
|
||||
// TODO: Check next as valid (raw/pack)
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (parts[i + 1] != "raw"
|
||||
&& (parts[i + 1] != "pack"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
case Constants.CDC2OpcodeFlag:
|
||||
// TODO: Check next (0-4) are valid numbers
|
||||
break;
|
||||
for (int j = 1; j < 4; j++)
|
||||
{
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + j].StartsWith("\\"))
|
||||
{
|
||||
i += (j - 1);
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + j], out int c2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (c2 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Constants.CDSubchannelReadLevelFlag:
|
||||
// TODO: Check next as valid number (0-2)
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int sub))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (sub < 0 || sub > 2)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -1429,20 +1557,89 @@ namespace DICUI
|
||||
// No-op, all of these are single flags
|
||||
break;
|
||||
case Constants.ForceUnitAccessFlag:
|
||||
// TODO: Check next as valid number
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int fua1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (fua1 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
case Constants.CDScanFileProtectFlag:
|
||||
// TODO: Check if next is a valid number (timeout)
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int sfp1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (sfp1 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
case Constants.CDBEOpcodeFlag:
|
||||
// TODO: Check next as valid (raw/pack)
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (parts[i + 1] != "raw"
|
||||
&& (parts[i + 1] != "pack"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
case Constants.CDC2OpcodeFlag:
|
||||
// TODO: Check next (0-4) are valid numbers
|
||||
break;
|
||||
for (int j = 1; j < 4; j++)
|
||||
{
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + j].StartsWith("\\"))
|
||||
{
|
||||
i += (j - 1);
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + j], out int c2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (c2 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Constants.CDSubchannelReadLevelFlag:
|
||||
// TODO: Check next as valid number (0-2)
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int sub))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (sub < 0 || sub > 2)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -1485,20 +1682,79 @@ namespace DICUI
|
||||
// No-op, all of these are single flags
|
||||
break;
|
||||
case Constants.ForceUnitAccessFlag:
|
||||
// TODO: Check next as valid number
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int fua1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (fua1 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
case Constants.CDAddOffsetFlag:
|
||||
// TODO: Check next as valid number
|
||||
break;
|
||||
// If the next item isn't a valid number
|
||||
if (!Int32.TryParse(parts[i + 1], out int af1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case Constants.CDBEOpcodeFlag:
|
||||
// TODO: Check next as valid (raw/pack)
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (parts[i + 1] != "raw"
|
||||
&& (parts[i + 1] != "pack"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
case Constants.CDC2OpcodeFlag:
|
||||
// TODO: Check next (0-4) are valid numbers
|
||||
break;
|
||||
for (int j = 1; j < 4; j++)
|
||||
{
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + j].StartsWith("\\"))
|
||||
{
|
||||
i += (j - 1);
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + j], out int c2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (c2 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Constants.CDSubchannelReadLevelFlag:
|
||||
// TODO: Check next as valid number (0-2)
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int sub))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (sub < 0 || sub > 2)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -1533,8 +1789,22 @@ namespace DICUI
|
||||
// No-op, all of these are single flags
|
||||
break;
|
||||
case Constants.ForceUnitAccessFlag:
|
||||
// TODO: Check next as valid number
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int fua1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (fua1 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -1559,8 +1829,22 @@ namespace DICUI
|
||||
// No-op, this is a single flag
|
||||
break;
|
||||
case Constants.ForceUnitAccessFlag:
|
||||
// TODO: Check next as valid number
|
||||
break;
|
||||
// If the next item is a flag, it's good
|
||||
if (parts[i + 1].StartsWith("\\"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// If the next item isn't a valid number
|
||||
else if (!Int32.TryParse(parts[i + 1], out int fua1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (fua1 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user