LINUX.ORG.RU
ФорумTalks

Microsoft планирует забанить memcpy()


0

0

В связи с потенциальной опасностью Microsoft планирует забанить функции memcpy(), CopyMemory() и RtlCopyMemory(). Бан будет заключаться в выводе предупреждений C4996 при компилировании кода с параметром /W4. Код, соответствующий Security Development Lifecycle (SDL) не должен выводить таких предупреждений при компиляции и не должен пытаться их запрещать такими макросами как #pragma warning(disable:4996)

В качестве альтернативы предлагается использовать функцию memcpy_s(), которая уже реализована в Visual C++. В gcc нативной поддержки memcpy_s() пока нет.

Подробности

Перемещено maxcom из Security

★★★★★

Ответ на: комментарий от anonmyous

> За такие хаки он вряд ли распишется, да и, думаю, там ещё много чего есть, через что ЭТО не пройдёт. Но читать не охота. :)

комиссии, которая действительно в состоянии отличить memcpy_s(dstPtr, dstSize, srcPtr, srcSize) от memcpy_s(dstPtr, someSize, srcPtr, someSize) и { char srcBuf[BUF_SIZE], dstBuf[BUF_SIZE]; [...] memcpy_s(dstBuf, BUF_SIZE, srcBuf, BUF_SIZE); } будет проще определить, проверяются ли dstPtr и srcPtr на NULL и dstDize >= srcDize (и возможно ли такое вообще) перед вызовом memcpy(). кроме того, от классического переполнения буффера, когда неверно считаются dstPtr и dstSize, этот костыль ну никак не спасёт. очередное увеличение популяции коней сферической окраски в вакуумной среде обитания, не более ^_^'

arsi ★★★★★
()
Ответ на: комментарий от ZloySergant

> А при чем здесь Linux?

Действительно. Мне вот как-то не хочется получать по rss новости про Мелкософт, которые тему GNU/Linux никак не затрагивают.

Xandry
()
Ответ на: комментарий от k0l0b0k

> Новость не достойна даже толксов.

Вовсе нет.

1. поржать над микрософт

2. почитать расширения жцц (да, сейчас сижу читаю...)

www_linux_org_ru ★★★★★
()

вот еще про быдлокодеров из мс, который вместо того чтоб латать дыры в своих продуктах переучивают людей под свои баги. (взято с МСДН):

"Более того, метод Execute позволяет получить список файлов, отсортированный по реквизитам файлов: именам, типам, дате последней модификации и размеру. Так что найти последний измененный файл можно очень просто.

Однако тестирование показало, что в Word 2000 сортировка именно по дате модификации почему-то не работает. Но дальнейшие исследования выявили, что она начинает работать (!) после выполнения поиска с сортировкой по размеру файлов. Такой вариант работает корректно."

daemonpnz ★★★★★
()
Ответ на: комментарий от daemonpnz

Андрей Колесов, Ольга Павлова

© Андрей Колесов, Ольга Павлова, 2001
Авторский вариант. Статья была опубликована c незначительной литературной правкой в журнале "КомпьютерПресс" N 05/2001, CD-ROM.

www.visual.2000.ru/develop/ms-vb/tips/0105.htm

Ну очень МСДН-ый МСДН. Троллить не хорошо!

bbk123 ★★★★★
() автор топика
Ответ на: комментарий от GotDotNet

И где же взять это сферическое поделие в ваккуме?

kapsh
()

Может сразу на Java перейти там так все и работает и нет прямых указателей и все безопасно.

fAngel
()

<боян>Когда-нибудь они все таки объявят темноту стандартом </боян>
Некрософт призывает нас обратить внимание на проблемы рукожоп^W быдлокодеров. Будем считать, что это accessbility.

unikoid ★★★
()

Прошу прощения, а что такое Windows и кто такие эти Microsoft? Кому оно ваще надо в 21-м веке? Или еще остались идиоты, которые под эту допотопную срань пишут программы? :)

alukin
()

Новость сплошной LOL :) Этож как надо было накуриться, чтоб сделать из того "новость" и подтвердить ее

