]> git.sesse.net Git - ffmpeg/commitdiff
png_parser: Fix parsing on big endian
authorMartin Storsjö <martin@martin.st>
Wed, 18 Dec 2013 08:39:47 +0000 (10:39 +0200)
committerMartin Storsjö <martin@martin.st>
Wed, 18 Dec 2013 10:12:19 +0000 (12:12 +0200)
Since pc.state is populated by shifting in from the end of the
32 bit word, the content within pc.state is already in native endian
and should not be read with the AV_R{L,B} functions.

This was already done correctly for state64 above.

This fixes the fate-corepng test on big endian.

Signed-off-by: Martin Storsjö <martin@martin.st>
libavcodec/png_parser.c

index 00cbb8207141bac8be24ecf1f86465a27cf453ee..d07f288c4ba5aead5b67d51557808be288fce91f 100644 (file)
@@ -78,7 +78,7 @@ static int png_parse(AVCodecParserContext *s, AVCodecContext *avctx,
     for (; ppc->pc.frame_start_found && i < buf_size; i++) {
         ppc->pc.state = (ppc->pc.state << 8) | buf[i];
         if (ppc->chunk_pos == 3) {
-            ppc->chunk_length = AV_RL32(&ppc->pc.state);
+            ppc->chunk_length = ppc->pc.state;
             if (ppc->chunk_length > 0x7fffffff) {
                 ppc->chunk_pos = ppc->pc.frame_start_found = 0;
                 goto flush;
@@ -87,7 +87,7 @@ static int png_parse(AVCodecParserContext *s, AVCodecContext *avctx,
         } else if (ppc->chunk_pos == 7) {
             if (ppc->chunk_length >= buf_size - i)
                 ppc->remaining_size = ppc->chunk_length - buf_size + i + 1;
-            if (AV_RB32(&ppc->pc.state) == MKTAG('I', 'E', 'N', 'D')) {
+            if (ppc->pc.state == MKBETAG('I', 'E', 'N', 'D')) {
                 if (ppc->remaining_size)
                     ppc->chunk_pos = -1;
                 else