kwo pushed a commit to branch master.

http://git.enlightenment.org/legacy/imlib2.git/commit/?id=4fa2ad8566b3203f857224d4106d4aa0acd2d9ff

commit 4fa2ad8566b3203f857224d4106d4aa0acd2d9ff
Author: Kim Woelders <k...@woelders.dk>
Date:   Mon Apr 12 09:26:37 2021 +0200

    LBM loader: Fix handling of missing RLE data
    
    The missing bytes were cleared at the start of the line, not the end.
---
 src/modules/loaders/loader_lbm.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/modules/loaders/loader_lbm.c b/src/modules/loaders/loader_lbm.c
index 434f723..155f9da 100644
--- a/src/modules/loaders/loader_lbm.c
+++ b/src/modules/loaders/loader_lbm.c
@@ -189,15 +189,18 @@ bodyrow(unsigned char *p, int z, ILBM * ilbm)
         return;
      }
 
-   for (i = 0; i < z;)
+   for (i = 0; i < z; i += w)
      {
         b = ilbm->body.data[ilbm->offset++];
         while (b == 0x80 && ilbm->offset < ilbm->body.size)
            b = ilbm->body.data[ilbm->offset++];
-        if (ilbm->offset >= ilbm->body.size)
-           break;
 
-        if (b & 0x80)
+        if (ilbm->offset >= ilbm->body.size)
+          {
+             w = z - i;
+             memset(p + i, 0, w);
+          }
+        else if (b & 0x80)
           {
              w = (0x100 - b) + 1;
              if (w > z - i)
@@ -205,7 +208,6 @@ bodyrow(unsigned char *p, int z, ILBM * ilbm)
 
              b = ilbm->body.data[ilbm->offset++];
              memset(p + i, b, w);
-             i += w;
           }
         else
           {
@@ -214,13 +216,10 @@ bodyrow(unsigned char *p, int z, ILBM * ilbm)
                 w = ilbm->body.size - ilbm->offset;
              x = (w <= z - i) ? w : z - i;
              memcpy(p + i, ilbm->body.data + ilbm->offset, x);
-             i += x;
              ilbm->offset += w;
+             w = x;
           }
      }
-
-   if (i < z)
-      memset(p, 0, z - i);
 }
 
 
/*------------------------------------------------------------------------------

-- 


Reply via email to