lester ★★★★
()

Кстати, я всегда считал что на MSVC memcpy это intrinsic-функция которую компилятор заменяет на rep stosw или что-то в этом роде.

Absurd ★★★
()
Ответ на: комментарий от arsi

>#define memcpy_s(dstPtr, dstSize, srcPtr, srcSize) \ ((!(srcPtr) || !(dstPtr) || (dstSize) < (srcSize)) ? \ EINVAL : 0 * (int)memcpy(dstPtr, srcPtr, srcSize))

> по сцылке же всё написано...

Это серьезно код микрософта ? Просто по ссылке данного кода не нашел. Сей код абсолютно не рабочий.

vtVitus ★★★★★
()
Ответ на: комментарий от alukin

> Прошу прощения, а что такое Windows и кто такие эти Microsoft? Кому оно ваще надо в 21-м веке? Или еще остались идиоты, которые под эту допотопную срань пишут программы? :)

Толсто.

Но если так интересно - могу ответить. Пишут. И очень много пишут. И очень много заказчиков, которые согласны платить только за программы, написанные "под эту допотопную срань", а никакой линукс, макос и *бзд им не упёрлись.

И Микрософту крайне важно поддержать пропасть между программами, написанными "под эту допотопную срань" и программами, написанными под всё остальное. Чтоб думать не смели о какой-то кроссплатформенности.

Это к вопросу, какое отношение новость имеет к Линуксу.

Всегда Ваш, вр.и.о. Капитана Очевидность

hobbit ★★★★★
()

А как эта функция спасет от кривого кодирования индусских и африканских программистов? Например так:

int main() { char buffer[] = "khjviu9v 456456"; myfunc(&buffer);

return 0; }

int myfunc(char *buffer) { char buffer1[3];

int len = strchr(buffer, ' ') - buffer; memcpy_s(buffer, buffer1, 0, len);

return 0; }

ozzman
()

потролю :)

В связи с потенциальной опасностью Microsoft все сообщество нормальных разработчиков предлагает забанить MSVC и быдлокодеров. В качестве альтернативы предлагается использовать нормальных, высокооплачиваемых программистов, которые уже пишут кучу кода для OpenSource. В Microsoft нативной поддержки нормальных программистов пока нет.

ozzman
()
Ответ на: комментарий от daemonpnz

> пруфлинк http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/VBA/367.mspx

Это тоже самое:

http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Default.mspx

В этом разделе помещен архив статей Андрея Колесова и Ольги Павловой «Программирование в среде Microsoft Visual Basic — это вполне доступно», опубликованных в журнале «КомпьютерПресс» с 1996 по 2002 год.

bbk123 ★★★★★
() автор топика
Ответ на: комментарий от bbk123

Ну ладно, хотите реальный пример приучения программистов к багам MS? Их есть у меня.

> The format call may fail for counters that require only a single value when the instance is not found. Try calling the query and format calls again. If the format call fails the second time, the instance is not found.

http://msdn.microsoft.com/en-us/library/aa372637(VS.85).aspx

Перевожу: функция может вернуть ошибку просто так, вызовите её на всякий случай ещё раз, и если она опять вернёт ошибку, значит входные параметры действительно ошибочны.

С нетерпением жду комментариев :)

voronaam ★★
()
Ответ на: комментарий от voronaam

Ну и на закуску, как MS приучает пользователей к своим багам.

http://support.microsoft.com/kb/886217

Перевод: у нас от рождения кривой WM, он криво управляет окнами, мы не собираемся её исправлять, если вам не нравится, то вот вам реестр в зубы, может поможет.

И в завершение мораль: не стоит следовать рекомендациям MS. Это дорога в один конец, и этот конец вас не обрадует.

voronaam ★★
()
Ответ на: комментарий от bbk123

>В этом разделе помещен архив статей Андрея Колесова и Ольги Павловой «Программирование в среде Microsoft Visual Basic — это вполне доступно», опубликованных в журнале «КомпьютерПресс» с 1996 по 2002 год.

