Re: FreeBSD aflusning

From: Erik Cederstrand <none_at_erik--cederstrand.dk.lh.bsd-dk.dk>
Date: Fri, 5 Oct 2012 13:48:38 +0200
To: bsd-dk_at_bsd-dk.dk

Den 05/10/2012 kl. 09.18 skrev Erik Cederstrand <none_at_erik--cederstrand.dk.lh.bsd-dk.dk>:
>
> Indtil listen er klar, kommer dagens opgave her: http://scan.freebsd.your.org/freebsd-head/WORLD/2012-10-03-amd64/report-QUwSrB.html#EndPath
>
> Koden til pkg_install er her: http://svnweb.freebsd.org/base/head/usr.sbin/pkg_install/

Det ser ud til at være en fejl hos FreeBSD.

Koden forsøger at danne stien til en "+CONTENTS" fil som f.eks. /var/db/pkg/autoconf-2.69/+CONTENTS

I linje 263 har vi følgende:
   snprintf(tmp, PATH_MAX, "%s/%s", LOG_DIR, installed[i]);

Strengen "tmp" er altså mindst ét tegn lang (hvis "installed[i]" og "LOG_DIR" begge er tomme), og der er derfor max 1023 tegn tilbage. Clang brokker sig over, at vi tillader strncat at tilføje PATH_MAX, når vi kun bør kunne tilføje den plads der er tilbage i tmp, altså (PATH_MAX - strlen(tmp)).

Koden bør fejle, hvis resultatet af tmp + "/" + "+CONTENTS" er større end 1024.

LOG_DIR kan i øvrigt være resultatet af getenv("PKG_DBDIR"), så koden bør fejle, hvis resultatet af LOG_DIR + "/" + installed[i] er længere end 1024.

Den fejl fanger Clang ikke, så der kunne også ryge en PR afsted til Clang.

Mvh Erik
Received on Fri 05 Oct 2012 - 13:48:40 CEST

This archive was generated by hypermail 2.2.0 : Wed 27 Mar 2013 - 10:40:16 CET