Lines 3131-3137
Link Here
|
3131 |
if (path_size > 0) path[0] = 0; |
3131 |
if (path_size > 0) path[0] = 0; |
3132 |
|
3132 |
|
3133 |
/* parse protocol */ |
3133 |
/* parse protocol */ |
3134 |
if ((p = strchr(url, ':'))) { |
3134 |
if ((p = (char *)strchr(url, ':'))) { |
3135 |
av_strlcpy(proto, url, FFMIN(proto_size, p + 1 - url)); |
3135 |
av_strlcpy(proto, url, FFMIN(proto_size, p + 1 - url)); |
3136 |
p++; /* skip ':' */ |
3136 |
p++; /* skip ':' */ |
3137 |
if (*p == '/') p++; |
3137 |
if (*p == '/') p++; |
Lines 3143-3172
Link Here
|
3143 |
} |
3143 |
} |
3144 |
|
3144 |
|
3145 |
/* separate path from hostname */ |
3145 |
/* separate path from hostname */ |
3146 |
if ((ls = strchr(p, '/'))) { |
3146 |
if ((ls = (char *)strchr(p, '/'))) { |
3147 |
if ((q = strchr(ls, '?'))) |
3147 |
if ((q = (char *)strchr(ls, '?'))) |
3148 |
av_strlcpy(path, ls, FFMIN(path_size, q - ls + 1)); |
3148 |
av_strlcpy(path, ls, FFMIN(path_size, q - ls + 1)); |
3149 |
else |
3149 |
else |
3150 |
av_strlcpy(path, ls, path_size); |
3150 |
av_strlcpy(path, ls, path_size); |
3151 |
} else if (!(ls = strchr(p, '?'))) |
3151 |
} else if (!(ls = (char *)strchr(p, '?'))) |
3152 |
ls = &p[strlen(p)]; // XXX |
3152 |
ls = &p[strlen(p)]; // XXX |
3153 |
|
3153 |
|
3154 |
/* the rest is hostname, use that to parse auth/port */ |
3154 |
/* the rest is hostname, use that to parse auth/port */ |
3155 |
if (ls != p) { |
3155 |
if (ls != p) { |
3156 |
/* authorization (user[:pass]@hostname) */ |
3156 |
/* authorization (user[:pass]@hostname) */ |
3157 |
if ((at = strchr(p, '@')) && at < ls) { |
3157 |
if ((at = (char *)strchr(p, '@')) && at < ls) { |
3158 |
av_strlcpy(authorization, p, |
3158 |
av_strlcpy(authorization, p, |
3159 |
FFMIN(authorization_size, at + 1 - p)); |
3159 |
FFMIN(authorization_size, at + 1 - p)); |
3160 |
p = at + 1; /* skip '@' */ |
3160 |
p = at + 1; /* skip '@' */ |
3161 |
} |
3161 |
} |
3162 |
|
3162 |
|
3163 |
if (*p == '[' && (brk = strchr(p, ']')) && brk < ls) { |
3163 |
if (*p == '[' && (brk = (char *)strchr(p, ']')) && brk < ls) { |
3164 |
/* [host]:port */ |
3164 |
/* [host]:port */ |
3165 |
av_strlcpy(hostname, p + 1, |
3165 |
av_strlcpy(hostname, p + 1, |
3166 |
FFMIN(hostname_size, brk - p)); |
3166 |
FFMIN(hostname_size, brk - p)); |
3167 |
if (brk[1] == ':' && port_ptr) |
3167 |
if (brk[1] == ':' && port_ptr) |
3168 |
*port_ptr = atoi(brk + 2); |
3168 |
*port_ptr = atoi(brk + 2); |
3169 |
} else if ((col = strchr(p, ':')) && col < ls) { |
3169 |
} else if ((col = (char *)strchr(p, ':')) && col < ls) { |
3170 |
av_strlcpy(hostname, p, |
3170 |
av_strlcpy(hostname, p, |
3171 |
FFMIN(col + 1 - p, hostname_size)); |
3171 |
FFMIN(col + 1 - p, hostname_size)); |
3172 |
if (port_ptr) *port_ptr = atoi(col + 1); |
3172 |
if (port_ptr) *port_ptr = atoi(col + 1); |