[PATCH spice] inputs_channel: Fix wrong handling of key up/down on big endian

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The client will send 0x000000## codes for regular keys, and 0x0000##e0 codes
for extended keys. The current code which simply walks the uint32_t code in
memory order relies on the memory order being little endian, which will
clearly fail on big endian machines, this fixes this.

Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
---
 server/inputs_channel.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/server/inputs_channel.c b/server/inputs_channel.c
index bf5c22e..1a64e2d 100644
--- a/server/inputs_channel.c
+++ b/server/inputs_channel.c
@@ -309,6 +309,7 @@ static int inputs_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, ui
     InputsChannel *inputs_channel = (InputsChannel *)rcc->channel;
     InputsChannelClient *icc = (InputsChannelClient *)rcc;
     uint8_t *buf = (uint8_t *)message;
+    uint32_t i;
 
     spice_assert(g_inputs_channel == inputs_channel);
     switch (type) {
@@ -321,15 +322,16 @@ static int inputs_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, ui
     }
     case SPICE_MSGC_INPUTS_KEY_UP: {
         SpiceMsgcKeyDown *key_down = (SpiceMsgcKeyDown *)buf;
-        uint8_t *now = (uint8_t *)&key_down->code;
-        uint8_t *end = now + sizeof(key_down->code);
-        for (; now < end && *now; now++) {
-            kbd_push_scan(keyboard, *now);
+        for (i = 0; i < 4; i++) {
+            uint8_t code = (key_down->code >> (i * 8)) & 0xff;
+            if (code == 0) {
+                break;
+            }
+            kbd_push_scan(keyboard, code);
         }
         break;
     }
     case SPICE_MSGC_INPUTS_KEY_SCANCODE: {
-        uint32_t i;
         uint8_t *code = (uint8_t *)buf;
         for (i = 0; i < size; i++) {
             kbd_push_scan(keyboard, code[i]);
-- 
1.7.12.1

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]