Почему 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 поднимается из-за бессмысленного ввода.

Другие вопросы по тегам