# HG changeset patch # User michael # Date 1174865858 0 # Node ID 507d08212e361562159a80817daa8628c7697034 # Parent 8583aa3c21bc15e44bef872977240e19f2d755f8 check input validity, this prevents a few variables from reachin odd values which might have lead to out of array writes and thus might have been exploitable diff -r 8583aa3c21bc -r 507d08212e36 lzw.c --- a/lzw.c Sun Mar 25 23:22:11 2007 +0000 +++ b/lzw.c Sun Mar 25 23:37:38 2007 +0000 @@ -196,7 +196,6 @@ } c = lzw_get_code(s); if (c == s->end_code) { - s->end_code = -1; break; } else if (c == s->clear_code) { s->cursize = s->codesize + 1; @@ -206,10 +205,11 @@ fc= oc= -1; } else { code = c; - if (code >= s->slot) { + if (code == s->slot && fc>=0) { *sp++ = fc; code = oc; - } + }else if(code >= s->slot) + break; while (code >= s->newcodes) { *sp++ = s->suffix[code]; code = s->prefix[code]; @@ -229,6 +229,7 @@ } } } + s->end_code = -1; the_end: s->sp = sp; s->oc = oc;