Если это помещено на сайте негрософта, то значит M$ официально поддерживает политику быдлокодерства индусских и африканских спецов-быдлопрогеров.

daemonpnz ★★★★★
()
Ответ на: комментарий от daemonpnz

>В этом разделе помещен архив статей Андрея Колесова и Ольги Павловой «Программирование в среде Microsoft Visual Basic — это вполне доступно», опубликованных в журнале «КомпьютерПресс» с 1996 по 2002 год.

а Андрея Колесов и Ольга Павлова - это наверное псевдонимы каких нить индусов профессионально быдлокодящих в быдлоподелках от быдло-негро-мелко-мягко-софта.

daemonpnz ★★★★★
()

>В gcc нативной поддержки memcpy_s() пока нет

#define memcpy_s( a, b, c, d ) memcpy( a, c, d )

Теперь есть, пользуйтесь.

devinull ★★
()
Ответ на: комментарий от Kremljad

>а сам ты, неиндус, как кодишь?

Судить не берусь. Заказчики пока не жаловались. Правд по долгу работы приходится кодить в 1С.

daemonpnz ★★★★★
()
Ответ на: комментарий от ZloySergant

> А при чем здесь Linux?

Проплаченный пиар M$ на ЛОРе?

vold ★★★★★
()
Ответ на: комментарий от jackill

> Забанить = запретить.
> Учите русский.

Слово бан и его производные - это иностранное заимствование, которое используете даже вы.
Поэтому начните с себя.

bbk123 ★★★★★
() автор топика
Ответ на: комментарий от vtVitus

> Это серьезно код микрософта ?
> Просто по ссылке данного кода не нашел.

не удивлюсь, если у них реализовано нечто подобное =)
«по сцылке» написано, как и на что должна реагировать функция,
с табличкой. макрос я по ней и написал.

> Сей код абсолютно не рабочий.

код вполне рабочий, только варнинги при компиляции
выдаёт на 64-битной системе.
нужно заменить приведение к int на приведение к size_t.
хотя да, был один глюк: не ту ошибку возвращало при dstSize < srcSize.

пример кода:

#include <stdio.h>
#include <memory.h>
#include <errno.h>

#define memcpy_s(dstPtr, dstSize, srcPtr, srcSize) \
        (!(srcPtr) || !(dstPtr) ? EINVAL : (dstSize) < (srcSize) ? \
        ERANGE : 0 * (size_t)memcpy(dstPtr, srcPtr, srcSize))

#define TEST(cmd) printf(#cmd " == %d\n", cmd)

int main() {
        char a[20], b[10];
        TEST(memcpy_s(a, sizeof(a), b, sizeof(b)));
        TEST(memcpy_s(b, sizeof(b), a, sizeof(a)));
        TEST(memcpy_s(NULL, sizeof(a), b, sizeof(b)));
        TEST(memcpy_s(a, sizeof(a), NULL, sizeof(b)));
        printf("EINVAL == %d, ERANGE == %d\n", EINVAL, ERANGE);
        return 0;
}


$ gcc -o test test.c
$ ./test
memcpy_s(a, sizeof(a), b, sizeof(b)) == 0
memcpy_s(b, sizeof(b), a, sizeof(a)) == 34
memcpy_s(NULL, sizeof(a), b, sizeof(b)) == 22
memcpy_s(a, sizeof(a), NULL, sizeof(b)) == 22
EINVAL == 22, ERANGE == 34

arsi ★★★★★
()
Ответ на: комментарий от daemonpnz

>Правд по долгу работы приходится кодить в 1С

С каких пор, жалкое поделие от 1ц является языком программирования?

ak762
()
Ответ на: комментарий от ak762

А что вы можете предложите какой либо аналог? (Писать все с нуля не предлагать, мне денег столько не платят, да и времени столько не дадут, чтобы я написал с нуля на вменяемом языке под нашу специфику что то подобное конфе "Производство+Услуги+Бухгалтерия" от 1С)

daemonpnz ★★★★★
()
Ответ на: комментарий от bbk123

Вроде бы злостный оффтоп, но тема такая...

> Там написано, что в Win2K3 это исправлено. Продолжай искать.

