1.1, Аноним (-), 15:28, 15/02/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Какой ужас, неужели это
if(getuid() !=0 && geteuid == 0){}
написал человек, что он хотел тут проверить?
интересно, это сама программа нашла эту ошибку или она выдёт подозрительные строчки?
| |
|
2.5, аноним (?), 16:19, 15/02/2010 [^] [^^] [^^^] [ответить]
| +/– |
> написал человек, что он хотел тут проверить?
А что непонятного?
| |
2.8, Zulu (?), 17:47, 15/02/2010 [^] [^^] [^^^] [ответить]
| +/– |
хотел проверить, не через sudo/suid-бинарник ли мы запустились.
| |
|
1.2, ffsdmad (ok), 15:41, 15/02/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
if(pow(2, 2) !=0 && pow(2, 2) == 0){ printf(не послать ли нам гонца за бутылочкой винца"); }
| |
|
2.3, uldus (ok), 15:46, 15/02/2010 [^] [^^] [^^^] [ответить]
| +2 +/– |
>if(pow(2, 2) !=0 && pow(2, 2) == 0){ printf(не послать ли нам
>гонца за бутылочкой винца"); }
getuid не тождественно getEuid
Должно было быть:
if(getuid() !=0 && geteuid() == 0){}
но скобки забыли
| |
|
3.11, pavlinux (ok), 22:38, 15/02/2010 [^] [^^] [^^^] [ответить]
| +/– |
Моск огни забыли. Надо код прогонять с -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
| |
|
|
1.10, bw (??), 20:56, 15/02/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +2 +/– |
Больше стоит винить сам язык, а не кодеров. Неявное преобразование типов и т.д. В том же Pascal'е, как бы его сильно не любили, такую ошибку допустить невозможно дважды (указатель не может иметь значения 0 и если мы хотим работать с адресом функции, а не с её результатом, то так и придется говорить компилятору - @).
..bw
| |
|
2.12, pavlinux (ok), 22:52, 15/02/2010 [^] [^^] [^^^] [ответить]
| +/– |
> указатель не может иметь значения 0
Опа! Указатель не имеет значения, он указывает :)
int main() {
int var = 0;
int *p = 0;
int *pp = 0;
p = &var;
pp = p;
p = 0;
return 0;
}
Чё страшного-то?
| |
2.13, Mna (??), 00:31, 16/02/2010 [^] [^^] [^^^] [ответить]
| +/– |
Нет, никогда не стоит винить язык вместо самих кодеров.
В том же Poscacal-е
1.
> указатель не может иметь значения 0,
но может и часто имеет значение nil, как пример:
if GetUIDPtr() <> nil and GetEUIDPtr = nil then begin end;
2.
> то там всегда надо говорить компилятору - @
а в C нужно вставлять &, не обязательно, правда, но так сделано для удобства.
Дело в том, что в С работают-таки с указателями, в отличии от Паскаля. Единственный Паскаль в котором можно нормально работать с указателями - это Борландовские паскали, в которых от паскаля один лишь С и остался.
Потому причина ошибок не в языке, а в конкретных кодерах.
No silver bullet
| |
|
3.14, pavlinux (ok), 01:26, 16/02/2010 [^] [^^] [^^^] [ответить]
| +/– |
> ... GetEUIDPtr = nil then begin end;
"=" или "=="
Ах да, в паскале присваивание это ":="
| |
|
4.18, ram_scan (?), 06:23, 16/02/2010 [^] [^^] [^^^] [ответить]
| +/– |
В паскале ваша конструкция компилироваться не будет и язык вам ошибку сделать не даст.
Если это функция без аргументов, то скобки там лишние. Это во первых.
Во вторых, как утверждал один из ораторов выше, взятие адреса функции выполняется отдельным оператором.
Поэтому как ни пиши, и сравнивай хоть с нулем хоть с Nil - будет два вызова функции.
Строгая типизация - рулит.
| |
|
5.22, Mna (??), 21:36, 20/02/2010 [^] [^^] [^^^] [ответить]
| +/– |
>В паскале ваша конструкция компилироваться не будет
В этом и point: Паскаль - для бумажным программистов. Указателя в жизни не нюхавших.
Потому и работа с указателями с нем - неудобна.
и компилироваться не будет, но какой ценой?
> Это во первых.
Pascal compiler detected!! :)
>
>Во вторых, как утверждал один из ораторов выше, взятие адреса функции выполняется
>отдельным оператором.
это то же самое "во-первых". :)
>Поэтому как ни пиши, и сравнивай хоть с нулем хоть с Nil
>- будет два вызова функции.
для сравнения указателей функция не вызывается ни в каком себя уважающем языке :)
даже в паскале. Вы наверное так и не вышли за ментальные рамки Виртуальной-Паскаль-машины.
>Строгая типизация - рулит.
Но только для студентов первого курса.
Учитывая акселерацию, сейчас - для нулевого..
В реальных задачах это больше помеха: компилятор никогда не умнее программиста. Программист компилирует свои знания в исходный код. чем высокоуровнее этот код тем всем лучше. а если не так, то пишите на ассемлере...нет, в машинных кодах.
| |
|
|
|
|
1.15, pavlinux (ok), 01:33, 16/02/2010 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Скажите люди, кто-нибудь, когда-нибудь эту Coverity юзал.
Я кроме их рекламных достижений ничего и не знаю.
| |
|
2.20, Евгений (??), 08:27, 16/02/2010 [^] [^^] [^^^] [ответить]
| +/– |
Это статический анализатор кода.
У нас в компании используется: для С и C++ кода. Весьма полезная штука.
И весьма продвинутая.
Для маломальски крупных проектов нужно иметь что-то подобное.
Кстати, простенький вариант статического анализатора: http://cppcheck.sourceforge.net/
| |
|
3.21, pavlinux (ok), 01:23, 18/02/2010 [^] [^^] [^^^] [ответить]
| +/– |
>Это статический анализатор кода.
Что это таке, я знаю. Но кроме слухов и радостных, слюниипускающих рассказов не слышал :)
>У нас в компании используется: для С и C++ кода. Весьма полезная штука.
>И весьма продвинутая.
Дайте поиграться...
>Для маломальски крупных проектов нужно иметь что-то подобное.
>Кстати, простенький вариант статического анализатора: http://cppcheck.sourceforge.net/
видали, юзали, ...
Я юзаю связку splint + rats + its4 + flawfinder + pscan + gibberish + boot + mops + bogosec + boon + ckit + magic + valgrid + smatch :)
Но так достало их постоянно настраивать ...
| |
|
|
|