[FFmpeg-devel] [PATCH v2 1/2] avformat/url: check double dot is not to parent directory

刘歧 lq at chinaffmpeg.org
Sat Jul 25 09:27:11 EEST 2020



在 2020/7/25 下午2:11,“ffmpeg-devel 代表 Zlomek, Josef”<ffmpeg-devel-bounces at ffmpeg.org 代表 josef at pex.com> 写入:

    Hi Steven,
    
    It is better but still not correct. Consider this test:
    
    test("http://server/foo/bar",
    "a/b/../c/d/../e../.../..f/g../h../other/url/a.mp3/...");
    It should give "
    http://server/foo/bar/a/c/e../.../..f/g../h../other/url/a.mp3/...".
    
    I think the best would be to use strtok(p, "/") to split the path into the
    components and for each ".." component remove the previous one (if there
    are some still).
I think you can submit patch if you have full idea for it.
    
    Best regards,
    Josef
    
    On Sat, Jul 25, 2020 at 4:45 AM Steven Liu <lq at chinaffmpeg.org> wrote:
    
    > fix ticket: 8814
    > if get ".." in the url, check next byte and lead byte by double dot,
    > it there have no '/' and not root node, it is not used go to directory ".."
    >
    > Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
    > ---
    >  libavformat/url.c | 12 ++++++++++++
    >  1 file changed, 12 insertions(+)
    >
    > diff --git a/libavformat/url.c b/libavformat/url.c
    > index 20463a6674..35f27fe3ca 100644
    > --- a/libavformat/url.c
    > +++ b/libavformat/url.c
    > @@ -97,6 +97,18 @@ static void trim_double_dot_url(char *buf, const char
    > *rel, int size)
    >      /* set new current position if the root node is changed */
    >      p = root;
    >      while (p && (node = strstr(p, ".."))) {
    > +        if (strlen(node) > 2 && node[2] != '/') {
    > +            node = strstr(node + 1, "..");
    > +            if (!node)
    > +                break;
    > +        }
    > +
    > +        if (p != node && p[node - p - 1] != '/') {
    > +            node = strstr(node + 1, "..");
    > +            if (!node)
    > +                break;
    > +        }
    > +
    >          av_strlcat(tmp_path, p, node - p + strlen(tmp_path));
    >          p = node + 3;
    >          sep = strrchr(tmp_path, '/');
    > --
    > 2.25.0
    >
    >
    >
    >
    > _______________________________________________
    > ffmpeg-devel mailing list
    > ffmpeg-devel at ffmpeg.org
    > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
    >
    > To unsubscribe, visit link above, or email
    > ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
    
    
    
    -- 
    Josef Zlomek
    _______________________________________________
    ffmpeg-devel mailing list
    ffmpeg-devel at ffmpeg.org
    https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
    
    To unsubscribe, visit link above, or email
    ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".






More information about the ffmpeg-devel mailing list