Null deref in events
Unfortunately, despite ending in .cpp, this file is a bit too opaque for me to really understand what's going on immediately. I'd prefer just using a slightly-augmented std::deque
(double-ended queue) for this purpose, and leave memory management to the standard library.
Here's the clang-tidy message:
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:119:2: warning: Called C++ object pointer is null [clang-analyzer-core.CallAndMessage]
ALLOC(log, inst, &event, &changed);
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:84:28: note: expanded from macro 'ALLOC'
*extra = (typeof(*extra))(*event)->ptr(); \
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:117:2: note: 'event' initialized to a null pointer value
struct oxr_event *event = NULL;
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:119:2: note: Calling 'oxr_event_alloc'
ALLOC(log, inst, &event, &changed);
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:80:7: note: expanded from macro 'ALLOC'
oxr_event_alloc(log, inst, sizeof(**extra), event); \
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:96:6: note: Assuming 'event' is equal to NULL
if (event == NULL) {
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:96:2: note: Taking true branch
if (event == NULL) {
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:119:2: note: Returning from 'oxr_event_alloc'
ALLOC(log, inst, &event, &changed);
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:80:7: note: expanded from macro 'ALLOC'
oxr_event_alloc(log, inst, sizeof(**extra), event); \
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:119:2: note: Assuming 'ret' is equal to XR_SUCCESS
ALLOC(log, inst, &event, &changed);
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:81:7: note: expanded from macro 'ALLOC'
if (ret != XR_SUCCESS) { \
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:119:2: note: Taking false branch
ALLOC(log, inst, &event, &changed);
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:81:3: note: expanded from macro 'ALLOC'
if (ret != XR_SUCCESS) { \
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:119:2: note: Called C++ object pointer is null
ALLOC(log, inst, &event, &changed);
^
/home/ryan/src/monado/src/xrt/state_trackers/oxr/oxr_event.cpp:84:28: note: expanded from macro 'ALLOC'
*extra = (typeof(*extra))(*event)->ptr(); \
^