shm: Check width, height and stride for invalid values

dev
Kristian Høgsberg 14 years ago
parent 0fe0eb330c
commit f9edadf3f2
  1. 14
      compositor/shm.c

@ -97,9 +97,9 @@ shm_create_buffer(struct wl_client *client, struct wl_shm *shm,
struct wlsc_compositor, shm);
struct wlsc_shm_buffer *buffer;
/* FIXME: Define a real exception event instead of abusing the
* display.invalid_object error */
if (visual->object.interface != &wl_visual_interface) {
/* FIXME: Define a real exception event instead of
* abusing this one */
wl_client_post_event(client,
(struct wl_object *) compositor->wl_display,
WL_DISPLAY_INVALID_OBJECT, 0);
@ -108,6 +108,16 @@ shm_create_buffer(struct wl_client *client, struct wl_shm *shm,
return;
}
if (width < 0 || height < 0 || stride < width) {
wl_client_post_event(client,
(struct wl_object *) compositor->wl_display,
WL_DISPLAY_INVALID_OBJECT, 0);
fprintf(stderr,
"invalid width, height or stride in create_buffer\n");
close(fd);
return;
}
buffer = malloc(sizeof *buffer);
if (buffer == NULL) {
close(fd);

Loading…
Cancel
Save