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