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
This commit is contained in:
parent
2a46bfa6b9
commit
75cc88546b
1 changed files with 20 additions and 0 deletions
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue