Skip to content
  • Fabian Vogt's avatar
    Fixup protocol mismatch between greeter and kcheckpass · 23fa33ce
    Fabian Vogt authored
    Summary:
    The receiver (kcheckpass) reads a string and if it is !nullptr, reads an int:
    
    	msg = GRecvStr ();
    	if (msg && (GRecvInt() & IsPassword) && !*msg)
    
    The sender (kscreenlocker_greet) sends a string and if it is not empty,
    sends an int:
    
    	GSendStr(m_password.toUtf8().constData());
    	if (!m_password.isEmpty()) {
    		// IsSecret
    		GSendInt(1);
    	}
    
    This does not work out for empty strings, as those still have a length of 1,
    resulting in kcheckpass waiting indefinitely for an int that does not get sent.
    Testing for a nullptr on the sender side instead of the string length fixes this.
    
    Also clean up the code duplication and IsSecret (1)/IsPassword (2) mismatch.
    
    BUG: 380491
    
    Test Plan:
    Reproduced the bug without this patch, with this patch it does not
    happen anymore. Authentication still works and fails as expected.
    
    Reviewers: #plasma
    
    Subscribers: plasma-devel
    
    Tags: #plasma
    
    Differential Revision: https://phabricator.kde.org/D6091
    23fa33ce