Skip to content

Commit

Permalink
Check scancode before use in glfwGetKeyName
Browse files Browse the repository at this point in the history
  • Loading branch information
elmindreda committed Jan 16, 2020
1 parent a491b06 commit 5f1631c
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ information on what to include when reporting a bug.
window (#1499)
- [Win32] Bugfix: Disabled cursor mode interfered with some non-client actions
- [Win32] Bugfix: Super key was not released after Win+V hotkey (#1622)
- [Win32] Bugfix: `glfwGetKeyName` could access out of bounds and return an
invalid pointer
- [Cocoa] Added support for `VK_EXT_metal_surface` (#1619)
- [Cocoa] Added locating the Vulkan loader at runtime in an application bundle
- [Cocoa] Removed dependency on the CoreVideo framework
Expand Down
7 changes: 7 additions & 0 deletions src/cocoa_window.m
Original file line number Diff line number Diff line change
Expand Up @@ -1516,6 +1516,13 @@ void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)
{
@autoreleasepool {

if (scancode < 0 || scancode > 0xff ||
_glfw.ns.keycodes[scancode] == GLFW_KEY_UNKNOWN)
{
_glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode");
return NULL;
}

const int key = _glfw.ns.keycodes[scancode];

UInt32 deadKeyState = 0;
Expand Down
7 changes: 7 additions & 0 deletions src/win32_window.c
Original file line number Diff line number Diff line change
Expand Up @@ -2026,6 +2026,13 @@ void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)

const char* _glfwPlatformGetScancodeName(int scancode)
{
if (scancode < 0 || scancode > (KF_EXTENDED | 0xff) ||
_glfw.win32.keycodes[scancode] == GLFW_KEY_UNKNOWN)
{
_glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode");
return NULL;
}

return _glfw.win32.keynames[_glfw.win32.keycodes[scancode]];
}

Expand Down
7 changes: 7 additions & 0 deletions src/x11_window.c
Original file line number Diff line number Diff line change
Expand Up @@ -2862,6 +2862,13 @@ const char* _glfwPlatformGetScancodeName(int scancode)
if (!_glfw.x11.xkb.available)
return NULL;

if (scancode < 0 || scancode > 0xff ||
_glfw.x11.keycodes[scancode] == GLFW_KEY_UNKNOWN)
{
_glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode");
return NULL;
}

const int key = _glfw.x11.keycodes[scancode];
const KeySym keysym = XkbKeycodeToKeysym(_glfw.x11.display,
scancode, _glfw.x11.xkb.group, 0);
Expand Down

0 comments on commit 5f1631c

Please sign in to comment.