Compare commits

..

No commits in common. "master" and "1.0" have entirely different histories.
master ... 1.0

6 changed files with 17 additions and 14 deletions

@ -1,4 +1,4 @@
Copyright (C) 2015-2019 Dimitris Papastamos <sin@2f30.org>
Copyright (C) 2015-2016 Dimitris Papastamos <sin@2f30.org>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

@ -1,4 +1,4 @@
VERSION = 1.1
VERSION = 1.0
PREFIX = /usr/local
install:

@ -39,10 +39,12 @@ extern "C" {
#undef realpath
_FORTIFY_FN(realpath) char *realpath(const char *__p, char *__r)
{
size_t __b = __builtin_object_size(__r, 0);
if (__r) {
#ifndef PATH_MAX
#error PATH_MAX unset. A fortified realpath will not work.
#else
if (__r && PATH_MAX > __builtin_object_size(__r, 2)) {
char __buf[PATH_MAX], *__ret;
size_t __l;
@ -50,13 +52,13 @@ _FORTIFY_FN(realpath) char *realpath(const char *__p, char *__r)
if (!__ret)
return NULL;
__l = __builtin_strlen(__ret) + 1;
if (__l > __builtin_object_size(__r, 0))
if (__l > __b)
__builtin_trap();
__builtin_memcpy(__r, __ret, __l);
return __r;
#endif
}
return __orig_realpath(__p, __r);
#endif
}
#endif

@ -50,7 +50,7 @@ _FORTIFY_FN(memcpy) void *memcpy(void *__od, const void *__os, size_t __n)
__builtin_trap();
if (__n > __bd || __n > __bs)
__builtin_trap();
return __builtin_memcpy(__od, __os, __n);
return __orig_memcpy(__od, __os, __n);
}
_FORTIFY_FN(memmove) void *memmove(void *__d, const void *__s, size_t __n)
@ -69,7 +69,7 @@ _FORTIFY_FN(memset) void *memset(void *__d, int __c, size_t __n)
if (__n > __b)
__builtin_trap();
return __builtin_memset(__d, __c, __n);
return __orig_memset(__d, __c, __n);
}
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \

@ -75,7 +75,7 @@ _FORTIFY_FN(getgroups) int getgroups(int __l, gid_t *__s)
{
size_t __b = __builtin_object_size(__s, 0);
if (__l > 0 && (unsigned)__l > __b / sizeof(gid_t))
if (__l < 0 || (size_t)__l > __b / sizeof(gid_t))
__builtin_trap();
return __orig_getgroups(__l, __s);
}

@ -111,16 +111,17 @@ _FORTIFY_FN(mbstowcs) size_t mbstowcs(wchar_t *__ws, const char *__s, size_t __w
_FORTIFY_FN(wcrtomb) size_t wcrtomb(char *__s, wchar_t __w, mbstate_t *__st)
{
if (__s && MB_LEN_MAX > __builtin_object_size(__s, 2)) {
char __buf[MB_LEN_MAX];
size_t __r;
char __buf[MB_LEN_MAX];
size_t __b = __builtin_object_size(__s, 0);
size_t __r;
if (__s) {
__r = __orig_wcrtomb(__buf, __w, __st);
if (__r == (size_t)-1)
return __r;
if (__r > __builtin_object_size(__s, 0))
if (__r > __b)
__builtin_trap();
__builtin_memcpy(__s, __buf, __r);
memcpy(__s, __buf, __r);
return __r;
}
return __orig_wcrtomb(__s, __w, __st);
@ -217,7 +218,7 @@ _FORTIFY_FN(wctomb) int wctomb(char *__s, wchar_t __w)
{
size_t __b = __builtin_object_size(__s, 0);
if (__s && MB_LEN_MAX > __b && MB_CUR_MAX > __b)
if (__s && MB_CUR_MAX > __b)
__builtin_trap();
return __orig_wctomb(__s, __w);
}