Gitweb links:

...log 
http://git.netsurf-browser.org/libnsgif.git/shortlog/dabc6307eaa9e93958fd7d6084bb154e0ae03c54
...commit 
http://git.netsurf-browser.org/libnsgif.git/commit/dabc6307eaa9e93958fd7d6084bb154e0ae03c54
...tree 
http://git.netsurf-browser.org/libnsgif.git/tree/dabc6307eaa9e93958fd7d6084bb154e0ae03c54

The branch, master has been updated
       via  dabc6307eaa9e93958fd7d6084bb154e0ae03c54 (commit)
      from  a507bb77e88a3e8c4b654a6d7fb7351db8a3ec32 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/libnsgif.git/commit/?id=dabc6307eaa9e93958fd7d6084bb154e0ae03c54
commit dabc6307eaa9e93958fd7d6084bb154e0ae03c54
Author: Michael Drake <[email protected]>
Commit: Michael Drake <[email protected]>

    GIF: Don't call bitmap_modified after for clear frame disposal method.
    
    Due to recursion through gif_internal_decode_frame, the inner call
    through the function for the clear would call modified, but the
    outer call would already have done its get_buffer, and then do
    the the decode and call modified again.
    
    This would break cases where clients do any buffer data
    transformation, since the decode would be done on top of
    a client buffer representation rather than a libnsfb buffer
    representation.

diff --git a/src/libnsgif.c b/src/libnsgif.c
index 2bea30e..16bb78a 100644
--- a/src/libnsgif.c
+++ b/src/libnsgif.c
@@ -1049,22 +1049,24 @@ gif_internal_decode_frame(gif_animation *gif,
        }
 gif_decode_frame_exit:
 
-       /* Check if we should test for optimisation */
-       if (gif->frames[frame].virgin) {
-               if (gif->bitmap_callbacks.bitmap_test_opaque) {
-                       gif->frames[frame].opaque = 
gif->bitmap_callbacks.bitmap_test_opaque(gif->frame_image);
-               } else {
-                       gif->frames[frame].opaque = false;
+       if (!clear_image) {
+               if (gif->bitmap_callbacks.bitmap_modified) {
+                       gif->bitmap_callbacks.bitmap_modified(gif->frame_image);
                }
-               gif->frames[frame].virgin = false;
-       }
 
-       if (gif->bitmap_callbacks.bitmap_set_opaque) {
-               gif->bitmap_callbacks.bitmap_set_opaque(gif->frame_image, 
gif->frames[frame].opaque);
-       }
+               /* Check if we should test for optimisation */
+               if (gif->frames[frame].virgin) {
+                       if (gif->bitmap_callbacks.bitmap_test_opaque) {
+                               gif->frames[frame].opaque = 
gif->bitmap_callbacks.bitmap_test_opaque(gif->frame_image);
+                       } else {
+                               gif->frames[frame].opaque = false;
+                       }
+                       gif->frames[frame].virgin = false;
+               }
 
-       if (gif->bitmap_callbacks.bitmap_modified) {
-               gif->bitmap_callbacks.bitmap_modified(gif->frame_image);
+               if (gif->bitmap_callbacks.bitmap_set_opaque) {
+                       
gif->bitmap_callbacks.bitmap_set_opaque(gif->frame_image, 
gif->frames[frame].opaque);
+               }
        }
 
        /* Restore the buffer position */


-----------------------------------------------------------------------

Summary of changes:
 src/libnsgif.c |   28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/src/libnsgif.c b/src/libnsgif.c
index 2bea30e..16bb78a 100644
--- a/src/libnsgif.c
+++ b/src/libnsgif.c
@@ -1049,22 +1049,24 @@ gif_internal_decode_frame(gif_animation *gif,
        }
 gif_decode_frame_exit:
 
-       /* Check if we should test for optimisation */
-       if (gif->frames[frame].virgin) {
-               if (gif->bitmap_callbacks.bitmap_test_opaque) {
-                       gif->frames[frame].opaque = 
gif->bitmap_callbacks.bitmap_test_opaque(gif->frame_image);
-               } else {
-                       gif->frames[frame].opaque = false;
+       if (!clear_image) {
+               if (gif->bitmap_callbacks.bitmap_modified) {
+                       gif->bitmap_callbacks.bitmap_modified(gif->frame_image);
                }
-               gif->frames[frame].virgin = false;
-       }
 
-       if (gif->bitmap_callbacks.bitmap_set_opaque) {
-               gif->bitmap_callbacks.bitmap_set_opaque(gif->frame_image, 
gif->frames[frame].opaque);
-       }
+               /* Check if we should test for optimisation */
+               if (gif->frames[frame].virgin) {
+                       if (gif->bitmap_callbacks.bitmap_test_opaque) {
+                               gif->frames[frame].opaque = 
gif->bitmap_callbacks.bitmap_test_opaque(gif->frame_image);
+                       } else {
+                               gif->frames[frame].opaque = false;
+                       }
+                       gif->frames[frame].virgin = false;
+               }
 
-       if (gif->bitmap_callbacks.bitmap_modified) {
-               gif->bitmap_callbacks.bitmap_modified(gif->frame_image);
+               if (gif->bitmap_callbacks.bitmap_set_opaque) {
+                       
gif->bitmap_callbacks.bitmap_set_opaque(gif->frame_image, 
gif->frames[frame].opaque);
+               }
        }
 
        /* Restore the buffer position */


-- 
NetSurf GIF Decoder
_______________________________________________
netsurf-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to