Catch keyerrors in amp box, as per #1306

This commit is contained in:
Griatch 2019-01-23 21:15:14 +01:00
parent 9e55741818
commit 7baf3fe5b3

View file

@ -279,13 +279,19 @@ class AMPMultiConnectionProtocol(amp.AMP):
if data[-2:] != NULNUL:
# an incomplete AMP box means more batches are forthcoming.
self.multibatches += 1
super(AMPMultiConnectionProtocol, self).dataReceived(data)
try:
super(AMPMultiConnectionProtocol, self).dataReceived(data)
except KeyError:
_LOGGER.trace("Discarded incoming partial data: {}".format(to_str(data)))
elif self.multibatches:
# invalid AMP, but we have a pending multi-batch that is not yet complete
if data[-2:] == NULNUL:
# end of existing multibatch
self.multibatches = max(0, self.multibatches - 1)
super(AMPMultiConnectionProtocol, self).dataReceived(data)
try:
super(AMPMultiConnectionProtocol, self).dataReceived(data)
except KeyError:
_LOGGER.trace("Discarded incoming multi-batch data:".format(to_str(data)))
else:
# not an AMP communication, return warning
self.transport.write(_HTTP_WARNING)