Лекция: Рассуждения по большей части применимы как к компилируемым, так и к интерпретируемым программам.
Во-первых, самая распространенная ошибка для программистов на С/ C++, как обычно, связана с
возможностью переполнения буфера (см. главу 9). Эта проблема особенно характерна для С/С++, поскольку
Программисту на Peri нет необходимости заботиться о ручном выделении памяти под строки.
Например, для получения данных, переданных методом POST, можно написать следующий код: char buff
[4096],
int length = atoi(getenv(«CONTENT_LENGTH»)); fread(buff, 1, length,
Stdin);
Возможное переполнение буфера налицо. Справиться с этой проблемой очень легко — достаточно
динамически выделить буфер требуемой длины:
Int length = atol(getenv( «CONTENT_LENGTH» ) ): char* buff = new
char[length]: lf(buff) fread(buff, 1, length, stdin);
Потенциально опасны многие строковые функции, определяющие конец строки по завершающему нулю.
Поэтому вместо функций strcpy, strcat, stremp и т. п. настоятельно рекомендуется использовать их аналоги
Strncpy, strncat, strncmp, позволяющие указать максимальное количество обрабатываемых символов.
Казалось бы, можно ограничить объем вводимой информации указанием соответствующих параметров в
Тэгах формы, но это еще одно очень опасное заблуждение, которого мы коснемся чуть позже.
Возможно, именно из-за необходимости постоянно контролировать размер буфера многие начинающие (и не