From 6f35cb023504d6b8487430a262a272224c04440f Mon Sep 17 00:00:00 2001 From: rdb Date: Tue, 15 Dec 2020 12:33:22 +0100 Subject: [PATCH] device: Silently ignore invalid evdev keycodes generated by some drivers Fixes #1066 --- panda/src/device/evdevInputDevice.cxx | 34 +++++++++++++++++---------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/panda/src/device/evdevInputDevice.cxx b/panda/src/device/evdevInputDevice.cxx index 9407650898..db6285ba19 100644 --- a/panda/src/device/evdevInputDevice.cxx +++ b/panda/src/device/evdevInputDevice.cxx @@ -806,23 +806,33 @@ process_events() { button_changed(_dpad_up_button, events[i].value < 0); button_changed(_dpad_up_button+1, events[i].value > 0); } - nassertd(code >= 0 && (size_t)code < _axis_indices.size()) break; - index = _axis_indices[code]; - if (index >= 0) { - axis_changed(index, events[i].value); + if (code >= 0 && (size_t)code < _axis_indices.size()) { + index = _axis_indices[code]; + if (index >= 0) { + axis_changed(index, events[i].value); + } + } + else if (device_cat.is_debug()) { + device_cat.debug() + << "Ignoring EV_ABS event with unknown code " << code << "\n"; } break; case EV_KEY: - nassertd(code >= 0 && (size_t)code < _button_indices.size()) break; - index = _button_indices[code]; - if (index >= 0) { - button_changed(index, events[i].value != 0); + if (code >= 0 && (size_t)code < _button_indices.size()) { + index = _button_indices[code]; + if (index >= 0) { + button_changed(index, events[i].value != 0); + } + if (code == _ltrigger_code) { + axis_changed(_ltrigger_axis, events[i].value); + } else if (code == _rtrigger_code) { + axis_changed(_ltrigger_axis + 1, events[i].value); + } } - if (code == _ltrigger_code) { - axis_changed(_ltrigger_axis, events[i].value); - } else if (code == _rtrigger_code) { - axis_changed(_ltrigger_axis + 1, events[i].value); + else if (device_cat.is_debug()) { + device_cat.debug() + << "Ignoring EV_KEY event with unknown code " << code << "\n"; } break;