From d944e2443d5bdb85594df1da48930db242860970 Mon Sep 17 00:00:00 2001 From: Oliver Hofmann Date: Tue, 2 Jun 2026 21:19:35 +0200 Subject: [PATCH] fix: PPD backslash typo, >8-digit code guard, NickName, build validation --- filter/kyofilter | 3 +++ installer/build.sh | 8 ++++++++ ppd/TA3505ci_AS.ppd | 6 +++--- tests/test_kyofilter.py | 3 +++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/filter/kyofilter b/filter/kyofilter index 582290f..05f2247 100755 --- a/filter/kyofilter +++ b/filter/kyofilter @@ -21,6 +21,9 @@ def get_account_code(options): code = km[2:] if not code.isdigit(): return None + if len(code) > 8: + sys.stderr.write(f"kyofilter: WARNING: department code '{code}' exceeds 8 digits, ignored\n") + return None return code.zfill(8) diff --git a/installer/build.sh b/installer/build.sh index 944fda2..acd4eab 100755 --- a/installer/build.sh +++ b/installer/build.sh @@ -15,6 +15,14 @@ cp filter/kyofilter \ installer/root/usr/libexec/cups/filter/ chmod 755 installer/root/usr/libexec/cups/filter/kyofilter +# Validate PPD (fail if it cannot be parsed at all) +echo "Validating PPD..." +cupstestppd installer/root/Library/Printers/PPDs/Contents/Resources/TA3505ci_AS.ppd 2>&1 \ + | grep -v "WARN\|8-Bit\|Übersetzung\|sollte\|Präfix\|übliches\|Seite\|Abschnitt" \ + | grep -v "FeedingEdgeConstraint\|kyofilter" \ + | grep "FEHLER" && { echo "ERROR: PPD has unexpected errors" >&2; exit 1; } || true +echo "PPD OK" + # Build (unsigned if SIGN_IDENTITY not set) SIGN_ARGS=() if [ -n "${SIGN_IDENTITY}" ]; then diff --git a/ppd/TA3505ci_AS.ppd b/ppd/TA3505ci_AS.ppd index 3ad1c5f..8786495 100644 --- a/ppd/TA3505ci_AS.ppd +++ b/ppd/TA3505ci_AS.ppd @@ -24,8 +24,8 @@ *PSVersion: "(3011.103) 1" *Manufacturer: "UTAX/TA" *ModelName: "3505ci KPDL" -*ShortNickName: "3505ci (KPDL)" -*NickName: "3505ci (KPDL)" +*ShortNickName: "3505ci (kydriv)" +*NickName: "3505ci (kydriv)" *PCFileName: "TA3505ci.PPD" *1284DeviceID: "MDL:3505ci;MFG:UTAX" @@ -3424,7 +3424,7 @@ userdict /180rotdetail true put *OpenUI *KmManagment/Job Accounting: PickOne *OrderDependency: 60 AnySetup *KmManagment *DefaultKmManagment: Default -\*KmManagment Default/Off: "" +*KmManagment Default/Off: "" *KmManagment MG12345/Code 12345: "" *?KmManagment: "" *End diff --git a/tests/test_kyofilter.py b/tests/test_kyofilter.py index 10f6269..20909b3 100644 --- a/tests/test_kyofilter.py +++ b/tests/test_kyofilter.py @@ -38,6 +38,9 @@ class TestGetAccountCode: def test_non_numeric_code_returns_none(self): assert kyofilter.get_account_code({"KmManagment": "MGabc45"}) is None + def test_nine_digit_code_returns_none(self): + assert kyofilter.get_account_code({"KmManagment": "MG123456789"}) is None + class TestProcessStream: def _stream(self, text):