2015-06-04 5 views
-2

У меня есть такой код C, и после первого ввода, если я ввешу большую строку, наконец, последние символы выполняются как команда в моей Linux Shell, которая может использоваться для инъекции команды, как я нашел чтение() функция является основной причиной, почему это происходит, но не понимает, почему, val это просто INT:C function read() приводит к вводу команды

if (val > 0) { 

    struct in_addr *addr; 
    int addrMultVal = val*sizeof(*addr); 
    char *buf2 = malloc(addrMultVal); 
    for (i = 0; i < val; i++) {    
     if (read(0, buf2, sizeof(*addr)) < 0) { 
      return 0; 
     } 
    } 
    done = 1; 
} 
+0

'INT addrMultVal = VAL * SizeOf (адрес);' следует 'INT addrMultVal = значение * SizeOf (* адрес);' – EOF

+0

@LPs он говорит, что: ошибка: 'in_addr' необъявленную – Shota

+0

Вы имеете в виду ' sizeof (* addr) 'позже, поэтому выражение должно быть в порядке. Можете ли вы просто изменить свой вопрос, чтобы точно показать, как выглядит ваш код после изменения? – Useless

ответ

2

Вашего addrMultVal переменных должна рассчитывать размер самих тип addr, то у вас есть sizeof(*addr)

Ваш код, sizeof(addr), возвращает вам размер указателя, который вероятно, 4.

Обратите также внимание, что read() не добавляет '\0', чтобы завершить его, чтобы сделать его строкой (просто дает необработанный буфер).

+0

Но это приводит к: error: 'in_addr' undeclared – Shota

+0

@Shota Я отредактировал. Не могли бы вы написать 'struct in_addr' – LPs

+0

Спасибо, должно быть так, но команда впрыска все еще происходит. – Shota

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