Reset base64 streaming decoder after invalid input

Fixes #7757
This commit is contained in:
Kovid Goyal
2024-08-20 17:37:25 +05:30
parent 2ac26b0e6d
commit d75d372da0
3 changed files with 14 additions and 2 deletions

View File

@@ -83,6 +83,8 @@ Detailed list of changes
- Remote control: Fix a regression causing an escape code to leak when using @ launch with ``--no-response`` over the TTY (:iss:`7752`) - Remote control: Fix a regression causing an escape code to leak when using @ launch with ``--no-response`` over the TTY (:iss:`7752`)
- OSC 52: Fix a regression in the previous release that broke handling of invalid base64 encoded data in OSC 52 requests (:iss:`7757`)
0.36.0 [2024-08-17] 0.36.0 [2024-08-17]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -289,7 +289,12 @@ class WriteRequest:
def write_base64_data(self, b: bytes) -> None: def write_base64_data(self, b: bytes) -> None:
if not self.max_size_exceeded: if not self.max_size_exceeded:
decoded = self.decoder.decode(b) try:
decoded = self.decoder.decode(b)
except ValueError:
log_error('Clipboard write request has invalid data, ignoring this chunk of data')
self.decoder.reset()
decoded = b''
if decoded: if decoded:
self.tempfile.write(decoded) self.tempfile.write(decoded)
if self.max_size > 0 and self.tempfile.tell() > (self.max_size * 1024 * 1024): if self.max_size > 0 and self.tempfile.tell() > (self.max_size * 1024 * 1024):

View File

@@ -189,7 +189,12 @@ class EncodedDataStore:
def add_base64_data(self, data: Union[str, bytes]) -> None: def add_base64_data(self, data: Union[str, bytes]) -> None:
if isinstance(data, str): if isinstance(data, str):
data = data.encode('ascii') data = data.encode('ascii')
self.data_store(self.decoder.decode(data)) try:
decoded = self.decoder.decode(data)
except ValueError:
log_error('Ignoring invalid base64 encoded data in notification request')
else:
self.data_store(decoded)
def flush_encoded_data(self) -> None: def flush_encoded_data(self) -> None:
self.decoder.reset() self.decoder.reset()