mirror of
				https://gitlab.freedesktop.org/wayland/wayland.git
				synced 2025-11-03 09:01:42 -05:00 
			
		
		
		
	shm: Check width, height and stride for invalid values
This commit is contained in:
		
							parent
							
								
									0fe0eb330c
								
							
						
					
					
						commit
						f9edadf3f2
					
				
					 1 changed files with 12 additions and 2 deletions
				
			
		| 
						 | 
					@ -97,9 +97,9 @@ shm_create_buffer(struct wl_client *client, struct wl_shm *shm,
 | 
				
			||||||
			     struct wlsc_compositor, shm);
 | 
								     struct wlsc_compositor, shm);
 | 
				
			||||||
	struct wlsc_shm_buffer *buffer;
 | 
						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) {
 | 
						if (visual->object.interface != &wl_visual_interface) {
 | 
				
			||||||
		/* FIXME: Define a real exception event instead of
 | 
					 | 
				
			||||||
		 * abusing this one */
 | 
					 | 
				
			||||||
		wl_client_post_event(client,
 | 
							wl_client_post_event(client,
 | 
				
			||||||
				     (struct wl_object *) compositor->wl_display,
 | 
									     (struct wl_object *) compositor->wl_display,
 | 
				
			||||||
				     WL_DISPLAY_INVALID_OBJECT, 0);
 | 
									     WL_DISPLAY_INVALID_OBJECT, 0);
 | 
				
			||||||
| 
						 | 
					@ -108,6 +108,16 @@ shm_create_buffer(struct wl_client *client, struct wl_shm *shm,
 | 
				
			||||||
		return;
 | 
							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);
 | 
						buffer = malloc(sizeof *buffer);
 | 
				
			||||||
	if (buffer == NULL) {
 | 
						if (buffer == NULL) {
 | 
				
			||||||
		close(fd);
 | 
							close(fd);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue