MPD: Don't crash when receiving invalid data
This commit is contained in:
parent
d00c47ec88
commit
3c3d2728ad
@ -70,10 +70,13 @@ class MpdSession(asynchat.async_chat):
|
||||
def found_terminator(self):
|
||||
data = ''.join(self.input_buffer).strip()
|
||||
self.input_buffer = []
|
||||
request = data.decode(ENCODING)
|
||||
logger.debug(u'Input ([%s]:%s): %s', self.client_address,
|
||||
self.client_port, indent(request))
|
||||
self.handle_request(request)
|
||||
try:
|
||||
request = data.decode(ENCODING)
|
||||
logger.debug(u'Input ([%s]:%s): %s', self.client_address,
|
||||
self.client_port, indent(request))
|
||||
self.handle_request(request)
|
||||
except UnicodeDecodeError as e:
|
||||
logger.warning(u'Received invalid data: %s', e)
|
||||
|
||||
def handle_request(self, request):
|
||||
my_end, other_end = multiprocessing.Pipe()
|
||||
|
||||
16
tests/mpd/server_test.py
Normal file
16
tests/mpd/server_test.py
Normal file
@ -0,0 +1,16 @@
|
||||
import unittest
|
||||
|
||||
from mopidy.mpd.server import MpdSession
|
||||
|
||||
class MpdServerTest(unittest.TestCase):
|
||||
pass # TODO
|
||||
|
||||
class MpdSessionTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.session = MpdSession(None, None, (None, None), None)
|
||||
|
||||
def test_found_terminator_catches_decode_error(self):
|
||||
# Pressing Ctrl+C in a telnet session sends a 0xff byte to the server.
|
||||
self.session.input_buffer = ['\xff']
|
||||
self.session.found_terminator()
|
||||
self.assertEqual(len(self.session.input_buffer), 0)
|
||||
Loading…
Reference in New Issue
Block a user