| Summary: | баг в libcwiid | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Егор <petruhin-enot> |
| Component: | libcwiid | Assignee: | Nobody's working on this, feel free to take it <nobody> |
| Status: | CLOSED WONTFIX | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | iqqator, oleg |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
Шаги воспроизведения:
1.
2.
3.
Ожидаемый результат
- Все работает
Фактический результат
- Приложение зависает на моменте подключения
Проведенный анализ
- Проверили приложение при помощи lldb и debug версии пакета
- Проставили брэкпоинты и нашли место после которого приложение не отвечает совсем
- Во время исполнения 65 строчки происходит зависание
```
* thread #1, name = 'wmgui', stop reason = step over
frame #0: 0x00007ffff7e89aaf libcwiid.so.1`cwiid_send_rpt(wiimote=0x0000555555737320, flags='\0', report='\x11', len=1, data=0x00007fffffffd6f7) at command.c:65:2
62
63 buf[0] = BT_TRANS_SET_REPORT | BT_PARAM_OUTPUT;
64 buf[1] = report;
-> 65 memcpy(buf+2, data, len);
66 if (!(flags & CWIID_SEND_RPT_NO_RUMBLE)) {реп
67 buf[2] |= wiimote->state.rumble;
68 }
``
Код 15-летней давности. Можете прислать патч или обратитесь к текущим мейнтейнерам: https://github.com/abstrakraft/cwiid/issues |
Запустил wmgui, нажал на кнопку connect и зажал на wiiremote 1+2 и нажал ok, программа зависла. Зависает на * thread #1, name = 'wmgui', stop reason = step over frame #0: 0x00007ffff7e89aaf libcwiid.so.1`cwiid_send_rpt(wiimote=0x0000555555737320, flags='\0', report='\x11', len=1, data=0x00007fffffffd6f7) at command.c:65:2 62 63 buf[0] = BT_TRANS_SET_REPORT | BT_PARAM_OUTPUT; 64 buf[1] = report; -> 65 memcpy(buf+2, data, len); 66 if (!(flags & CWIID_SEND_RPT_NO_RUMBLE)) {реп 67 buf[2] |= wiimote->state.rumble; 68 } видимо буфер переполняется