From e3a977a2ec27afe2e0f693aaef89863c900d717c Mon Sep 17 00:00:00 2001 From: benya Date: Sat, 7 Feb 2026 23:14:51 +0300 Subject: [PATCH] Harden apt update parsing --- services/updates.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/services/updates.py b/services/updates.py index b3cf4f8..81f61be 100644 --- a/services/updates.py +++ b/services/updates.py @@ -1,4 +1,5 @@ import os +import re from services.runner import run_cmd @@ -30,19 +31,16 @@ async def list_updates() -> tuple[str, list[str]]: if not line or line.startswith("Listing..."): continue # Format: name/repo new_ver arch [upgradable from: old] - parts = line.split() - if len(parts) < 2: + m = re.match(r"^(\S+)\s+(\S+)\s", line) + if not m: continue - name_repo = parts[0] - new_ver = parts[1] - if "/" not in name_repo: - name = name_repo - else: - name = name_repo.split("/", 1)[0] + name_repo, new_ver = m.group(1), m.group(2) + name = name_repo.split("/", 1)[0] if "/" in name_repo else name_repo + old_ver = None - marker = "upgradable from: " - if marker in line: - old_ver = line.split(marker, 1)[1].rstrip("]").strip() + m_old = re.search(r"upgradable from:\s*([^\]]+)", line) + if m_old: + old_ver = m_old.group(1).strip() if old_ver: lines.append(f"{name}: {old_ver} -> {new_ver}") else: