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
This commit is contained in:
Jérôme Duval
2007-04-30 10:09:06 +00:00
parent c25f230cb6
commit eb58b5e020
3 changed files with 10 additions and 6 deletions
@@ -2,7 +2,7 @@ SubDir HAIKU_TOP src add-ons input_server devices keyboard ;
SetSubDirSupportedPlatformsBeOSCompatible ; SetSubDirSupportedPlatformsBeOSCompatible ;
UsePrivateHeaders input kernel tracker ; UsePrivateHeaders input interface kernel tracker ;
UseArchHeaders $(TARGET_ARCH) ; UseArchHeaders $(TARGET_ARCH) ;
Addon <input>keyboard : Addon <input>keyboard :
@@ -11,6 +11,9 @@
#include <ByteOrder.h> #include <ByteOrder.h>
#include <File.h> #include <File.h>
#include <InputServerTypes.h>
#include <Message.h>
#include <input_globals.h>
#include <new> #include <new>
#include <stdlib.h> #include <stdlib.h>
@@ -84,7 +87,7 @@ Keymap::Keymap()
fChars(NULL) fChars(NULL)
{ {
key_map *keys; key_map *keys;
get_key_map(&keys, &fChars); _get_key_map(&keys, &fChars, &fCharsSize);
if (keys) { if (keys) {
memcpy(&fKeys, keys, sizeof(key_map)); 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; default: offset = fKeys.normal_map[keyCode]; tableMask = B_NORMAL_TABLE; break;
} }
if (offset <= 0) if (offset <= 0 || offset > fCharsSize)
return 0; return 0;
uint32 numBytes = fChars[offset]; uint32 numBytes = fChars[offset];
if (!numBytes) if (!numBytes)
@@ -241,7 +244,7 @@ Keymap::IsDeadSecondKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey)
default: offset = fKeys.normal_map[keyCode]; break; default: offset = fKeys.normal_map[keyCode]; break;
} }
if (offset <= 0) if (offset <= 0 || offset > fCharsSize)
return false; return false;
uint32 numBytes = fChars[offset]; uint32 numBytes = fChars[offset];
@@ -402,7 +405,7 @@ Keymap::LoadCurrent()
free(fChars); free(fChars);
fChars = NULL; fChars = NULL;
get_key_map(&keys, &fChars); _get_key_map(&keys, &fChars, &fCharsSize);
if (!keys) { if (!keys) {
fprintf(stderr, "error while getting current keymap!\n"); fprintf(stderr, "error while getting current keymap!\n");
return B_ERROR; return B_ERROR;
@@ -35,6 +35,7 @@ public:
private: private:
char *fChars; char *fChars;
key_map fKeys; key_map fKeys;
ssize_t fCharsSize;
}; };