x11: fix undefined behavior when copying the coordinates of ptr movements actions
Left shift of a negative integer. For some reason the protocol representation here got really botched (in the spec it is just a nice and simple INT16). Signed-off-by: Ran Benita <ran234@gmail.com>master
parent
f8134c8503
commit
a9ace75f64
|
@ -31,6 +31,7 @@ foreach cflag: [
|
||||||
'-Wdate-time',
|
'-Wdate-time',
|
||||||
'-Wwrite-strings',
|
'-Wwrite-strings',
|
||||||
'-Wno-documentation-deprecated-sync',
|
'-Wno-documentation-deprecated-sync',
|
||||||
|
'-fsanitize-undefined-trap-on-error',
|
||||||
]
|
]
|
||||||
if cc.has_argument(cflag)
|
if cc.has_argument(cflag)
|
||||||
add_project_arguments(cflag, language: 'c')
|
add_project_arguments(cflag, language: 'c')
|
||||||
|
|
|
@ -218,8 +218,8 @@ translate_action(union xkb_action *action, const xcb_xkb_action_t *wire)
|
||||||
case XCB_XKB_SA_TYPE_MOVE_PTR:
|
case XCB_XKB_SA_TYPE_MOVE_PTR:
|
||||||
action->type = ACTION_TYPE_PTR_MOVE;
|
action->type = ACTION_TYPE_PTR_MOVE;
|
||||||
|
|
||||||
action->ptr.x = (wire->moveptr.xLow | (wire->moveptr.xHigh << 8));
|
action->ptr.x = (int16_t) (wire->moveptr.xLow | ((uint16_t) wire->moveptr.xHigh << 8));
|
||||||
action->ptr.y = (wire->moveptr.yLow | (wire->moveptr.yHigh << 8));
|
action->ptr.y = (int16_t) (wire->moveptr.yLow | ((uint16_t) wire->moveptr.yHigh << 8));
|
||||||
|
|
||||||
if (!(wire->moveptr.flags & XCB_XKB_SA_MOVE_PTR_FLAG_NO_ACCELERATION))
|
if (!(wire->moveptr.flags & XCB_XKB_SA_MOVE_PTR_FLAG_NO_ACCELERATION))
|
||||||
action->ptr.flags |= ACTION_ACCEL;
|
action->ptr.flags |= ACTION_ACCEL;
|
||||||
|
|
Loading…
Reference in New Issue