2015-06-08 6 views
0

Итак, давайте отбросим строку нонсенс в HttpServerUtility.UrlTokenDecode и убедитесь, что она заканчивается на цифру 0-9:Почему HttpServerUtility.UrlTokenDecode генерирует исключение, если оно не находит символ заполнения?

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