Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- ewmh.c_a 2014-01-20 17:39:11.238913114 +0400
- +++ ewmh.c 2014-01-20 22:49:51.560952817 +0400
- @@ -620,6 +620,8 @@
- ewmh_window_icon_from_reply(xcb_get_property_reply_t *r)
- {
- uint32_t *data;
- + uint64_t move;
- + uint32_t *selected_data;
- uint64_t len;
- if(!r || r->type != XCB_ATOM_CARDINAL || r->format != 32 || r->length < 2)
- @@ -633,11 +635,26 @@
- * overflow. <uint32_t> times <another uint32_t casted to uint64_t> always
- * fits into an uint64_t and thus this multiplication cannot overflow.
- */
- - len = data[0] * (uint64_t) data[1];
- - if (!data[0] || !data[1] || len > r->length - 2)
- - return 0;
- + selected_data = 0;
- + move = 0;
- +
- + do {
- + len = data[0] * (uint64_t) data[1];
- + if (!data[0] || !data[1] || len+move+2 > r->length) {
- + if(!selected_data) return 0;
- + else break;
- + }
- + if (data[0] == 16) {
- + selected_data = data;
- + break;
- + }
- + if (!selected_data)
- + selected_data = data;
- + move += len + 2;
- + data += move;
- + } while(move+2 < r->length);
- - return draw_surface_from_data(data[0], data[1], data + 2);
- + return draw_surface_from_data(selected_data[0], selected_data[1], selected_data + 2);
- }
- /** Get NET_WM_ICON.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement