[FFmpeg-devel] [PATCH v2] Handle the following type of relative URL correctly:
Clément Bœsch
ubitux at gmail.com
Tue Sep 25 21:51:52 CEST 2012
On Tue, Sep 25, 2012 at 07:19:32PM +0100, Duncan Salerno wrote:
> http://a/b + //c/d = http://c/d
Mmh after a though, shouldn't that be http://a/c/d since N * '/' should
just be interpreted as a '/'.
> http://a/b?c + ?d = http://a/b?d
> http://a/b?c/d + /e = http://a/e
>
> Updated with feedback from Clément Bœsch
> ---
> libavformat/utils.c | 28 +++++++++++++++++++++++-----
> 1 file changed, 23 insertions(+), 5 deletions(-)
>
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index e5826c1..d2d57f1 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -4467,17 +4467,23 @@ int ff_find_stream_index(AVFormatContext *s, int id)
> void ff_make_absolute_url(char *buf, int size, const char *base,
> const char *rel)
> {
> - char *sep;
> + char *sep, *path_query;
> /* Absolute path, relative to the current server */
> if (base && strstr(base, "://") && rel[0] == '/') {
> if (base != buf)
> av_strlcpy(buf, base, size);
> sep = strstr(buf, "://");
> if (sep) {
> - sep += 3;
> - sep = strchr(sep, '/');
> - if (sep)
> - *sep = '\0';
> + /* Take scheme from base url */
> + if (rel[1] == '/')
> + sep[1] = '\0';
> + else {
> + /* Take scheme and host from base url */
> + sep += 3;
> + sep = strchr(sep, '/');
> + if (sep)
> + *sep = '\0';
> + }
> }
> av_strlcat(buf, rel, size);
> return;
> @@ -4489,6 +4495,18 @@ void ff_make_absolute_url(char *buf, int size, const char *base,
> }
> if (base != buf)
> av_strlcpy(buf, base, size);
> +
> + /* Strip off any query string from base */
> + path_query = strchr(buf, '?');
> + if (path_query != NULL)
> + *path_query = '\0';
> +
> + /* Is relative path just a new query part? */
> + if (rel[0] == '?') {
> + av_strlcat(buf, rel, size);
> + return;
> + }
> +
> /* Remove the file name from the base url */
> sep = strrchr(buf, '/');
> if (sep)
No more comment from me.
[...]
Note: could be nice to have a bunch of test-cases to run with this
function.
--
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20120925/75742e92/attachment.asc>
More information about the ffmpeg-devel
mailing list