summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Meerwald-Stadler <pmeerw@pmeerw.net>2017-03-08 15:57:22 +0100
committerPeter Meerwald-Stadler <pmeerw@pmeerw.net>2017-03-09 13:51:51 +0100
commit2898a5188c8aea99f4b0e9492981d48099a499f4 (patch)
tree69091a35078cd75db593ae3289da529eddad2f0f
parentadd5a175b618b082cbe6cb53d7c7bf397dc71060 (diff)
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>
-rw-r--r--src/modules/raop/raop-client.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/modules/raop/raop-client.c b/src/modules/raop/raop-client.c
index 78f86a45..ae950f70 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);