Холерный опенсорс
Aug. 6th, 2012 04:37 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Опять залез в какие-то дебри ебеней.
На сей раз libusb-1.0 - баг в winusb-бэкенде для этой либы - на некоторых компах валится с AV.
Причина: libusb_init сделанаантихаскельно таким образом, что можно:
либо передать в нее указатель на указатель на контекст - и тогда она создаст контекст и вернет его нам и далее мы будем его использовать везде для вызовов.
либо передать NULL, тогда контекст будет сохранен в глобальной переменной usbi_default_context и будет браться всегда оттуда.
При этом есть отладочная функция usbi_log_v, которой нужно передавать контекст, и если его передать равным NULL - оно берет контекст из usbi_default_context. Дальше этот контекст используется для анализа уровня логов и наличия отладочных сообщений вообще.
При этом возникает такая ситуация: мы инициализируем либу, передавая указатель на указатель на контекст. Либа при этом не трогает usbi_default_context и он остается NULL. Далее, в poll_windows.c поголовно все вызовы логов выглядят так: usbi_warn(NULL, ...
И все это внутри usbi_log_v успешно дохнет с av, т.к. все контексты NULL, а к ним происходит обращение.
Но проблема в том, что обращение это происходит только при ошибках, и только в релизной версии. Поэтому отловить это до сих пор никто не отловил.
На сей раз libusb-1.0 - баг в winusb-бэкенде для этой либы - на некоторых компах валится с AV.
Причина: libusb_init сделана
либо передать в нее указатель на указатель на контекст - и тогда она создаст контекст и вернет его нам и далее мы будем его использовать везде для вызовов.
либо передать NULL, тогда контекст будет сохранен в глобальной переменной usbi_default_context и будет браться всегда оттуда.
При этом есть отладочная функция usbi_log_v, которой нужно передавать контекст, и если его передать равным NULL - оно берет контекст из usbi_default_context. Дальше этот контекст используется для анализа уровня логов и наличия отладочных сообщений вообще.
При этом возникает такая ситуация: мы инициализируем либу, передавая указатель на указатель на контекст. Либа при этом не трогает usbi_default_context и он остается NULL. Далее, в poll_windows.c поголовно все вызовы логов выглядят так: usbi_warn(NULL, ...
И все это внутри usbi_log_v успешно дохнет с av, т.к. все контексты NULL, а к ним происходит обращение.
Но проблема в том, что обращение это происходит только при ошибках, и только в релизной версии. Поэтому отловить это до сих пор никто не отловил.
no subject
Date: 2012-08-06 01:53 pm (UTC)no subject
Date: 2012-08-06 01:59 pm (UTC)Т.е. во всех других вариантах работает :)
no subject
Date: 2012-08-06 02:21 pm (UTC)no subject
Date: 2012-08-06 02:52 pm (UTC)no subject
Date: 2012-08-06 03:10 pm (UTC)no subject
Date: 2012-08-06 03:15 pm (UTC)no subject
Date: 2012-08-06 03:31 pm (UTC)no subject
Date: 2012-08-07 05:52 am (UTC)no subject
Date: 2012-08-07 06:11 am (UTC)Впрочем, судя по баг-трекеру, в гробу там все видели и патчи и баг-репорты.
no subject
Date: 2012-08-07 06:13 am (UTC)fork'аем репис, мёржим в него наш фикс и ещё фиксы что нужны, рассылаем письмо авторам с уведомлением, что если не перестанут пинать хуи - будем тянуть одеяло на себя, уведомляем мейнтейнеров.
Ну или просто попросить права доступа к трекеру и репосу.
no subject
Date: 2012-08-06 06:32 pm (UTC)no subject
Date: 2012-08-06 06:40 pm (UTC)no subject
Date: 2012-08-07 05:51 am (UTC)