The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Обобщение опыта Coverity по статистическому анализу миллиард..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от opennews (??) on 15-Фев-10, 15:28 
Разработчики системы для автоматизированного выявления ошибок Coverity опубликовали статью (http://cacm.acm.org/magazines/2010/2/69354-a-few-billion-lin...), в которой обобщили наиболее важные выводы о природе возникновения ошибок в реальных проектах. Приводится пример важности обнаружения трудноуловимых глупых ошибок, вызванных невнимательностью разработчиков, но часто приводящих к серьезным последствиям. Например конструкция "if(getuid() !=0 && geteuid == 0){ErrorF("only root");exit(1);}" вызвала серьезную уязвимость в X-сервере, так как использование "geteuid" вместо "geteuid()" привело к сравнению указателя на функцию, который никогда не равен 0, соответственно условие всегда было ложным.

URL: http://cacm.acm.org/magazines/2010/2/69354-a-few-billion-lin...
Новость: http://www.opennet.dev/opennews/art.shtml?num=25423

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от Аноним (??) on 15-Фев-10, 15:28 
Какой ужас, неужели это

if(getuid() !=0 && geteuid == 0){}

написал человек, что он хотел тут проверить?
интересно, это сама программа нашла эту ошибку или она выдёт подозрительные строчки?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от аноним on 15-Фев-10, 16:19 
> написал человек, что он хотел тут проверить?

А что непонятного?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

8. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от Zulu on 15-Фев-10, 17:47 
хотел проверить, не через sudo/suid-бинарник ли мы запустились.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от ffsdmad (ok) on 15-Фев-10, 15:41 
if(pow(2, 2) !=0 && pow(2, 2) == 0){ printf(не послать ли нам гонца за бутылочкой винца"); }
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +2 +/
Сообщение от uldus (ok) on 15-Фев-10, 15:46 
>if(pow(2, 2) !=0 && pow(2, 2) == 0){ printf(не послать ли нам
>гонца за бутылочкой винца"); }

getuid не тождественно getEuid

Должно было быть:
if(getuid() !=0 && geteuid() == 0){}
но скобки забыли

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

11. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от pavlinux (ok) on 15-Фев-10, 22:38 
Моск огни забыли.  Надо код прогонять с -Wall -Werror

# gcc test.c -Wall -Werror
cc1: warnings being treated as errors
test.c: В функции ‘main’:
test.c:8: ошибка: the address of ‘geteuid’ will never be NULL

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

17. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от F.Y. on 16-Фев-10, 02:50 
X с -wall'ом не собираются :) (Почти шутка)
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

9. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от Аноним (??) on 15-Фев-10, 18:09 
только я не увидел e ?
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

19. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от Аноним (??) on 16-Фев-10, 07:40 
Нет, не только..
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

10. "C vs Pascal"  +2 +/
Сообщение от bw email(??) on 15-Фев-10, 20:56 
Больше стоит винить сам язык, а не кодеров. Неявное преобразование типов и т.д. В том же Pascal'е, как бы его сильно не любили, такую ошибку допустить невозможно дважды (указатель не может иметь значения 0 и если мы хотим работать с адресом функции, а не с её результатом, то так и придется говорить компилятору - @).

..bw

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

12. "C vs Pascal"  +/
Сообщение от pavlinux (ok) on 15-Фев-10, 22:52 
> указатель не может иметь значения 0

Опа! Указатель не имеет значения, он указывает :)

int main() {

        int var = 0;
        int *p = 0;
        int *pp = 0;

        p = &var;
        pp = p;
        p  = 0;

return 0;
}

Чё страшного-то?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

13. "C vs Pascal"  +/
Сообщение от Mna (??) on 16-Фев-10, 00:31 
Нет, никогда не стоит винить язык вместо самих кодеров.

В том же Poscacal-е
1.
> указатель не может иметь значения 0,

но может и часто имеет значение nil, как пример:
if GetUIDPtr() <> nil and GetEUIDPtr = nil then begin end;

2.
> то там всегда надо говорить компилятору - @

а в C нужно вставлять &, не обязательно, правда, но так сделано для удобства.

Дело в том, что в С работают-таки с указателями, в отличии от Паскаля. Единственный Паскаль в котором можно нормально работать с указателями - это Борландовские паскали, в которых от паскаля один лишь С и остался.

Потому причина ошибок не в языке, а в конкретных кодерах.
No silver bullet

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

14. "C vs Pascal"  +/
Сообщение от pavlinux (ok) on 16-Фев-10, 01:26 
> ...  GetEUIDPtr = nil then begin end;

"=" или "=="

Ах да, в паскале присваивание это ":="


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

18. "C vs Pascal"  +/
Сообщение от ram_scan on 16-Фев-10, 06:23 
В паскале ваша конструкция компилироваться не будет и язык вам ошибку сделать не даст.

Если это функция без аргументов, то скобки там лишние. Это во первых.

Во вторых, как утверждал один из ораторов выше, взятие адреса функции выполняется отдельным оператором.

Поэтому как ни пиши, и сравнивай хоть с нулем хоть с Nil - будет два вызова функции.

Строгая типизация - рулит.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

22. "C vs Pascal"  +/
Сообщение от Mna (??) on 20-Фев-10, 21:36 
>В паскале ваша конструкция компилироваться не будет

В этом и point: Паскаль - для бумажным программистов. Указателя в жизни не нюхавших.
Потому и работа с указателями с нем - неудобна.

и компилироваться не будет, но какой ценой?

> Это во первых.

Pascal compiler detected!! :)

>
>Во вторых, как утверждал один из ораторов выше, взятие адреса функции выполняется
>отдельным оператором.

это то же самое "во-первых". :)

>Поэтому как ни пиши, и сравнивай хоть с нулем хоть с Nil
>- будет два вызова функции.

для сравнения указателей функция не вызывается ни в каком себя уважающем языке :)
даже в паскале. Вы наверное так и не вышли за ментальные рамки Виртуальной-Паскаль-машины.


>Строгая типизация - рулит.

Но только для студентов первого курса.

Учитывая акселерацию, сейчас - для нулевого..

В реальных задачах это больше помеха: компилятор никогда не умнее программиста. Программист компилирует свои знания в исходный код. чем высокоуровнее этот код тем всем лучше. а если не так, то пишите на ассемлере...нет, в машинных кодах.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

15. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от pavlinux (ok) on 16-Фев-10, 01:33 
Скажите люди, кто-нибудь, когда-нибудь эту Coverity юзал.

Я кроме их рекламных достижений ничего и не знаю.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

20. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от Евгений (??) on 16-Фев-10, 08:27 
Это статический анализатор кода.

У нас в компании используется: для С и C++ кода. Весьма полезная штука.
И весьма продвинутая.
Для маломальски крупных проектов нужно иметь что-то подобное.

Кстати, простенький вариант статического анализатора: http://cppcheck.sourceforge.net/

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

21. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от pavlinux (ok) on 18-Фев-10, 01:23 
>Это статический анализатор кода.

Что это таке, я знаю. Но кроме слухов и радостных, слюниипускающих рассказов не слышал :)

>У нас в компании используется: для С и C++ кода. Весьма полезная штука.
>И весьма продвинутая.

Дайте поиграться...
>Для маломальски крупных проектов нужно иметь что-то подобное.
>Кстати, простенький вариант статического анализатора: http://cppcheck.sourceforge.net/

видали, юзали, ...

Я юзаю связку splint + rats + its4 + flawfinder +  pscan + gibberish + boot + mops + bogosec + boon + ckit + magic + valgrid + smatch :)

Но так достало их постоянно настраивать ...

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

16. "Обобщение опыта Coverity по статистическому анализу миллиард..."  +/
Сообщение от lynx (??) on 16-Фев-10, 01:35 
это же Pascal, там нет == ;P
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру