On Fri, Jul 19, 2019 at 02:15:03PM +0200, Jan Klemkow wrote: > On Fri, Jul 19, 2019 at 09:13:38PM +1000, Jonathan Gray wrote: > > On Fri, Jul 19, 2019 at 01:07:34PM +0200, Jan Klemkow wrote: > > > Hi, > > > > > > fixstring() can return NULL and it does on one of my machines. > > > Here is s fix that checks for NULL and return an empty string. > > > > > > ok? > > > > If it returns NULL shouldn't the strlcpy and printf both be skipped? > > I was unsure about this. > > > You've also not included the i386 portion of this. > > I missed that. > > The diff below addresses all issues. > > ok?
What argument does fixstring have in this case? Does you dmesg not include a date in the 'bios0' line? I was considering making this a pointer/dynamically allocated so it can be NULL. If there is no valid date it should probably be NULL. > > Thanks, > Jan > > Index: arch/amd64/amd64/bios.c > =================================================================== > RCS file: /cvs/src/sys/arch/amd64/amd64/bios.c,v > retrieving revision 1.38 > diff -u -p -r1.38 bios.c > --- arch/amd64/amd64/bios.c 15 Jul 2019 00:35:10 -0000 1.38 > +++ arch/amd64/amd64/bios.c 19 Jul 2019 11:45:11 -0000 > @@ -144,9 +144,11 @@ bios_attach(struct device *parent, struc > fixstring(scratch)); > if ((smbios_get_string(&bios, sb->release, > scratch, sizeof(scratch))) != NULL) { > - strlcpy(smbios_bios_date, fixstring(scratch), > + char *s = fixstring(scratch) == NULL ? "" : > + fixstring(scratch); > + strlcpy(smbios_bios_date, s, > sizeof(smbios_bios_date)); > - printf(" date %s", fixstring(scratch)); > + printf(" date %s", s); > } > } > > Index: arch/i386/i386/bios.c > =================================================================== > RCS file: /cvs/src/sys/arch/i386/i386/bios.c,v > retrieving revision 1.121 > diff -u -p -r1.121 bios.c > --- arch/i386/i386/bios.c 15 Jul 2019 00:35:10 -0000 1.121 > +++ arch/i386/i386/bios.c 19 Jul 2019 11:58:57 -0000 > @@ -308,10 +308,11 @@ biosattach(struct device *parent, struct > fixstring(scratch)); > if ((smbios_get_string(&bios, sb->release, > scratch, sizeof(scratch))) != NULL) { > - strlcpy(smbios_bios_date, > - fixstring(scratch), > + char *s = fixstring(scratch) == NULL ? > + "" : fixstring(scratch); > + strlcpy(smbios_bios_date, s, > sizeof(smbios_bios_date)); > - printf(" date %s", fixstring(scratch)); > + printf(" date %s", s); > } > } > smbios_info(sc->sc_dev.dv_xname); >