The previous patch was incorrect. --- src/hcom.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/src/hcom.c b/src/hcom.c index e76820e9333f..be17d9d2e58e 100644 --- a/src/hcom.c +++ b/src/hcom.c @@ -73,6 +73,14 @@ typedef struct { size_t pos; /* Where next byte goes */ } priv_t; +static int dictvalid(int n, int size, int left, int right) +{ + if (n > 0 && left < 0) + return 1; + + return (unsigned)left < size && (unsigned)right < size; +} + static int startread(sox_format_t * ft) { priv_t *p = (priv_t *) ft->priv; @@ -150,6 +158,11 @@ static int startread(sox_format_t * ft) lsx_debug("%d %d", p->dictionary[i].dict_leftson, p->dictionary[i].dict_rightson); + if (!dictvalid(i, dictsize, p->dictionary[i].dict_leftson, + p->dictionary[i].dict_rightson)) { + lsx_fail_errno(ft, SOX_EHDR, "Invalid dictionary"); + return SOX_EOF; + } } rc = lsx_skipbytes(ft, (size_t) 1); /* skip pad byte */ if (rc) -- 2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ SoX-devel mailing list SoX-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sox-devel