mirror of
				https://gitlab.freedesktop.org/wayland/wayland.git
				synced 2025-11-03 09:01:42 -05:00 
			
		
		
		
	wayland-util: return -1 if wl_array_copy() fails
We might have to perform memory allocations in wl_array_copy(), so catch out-of-memory errors in wl_array_add() and return -1 before changing any state. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
		
							parent
							
								
									66e4aa98cf
								
							
						
					
					
						commit
						0d5850e6d6
					
				
					 2 changed files with 10 additions and 4 deletions
				
			
		| 
						 | 
					@ -132,12 +132,18 @@ wl_array_add(struct wl_array *array, size_t size)
 | 
				
			||||||
	return p;
 | 
						return p;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WL_EXPORT void
 | 
					WL_EXPORT int
 | 
				
			||||||
wl_array_copy(struct wl_array *array, struct wl_array *source)
 | 
					wl_array_copy(struct wl_array *array, struct wl_array *source)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	array->size = 0;
 | 
						if (array->size < source->size) {
 | 
				
			||||||
	wl_array_add(array, source->size);
 | 
							if (!wl_array_add(array, source->size - array->size))
 | 
				
			||||||
 | 
								return -1;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							array->size = source->size;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memcpy(array->data, source->data, source->size);
 | 
						memcpy(array->data, source->data, source->size);
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
union map_entry {
 | 
					union map_entry {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -165,7 +165,7 @@ struct wl_array {
 | 
				
			||||||
void wl_array_init(struct wl_array *array);
 | 
					void wl_array_init(struct wl_array *array);
 | 
				
			||||||
void wl_array_release(struct wl_array *array);
 | 
					void wl_array_release(struct wl_array *array);
 | 
				
			||||||
void *wl_array_add(struct wl_array *array, size_t size);
 | 
					void *wl_array_add(struct wl_array *array, size_t size);
 | 
				
			||||||
void wl_array_copy(struct wl_array *array, struct wl_array *source);
 | 
					int wl_array_copy(struct wl_array *array, struct wl_array *source);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef int32_t wl_fixed_t;
 | 
					typedef int32_t wl_fixed_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue