X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=lib%2Fvsprintf.c;h=0fbd0121d91d8eff2e5299650579cd22c6ac9d3e;hb=9f4863b7dc7f545bb3a01746feafdc1208e86c89;hp=3b777025d8769e4ae07838ad12aa7f2d1b82240e;hpb=a4ba2e9e36d10ace6f5ca222c1ff3e5024d75f1a;p=~andy%2Flinux diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 3b777025d87..0fbd0121d91 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -170,6 +170,8 @@ int strict_strtoul(const char *cp, unsigned int base, unsigned long *res) return -EINVAL; val = simple_strtoul(cp, &tail, base); + if (tail == cp) + return -EINVAL; if ((*tail == '\0') || ((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) { *res = val; @@ -241,6 +243,8 @@ int strict_strtoull(const char *cp, unsigned int base, unsigned long long *res) return -EINVAL; val = simple_strtoull(cp, &tail, base); + if (tail == cp) + return -EINVAL; if ((*tail == '\0') || ((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) { *res = val; @@ -661,6 +665,9 @@ static char *ip4_addr_string(char *buf, char *end, u8 *addr, int field_width, */ static char *pointer(const char *fmt, char *buf, char *end, void *ptr, int field_width, int precision, int flags) { + if (!ptr) + return string(buf, end, "(null)", field_width, precision, flags); + switch (*fmt) { case 'F': ptr = dereference_function_descriptor(ptr);