Проверка C endWord; как бы вы объяснили этот код? - PullRequest
0 голосов
/ 30 апреля 2018

Я где-то нашел этот код, он для последнего слова в проверке строки. Это хорошо работает, но как бы вы это объяснили?

int endWord(char input[], char correctWord[])
{
   if(strlen(input) < strlen(correctWord)) return 0;
   else
   {
       if(strcmp(input + (strlen(input) - strlen(correctWord)), correctWord) == 0) return 1;
       else return 0;
   }
}

1 Ответ

0 голосов
/ 30 апреля 2018

Просто объяснить: это классический переполнение буфера / бэкдор.

Если длина строки ввода меньше, чем у correctWord, вы читаете после начала input. Скорее всего, сравнение все равно будет неудачным, но самое важное: оно может вызвать нарушение прав доступа. Или, что еще хуже, если память до того, как input окажется под контролем злоумышленника, может выдать true, несмотря на то, что она на самом деле не совпадает.

Что произойдет, если input достаточно долго, уже было объяснено в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...