diff options
author | Michael Stapelberg <michael@stapelberg.de> | 2011-12-28 23:05:02 +0100 |
---|---|---|
committer | Michael Stapelberg <michael@stapelberg.de> | 2011-12-28 23:05:02 +0100 |
commit | 1b757b2aa9c93dc3e802f015ef23daa11de6b081 (patch) | |
tree | 6a5cd60d3050d37ecc7126cf8d557188b77a00d9 | |
parent | f216517bb01266ccc59a18deeccf9d6bf49e9db6 (diff) |
Properly free X11 resources (fixes DoS bug) (Thanks Merovius)
-rw-r--r-- | i3lock.c | 3 | ||||
-rw-r--r-- | xcb.c | 1 |
2 files changed, 4 insertions, 0 deletions
@@ -269,6 +269,7 @@ static void redraw_screen() { /* XXX: Possible optimization: Only update the area in the middle of the * screen instead of the whole screen. */ xcb_clear_area(conn, 0, win, 0, 0, scr->width_in_pixels, scr->height_in_pixels); + xcb_free_pixmap(conn, bg_pixmap); xcb_flush(conn); } @@ -571,6 +572,7 @@ void handle_screen_resize(xcb_visualtype_t *vistype, xcb_window_t win, uint32_t* if (img) { xcb_pixmap_t bg_pixmap = draw_image(vistype, last_resolution); xcb_change_window_attributes(conn, win, XCB_CW_BACK_PIXMAP, (uint32_t[1]){ bg_pixmap }); + xcb_free_pixmap(conn, bg_pixmap); } #endif @@ -830,6 +832,7 @@ int main(int argc, char *argv[]) { /* open the fullscreen window, already with the correct pixmap in place */ win = open_fullscreen_window(conn, scr, color, bg_pixmap); + xcb_free_pixmap(conn, bg_pixmap); cursor = create_cursor(conn, scr, win, curs_choice); @@ -90,6 +90,7 @@ xcb_pixmap_t create_bg_pixmap(xcb_connection_t *conn, xcb_screen_t *scr, u_int32 xcb_create_gc(conn, gc, bg_pixmap, XCB_GC_FOREGROUND, values); xcb_rectangle_t rect = { 0, 0, resolution[0], resolution[1] }; xcb_poly_fill_rectangle(conn, bg_pixmap, gc, 1, &rect); + xcb_free_gc(conn, gc); return bg_pixmap; } |