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?
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);