changeset 1750:b9f3c1796fba

More granular error handling in RLE decoding.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 11 Jun 2018 14:42:12 +0300
parents feaf5cf07603
children 768fddda73e9
files tools/lib64gfx.c
diffstat 1 files changed, 9 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/tools/lib64gfx.c	Mon Jun 11 14:23:52 2018 +0300
+++ b/tools/lib64gfx.c	Mon Jun 11 14:42:12 2018 +0300
@@ -446,11 +446,17 @@
             // A simple marker byte RLE variant: [Marker] [count] [data]
             if ((cfg->flags & DM_RLE_BYTE_RUNS) && data == cfg->rleMarkerB)
             {
-                if (!dmGrowBufGetU8(&src, &tmp1) ||
-                    !dmGrowBufGetU8(&src, &tmp2))
+                if (!dmGrowBufGetU8(&src, &tmp1))
                 {
                     res = dmError(DMERR_INVALID_DATA,
-                        "%s: RLE: Invalid data/out of data for byte length run sequence.\n",
+                        "%s: RLE: Invalid data/out of data for byte length run sequence (1).\n",
+                        cfg->func);
+                    goto out;
+                }
+                if (!dmGrowBufGetU8(&src, &tmp2))
+                {
+                    res = dmError(DMERR_INVALID_DATA,
+                        "%s: RLE: Invalid data/out of data for byte length run sequence (2).\n",
                         cfg->func);
                     goto out;
                 }