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
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C
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`)
- 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]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View file

@ -289,7 +289,12 @@ def flush_base64_data(self) -> None:
def write_base64_data(self, b: bytes) -> None:
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:
self.tempfile.write(decoded)
if self.max_size > 0 and self.tempfile.tell() > (self.max_size * 1024 * 1024):

View file

@ -189,7 +189,12 @@ def add_unencoded_data(self, data: Union[str, bytes]) -> None:
def add_base64_data(self, data: Union[str, bytes]) -> None:
if isinstance(data, str):
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:
self.decoder.reset()