diff options
author | Nick Kralevich <nnk@google.com> | 2013-01-31 14:28:59 -0800 |
---|---|---|
committer | Nick Kralevich <nnk@google.com> | 2013-01-31 15:20:14 -0800 |
commit | 75cc88546b893280add608becfd5887470573813 (patch) | |
tree | 0f0603ef3e0c2913e199f46e6c8fbfc730ed7fce | |
parent | 2a46bfa6b9401b847a3c0609e247428564d91121 (diff) | |
download | system_core-75cc88546b893280add608becfd5887470573813.zip system_core-75cc88546b893280add608becfd5887470573813.tar.gz system_core-75cc88546b893280add608becfd5887470573813.tar.bz2 |
property_get: do argument checking.
Try to verify, at compile time, that the supplied
value buffer is large enough.
There's more we can do here, but this is a good first
pass.
Change-Id: Iac8153826c89114b2755735032423c6744f7a61b
-rw-r--r-- | include/cutils/properties.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/include/cutils/properties.h b/include/cutils/properties.h index 25fd67a..5ec8c2c 100644 --- a/include/cutils/properties.h +++ b/include/cutils/properties.h @@ -17,6 +17,9 @@ #ifndef __CUTILS_PROPERTIES_H #define __CUTILS_PROPERTIES_H +#include <sys/cdefs.h> +#include <stddef.h> + #ifdef __cplusplus extern "C" { #endif @@ -62,6 +65,23 @@ enum { }; #endif /*HAVE_SYSTEM_PROPERTY_SERVER*/ +#ifdef __BIONIC_FORTIFY_INLINE + +extern int __property_get_real(const char *, char *, const char *) + __asm__(__USER_LABEL_PREFIX__ "property_get"); +extern void __property_get_too_small_error() + __attribute__((__error__("property_get() called with too small of a buffer"))); + +__BIONIC_FORTIFY_INLINE +int property_get(const char *key, char *value, const char *default_value) { + size_t bos = __builtin_object_size(value, 0); + if (bos < PROPERTY_VALUE_MAX) { + __property_get_too_small_error(); + } + return __property_get_real(key, value, default_value); +} + +#endif /* __BIONIC_FORTIFY_INLINE */ #ifdef __cplusplus } |