- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
int
grub_auth_strcmp (const char *user_input, const char *template)
{
int ok = 1;
const char *ptr1, *ptr2;
for (ptr1 = user_input, ptr2 = template; *ptr1; ptr1++)
if (*ptr1 == (ptr2 ? *ptr2 : ptr1[1]) && ok && ptr2 != NULL)
ptr2++;
else
ok = 0;
return !ok;
}
Ещё меня лично напрягает, когда цикл проходит до конца, не смотря на то, что ok уже может быть выставлен на ноль. Я бы прерывал цикл при первом же несовпадении.
Хотя вы правы, конкретно в данной реализации, данная функция нах не нужна, в худшем случае можно было и заглушку поставить, если это промежуточный вариант функции. :(
Чувак, это загрузка ядра. libc там не очень как бы доступен.
Разрабы grub'а мучаются насчёт того, что по длительности работы этой функции можно определить, какой символ не совпал (грубо говоря, не совпал первый символ - функция проработала 1 мс, не совпал десятый - 10 мс). В новой реализации они на что-то вроде (100 - n) мс делают sleep :)
где ошибка в логике? почему принимается любвя подстрока?