2014-12-22 3 views
-5

Является ли следующий код уязвимым для буфера с потоком. Укажите, какая строка или строки кода являются ошибочными. Попробуйте устранить эту уязвимость.переполнение буфера Идентификация в коде

#include stdio.h 

void manipulate(char *buffer) { 
    char newbuffer[80]; 
    strcpy(newbuffer,buffer); 
} 

int main() { 
    char ch,buffer[4096]; 
    int i=0; 

    while ((buffer[i++] = getchar()) != '\n') {}; 

    i=1; 
    manipulate(buffer); 
    i=2; 
    printf("The value of i is : %d\n",i); 
    return 0; 
} 
+1

Это не похоже на реальный код для меня, а просто для того, чтобы кто-то сбросил с него домашнюю работу. –

+0

домашнее задание на SO – Mohsan

ответ

2
1. while ((buffer[i++] = getchar()) != '\n') 

Вы должны быть уверены, что количество вводимых символов быть меньше, чем 4096. Иначе у вас есть переполнение буфера. При чтении до конца строки было бы лучше использовать fgets(), что намного безопаснее.

2. strcpy(newbuffer,buffer); 

Что делать, если ваш массив buffer заполнен, то у вас есть переполнение буфера, потому что newbuffer не может держать 4096.Use некоторой функции безопасной здесь также для того, чтобы обрабатывать переполнение буфера, как snprintf()

+0

@sami Отвечает ли это на ваш вопрос? Если да, то принимайте это как правильный ответ, чтобы поблагодарить SO – Gopi

0

Использования strncpy() вместо этого. Кроме того, цикл while не должен повторяться больше, чем длина «буфера»

Смежные вопросы