On Thu, Jun 19, 2025 at 09:10:31AM +0200, David Marchand wrote: > Doing arithmetics with the NULL pointer is undefined. > > Caught by UBSan: > > ../lib/cmdline/cmdline_parse_portlist.c:40:19: runtime error: > applying non-zero offset 1 to null pointer > SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior > ../lib/cmdline/cmdline_parse_portlist.c:40:19 in > > Fixes: af75078fece3 ("first public release") > Cc: sta...@dpdk.org > > Signed-off-by: David Marchand <david.march...@redhat.com> > --- > lib/cmdline/cmdline_parse_portlist.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/lib/cmdline/cmdline_parse_portlist.c > b/lib/cmdline/cmdline_parse_portlist.c > index ef6ce223b5..0c07cc02b5 100644 > --- a/lib/cmdline/cmdline_parse_portlist.c > +++ b/lib/cmdline/cmdline_parse_portlist.c > @@ -4,6 +4,7 @@ > * All rights reserved. > */ > > +#include <stdbool.h> > #include <stdio.h> > #include <stdlib.h> > #include <string.h> > @@ -37,10 +38,11 @@ parse_ports(cmdline_portlist_t *pl, const char *str) > const char *first, *last; > char *end; > > - for (first = str, last = first; > - first != NULL && last != NULL; > - first = last + 1) {
Maybe I'm a little slow this morning, but I can't see how this is actually a problem. By my understanding, the check for "first != NULL && last != NULL" happens before any increment of "first = last + 1", meaning we are guaranteed that the last is never null when we increment it. /Bruce > + if (str == NULL) > + return 0; > > + last = first = str; > + do { > last = strchr(first, ','); > > errno = 0; > @@ -65,7 +67,10 @@ parse_ports(cmdline_portlist_t *pl, const char *str) > return -1; > > parse_set_list(pl, ps, pe); > - } > + if (last == NULL) > + break; > + first = last + 1; > + } while (true); > > return 0; > } > -- > 2.49.0 >