oldfart: Остерегайтесь strcmp
и всех неограниченных строковых функций (например, strcpy - но будьте осторожны с strncpy: он не добавляет завершающий NULL).
youngun: Но это нормально, так как argv
содержит несколько завершенных строк NULL!
из: Этот способ мышления приводит к тому, что переполнение буфера помогает в куче. argv
был инициализирован с NULLS. Но с тех пор все могло измениться.
y: Но это небольшая программа, и она никогда не произойдет.
из: Конечно. Программы растут, и «никогда» не случается чаще, чем вы думаете.
y: Хорошо, мистер Параноик, какой размер я должен использовать для ограничения на strncmp
? Там нет очевидного числа для использования! Вы предлагаете мне что-нибудь придумать?
из: См. Limit.h, в частности ARG_MAX
и _POSIX_ARG_MAX
для возможных максимальных значений. Вы можете использовать меньшие значения, если хотите. Если вы это сделаете, задокументируйте это .
y: Итак, я должен написать strncmp( arg, target, 5000 )
? Хорошо, мистер параноик.
из: Не делай этого! #define APP_MAX_ARG 5000
и затем используйте strncmp( arg, target, APP_MAX_ARG )
. Не заводи меня на магические числа. Дети в эти дни.
из: Эй, малыш, Сойди с моего газона .