2a4ece2ed3
The issue was simply that the patch from Max Filippov forgot to include <limits.h> to get the definition of UCHAR_MAX. Fixes: http://autobuild.buildroot.org/results/bd1/bd120ada4830fda3db96da945513d4f6f7b2d419/ and lots of similar build failures. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
46 lines
1.2 KiB
Diff
46 lines
1.2 KiB
Diff
Subject: restrict value range passed to isprint function
|
|
|
|
According to C standards isprint argument shall be representable as an
|
|
unsigned char or be equal to EOF, otherwise the behaviour is undefined.
|
|
|
|
Passing arbitrary ints leads to segfault in nm program from elfutils.
|
|
|
|
Restrict isprint argument range to values representable by unsigned char.
|
|
|
|
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
|
---
|
|
Index: b/argp.h
|
|
===================================================================
|
|
--- a/argp.h
|
|
+++ b/argp.h
|
|
@@ -23,6 +23,7 @@
|
|
|
|
#include <stdio.h>
|
|
#include <ctype.h>
|
|
+#include <limits.h>
|
|
|
|
#define __need_error_t
|
|
#include <errno.h>
|
|
@@ -577,7 +578,7 @@
|
|
else
|
|
{
|
|
int __key = __opt->key;
|
|
- return __key > 0 && isprint (__key);
|
|
+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
|
|
}
|
|
}
|
|
|
|
Index: b/argp-parse.c
|
|
===================================================================
|
|
--- a/argp-parse.c
|
|
+++ b/argp-parse.c
|
|
@@ -1292,7 +1292,7 @@
|
|
int __key = __opt->key;
|
|
/* FIXME: whether or not a particular key implies a short option
|
|
* ought not to be locale dependent. */
|
|
- return __key > 0 && isprint (__key);
|
|
+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
|
|
}
|
|
}
|
|
|