chiark / gitweb /
setup.c: Do not make wild pointer access if resolv.conf prefix length insane
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 23 Nov 2016 17:08:26 +0000 (17:08 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 26 May 2020 19:14:26 +0000 (20:14 +0100)
(Found by AFL.)

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/setup.c

index 54b93a89d0d763b0972a6da17158732d158aa76d..f1c7dfec3f9247f6625ee2a1a08d225492438e30 100644 (file)
@@ -228,11 +228,12 @@ static void ccf_sortlist(adns_state ads, const char *fn,
        }
       } else {
        maskwhat = "prefix length";
-       initial= strtoul(slash,&ep,10);
-       if (*ep || initial>adns__addr_width(sl->base.sa.sa_family)) {
+       unsigned long prefixlen = strtoul(slash,&ep,10);
+       if (*ep || prefixlen>adns__addr_width(sl->base.sa.sa_family)) {
          configparseerr(ads,fn,lno,"mask length `%s' invalid",slash);
          continue;
        }
+       initial= prefixlen;
        sl->mask.sa.sa_family= sl->base.sa.sa_family;
        adns__prefix_mask(&sl->mask, initial);
       }