xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-support/argp-standalone/files/0002-isprint.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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*4882a593SmuzhiyunTaken from buildroot
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunUpstream-Status: Pending
15*4882a593SmuzhiyunSigned-off-by: Khem Raj <raj.khem@gmail.com>
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun---
18*4882a593SmuzhiyunIndex: b/argp.h
19*4882a593Smuzhiyun===================================================================
20*4882a593Smuzhiyun--- a/argp.h
21*4882a593Smuzhiyun+++ b/argp.h
22*4882a593Smuzhiyun@@ -23,6 +23,7 @@
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun #include <stdio.h>
25*4882a593Smuzhiyun #include <ctype.h>
26*4882a593Smuzhiyun+#include <limits.h>
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun #define __need_error_t
29*4882a593Smuzhiyun #include <errno.h>
30*4882a593Smuzhiyun@@ -577,7 +578,7 @@
31*4882a593Smuzhiyun   else
32*4882a593Smuzhiyun     {
33*4882a593Smuzhiyun       int __key = __opt->key;
34*4882a593Smuzhiyun-      return __key > 0 && isprint (__key);
35*4882a593Smuzhiyun+      return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
36*4882a593Smuzhiyun     }
37*4882a593Smuzhiyun }
38*4882a593Smuzhiyun
39*4882a593SmuzhiyunIndex: b/argp-parse.c
40*4882a593Smuzhiyun===================================================================
41*4882a593Smuzhiyun--- a/argp-parse.c
42*4882a593Smuzhiyun+++ b/argp-parse.c
43*4882a593Smuzhiyun@@ -1292,7 +1292,7 @@
44*4882a593Smuzhiyun       int __key = __opt->key;
45*4882a593Smuzhiyun       /* FIXME: whether or not a particular key implies a short option
46*4882a593Smuzhiyun        * ought not to be locale dependent. */
47*4882a593Smuzhiyun-      return __key > 0 && isprint (__key);
48*4882a593Smuzhiyun+      return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
49*4882a593Smuzhiyun     }
50*4882a593Smuzhiyun }
51*4882a593Smuzhiyun
52