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