Aug. 6th, 2012

metaclass: (Default)
Опять залез в какие-то дебри ебеней.
На сей раз 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, а к ним происходит обращение.

Но проблема в том, что обращение это происходит только при ошибках, и только в релизной версии. Поэтому отловить это до сих пор никто не отловил.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 9th, 2025 04:32 am
Powered by Dreamwidth Studios