From 9ba4b3c946378b7001ff7b59730463335a15e245 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Tue, 10 Feb 2026 14:06:08 -0500 Subject: [PATCH] Bug 41811: SIP server will inadvertently remove non-alphanumeric characters from the end of a message If a message ends in a non-alphanumeric character, that character is stripped from the message. For example: 6300120260210 182641 AOMPL|AA23529000035676(| 64 00120260210 182831000000000000000000000000AOCPL|AA23529000035676|AEHenry Acevedo|BLY|BHUSD|BV0|CC5|BD4345 Library Rd. Springfield, MA 44224|BF(212) 555-1212|PB19580530|PCS|PIY|AFGreetings from Koha. | versus: 6300120260210 182641 AOMPL|AA23529000035676(|ACkoha| 64YYYY 00120260210 182835000000000000000000000000AOCPL|AA23529000035676(|AE|BLN|AFInvalid cardnumber| The former should be returning the same "Invalid cardnumber" message the latter does. Test Plan ( assumes you are using KTD ): 1) Install telnet: sudo apt install -y telnet 2) telnet 127.0.0.1 6001 3) Log in with: 9300CNkoha|COkoha|CPMPL| 4) Send the patron information request: 6300120260210 183346 AOMPL|AA23529000035676(| 5) Note you get a patron back 6) Apply this patch 7) Restart SIP! 8) Repeat steps 2-5 9) Noe you doe not get a patron back in the response! --- C4/SIP/SIPServer.pm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/C4/SIP/SIPServer.pm b/C4/SIP/SIPServer.pm index 186373b3c85..cc2c6ffb1ce 100644 --- a/C4/SIP/SIPServer.pm +++ b/C4/SIP/SIPServer.pm @@ -501,8 +501,11 @@ sub read_request { $raw_length = length $buffer; $buffer =~ s/^\s*[^A-z0-9]+//s; - # Every line must start with a "real" character. Not whitespace, control chars, etc. - $buffer =~ s/[^A-z0-9]+$//s; + # Remove leading/trailing control characters and whitespace. + # SIP2 messages should be a single printable line; this defensively + # cleans up stray CR/LF or junk from buggy or long-lived client connections. + $buffer =~ s/^[[:cntrl:]\s]+//; + $buffer =~ s/[[:cntrl:]\s]+$//; # Same for the end. Note this catches the problem some clients have sending empty fields at the end, like ||| $buffer =~ s/\015?\012//g; # Extra line breaks must die -- 2.50.1 (Apple Git-155)