В vista там похожий баг есть, оно может выдать ошибку при запросе не конкретного значения, а "_Total". Симпотмы и воркэраунд те же :) В msdn не описано, потому что ещё не исправлено, видимо :)

И вообще, неужели кому-то нужно объяснять, что советы MS по теме разработке софта чуть менее чем всегда ...кхм... спорны?!

voronaam ★★
()

что еще противно - они в своих ворнингах пишут strcpy was declared depecated.

кем оно было объявлено устаревшим? из стандарта это никуда выкидывать не собираются, а они делают вид будто нынче стандарт поменяли.

vasaka ★★★
()
Ответ на: комментарий от vasaka

>что еще противно - они в своих ворнингах пишут strcpy was declared depecated.

>кем оно было объявлено устаревшим? из стандарта это никуда выкидывать не собираются, а они делают вид будто нынче стандарт поменяли.

А что, GNU-шники абсолютно стандартный gets() еще не выкинули?

Absurd ★★★
()
Ответ на: комментарий от Absurd

они вообще так не только про strcpy говорят, а про целую кучу, и предлагают вместо них использовать _strcpy.

ну это хрен с ним, но вот подпись was declared deprecated - явная промывка мозгов.

vasaka ★★★
()
Ответ на: комментарий от Absurd

> А что, GNU-шники абсолютно стандартный gets() еще не выкинули?

угу,

LSB deprecates gets(). POSIX.1-2008 removes the specification of gets().

но strcpy() никто запрещать не собирался пока, т.к. кодер может сам проконтролировать выход за рамки буфера (той же strlen(), например), в отличие от gets().

arsi ★★★★★
()
Ответ на: комментарий от vasaka

>ну это хрен с ним, но вот подпись was declared deprecated - явная промывка мозгов.

Кому они мозги пытаются промыть? Программистам на Си? Ихний C stdlib это еще не самая выпуклая вещь. Как насчет SEH-исключений например?

Absurd ★★★
()

> Код, соответствующий Security Development Lifecycle (SDL)
читать, как "код, одобренный индусами из негрософт"

> В gcc нативной поддержки memcpy_s() пока нет.

и не нужна, как кстати и вся эта новость

PayableOnDeath
()

>Бан будет заключаться в выводе предупреждений C4996 при компилировании кода с параметром /W4.

не понятно к чему это

если используешь например дельфи, сибилдер а не встудио что должно выдаваться

unkn55
()
Ответ на: комментарий от stalkerg

> Осложнит малёк жизнь тем кто занимается портированием с винды.

Ну да, об этом я и говорил.

Хотя с другой стороны, кроссплатформенного софта гораздо больше всё же пишется на плюсах, чем на чистом Си, а там memcpy() уже не столь актуален :)

hobbit ★★★★★
()

Вот меня интересует нафига менять название если не изменился прототип функции?

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от Deleted

> Чем бы дитя не тешилось…

Лишь бы своих не заводило. Вот тут как раз своих и заводят.

skwish ★★
()

один знакомый рассказывал стишок, подходящий к случаю:

if you want to fuck for funny,
fuck yourself and save your money!

OzOx
()
Ответ на: комментарий от Reset

Вах, какой срашный сайт! Вебдизайнеру оторвать все конечности

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от fAngel

> Может сразу на Java перейти там так все и работает и нет прямых указателей и все безопасно.

Во-первых ява сильно жрет память.

Во-вторых я не могу сказать, что все всегда работает. Отсутствие прямых указателей никак не защищает от ошибок. Приложения на Java регулярно падают с ошибками NullPointerException, OutOfMemoryError. С безопасностью, конечно, гораздо лучше, что в C.

В третьих - если совсем не использовать C, то на каком языке разрабатывать JVM? По сути своей Java является надстройкой над C и еще очень долго будет таковой являться. Что-то я не слышал о java self-hosted development равно как и об операционных системах полностью написанных на Java.

Как мне кажется, скорей уж надо смотреть в сторону кодогенераторов которые будут генерировать заведомо правильный C код.

sign
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.