Fix run length encoding of marked image, bump to version 0.8
[colorize.git] / src / mark.c
index 3d5143f..bf609f8 100644 (file)
@@ -96,6 +96,10 @@ static int encode_rle(unsigned char *in, unsigned char *out, int width, int heig
        for (i = 0; i < n;) {
                v = in[i++];
                for (l = 1; l < 255; l++) {
+                       /* end of input data */
+                       if (i == n)
+                               break;
+                       /* change in color */
                        if (v != in[i])
                                break;
                        i++;
@@ -183,8 +187,15 @@ static int decode_rle(unsigned char *in, int len, int width, int height)
                        return -EIO;
                }
                v = in[i++];
+               if (j + l > n) {
+                       l = n - j;
+                       printf("Warning: RLE encoding exceeds image size\n");
+               }
                memset(out+j, v, l);
                j += l;
+               /* end of output data */
+               if (j == n)
+                       break;
        }
 
        memcpy(in, out, n);