1*4882a593SmuzhiyunSubject: restrict value range passed to isprint function 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunAccording to C standards isprint argument shall be representable as an 4*4882a593Smuzhiyununsigned char or be equal to EOF, otherwise the behaviour is undefined. 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunPassing arbitrary ints leads to segfault in nm program from elfutils. 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunRestrict isprint argument range to values representable by unsigned char. 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunSigned-off-by: Max Filippov <jcmvbkbc@gmail.com> 11*4882a593Smuzhiyun--- 12*4882a593SmuzhiyunIndex: b/argp.h 13*4882a593Smuzhiyun=================================================================== 14*4882a593Smuzhiyun--- a/argp.h 15*4882a593Smuzhiyun+++ b/argp.h 16*4882a593Smuzhiyun@@ -23,6 +23,7 @@ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #include <stdio.h> 19*4882a593Smuzhiyun #include <ctype.h> 20*4882a593Smuzhiyun+#include <limits.h> 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define __need_error_t 23*4882a593Smuzhiyun #include <errno.h> 24*4882a593Smuzhiyun@@ -577,7 +578,7 @@ 25*4882a593Smuzhiyun else 26*4882a593Smuzhiyun { 27*4882a593Smuzhiyun int __key = __opt->key; 28*4882a593Smuzhiyun- return __key > 0 && isprint (__key); 29*4882a593Smuzhiyun+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key); 30*4882a593Smuzhiyun } 31*4882a593Smuzhiyun } 32*4882a593Smuzhiyun 33*4882a593SmuzhiyunIndex: b/argp-parse.c 34*4882a593Smuzhiyun=================================================================== 35*4882a593Smuzhiyun--- a/argp-parse.c 36*4882a593Smuzhiyun+++ b/argp-parse.c 37*4882a593Smuzhiyun@@ -1292,7 +1292,7 @@ 38*4882a593Smuzhiyun int __key = __opt->key; 39*4882a593Smuzhiyun /* FIXME: whether or not a particular key implies a short option 40*4882a593Smuzhiyun * ought not to be locale dependent. */ 41*4882a593Smuzhiyun- return __key > 0 && isprint (__key); 42*4882a593Smuzhiyun+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key); 43*4882a593Smuzhiyun } 44*4882a593Smuzhiyun } 45*4882a593Smuzhiyun 46