# HG changeset patch # User Matti Hamalainen # Date 1528717332 -10800 # Node ID b9f3c1796fba03fee736e5a3c811c4e53f6b9991 # Parent feaf5cf07603a49eeeacb288ffa4f28eba2692c1 More granular error handling in RLE decoding. diff -r feaf5cf07603 -r b9f3c1796fba tools/lib64gfx.c --- 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; }