diff --git a/libavformat/utils.c b/libavformat/utils.c index c85b119b9e..cb03c89c3f 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2875,7 +2875,7 @@ void url_split(char *proto, int proto_size, char *path, int path_size, const char *url) { - const char *p, *ls, *at, *col, *brk; + const char *p, *ls, *at, *col, *brk, *q; if (port_ptr) *port_ptr = -1; if (proto_size > 0) proto[0] = 0; @@ -2896,9 +2896,12 @@ void url_split(char *proto, int proto_size, } /* separate path from hostname */ - if ((ls = strchr(p, '/'))) - av_strlcpy(path, ls, path_size); - else + if ((ls = strchr(p, '/'))) { + if ((q = strchr(ls, '?'))) + av_strlcpy(path, ls, FFMIN(path_size, q - ls + 1)); + else + av_strlcpy(path, ls, path_size); + } else if (!(ls = strchr(p, '?'))) ls = &p[strlen(p)]; // XXX /* the rest is hostname, use that to parse auth/port */