diff --git a/src/add-ons/input_server/devices/keyboard/Jamfile b/src/add-ons/input_server/devices/keyboard/Jamfile index d59993a286..64c15c90cd 100644 --- a/src/add-ons/input_server/devices/keyboard/Jamfile +++ b/src/add-ons/input_server/devices/keyboard/Jamfile @@ -2,7 +2,7 @@ SubDir HAIKU_TOP src add-ons input_server devices keyboard ; SetSubDirSupportedPlatformsBeOSCompatible ; -UsePrivateHeaders input kernel tracker ; +UsePrivateHeaders input interface kernel tracker ; UseArchHeaders $(TARGET_ARCH) ; Addon keyboard : diff --git a/src/add-ons/input_server/devices/keyboard/Keymap.cpp b/src/add-ons/input_server/devices/keyboard/Keymap.cpp index 0b790c35e3..ec2a06d916 100644 --- a/src/add-ons/input_server/devices/keyboard/Keymap.cpp +++ b/src/add-ons/input_server/devices/keyboard/Keymap.cpp @@ -11,6 +11,9 @@ #include #include +#include +#include +#include #include #include @@ -84,7 +87,7 @@ Keymap::Keymap() fChars(NULL) { key_map *keys; - get_key_map(&keys, &fChars); + _get_key_map(&keys, &fChars, &fCharsSize); if (keys) { memcpy(&fKeys, keys, sizeof(key_map)); @@ -175,8 +178,8 @@ Keymap::IsDeadKey(uint32 keyCode, uint32 modifiers) default: offset = fKeys.normal_map[keyCode]; tableMask = B_NORMAL_TABLE; break; } - if (offset <= 0) - return 0; + if (offset <= 0 || offset > fCharsSize) + return 0; uint32 numBytes = fChars[offset]; if (!numBytes) @@ -241,7 +244,7 @@ Keymap::IsDeadSecondKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey) default: offset = fKeys.normal_map[keyCode]; break; } - if (offset <= 0) + if (offset <= 0 || offset > fCharsSize) return false; uint32 numBytes = fChars[offset]; @@ -402,7 +405,7 @@ Keymap::LoadCurrent() free(fChars); fChars = NULL; - get_key_map(&keys, &fChars); + _get_key_map(&keys, &fChars, &fCharsSize); if (!keys) { fprintf(stderr, "error while getting current keymap!\n"); return B_ERROR; diff --git a/src/add-ons/input_server/devices/keyboard/Keymap.h b/src/add-ons/input_server/devices/keyboard/Keymap.h index c8f5f06735..6fcf7e7c04 100644 --- a/src/add-ons/input_server/devices/keyboard/Keymap.h +++ b/src/add-ons/input_server/devices/keyboard/Keymap.h @@ -35,6 +35,7 @@ public: private: char *fChars; key_map fKeys; + ssize_t fCharsSize; };