sofia-sip: Fix undefined behavior in parsing

Symptoms with LCR: nta outgoing create: invalid URI

Take patch posted to the upstream project and carried by Debian
and Ubuntu for this project. Unroll the different fields by hand
to fix undefined behavior.
This commit is contained in:
Holger Hans Peter Freyther 2016-01-08 13:01:03 +01:00
parent 5428bbd10a
commit 87c73f768c
2 changed files with 39 additions and 1 deletions

View File

@ -0,0 +1,35 @@
--- sofia-sip-1.12.11+20110422.1.orig/libsofia-sip-ua/msg/msg_parser.c
+++ sofia-sip-1.12.11+20110422.1/libsofia-sip-ua/msg/msg_parser.c
@@ -2468,8 +2468,6 @@
msg_header_t **
msg_hclass_offset(msg_mclass_t const *mc, msg_pub_t const *mo, msg_hclass_t *hc)
{
- int i;
-
assert(mc && hc);
if (mc == NULL || hc == NULL)
@@ -2484,9 +2482,20 @@
}
else
/* Header has no name. */
- for (i = 0; i <= 6; i++)
- if (hc->hc_hash == mc->mc_request[i].hr_class->hc_hash)
- return (msg_header_t **)((char *)mo + mc->mc_request[i].hr_offset);
+ if (hc->hc_hash == mc->mc_request[0].hr_class->hc_hash)
+ return (msg_header_t **)((char *)mo + mc->mc_request[0].hr_offset);
+ else if (hc->hc_hash == mc->mc_status[0].hr_class->hc_hash)
+ return (msg_header_t **)((char *)mo + mc->mc_status[0].hr_offset);
+ else if (hc->hc_hash == mc->mc_separator[0].hr_class->hc_hash)
+ return (msg_header_t **)((char *)mo + mc->mc_separator[0].hr_offset);
+ else if (hc->hc_hash == mc->mc_payload[0].hr_class->hc_hash)
+ return (msg_header_t **)((char *)mo + mc->mc_payload[0].hr_offset);
+ else if (hc->hc_hash == mc->mc_unknown[0].hr_class->hc_hash)
+ return (msg_header_t **)((char *)mo + mc->mc_unknown[0].hr_offset);
+ else if (hc->hc_hash == mc->mc_error[0].hr_class->hc_hash)
+ return (msg_header_t **)((char *)mo + mc->mc_error[0].hr_offset);
+ else if (hc->hc_hash == mc->mc_multipart[0].hr_class->hc_hash)
+ return (msg_header_t **)((char *)mo + mc->mc_multipart[0].hr_offset);
return NULL;
}

View File

@ -5,7 +5,10 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=03068f550c635f6520e0f0252da412fc"
SECTION = "libs"
DEPENDS = "glib-2.0 openssl"
SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz"
SRC_URI = "\
${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz \
file://msg_parser.c.diff \
"
inherit autotools pkgconfig