Protection against recursive sequences
git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@975 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
parent
36858922d6
commit
2daead38a7
2
proto.h
2
proto.h
@ -173,7 +173,7 @@ void xkeymap_init(void);
|
|||||||
BOOL handle_special_keys(uint32 keysym, unsigned int state, uint32 ev_time, BOOL pressed);
|
BOOL handle_special_keys(uint32 keysym, unsigned int state, uint32 ev_time, BOOL pressed);
|
||||||
key_translation xkeymap_translate_key(uint32 keysym, unsigned int keycode, unsigned int state);
|
key_translation xkeymap_translate_key(uint32 keysym, unsigned int keycode, unsigned int state);
|
||||||
void xkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint32 ev_time,
|
void xkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint32 ev_time,
|
||||||
BOOL pressed);
|
BOOL pressed, uint8 nesting);
|
||||||
uint16 xkeymap_translate_button(unsigned int button);
|
uint16 xkeymap_translate_button(unsigned int button);
|
||||||
char *get_ksname(uint32 keysym);
|
char *get_ksname(uint32 keysym);
|
||||||
void save_remote_modifiers(uint8 scancode);
|
void save_remote_modifiers(uint8 scancode);
|
||||||
|
13
xkeymap.c
13
xkeymap.c
@ -670,7 +670,7 @@ xkeymap_translate_key(uint32 keysym, unsigned int keycode, unsigned int state)
|
|||||||
|
|
||||||
void
|
void
|
||||||
xkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint32 ev_time,
|
xkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint32 ev_time,
|
||||||
BOOL pressed)
|
BOOL pressed, uint8 nesting)
|
||||||
{
|
{
|
||||||
key_translation tr, *ptr;
|
key_translation tr, *ptr;
|
||||||
tr = xkeymap_translate_key(keysym, keycode, state);
|
tr = xkeymap_translate_key(keysym, keycode, state);
|
||||||
@ -703,8 +703,15 @@ xkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint3
|
|||||||
{
|
{
|
||||||
DEBUG_KBD(("Handling sequence element, keysym=0x%x\n",
|
DEBUG_KBD(("Handling sequence element, keysym=0x%x\n",
|
||||||
(unsigned int) ptr->seq_keysym));
|
(unsigned int) ptr->seq_keysym));
|
||||||
xkeymap_send_keys(ptr->seq_keysym, keycode, state, ev_time, True);
|
|
||||||
xkeymap_send_keys(ptr->seq_keysym, keycode, state, ev_time, False);
|
if (nesting++ > 32)
|
||||||
|
{
|
||||||
|
error("Sequence nesting too deep\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
xkeymap_send_keys(ptr->seq_keysym, keycode, state, ev_time, True, nesting);
|
||||||
|
xkeymap_send_keys(ptr->seq_keysym, keycode, state, ev_time, False, nesting);
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
}
|
}
|
||||||
while (ptr);
|
while (ptr);
|
||||||
|
4
xwin.c
4
xwin.c
@ -1410,7 +1410,7 @@ xwin_process_events(void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
xkeymap_send_keys(keysym, xevent.xkey.keycode, xevent.xkey.state,
|
xkeymap_send_keys(keysym, xevent.xkey.keycode, xevent.xkey.state,
|
||||||
ev_time, True);
|
ev_time, True, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyRelease:
|
case KeyRelease:
|
||||||
@ -1426,7 +1426,7 @@ xwin_process_events(void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
xkeymap_send_keys(keysym, xevent.xkey.keycode, xevent.xkey.state,
|
xkeymap_send_keys(keysym, xevent.xkey.keycode, xevent.xkey.state,
|
||||||
ev_time, False);
|
ev_time, False, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ButtonPress:
|
case ButtonPress:
|
||||||
|
Loading…
Reference in New Issue
Block a user