[devel] IA: destination buffer overflow

Damir Shayhutdinov =?iso-8859-1?q?damir_=CE=C1_altlinux=2Eorg?=
Вт Ноя 27 18:25:30 MSK 2007


> > А в итоге получается что компилятор из-за оптимизации запаниковал на
> > ровном месте. Формально он конечно прав, а практически - нет. Это я и
> > считаю несовершенством проверки.
>
> Он и практически прав: поскольку у функции CopyMeToNetworkMe() глобальная
> линковка, нет никаких гарантий того что она будет вызвана правильно.
Угу. А если бы MAX_PLAYERS не было бы равно 1, компилятор бы эту
ошибку вообще пропустил.

Как и у любой проверки, у этой есть ошибки первого и второго родов.

> > Из-за него к каждому предупреждению компилятора приходится подходить
> > индивидуально. Обидно также то, что апстриму необходимость guard-а
> > будет сложно объяснить.
> Моё объяснение может оказаться недостаточно доступно?
Они скажут "а у нас никогда не бывает случая что PlayerNum >=
MAX_PLAYERS". Хотя я не пробовал еще с ними контактировать.

> Альтернативный вариант -- завернуть этот злополучный цикл в #if MAX_PLAYERS > 1.

Возможно, нагляднее и надежнее будет завернуть memcpy в if (WriteIndex
< MAX_PLAYERS), или прям в  условие цикла -

for (i=0; i < MAX_PLAYERS && WriteIndex < MAX_PLAYERS; i++)

Думаю в таком виде у патча больше шансов.


Подробная информация о списке рассылки Devel