Skip to content

Commit

Permalink
Merge pull request #46517 from pdfrod/fix-out-of-bounds-acess-on-x11
Browse files Browse the repository at this point in the history
Fix out of bounds array access on DisplayServerX11 code
  • Loading branch information
akien-mga authored Feb 28, 2021
2 parents 870de12 + 1cb21b6 commit e3dd38c
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions platform/linuxbsd/display_server_x11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -727,9 +727,9 @@ Point2i DisplayServerX11::screen_get_position(int p_screen) const {

int count;
XineramaScreenInfo *xsi = XineramaQueryScreens(x11_display, &count);
if (p_screen >= count) {
return Point2i(0, 0);
}

// Check if screen is valid
ERR_FAIL_INDEX_V(p_screen, count, Point2i(0, 0));

Point2i position = Point2i(xsi[p_screen].x_org, xsi[p_screen].y_org);

Expand Down Expand Up @@ -758,9 +758,9 @@ Rect2i DisplayServerX11::screen_get_usable_rect(int p_screen) const {

int count;
XineramaScreenInfo *xsi = XineramaQueryScreens(x11_display, &count);
if (p_screen >= count) {
return Rect2i(0, 0, 0, 0);
}

// Check if screen is valid
ERR_FAIL_INDEX_V(p_screen, count, Rect2i(0, 0, 0, 0));

Rect2i rect = Rect2i(xsi[p_screen].x_org, xsi[p_screen].y_org, xsi[p_screen].width, xsi[p_screen].height);
XFree(xsi);
Expand Down Expand Up @@ -1041,11 +1041,13 @@ void DisplayServerX11::window_set_current_screen(int p_screen, WindowID p_window
ERR_FAIL_COND(!windows.has(p_window));
WindowData &wd = windows[p_window];

int count = get_screen_count();
if (p_screen >= count) {
return;
if (p_screen == SCREEN_OF_MAIN_WINDOW) {
p_screen = window_get_current_screen();
}

// Check if screen is valid
ERR_FAIL_INDEX(p_screen, get_screen_count());

if (window_get_mode(p_window) == WINDOW_MODE_FULLSCREEN) {
Point2i position = screen_get_position(p_screen);
Size2i size = screen_get_size(p_screen);
Expand Down

0 comments on commit e3dd38c

Please sign in to comment.