From 2898a5188c8aea99f4b0e9492981d48099a499f4 Mon Sep 17 00:00:00 2001 From: Peter Meerwald-Stadler Date: Wed, 8 Mar 2017 15:57:22 +0100 Subject: [PATCH] raop: Error out on parsing server port component don't ignore server port parsing errors as suggested by Hajime Fujita Signed-off-by: Peter Meerwald-Stadler Cc: Hajime Fujita --- src/modules/raop/raop-client.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/modules/raop/raop-client.c b/src/modules/raop/raop-client.c index 78f86a4..ae950f7 100644 --- a/src/modules/raop/raop-client.c +++ b/src/modules/raop/raop-client.c @@ -988,7 +988,7 @@ static void rtsp_stream_cb(pa_rtsp_client *rtsp, pa_rtsp_state_t state, pa_rtsp_ pa_socket_client *sc = NULL; uint32_t sport = DEFAULT_UDP_AUDIO_PORT; uint32_t cport =0, tport = 0; - char *ajs, *token, *pc; + char *ajs, *token, *pc, *trs; const char *token_state = NULL; char delimiters[] = ";"; @@ -1031,17 +1031,21 @@ static void rtsp_stream_cb(pa_rtsp_client *rtsp, pa_rtsp_state_t state, pa_rtsp_ pa_socket_client_unref(sc); sc = NULL; } else if (c->protocol == PA_RAOP_PROTOCOL_UDP) { - char *trs = pa_xstrdup(pa_headerlist_gets(headers, "Transport")); + trs = pa_xstrdup(pa_headerlist_gets(headers, "Transport")); if (trs) { /* Now parse out the server port component of the response. */ while ((token = pa_split(trs, delimiters, &token_state))) { if ((pc = strstr(token, "="))) { *pc = 0; - if (pa_streq(token, "control_port")) - (void) pa_atou(pc + 1, &cport); - if (pa_streq(token, "timing_port")) - (void) pa_atou(pc + 1, &tport); + if (pa_streq(token, "control_port")) { + if (pa_atou(pc + 1, &cport) < 0) + goto setup_error_parse; + } + if (pa_streq(token, "timing_port")) { + if (pa_atou(pc + 1, &tport) < 0) + goto setup_error_parse; + } *pc = '='; } pa_xfree(token); @@ -1072,6 +1076,11 @@ static void rtsp_stream_cb(pa_rtsp_client *rtsp, pa_rtsp_state_t state, pa_rtsp_ pa_xfree(ajs); break; + setup_error_parse: + pa_log("Failed parsing server port components"); + pa_xfree(token); + pa_xfree(trs); + /* fall-thru */ setup_error: if (c->tcp_sfd >= 0) pa_close(c->tcp_sfd); -- 2.7.4