summaryrefslogtreecommitdiffstats
path: root/src/afb-apiset.c
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2019-04-02 16:49:09 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2019-04-02 16:49:09 +0200
commit60cd11786766ebc148b7ec088962dd6e112f8762 (patch)
tree212ec4b02261dbe8730a61b7bf66d8a61f9699ef /src/afb-apiset.c
parent16f014ef35b8355de1006891fe6920c8b51675fe (diff)
Fix false ***buffer overflow*** detection
The compiling option __FORTIFY_SOURCE=2 introduced a false ***buffer overflow*** detection when the flexible array 'pattern' was initilized in globset. The compiler is only complaining when the array is in a struct that is in a struct like struct { ...; struct { ...; char name[1]; }} To avoid these false detections, it is enougth to ellipsese the dimension of the array. Seems to be the now standard way of declaring flexible arrays when it was before an extension. So now: struct { ...; struct { ...; char name[]; }} works even when __FORTIFY_SOURCE=2. Bug-AGL: SPEC-2292 Change-Id: I4b4a5df505a5357f92b9ab1657175911198ca582 Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/afb-apiset.c')
-rw-r--r--src/afb-apiset.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/afb-apiset.c b/src/afb-apiset.c
index 468a3646..16ded968 100644
--- a/src/afb-apiset.c
+++ b/src/afb-apiset.c
@@ -73,7 +73,7 @@ struct api_alias
{
struct api_alias *next;
struct api_desc *api;
- char name[1];
+ char name[];
};
/**
@@ -83,7 +83,7 @@ struct api_class
{
struct api_class *next;
struct api_array providers;
- char name[1];
+ char name[];
};
/**
@@ -92,7 +92,7 @@ struct api_class
struct api_depend
{
struct afb_apiset *set;
- char name[1];
+ char name[];
};
/**
@@ -110,7 +110,7 @@ struct afb_apiset
} onlack; /** not found handler */
int timeout; /**< the timeout in second for the apiset */
int refcount; /**< reference count for freeing resources */
- char name[1]; /**< name of the apiset */
+ char name[]; /**< name of the apiset */
};
/**
@@ -215,7 +215,7 @@ static struct api_class *class_search(const char *name, int create)
if (!create)
return NULL;
- c = calloc(1, strlen(name) + sizeof *c);
+ c = calloc(1, strlen(name) + 1 + sizeof *c);
if (!c)
errno = ENOMEM;
else {
@@ -341,7 +341,7 @@ struct afb_apiset *afb_apiset_create(const char *name, int timeout)
{
struct afb_apiset *set;
- set = calloc(1, (name ? strlen(name) : 0) + sizeof *set);
+ set = calloc(1, (name ? strlen(name) : 0) + 1 + sizeof *set);
if (set) {
set->timeout = timeout;
set->refcount = 1;
@@ -545,7 +545,7 @@ int afb_apiset_add_alias(struct afb_apiset *set, const char *name, const char *a
}
/* allocates and init the struct */
- ali = malloc(sizeof *ali + strlen(alias));
+ ali = malloc(sizeof *ali + strlen(alias) + 1);
if (ali == NULL) {
ERROR("out of memory");
errno = ENOMEM;
@@ -1079,7 +1079,7 @@ int afb_apiset_require(struct afb_apiset *set, const char *name, const char *req
if (!a)
errno = ENOENT;
else {
- d = malloc(strlen(required) + sizeof *d);
+ d = malloc(strlen(required) + 1 + sizeof *d);
if (!d)
errno = ENOMEM;
else {