From eb58b5e020ae89b379630bf164691d3de9f84ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Mon, 30 Apr 2007 10:09:06 +0000 Subject: [PATCH] now uses _get_key_map() and check offsets against the size of the array git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20918 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/input_server/devices/keyboard/Jamfile | 2 +- .../input_server/devices/keyboard/Keymap.cpp | 13 ++++++++----- src/add-ons/input_server/devices/keyboard/Keymap.h | 1 + 3 files changed, 10 insertions(+), 6 deletions(-) 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; };