# HG changeset patch # User Mychaela Falconia # Date 1662506142 28800 # Node ID f1cf80c7e2434bd7575afbb8dfac207d9045cd2f # Parent 30572642e85334c620925c212b30438c45b0a384 libsip/primary_parse.c: fully trim leading and trailing spaces diff -r 30572642e853 -r f1cf80c7e243 libsip/primary_parse.c --- a/libsip/primary_parse.c Mon Sep 05 10:37:36 2022 -0800 +++ b/libsip/primary_parse.c Tue Sep 06 15:15:42 2022 -0800 @@ -84,11 +84,23 @@ return(1); } +static void +trim_trailing_spaces(sp) + char *sp; +{ + char *ep; + + ep = index(sp, '\0'); + while (ep > sp && isspace(ep[-1])) + ep--; + *ep = '\0'; +} + parse_incoming_sip_msg(msg) struct sip_pkt_rx *msg; { char *msg_end = msg->pkt_buffer + msg->pkt_length; - char *cp, *endp, *nextp; + char *cp, *endp, *nextp, *sp; unsigned hdr_cnt; int rc; @@ -132,9 +144,7 @@ return(-1); } else return(-1); - while (cp < endp && isspace(*cp)) - cp++; - msg->hdr_fields[hdr_cnt++].field_value = cp; + sp = cp; cp = nextp; while (cp < msg_end && (*cp == ' ' || *cp == '\t')) { rc = find_crlf(cp, msg_end, &endp, &nextp); @@ -143,6 +153,10 @@ cp = nextp; } *endp = '\0'; + while (isspace(*sp)) + sp++; + trim_trailing_spaces(sp); + msg->hdr_fields[hdr_cnt++].field_value = sp; } msg->num_hdr_fields = hdr_cnt; msg->msg_body = nextp;