From 4c1562f2458e73ccc99b605649872e15e5db66be Mon Sep 17 00:00:00 2001 From: Nick Steel Date: Wed, 13 Mar 2019 18:34:38 +0000 Subject: [PATCH] discover: do not panic on MAC mismatch. (Fixes #289) The client's expected MAC will not match librespot's derived MAC if the client used the wrong public key. This can happen if librespot is restarted (and thus generated a new key) but the client is still mistakingly using the old public key. When this happens we do not need to panic, we can just abort the connection attempt. --- connect/src/discovery.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/connect/src/discovery.rs b/connect/src/discovery.rs index 529c0ebd..739c62fc 100644 --- a/connect/src/discovery.rs +++ b/connect/src/discovery.rs @@ -132,7 +132,17 @@ impl Discovery { h.result().code().to_owned() }; - assert_eq!(&mac[..], cksum); + if mac != cksum { + warn!("Login error for user {:?}: MAC mismatch", username); + let result = json!({ + "status": 102, + "spotifyError": 1, + "statusString": "ERROR-MAC" + }); + + let body = result.to_string(); + return ::futures::finished(Response::new().with_body(body)) + } let decrypted = { let mut data = vec![0u8; encrypted.len()];