Корпорация Google поделилась (http://googleonlinesecurity.blogspot.com/2014/01/ffmpeg-and-...) деталями проекта, связанного с поиском и устранением ошибок в открытом мультимедиа пакете FFMpeg (http://ffmpeg.org/), который, как оказалось, активно используется внутри корпорации и в её продуктах, включая YouTube и Google Chrome.
В течение последних двух лет для процесса тестирования кодовой базы были задействованы 500 компьютерных ядер, а также исходный мультимедиа материал, собранный со всего интернета, включая файлы из самого проекта, находящиеся на сайте samples.mplayerhq.hu и собственный набор для тестирования регрессий проекта FFMpeg под названием FATE.
Тестирование заключалось в изменении исходных файлов и добавлении разнообразного случайного мусора с тем, чтобы выявить проблемы в функциях, занятых обработкой исходного материала для кодирования и декодирования - в компьютерной среде этот способ обыкновенно называется fuzzing. Другой способ тестирования - это прямой вызов функций библиотеки с не совсем корректными данными, чтобы проверить надёжность обработки подобной информации. Впоследствии, проект был расширен до 2000 ядер, а методы мутации исходных материалов были сделаны более разнообразными.
В ходе работы над проектом было выявлено более 1120 ошибок, которые уже устранены. Найденные ошибки можно разделить на следующие классы:- Разыменование NULL-указателей;
- Неверные вычисления указателей, приводящие к SIGSEGV из-за использования "чужой" памяти;
- Чтение и запись за пределы стека, кучи и массивов;
- Неверные вызовы free(), а также двойное освобождение указателей;
- Ошибки деления;
- Ошибки assert();
- Использование неициализированной памяти.
Google таким же образом помогла форку FFMpeg, libav, в котором было устранено 413 ошибок.URL: http://googleonlinesecurity.blogspot.com/2014/01/ffmpeg-and-...
Новость: http://www.opennet.me/opennews/art.shtml?num=38832
> Чтение и запись за пределы стека, кучи и массивов;
> Неверные вызовы free(), а также двойное освобождение указателей;Интересно, CVE будут?
> ... Тестирование заключалось в изменении исходных файлов и добавлении разнообразного случайного мусора ...
> ... 2000 ядер, а методы мутации исходных материалов были сделаны более разнообразными.Вам ничего это не напоминает?
"Абсолютно случайным образом ударяя по клавишам пишущей машинки,
гипотетическая обезьяна рано или поздно напечатает одну из пьес Шекспира."http://ru.wikipedia.org/wiki/%D0%A2%D0%B...
:D
В "Корпорации Добра"(ТМ) народу много, если каждый день они все разом будут нажимать на кнопки у них может быть не только пьесу Уильяма нашего Шекспира напишут, но и "12 стульев" с "Золотым телёнком" впридачу.
Угу, только свою социальную сеть никак не могут придумать.
Ты наверное не в курсе что у Шекспира есть пьеса из двух букв?
без ругательств... в исполнении пацаков с плюка... ку?:)
Ну если уж напечатала, то неплохо бы опубликовать для общественности - вдруг там что-то интересное.
> Вам ничего это не напоминает?Скорее напоминает брутфорс FFmpeg по словарю с догенерированием :)
Брутфос - линейный (ну или какой-нибудь функциональный), а тут рандом.
Так что, именно обизяны. :)
> Google помогла устранить более тысячи проблем в исходном коде проекта FFMpegПомогите Debian оторвать пальцы libav дрочеру, из-за которого приходится в бинарном дистре самому собирать ffmpeg. А форку можно было и не помогать, хай сами чухаются.
Если ты собираешь, то может попробуешь протолкнуть его в репозиторий? Напиши девелоперам, найди ментора. Всяко лучше, чем ныть на опеннете.
У вас обида.
Зачем собирать самому? Есть deb-multimedia
А всякие x264 и lame там уже есть?
> приходится в бинарном дистре самому собирать ffmpeggoogle://deb-multimedia
Не ной на опеннете, а поддержи баг Bug#729203 Там целая петиция о ffmpeg!!!
Так и представляю себе, корпорация гугл даёт интервью, "почему вы добровольно взялись устранить ошибки в ффмпег?"Гугл: за*ало!
Дак так и есть. Им нужен дубовый конвертор для ютуба, который без касяков на вход может принимать битые потоки конверченных-переконверченных видео с мобилок
ну так энтерпрайзу такое не под силу
> ну так энтерпрайзу такое не под силуЧушь собачья. Энтерпрайз принципами "слабо" не руководствуется. Он не гопник в подворотне.
>Он не гопник в подворотнеОн хуже. Гопник тот хоть не скрывает, что баблос отжимает.
Миллиарды отжатых денег лично энтерпрайзом?
Гугль, в отличие от гопника, пытается что-то дать. А не хотите брать - не надо, он вас в подворотне подкарауливать не будет.
> А не хотите брать - не надоЭто как сказать, ютубовское население с плюсиком наперевес подкараулил.
>> А не хотите брать - не надо
> Это как сказать, ютубовское население с плюсиком наперевес подкараулил.Как будто здесь плюсики/минусики и ручные вендузятники-стаканчики не для накрутки кликов?
>>> А не хотите брать - не надо
>> Это как сказать, ютубовское население с плюсиком наперевес подкараулил.(который g+)
> Как будто здесь плюсики/минусики и ручные вендузятники-стаканчики не для накрутки кликов?
И много отобрал?
> Гугль, в отличие от гопника, пытается что-то дать. А не хотите брать
> — не надо, он вас в подворотне подкарауливать не будет.ага. просто скажет, что кто не берёт журнал «сельская жизнь» — тому мандарины и майонез не отпускаются. такие дела.
Куда ему до гопника. Он пиявка - тупая, но отлично умеющая паразитировать.
> из-за использования "чужой" памяти;У процесса не бывает чужой памяти.
>> из-за использования "чужой" памяти;
> У процесса не бывает чужой памяти.В DOS бывает.
В DOS не процессов.
DOSa нет!
> DOSa нет!Вообще ничего нет. Есть матрица :)
Есть FreeDOS.
> В DOS не процессов.C:>\ mem /p
> В DOS не процессов.орли? а что такое TSR тогда?
p.s. и системная функция exec тоже не ясно, зачем. ведь нет же процессов!
> что такое TSR тогда?*Terminate* and stay resident.
>> что такое TSR тогда?
> *Terminate* and stay resident.спасибо. видимо, «резидантами» остаются агенты астрала, а не процессы.
> орли? а что такое TSR тогда?Ну да, это такие летающие крокодилы. Только летают они низенько-низенько...
> p.s. и системная функция exec тоже не ясно, зачем. ведь нет же процессов!
Вы, если лекции прогуливали, хоть в Википедию заглянули бы:
> In computing, exec is a functionality of an operating system that runs an executable file in the context of an already existing process, replacing the previous executable. (http://en.wikipedia.org/wiki/Exec_%28computing%29)
имеется ввиду чужая память для конкретного указателя, а не процесса.
Кста сложилось мнение, что просто статическим анализатором кода все проверили.
Конечно, после описания фермы динамического тестирования просто не может не сложиться мнение, что проверили статическим анализатором.
Этим - https://scan.coverity.com/projects/54 ?
Наверно перепутали process и Thread в переводе.
> Наверно перепутали process и Thread в переводе.В переводе все переврали:
NULL pointer dereferences,
Invalid pointer arithmetic leading to SIGSEGV due to unmapped memory access,
Out-of-bounds reads and writes to stack, heap and static-based arrays,
Invalid free() calls,
Double free() calls over the same pointer,
Division errors,
Assertion failures,
Use of uninitialized memory.
Какие левые коментраии.
Проблема сколько миллиаров ошибок попрежнему имеется.
> сколько миллиаровВот и страдаем из-за таких людей, которые даже комментарий не могут нормально написать, не говоря уже про код.
Тему не раскрыл. Сколько миллиардов?
Failed to recognize the point.
Заказали баги - сделали баги.
=
Intentionally failed to recognize the point. "Intentionally", under an influence from your boss. That is the point there are bugs.
> Какие левые коментраии.
> Проблема сколько миллиаров ошибок попрежнему имеется.Надеюсь что вы не пишете код. Так, глядя на то как вы пишете комментарии...
Я пишу код. Не может быть в пакете столько и таких ошибок, как описано в статье. В противном случае кодировала, извините, просто обезьяна, красным местом прыгая по клавиатуре.
> Я пишу код. Не может быть в пакете столько и таких ошибок,
> как описано в статье. В противном случае кодировала, извините, просто обезьяна,
> красным местом прыгая по клавиатуре.а ты поинтересуйся на досуге, из чего ffmpeg состоит. а также — сколько людей и как всё это писали.
именно в данном случае — может, вполне. в ffmpeg я вообще иногда встречал такие ошибки, что хоть стой, хоть падай и плачь.
При этом лучше него ничего практически и нет. Так что лучше уже обезьяны тем местом, чем весь остальной зоопарк.
а я нигде не говорил, что ffmpeg плохой.
А я и не возражал, я дополнил.
> Я пишу код. Не может быть в пакете столько и таких ошибок,Вас на...ли, в любой достаточно большой программе может быть и столько ошибок и даже больше. А ffmpeg - это большая, сложная и фичастая программа, понимающая 100500 форматов файлов.
> как описано в статье. В противном случае кодировала, извините, просто обезьяна,
> красным местом прыгая по клавиатуре.Напишите лучше. Пока что-то все только выступали, но никто не сподвигся написать либы хоть близко сравнимые с ffmpeg'овскими.
> ... изменении исходных файлов и добавлении разнообразного случайного мусора с тем, чтобы выявить проблемы в функциях, занятых обработкой исходного материала для кодирования и декодирования - в компьютерной среде этот способ обыкновенно называется fuzzing.Всё-таки, более точный термин — mutation testing.
> Всё-таки, более точный термин — mutation testing.Fuzzing - устоявшийся профессиональный термин. Как доктор говорю. Так что ваши попытки поумничать - выглядят довольно жалко.
> Разыменование NULL-указателей;
> Неверные вычисления указателей, приводящие к SIGSEGV из-за использования "чужой" памяти;
> Чтение и запись за пределы стека, кучи и массивов;
> Неверные вызовы free(), а также двойное освобождение указателей;
> Ошибки деления;
> Ошибки assert();
> Использование неинициализированной памяти.Чего только не придумают, лишь бы не пользоваться автоматическим управлением памятью.
> Чего только не придумают, лишь бы не пользоваться автоматическим управлением памятью.Чувак, ffmpeg это кодек. Там скорость роялит. И предсказуемость, для реалтаймного сжатия. Никого не устроит если вы будете по VoIP трындеть и тут раз - звук выпадает, потому что GC мусор приспичило собрать.
Похоже, ваш глупый комментарий пользуется популярностью у других хомячков.
Разъясните, как соотносится автоматич.управление с реалтаймом?? Что, malloc работает как-то более реалтаймово, чем new? Или free освобождает сразу биты на плашке DIMM?
Вся проблема - в мозгах. Для (де)кодирования видео совершенно спокойно можно юзать любой GC. Вся петрушка только в алгоритмах - чем быстрее обсчёт, тем лучше. Плюс, вопрос: насколько квалифицированы разрабы ffmpeg для распараллеливания обработки.
Результат декодирования должен быть показан потребителю в именно что в реальном времени, а не тогда когда GC соизволит закончить свой нелегкий труд. И кстати распараллеливание здесь вообще не причем.
у GC самый низкий приоритет, да. Но по факту, когда ему приспичит, - встанут все.
> у GC самый низкий приоритет, да. Но по факту, когда ему приспичит,
> — встанут все.справедливости ради: ты или очень мало знаешь об алгоритмах сборки мусора, или намеренно утрируешь. серебряной пули, конечно, нет, но «stop the world» давно уже не единственная стратегия.
> Похоже, ваш глупый комментарий пользуется популярностью у других хомячков.Юноша, не причисляйте других к своему племени почём зря. Практический критерий Вам лично предложили в #65 -- справитесь, приходите, а до тех пор уместней не отсвечивать с "умными" мыслями.
> Чего только не придумают, лишь бы не пользоваться автоматическим управлением памятью.где можно посмотреть на твой форк ffmpeg — с «автоматическим управлением памятью»? ну так, чтобы прикинуть, стоит ли переходить.
Хорошо, что Google помогает проекту. Судьба libav в настоящий момент весьма туманна... Их некрасивое поведение, и откровенная ложь о том, что ffmpeg устаревший - лично меня очень шокировали. Да и развивается их проект медленнее. А за ffmpeg рад.
Война двух кодеков не принесет в данном случае пользы обоим
Лучше бы эти двсе комманды улучшили конвертацию и вывод информации при кодировании.
> Война двух кодеков не принесет в данном случае пользы обоим
> Лучше бы эти все комманды улучшили конвертацию и вывод информации при кодировании.Конечно лучше. Но разработчики libav - жуткие склочники. Уверяли что форк был необходим, что-бы внедрять новые фичи, но по факту получилось всё как в ситуации с mplayer и mplayer2(когда оригинальный проект всё-таки имеет большее количество контрибьюторов).
> но по факту получилось всё как в ситуации с mplayer и mplayer2раз так — надо таки переходить на libav. про mplayer забыл, как про страшный сон, и жить стало комфортней.
…а всё новое и удобное почему-то оказалось в mpv, ага. Mplayer2 загнулся не из-за того, что в mplayer народ наконец проснулся, а из-за mpv.
Лично мне кажется libav сыграл роль душевного такого пинка под зад и в ffmpeg намёк поняли. Да и просто привлёк внимание разработчиков к обоим проектам.
> …а всё новое и удобное почему-то оказалось в mpv, ага. Mplayer2 загнулся
> не из-за того, что в mplayer народ наконец проснулся, а из-за
> mpv.
> Лично мне кажется libav сыграл роль душевного такого пинка под зад и
> в ffmpeg намёк поняли. Да и просто привлёк внимание разработчиков к
> обоим проектам.Может быть вы и правы. Возможно, что libav сыграл роль пинка. Я лично против libav ничего не имеют. Единственное, что мне очень не понравилось, это попытка создателей libav в самом начале конфликта с Нидермайером они пытались свой форк выдать за продолжение развития ffmpeg. Это было не красиво с их стороны, так как оригинальный проект не прекратил своего существования, и им нужно было с самого начала позиционировать своё творение как ответвление от основного проекта.
А ты не врешь по случаю?
> А ты не врешь по случаю?Вы просто не помните, как libav внедряли нечего не знающим хомячкам под видом пакета ffmpeg с такой припиской:
ffmpeg version 0.8.3-6:0.8.3-4, Copyright (c) 2000-2012 the Libav developers
built on Jun 26 2012 09:26:41 with gcc 4.7.1THIS PROGRAM IS DEPRECATED
This program is only provided for compatibility and will be removed in a future release.
Please use avconv instead.
Все правильно написали
> Все правильно написалиЧто правильно написали? Libav(и avconv в частности) - не продолжение развития проекта ffmpeg, а его форк. Они не имеют права использовать название ffmpeg, и позиционировать свой продукт как новую версию ffmpeg. Это форк. Это уже, по факту, другой продукт. FFMPEG не устарел, а Libav - не его продолжение, а его ответвление. Так что то, что они написали - наглая ложь.
> Все правильно написалиС чего бы это правильно?
>> Все правильно написали
> С чего бы это правильно?а что там не так? маинтайнер пакета считает, что ffmpeg — устарела. написал это открытым текстом и большими буквами. не вижу ничего неправильного.
>>> Все правильно написали
>> С чего бы это правильно?
> а что там не так? маинтайнер пакета считает, что ffmpeg — устарела.
> написал это открытым текстом и большими буквами. не вижу ничего неправильного.Во первых ffmpeg быстрее прирастает фичами, чем libav. Можно поспорить, кто из них устарел. На данный момент в роли аутсайдера по количеству новых фич, и исправленных багов ваш любимый libav. Майнтейнер не имел права использовать название ffmpeg, упаковывая в пакет не оригинальный ffmpeg, а его кривой форк. Нужно было назвать данный пакет его настоящим именем - libav. И не уверять, что ffmpeg(cli морду к библиотеке ffmpeg) теперь стоит заменить на avconv. А просто написать в описании пакета(его можно было сделать пустым, libav в зависимостях), что от проекта ответвился новый проект, и теперь по умолчанию вместо всеми любимого ffmpeg будет устанавливаться неведомая хрень. Народ бы сразу понял, что libav - не ffmpeg, и услал майнтейнера лесом...
кажется, там вполне ясно написано: «please use avconv…»
мнение маинтайнера: ffmpeg устарел.
проблема: ffmpeg поддерживаться больше не будет.
задача: заменить пакет ffmpeg на другой пакет, при этом обновив и хомяков, которые принципиально ничего не читают, просто «апдейтятся». если не обновлять — хомяки начнут гадить «багами», что пакет, дескать, не обновляется больше.
нюанс: при этом постараться не особо поломать другие пакеты, у которых в зависимостях ffmpeg.
вопрос: как ТЫ это решил бы?
> нюанс: при этом постараться не особо поломать другие пакеты, у которых в
> зависимостях ffmpeg.
> вопрос: как ТЫ это решил бы?Просто. Не стал бы врать, а связался с мейнтейнерами ПО, в зависимостях которого есть ffmpeg, и попросил их добавить в зависимости libav вместо ffmpeg. Хотя менять ffmpeg на libav не было смысла.
ясно: никак бы не решил. вопрос снят.
> ясно: никак бы не решил. вопрос снят.Почему никак? Я бы не стал менять ffmpeg на его бледное подобие. Большей тупости в жизни не видел. Даже герои "Тупой и ещё тепее" выглядят одарёнными интеллектуалами в сравнении с подобными мейнтейнерами. Но если решать подобный вопрос было бы жизненно важно, я бы добился того, что-бы все пакеты имеющие зависимость от пакета, от которого нужно отказаться, изменили на новую. Не так уж сложно пнуть пару товарищей, что-бы они поковыряли свои пакеты на предмет смены зависимостей. Если что-то делать, то нужно делать это основательно. А не городить костыли, и обманывать потребителей.
во-первых, жутко интересно, с чего «бледное подобие». по пунктам.во-вторых: я сейчас открою тебе Тайное Знание. слушай, но сядь покрепче: пакеты дозволено собирать не только Богоизбранным.
> во-первых, жутко интересно, с чего «бледное подобие». по пунктам.
> во-вторых: я сейчас открою тебе Тайное Знание. слушай, но сядь покрепче: пакеты
> дозволено собирать не только Богоизбранным.Да я сам себе иногда собираю пакеты из изходников, полученных с git. Только от этого я же не стал сопровождающим пакеты, верно? В репы их проталкивают те самые, которые мнят себя избранными.
(вздыхает) а теперь поясни, пожалуйста, алгоритм, используя который маинтайнер должен был связаться со всеми, кто себе пакеты собирает. я — если ты не заметил — ни буквой не упомянул «пакеты из репозитория», я сказал просто про пакеты.
> (вздыхает) а теперь поясни, пожалуйста, алгоритм, используя который маинтайнер должен
> был связаться со всеми, кто себе пакеты собирает. я — если
> ты не заметил — ни буквой не упомянул «пакеты из репозитория»,
> я сказал просто про пакеты.Связаться со всеми, кто собирает себе пакеты, в принципе не представляется возможным. Откуда мне знать, собираете вы себе пакеты, зависящие от ffmpeg, или нет?
> (вздыхает) а теперь поясни, пожалуйста, алгоритм, используя который
> маинтайнер должен был связаться со всеми, кто себе пакеты собирает.Обычно это $name-announce@.
ну и да: насчёт «бледного подобия» ответ будет, или это была гипербола, вызваная непонятной болью в известных местах?
>>> Все правильно написали
>> С чего бы это правильно?
> а что там не так?Не хватает "IMHO" ещё более большими буквами, вестимо.
>>>> Все правильно написали
>>> С чего бы это правильно?
>> а что там не так?
> Не хватает «IMHO» ещё более большими буквами, вестимо.ну не писать же это после каждого утверждения — ужасно утомительно. опять вопрос восприятия. (улыбается)
> опять вопрос восприятия. (улыбается):]
все правильно. Продолжаем спать.
>>> Компания Google помогла устранить более тысячи проблем в исходном коде проекта FFmpeg ...... и (возможно) внедрить ряд не-декларируемых ... ;)
Тут все крутые и Linux / BSD пользуются, а я все же скажу как проблема ffmpeg/libav прокатилась по пользователям Windows.Как, наверное, многим известно в Windows давным давно повелось проигрывать медиафайлы через ffmpeg. В Windows есть DirectShow (чем-то напоминает gstreamer) и ffmpeg напрямую использовать не получится. При царе Горохе был написан фильтр FFDShow.ax использующий ffmpeg для декодирования и фильтрации (на подобии gstreamer-plugins-ffmpeg). Хоть он был старый, в нем медленно чинились баги, но оно работало и работало хорошо.
С появлением ненавистного libav под эгидой истерии, связанной с этим форком, работающие вещи решили чинить. Так появился LAV Filters. FFDShow и FFmpeg объявили устаревшими и начали насильно обновлять пользователей кодекпаков (cccp, k-lite)
Теперь:
1) Фильтров постпроцессинга просто нет.
2) Никаких фильтров нет
3) Форматов видео меньше
4) Можно поймать глюки при проигрывании внутриигровых роликов MPEG-4/2 (не Bink)Кодекпаки не ушли от использования ffdshow.ax для audio, т.к. там еще хуже. LAV интегрировали в MPC-HC, выковыривать стало сложнее.
Один единственный плюс, можно проигрывать видео с использованием CUDA напрямую, без DXVA, но глючит и сомнительно.
чёрт, уже ради одних этих страданий стоило делать форк.
Ну схожие страдание у пользователей debian.
> Ну схожие страдание у пользователей debian.две причины.
Как видите, польза от возникновения libav весьма сомнительна. А страдать ещё долго будут как пользователи Windows, так и Ubuntu/Debina. Которым вместо нормального ffmpeg впарили непонятно что.
> А страдать ещё долго будут как пользователи Windows, так и Ubuntu/Debina.просто бальзам на сердце.
Злой ты. :(
> Злой ты. :(ничуть: я же руки-ноги отрезать не желаю. а вот вредный — это есть.
тем временем вышел ffmpeg 2.1.2 :D
а тестировать на "мусоре" давно пора было