From dd6f194014e7089429b776e723f77358013d6160 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 13 Jun 2026 00:11:36 +0000 Subject: [PATCH] Optimize yEnc decoding using C-backed translate tables Co-authored-by: xbmc4lyfe <273732874+xbmc4lyfe@users.noreply.github.com> --- verify_nzb.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/verify_nzb.py b/verify_nzb.py index 953dccd..5ee7ee5 100644 --- a/verify_nzb.py +++ b/verify_nzb.py @@ -115,18 +115,34 @@ def _parse_yenc_attrs(line: bytes) -> dict[str, str]: return attrs +# Precomputed translation tables for fast C-backed yEnc decoding. +# yEnc shifts all characters by 42. Escaped characters are shifted by an additional 64. +# Normal character: (char - 42) % 256 +_YENC_DECODE_TABLE = bytes((i - 42) % 256 for i in range(256)) +# Escaped character: (char - 64 - 42) % 256 = (char - 106) % 256 +_YENC_ESCAPE_TABLE = bytes((i - 106) % 256 for i in range(256)) + def _decode_yenc_lines(lines: Iterable[bytes]) -> bytes: decoded = bytearray() for line in lines: + escape_pos = line.find(b'=') + if escape_pos == -1: + decoded.extend(line.translate(_YENC_DECODE_TABLE)) + continue + index = 0 - while index < len(line): - byte = line[index] - if byte == 61: - index += 1 - if index >= len(line): - raise ValueError("dangling yEnc escape") - byte = (line[index] - 64) % 256 - decoded.append((byte - 42) % 256) + while True: + escape_pos = line.find(b'=', index) + if escape_pos == -1: + decoded.extend(line[index:].translate(_YENC_DECODE_TABLE)) + break + + decoded.extend(line[index:escape_pos].translate(_YENC_DECODE_TABLE)) + index = escape_pos + 1 + if index >= len(line): + raise ValueError("dangling yEnc escape") + + decoded.append(_YENC_ESCAPE_TABLE[line[index]]) index += 1 return bytes(decoded)