mirror of
				https://github.com/glfw/glfw.git
				synced 2025-11-03 22:04:15 +00:00 
			
		
		
		
	X11: Fix returned clipboard string freed too early
The clipboard string should not be freed on SelectionClear. The user may have received it from glfwGetClipboardString and it should remain valid until the next call to a public clipboard string function.
This commit is contained in:
		
							parent
							
								
									06089a91a6
								
							
						
					
					
						commit
						f60547ac80
					
				@ -865,20 +865,6 @@ static Atom writeTargetToProperty(const XSelectionRequestEvent* request)
 | 
			
		||||
    return None;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void handleSelectionClear(XEvent* event)
 | 
			
		||||
{
 | 
			
		||||
    if (event->xselectionclear.selection == _glfw.x11.PRIMARY)
 | 
			
		||||
    {
 | 
			
		||||
        _glfw_free(_glfw.x11.primarySelectionString);
 | 
			
		||||
        _glfw.x11.primarySelectionString = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        _glfw_free(_glfw.x11.clipboardString);
 | 
			
		||||
        _glfw.x11.clipboardString = NULL;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void handleSelectionRequest(XEvent* event)
 | 
			
		||||
{
 | 
			
		||||
    const XSelectionRequestEvent* request = &event->xselectionrequest;
 | 
			
		||||
@ -1171,12 +1157,7 @@ static void processEvent(XEvent *event)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (event->type == SelectionClear)
 | 
			
		||||
    {
 | 
			
		||||
        handleSelectionClear(event);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    else if (event->type == SelectionRequest)
 | 
			
		||||
    if (event->type == SelectionRequest)
 | 
			
		||||
    {
 | 
			
		||||
        handleSelectionRequest(event);
 | 
			
		||||
        return;
 | 
			
		||||
@ -1853,10 +1834,6 @@ void _glfwPushSelectionToManagerX11(void)
 | 
			
		||||
                    handleSelectionRequest(&event);
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case SelectionClear:
 | 
			
		||||
                    handleSelectionClear(&event);
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case SelectionNotify:
 | 
			
		||||
                {
 | 
			
		||||
                    if (event.xselection.target == _glfw.x11.SAVE_TARGETS)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user