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;
};