diff options
author | Nick Kralevich <nnk@google.com> | 2015-04-26 02:23:03 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-04-26 02:23:04 +0000 |
commit | 1d76f1cc8be1f40141adac6147cd51061f1ee0b4 (patch) | |
tree | a64dd9fcaf615e61e96064dea7405c9dc0c6336f | |
parent | 42502d702e1625c9f3337f7a18ea5fc4cfc6090c (diff) | |
parent | 3244d9f07fda946d62afdfa61ed5a876d380d0ff (diff) | |
download | bionic-1d76f1cc8be1f40141adac6147cd51061f1ee0b4.zip bionic-1d76f1cc8be1f40141adac6147cd51061f1ee0b4.tar.gz bionic-1d76f1cc8be1f40141adac6147cd51061f1ee0b4.tar.bz2 |
Merge "add a fortified implementation of realpath"
-rw-r--r-- | libc/include/stdlib.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h index 84bf56d..efca577 100644 --- a/libc/include/stdlib.h +++ b/libc/include/stdlib.h @@ -176,6 +176,27 @@ extern size_t __ctype_get_mb_cur_max(void); #include <android/legacy_stdlib_inlines.h> #endif +#if defined(__BIONIC_FORTIFY) + +extern char* __realpath_real(const char*, char*) __RENAME(realpath); +__errordecl(__realpath_size_error, "realpath output parameter must be NULL or a >= PATH_MAX bytes buffer"); + +#if !defined(__clang__) +__BIONIC_FORTIFY_INLINE +char* realpath(const char* path, char* resolved) { + size_t bos = __bos(resolved); + + /* PATH_MAX is unavailable without polluting the namespace, but it's always 4096 on Linux */ + if (bos != __BIONIC_FORTIFY_UNKNOWN_SIZE && bos < 4096) { + __realpath_size_error(); + } + + return __realpath_real(path, resolved); +} +#endif + +#endif /* defined(__BIONIC_FORTIFY) */ + __END_DECLS #endif /* _STDLIB_H */ |