X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/db2bf4111cde36048ac66bbac58547d105bc7e80..67b5031ec6d160b5cae425466a34d1be3b211dd4:/codec/baseconv.c?ds=sidebyside diff --git a/codec/baseconv.c b/codec/baseconv.c index b7cb0a0..53fceb2 100644 --- a/codec/baseconv.c +++ b/codec/baseconv.c @@ -364,8 +364,8 @@ static int ctxn##_dodecode(ctxn##_ctx *ctx, \ case PC: \ if (f & CDCF_IGNEQMID) break; \ if (f & CDCF_NOEQPAD) goto badch; \ - if (st == ST_MAIN && \ - !(f & CDCF_IGNZPAD) && (a & ((1 << nb) - 1))) \ + if (st == ST_MAIN && !(f & CDCF_IGNZPAD) && \ + ((nb && !(nb%wd)) || (a & ((1 << nb) - 1)))) \ return (CDCERR_INVZPAD); \ st = ST_PAD; \ if (!(f & CDCF_IGNEQPAD)) { \ @@ -387,8 +387,8 @@ static int ctxn##_dodecode(ctxn##_ctx *ctx, \ } \ } \ } else { \ - if (st == ST_MAIN && \ - !(f & CDCF_IGNZPAD) && (a & ((1 << nb) - 1))) \ + if (st == ST_MAIN && !(f & CDCF_IGNZPAD) && \ + ((nb && !(nb%wd)) || (a & ((1 << nb) - 1)))) \ return (CDCERR_INVZPAD); \ if (!(f & (CDCF_IGNEQPAD | CDCF_IGNEQMID | CDCF_NOEQPAD)) && nb) \ return (CDCERR_INVEQPAD); \