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:
Peter Åstrand 2005-08-04 13:39:57 +00:00
parent 36858922d6
commit 2daead38a7
3 changed files with 13 additions and 6 deletions

View File

@ -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);

View File

@ -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
View File

@ -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: