Почему HttpServerUtility.UrlTokenDecode не генерирует исключение, когда не находит символ заполнения?
Итак, давайте бросим бессмысленную строку в HttpServerUtility.UrlTokenDecode
и убедитесь, что он заканчивается цифрой 0-9:
HttpServerUtility.UrlTokenDecode("fu&+bar0");
и он взрывается с FormatException
,
Теперь давайте попробуем то же самое без номера в конце:
HttpServerUtility.UrlTokenDecode("fu&+bar");
Никаких исключений не происходит, и метод возвращает ноль
Я понимаю, что символ в конце предназначен для представления количества дополняющих символов, которые могут возникнуть, когда строка закодирована в base64, и что по алгоритму это может быть только цифрой от 0 до 9, как мы можем смотрите в этом декомпилированном коде:
int num = (int) input[length - 1] - 48;
if (num < 0 || num > 10)
{
return (byte[]) null;
}
Итак, мой вопрос: почему этот метод возвращает ноль при передаче определенного типа поврежденного токена, но выдает исключение, когда встречается другой тип повреждения? Есть ли обоснование этому решению, или это просто случай небрежной реализации?
1 ответ
Вы можете просмотреть исходный код для HttpServerutility.UrlTokenDecode
сам.
Но, по существу, когда в конце ввода присутствует число, оно проходит первый этап оценки и передается в процедуры декодирования Base64. Внутри этих процедур, где FormatException
поднимается из-за бессмысленного ввода.