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

View File

@ -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 <input>keyboard :

View File

@ -11,6 +11,9 @@
#include <ByteOrder.h>
#include <File.h>
#include <InputServerTypes.h>
#include <Message.h>
#include <input_globals.h>
#include <new>
#include <stdlib.h>
@ -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;

View File

@ -35,6 +35,7 @@ public:
private:
char *fChars;
key_map fKeys;
ssize_t fCharsSize;
};