compositor: Handle OOM in weston_buffer_from_resource()

Handle NULL-return in call-sites as well.
diff --git a/src/compositor.c b/src/compositor.c
index 8da348a..c084b92 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1077,17 +1077,18 @@
 	listener = wl_resource_get_destroy_listener(resource,
 						    weston_buffer_destroy_handler);
 
-	if (listener) {
-		buffer = container_of(listener, struct weston_buffer,
-				      destroy_listener);
-	} else {
-		buffer = zalloc(sizeof *buffer);
-		buffer->resource = resource;
-		wl_signal_init(&buffer->destroy_signal);
-		buffer->destroy_listener.notify = weston_buffer_destroy_handler;
-		wl_resource_add_destroy_listener(resource,
-						 &buffer->destroy_listener);
-	}
+	if (listener)
+		return container_of(listener, struct weston_buffer,
+				    destroy_listener);
+
+	buffer = zalloc(sizeof *buffer);
+	if (buffer == NULL)
+		return NULL;
+
+	buffer->resource = resource;
+	wl_signal_init(&buffer->destroy_signal);
+	buffer->destroy_listener.notify = weston_buffer_destroy_handler;
+	wl_resource_add_destroy_listener(resource, &buffer->destroy_listener);
 	
 	return buffer;
 }
@@ -1443,6 +1444,10 @@
 
 	if (buffer_resource)
 		buffer = weston_buffer_from_resource(buffer_resource);
+	if (buffer == NULL) {
+		wl_client_post_no_memory(client);
+		return;
+	}
 
 	/* Attach, attach, without commit in between does not send
 	 * wl_buffer.release. */
diff --git a/src/screenshooter.c b/src/screenshooter.c
index 2414015..a89194e 100644
--- a/src/screenshooter.c
+++ b/src/screenshooter.c
@@ -180,6 +180,10 @@
 	struct weston_buffer *buffer =
 		weston_buffer_from_resource(buffer_resource);
 
+	if (buffer == NULL) {
+		wl_resource_post_no_memory(resource);
+		return;
+	}
 	if (!wl_shm_buffer_get(buffer->resource))
 		return;