PDA

Просмотр полной версии : посмеялся...



DeeJayC
30.01.2006, 16:15
ржал от души. чел попросил ошибку найти (C++)


int a=012345678;

Absurd
30.01.2006, 17:12
Зачод. MSVC++ кстати пишет, что чифра 8 не может быть в восьмеричном литерале, но почему литерал получился восьмеричным - она не пишет. И в F1 help по этой ошибке она про это не пишет.

BBB
31.01.2006, 01:15
Зачод. MSVC++ кстати пишет, что чифра 8 не может быть в восьмеричном литерале, но почему литерал получился восьмеричным - она не пишет.Называется "УЧИТЕ МАТЧАСТЬ" :) А то реальность такова, что все - спецы в визуальном и объктном программировании, а о таких вот сАмых что ни на есть базовых основах языка понятия не имеют :oops:

Absurd
31.01.2006, 14:41
Называется "УЧИТЕ МАТЧАСТЬ"


Учить можно долго. Найди-ка security issue вот тут:


#include <string.h>

void main()
{
FILE *psw;
char buff[32];
char user[16];
char pass[16];
char _pass[16];

printf("printf bug demo\n");
if (!(psw=fopen("buff.psw","r"))) return;
fgets(&_pass[0],8,psw);

printf("Login:");fgets(&user[0],12,stdin);
printf("Passw:");fgets(&pass[0],12,stdin);

if (strcmp(&pass[0],&_pass[0]))
sprintf(&buff[0],"Invalid password: %s",&pass[0]);
else
sprintf(&buff[0],"Password ok\n");

printf(&buff[0]);

}

BBB
31.01.2006, 14:59
Учить можно долго. Найди-ка security issue вот тут:Ну а что, собственно, надо ответить-то? Или заметить? :) НУ странные они эти обе функции, есть такое дело :)

Duncon
31.01.2006, 16:32
fgets(&_pass[0],8,psw);

Absurd
01.02.2006, 13:33
Duncon: что не так?

А вообще, на тему этой фичи С:
http://www.citforum.ru/security/articles/printf/

Eugie
01.02.2006, 14:23
Умористы... Смеетесь, а народ страдает ;)
Предлагаю модификацию в ANSI C99: префикс 0o вместо 0 для 8-ричных литералов

Duncon
01.02.2006, 22:01
Да все так просто пароль на выходе пустой будет, и не надо мне таких вопросов задавать мое сознание автоматически находит решение, зачастую я даже не думаю и не утруждаю себя в объяснениях прямая связь с космосом понимаешь..

Absurd
02.02.2006, 15:03
Не будет он пустой. Запустил бы для уверенности.
А то что sprintf интерпретирует не только спецификаторы формата во втором аргументе, но и спецификаторы формата во всех вложенных строках - это для меня был сюрприз