наложить ограничения на размер буфера - PullRequest
1 голос
/ 17 января 2011

Есть ли any способ, которым я могу наложить ограничение на размер буфера символов таким образом, чтобы никакие операции с буфером не приводили к доступу за пределы допустимого?

Ответы [ 4 ]

3 голосов
/ 17 января 2011

Короче говоря: Нет

C не выполняет никаких проверок во время выполнения, если вы не выполняете их вручную.

Вы можете использовать свои собственные функции, макросы и буферизацию дляЗащита от недопустимых доступов.Однако вам придется использовать этот интерфейс везде , что означает, что вы потеряете прямой доступ к этому буферу.

Вы также увидите влияние на производительность из-за дополнительных проверок условий.Возможно, вам удастся избежать этого, используя прямой доступ к ветвям кода, которые, как доказано, не вызывают выходов за границы.

РЕДАКТИРОВАТЬ:

Существует также довольно важный вопрос:msgstr "что должен делать код после обнаружения недопустимого доступа".Должна ли ваша программа вывести ошибку и выйти, как если бы она столкнулась с исключением на других языках?Должен ли он игнорировать ошибку?Должен ли он попытаться это исправить?

Способ решения этой проблемы на языке C состоит в том, чтобы проанализировать ситуацию и убедиться, что каждая ветвь / часть кода заранее безопасна, а не проверять каждый доступ.

1 голос
/ 10 марта 2011

См. Нашу проверку безопасности памяти , которая использовалась в качестве средства отладки, инструментарий вашего кода C, чтобы определить, если вы делаете какие-либо ошибки с массивами или буферами.Это находит проблемы, которые valgrind не может.

1 голос
/ 17 января 2011

Краткий ответ: Нет.

Длинный ответ:
Чтобы даже что-то глупое, например, buffer[ULLONG_MAX] не выходило за пределы, вам нужно объявить буфер с границей, превышающей наибольшее целое число, представляемое в системе. Это, очевидно, невозможно, за исключением объема памяти, необходимого для такого буфера.

Практическое решение заключается в том, что вы вручную отслеживаете размер вашего буфера, и любая ненадежная индексация в буфере сверяется с размером буфера.

1 голос
/ 17 января 2011

Это может помочь: http://duma.sourceforge.net/ в вашем квесте.

...