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

Reply via email to