Message ID | tencent_5FEB93A291A4AB1D5FCD5042F2AA4AC5E306@qq.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] libavformat/img2dec: fix unable to find svg format when the svg resources start with "<svg" | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/configure_x86 | warning | Failed to apply patch |
On Tue, 7 Mar 2023, 1035567130@qq.com wrote: > From: Wang Yaqiang <wangyaqiang03@kuaishou.com> > > svg is xml, but <?xml is not required, > it can start with <svg and can have multiple empty lines. > > Signed-off-by: Wang Yaqiang <wangyaqiang03@kuaishou.com> > --- > libavformat/img2dec.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c > index 5a63d7c81d..448a574b59 100644 > --- a/libavformat/img2dec.c > +++ b/libavformat/img2dec.c > @@ -25,6 +25,7 @@ > #define _DEFAULT_SOURCE > #define _BSD_SOURCE > #include <sys/stat.h> > +#include <ctype.h> Please no, use libavutil/avstring.h for av_isspace() instead. > #include "libavutil/avstring.h" > #include "libavutil/log.h" > #include "libavutil/opt.h" > @@ -964,18 +965,19 @@ static int svg_probe(const AVProbeData *p) > { > const uint8_t *b = p->buf; > const uint8_t *end = p->buf + p->buf_size; > - > - if (memcmp(p->buf, "<?xml", 5)) > + while (b && b < end && isspace(*b)) b++; av_isspace() > + if (b >= end - 5) return 0; line break before return > + if (memcmp(p->buf, "<?xml", 5) && memcmp(b, "<svg", 4)) > return 0; Why not simply return AVPROBE_SCORE_EXTENSION + 1 here for the <svg case? You don't have to change the rest that way which skips the first line which supposed to contain <?xml Regards, Marton > while (b < end) { > int inc = ff_subtitles_next_line(b); > if (!inc) > break; > + if (!memcmp(b, "<svg", 4)) > + return AVPROBE_SCORE_EXTENSION + 1; > b += inc; > if (b >= end - 4) > return 0; > - if (!memcmp(b, "<svg", 4)) > - return AVPROBE_SCORE_EXTENSION + 1; > } > return 0; > } > -- > 2.39.2 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". >
> 2023年3月9日 07:37,Marton Balint <cus@passwd.hu> 写道: > > > On Tue, 7 Mar 2023, 1035567130@qq.com <mailto:1035567130@qq.com> wrote: > >> From: Wang Yaqiang <wangyaqiang03@kuaishou.com> >> >> svg is xml, but <?xml is not required, >> it can start with <svg and can have multiple empty lines. >> >> Signed-off-by: Wang Yaqiang <wangyaqiang03@kuaishou.com> >> --- >> libavformat/img2dec.c | 10 ++++++---- >> 1 file changed, 6 insertions(+), 4 deletions(-) >> >> diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c >> index 5a63d7c81d..448a574b59 100644 >> --- a/libavformat/img2dec.c >> +++ b/libavformat/img2dec.c >> @@ -25,6 +25,7 @@ >> #define _DEFAULT_SOURCE >> #define _BSD_SOURCE >> #include <sys/stat.h> >> +#include <ctype.h> > > Please no, use libavutil/avstring.h for av_isspace() instead. Thanks,i will fix it > >> #include "libavutil/avstring.h" >> #include "libavutil/log.h" >> #include "libavutil/opt.h" >> @@ -964,18 +965,19 @@ static int svg_probe(const AVProbeData *p) >> { >> const uint8_t *b = p->buf; >> const uint8_t *end = p->buf + p->buf_size; >> - >> - if (memcmp(p->buf, "<?xml", 5)) >> + while (b && b < end && isspace(*b)) b++; > > av_isspace() Thanks,i will fix it. > >> + if (b >= end - 5) return 0; > > line break before return Thanks,i will fix it. > >> + if (memcmp(p->buf, "<?xml", 5) && memcmp(b, "<svg", 4)) >> return 0; > > Why not simply return AVPROBE_SCORE_EXTENSION + 1 here for the <svg case? You don't have to change the rest that way which skips the first line which supposed to contain <?xml > Thanks,i will fix it, and fix the case start with "<!—" > Regards, > Marton > >> while (b < end) { >> int inc = ff_subtitles_next_line(b); >> if (!inc) >> break; >> + if (!memcmp(b, "<svg", 4)) >> + return AVPROBE_SCORE_EXTENSION + 1; >> b += inc; >> if (b >= end - 4) >> return 0; >> - if (!memcmp(b, "<svg", 4)) >> - return AVPROBE_SCORE_EXTENSION + 1; >> } >> return 0; >> } >> -- >> 2.39.2 >> >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org> >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel> >> >> To unsubscribe, visit link above, or email >> ffmpeg-devel-request@ffmpeg.org <mailto:ffmpeg-devel-request@ffmpeg.org> with subject "unsubscribe". >> > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel> > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org <mailto:ffmpeg-devel-request@ffmpeg.org> with subject "unsubscribe".
diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c index 5a63d7c81d..448a574b59 100644 --- a/libavformat/img2dec.c +++ b/libavformat/img2dec.c @@ -25,6 +25,7 @@ #define _DEFAULT_SOURCE #define _BSD_SOURCE #include <sys/stat.h> +#include <ctype.h> #include "libavutil/avstring.h" #include "libavutil/log.h" #include "libavutil/opt.h" @@ -964,18 +965,19 @@ static int svg_probe(const AVProbeData *p) { const uint8_t *b = p->buf; const uint8_t *end = p->buf + p->buf_size; - - if (memcmp(p->buf, "<?xml", 5)) + while (b && b < end && isspace(*b)) b++; + if (b >= end - 5) return 0; + if (memcmp(p->buf, "<?xml", 5) && memcmp(b, "<svg", 4)) return 0; while (b < end) { int inc = ff_subtitles_next_line(b); if (!inc) break; + if (!memcmp(b, "<svg", 4)) + return AVPROBE_SCORE_EXTENSION + 1; b += inc; if (b >= end - 4) return 0; - if (!memcmp(b, "<svg", 4)) - return AVPROBE_SCORE_EXTENSION + 1; } return 0; }