/* BZ #25219 - improve out-of-bounds checking with GCC 10 attribute access */ #include #include #include /* */ int nowarn_ptsname_r (int fd, int i) { char a[4]; if (i < 0) i = 0; return ptsname_r (fd, a + i, sizeof a); // nowarn } int warn_ptsname_r (int fd, int i) { char a[4]; if (i < 1) i = 1; return ptsname_r (fd, a + i, sizeof a); // warn } int nowarn_mbstowcs (const char *s, int i) { wchar_t a[4]; if (i < 0) i = 0; return mbstowcs (a + i, s, sizeof a / sizeof *a); // nowarn } int warn_mbstowcs (const char *s, int i) { wchar_t a[4]; if (i < 1) i = 1; return mbstowcs (a + i, s, sizeof a / sizeof *a); // warn } int nowarn_wcstombs (const wchar_t *s, int i) { char a[4]; if (i < 0) i = 0; return wcstombs (a + i, s, sizeof a / sizeof *a); // nowarn } int warn_wcstombs (const wchar_t *s, int i) { char a[4]; if (i < 1) i = 1; return wcstombs (a + i, s, sizeof a / sizeof *a); // warn } /* */ int nowarn_memccpy (const void *s, int i) { char a[4]; if (i < 0) i = 0; return memccpy (a + i, s, 'x', sizeof a); // nowarn } int warn_memccpy (const char *s, int i) { char a[4]; if (i < 1) i = 1; return memccpy (a + i, s, 'x', sizeof a); // warn } int nowarn_memrchr (int i) { char a[4]; if (i < 0) i = 0; return memrchr (a + i, 'x', sizeof a); // nowarn } int warn_memrchr (int i) { char a[4]; if (i < 1) i = 1; return memrchr (a + i, 'x', sizeof a); // warn } int nowarn_strxfrm (const char *s, int i) { char a[4]; if (i < 0) i = 0; return strxfrm (a + i, s, sizeof a); // nowarn } int warn_strxfrm (const char *s, int i) { char a[4]; if (i < 1) i = 1; return strxfrm (a + i, s, sizeof a); // warn } int nowarn_memmem (int i) { char a[4] = "123"; char b[4] = "321"; if (i < 0) i = 0; return memmem (a + i, sizeof a, b + i, sizeof b); // nowarn } int warn_memmem (int i) { char a[4] = "123"; char b[4] = "321"; if (i < 1) i = 1; return memmem (a + i, sizeof a, b + i, sizeof b); // warn } int nowarn_strerror_r (int e, int i) { char a[4]; if (i < 0) i = 0; return strerror_r (e, a + i, sizeof a); // nowarn } int warn_strerror_r (int e, int i) { char a[4]; if (i < 1) i = 1; return strerror_r (e, a + i, sizeof a); // warn } void nowarn_explicit_bzero (int i) { char a[4]; if (i < 0) i = 0; explicit_bzero (a + i, sizeof a); // nowarn } void warn_explicit_bzero (int i) { char a[4]; if (i < 1) i = 1; explicit_bzero (a + i, sizeof a); // warn } void nowarn_memfrob (int i) { char a[4]; if (i < 0) i = 0; memfrob (a + i, sizeof a); // nowarn } void warn_memfrob (int i) { char a[4]; if (i < 1) i = 1; memfrob (a + i, sizeof a); // warn } /* */ int nowarn_read (int fd, int i) { char a[4]; if (i < 0) i = 0; return read (fd, a + i, sizeof a); // nowarn } int warn_read (int fd, int i) { char a[4]; if (i < 1) i = 1; return read (fd, a + i, sizeof a); // warn } int nowarn_pread (int fd, int i) { char a[4]; if (i < 0) i = 0; return pread (fd, a + i, sizeof a, 0); // nowarn } int warn_pread (int fd, int i) { char a[4]; if (i < 1) i = 1; return pread (fd, a + i, sizeof a, 0); // warn } int nowarn_pread64 (int fd, int i) { char a[4]; if (i < 0) i = 1; return pread64 (fd, a + i, sizeof a, 0); // nowarn } int warn_pread64 (int fd, int i) { char a[4]; if (i < 1) i = 1; return pread64 (fd, a + i, sizeof a, 0); // warn } int nowarn_readlink (const char *path, int i) { char a[4]; if (i < 0) i = 0; return readlink (path, a + i, sizeof a); // nowarn } int warn_readlink (const char *path, int i) { char a[4]; if (i < 1) i = 1; return readlink (path, a + i, sizeof a); // warn } int nowarn_readlinkat (int fd, const char *path, int i) { char a[4]; if (i < 0) i = 0; return readlinkat (fd, path, a + i, sizeof a); // nowarn } int warn_readlinkat (int fd, const char *path, int i) { char a[4]; if (i < 1) i = 1; return readlinkat (fd, path, a + i, sizeof a); // warn } char* nowarn_getcwd (int i) { char a[4]; if (i < 0) i = 0; return getcwd (a + i, sizeof a); // nowarn } char* warn_getcwd (int i) { char a[4]; if (i < 1) i = 1; return getcwd (a + i, sizeof a); // warn } int nowarn_confstr (int name, int i) { char a[4]; if (i < 0) i = 0; return confstr (name, a + i, sizeof a); // nowarn } int warn_confstr (int name, int i) { char a[4]; if (i < 1) i = 1; return confstr (name, a + i, sizeof a); // warn } int nowarn_ttyname_r (int name, int i) { char a[4]; if (i < 0) i = 0; return ttyname_r (name, a + i, sizeof a); // nowarn } int warn_ttyname_r (int name, int i) { char a[4]; if (i < 1) i = 1; return ttyname_r (name, a + i, sizeof a); // warn } int nowarn_getlogin_r (int i) { char a[4]; if (i < 0) i = 0; return getlogin_r (a + i, sizeof a); // nowarn } int warn_getlogin_r (int i) { char a[4]; if (i < 1) i = 1; return getlogin_r (a + i, sizeof a); // warn } int nowarn_gethostname (int i) { char a[4]; if (i < 0) i = 0; return gethostname (a + i, sizeof a); // nowarn } int warn_gethostname (int i) { char a[4]; if (i < 1) i = 1; return gethostname (a + i, sizeof a); // warn } int nowarn_getdomainname (int i) { char a[4]; if (i < 0) i = 0; return getdomainname (a + i, sizeof a); // nowarn } int warn_getdomainname (int i) { char a[4]; if (i < 1) i = 1; return getdomainname (a + i, sizeof a); // warn }