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);
|
||||
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,
|
||||
BOOL pressed);
|
||||
BOOL pressed, uint8 nesting);
|
||||
uint16 xkeymap_translate_button(unsigned int button);
|
||||
char *get_ksname(uint32 keysym);
|
||||
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
|
||||
xkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint32 ev_time,
|
||||
BOOL pressed)
|
||||
BOOL pressed, uint8 nesting)
|
||||
{
|
||||
key_translation tr, *ptr;
|
||||
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",
|
||||
(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;
|
||||
}
|
||||
while (ptr);
|
||||
|
4
xwin.c
4
xwin.c
@ -1410,7 +1410,7 @@ xwin_process_events(void)
|
||||
break;
|
||||
|
||||
xkeymap_send_keys(keysym, xevent.xkey.keycode, xevent.xkey.state,
|
||||
ev_time, True);
|
||||
ev_time, True, 0);
|
||||
break;
|
||||
|
||||
case KeyRelease:
|
||||
@ -1426,7 +1426,7 @@ xwin_process_events(void)
|
||||
break;
|
||||
|
||||
xkeymap_send_keys(keysym, xevent.xkey.keycode, xevent.xkey.state,
|
||||
ev_time, False);
|
||||
ev_time, False, 0);
|
||||
break;
|
||||
|
||||
case ButtonPress:
|
||||
|
Loading…
Reference in New Issue
Block a user