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 <pmeerw@pmeerw.net>
Cc: Hajime Fujita <crisp.fujita@nifty.com>
This commit is contained in:
Peter Meerwald-Stadler 2017-03-08 15:57:22 +01:00
parent add5a175b6
commit 2898a5188c

View file

@ -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; pa_socket_client *sc = NULL;
uint32_t sport = DEFAULT_UDP_AUDIO_PORT; uint32_t sport = DEFAULT_UDP_AUDIO_PORT;
uint32_t cport =0, tport = 0; uint32_t cport =0, tport = 0;
char *ajs, *token, *pc; char *ajs, *token, *pc, *trs;
const char *token_state = NULL; const char *token_state = NULL;
char delimiters[] = ";"; 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); pa_socket_client_unref(sc);
sc = NULL; sc = NULL;
} else if (c->protocol == PA_RAOP_PROTOCOL_UDP) { } 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) { if (trs) {
/* Now parse out the server port component of the response. */ /* Now parse out the server port component of the response. */
while ((token = pa_split(trs, delimiters, &token_state))) { while ((token = pa_split(trs, delimiters, &token_state))) {
if ((pc = strstr(token, "="))) { if ((pc = strstr(token, "="))) {
*pc = 0; *pc = 0;
if (pa_streq(token, "control_port")) if (pa_streq(token, "control_port")) {
(void) pa_atou(pc + 1, &cport); if (pa_atou(pc + 1, &cport) < 0)
if (pa_streq(token, "timing_port")) goto setup_error_parse;
(void) pa_atou(pc + 1, &tport); }
if (pa_streq(token, "timing_port")) {
if (pa_atou(pc + 1, &tport) < 0)
goto setup_error_parse;
}
*pc = '='; *pc = '=';
} }
pa_xfree(token); 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); pa_xfree(ajs);
break; break;
setup_error_parse:
pa_log("Failed parsing server port components");
pa_xfree(token);
pa_xfree(trs);
/* fall-thru */
setup_error: setup_error:
if (c->tcp_sfd >= 0) if (c->tcp_sfd >= 0)
pa_close(c->tcp_sfd); pa_close(c->tcp_sfd);