52 lines
1.3 KiB
Diff
52 lines
1.3 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>
|
|
|
|
Taken from buildroot
|
|
|
|
Upstream-Status: Pending
|
|
Signed-off-by: Khem Raj <raj.khem@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);
|
|
}
|
|
}
|
|
|