mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	output_get_active_workspace: check workspaces length
If an output's node was dirty and the transaction was committed before a workspace was moved to or created for the output, the instruction would have a bad value for `state->active_workspace` due to a missing length check in `output_get_active_workspace`. If there was no focus on the output, the first workspace was being returned. If the workspace list was currently empty, the value was either garbage, or in the case of an output being disabled and re-enabled, a workspace that may have been previously freed. This just adds the length check to avoid returning out of bounds value.
This commit is contained in:
		
							parent
							
								
									099d25e975
								
							
						
					
					
						commit
						dca6c2ad8f
					
				
					 1 changed files with 3 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -320,6 +320,9 @@ struct sway_workspace *output_get_active_workspace(struct sway_output *output) {
 | 
			
		|||
	struct sway_seat *seat = input_manager_current_seat();
 | 
			
		||||
	struct sway_node *focus = seat_get_active_tiling_child(seat, &output->node);
 | 
			
		||||
	if (!focus) {
 | 
			
		||||
		if (!output->workspaces->length) {
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
		return output->workspaces->items[0];
 | 
			
		||||
	}
 | 
			
		||||
	return focus->sway_workspace;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue