vlc | branch: master | Filip Roséen <[email protected]> | Thu Feb 25 10:23:29 2016 +0100| [94df4c46deb22530d8bd7db328bac74934cee2c6] | committer: Jean-Baptiste Kempf
realrtsp: fixed `rtsp_search_answers` (bounds + error-checking) Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=94df4c46deb22530d8bd7db328bac74934cee2c6 --- modules/access/rtsp/rtsp.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/modules/access/rtsp/rtsp.c b/modules/access/rtsp/rtsp.c index 44e397b..82d0ed5 100644 --- a/modules/access/rtsp/rtsp.c +++ b/modules/access/rtsp/rtsp.c @@ -583,22 +583,30 @@ void rtsp_close( rtsp_client_t *rtsp ) char *rtsp_search_answers( rtsp_client_t *rtsp, const char *tag ) { - char **answer; + char **answers; char *ptr; + int i; - if( !rtsp->p_private->answers ) return NULL; - answer = rtsp->p_private->answers; + if(rtsp->p_private->answers == NULL || tag == NULL) + return NULL; - while(*answer) - { - if( !strncasecmp( *answer, tag, strlen(tag) ) ) - { - ptr = strchr(*answer, ':'); - ptr++; - while( *ptr == ' ' ) ptr++; - return ptr; - } - answer++; + answers = rtsp->p_private->answers; + + for (i = 0; i < MAX_FIELDS; ++i) { + if (answers[i] == NULL) + break; + + if (!strncasecmp(answers[i], tag, strlen(tag))){ + ptr = strchr(answers[i], ':'); + + if (ptr == NULL) + return answers[i] + strlen(answers[i]); /* no payload => empty string */ + + for (++ptr; *ptr == ' '; ++ptr) + ; + + return ptr; + } } return NULL; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
