MPD: Don't crash when receiving invalid data

This commit is contained in:
Stein Magnus Jodal 2010-06-20 21:51:15 +02:00
parent d00c47ec88
commit 3c3d2728ad
2 changed files with 23 additions and 4 deletions

View File

@ -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
View 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)