readlink() does not append a null byte to buf.
Change-Id: I28034db705afd0ad1b1a5275f7896a6f9f0c3399
Signed-off-by: Sangyoon Jang <s89.jang@samsung.com>
static int __init_backends(const char *fpath, const struct stat *sb,
int typeflag, struct FTW *ftwbuf)
{
static int __init_backends(const char *fpath, const struct stat *sb,
int typeflag, struct FTW *ftwbuf)
{
struct backend_queue *queue;
if (typeflag != FTW_F && typeflag != FTW_SL)
struct backend_queue *queue;
if (typeflag != FTW_F && typeflag != FTW_SL)
queue->path = strdup(fpath);
} else if (typeflag == FTW_SL) {
queue->path = malloc(sb->st_size + 1);
queue->path = strdup(fpath);
} else if (typeflag == FTW_SL) {
queue->path = malloc(sb->st_size + 1);
- if (readlink(fpath, queue->path, sb->st_size + 1) < 0) {
+ r = readlink(fpath, queue->path, sb->st_size + 1);
+ if (r < 0 || r > sb->st_size) {
ERR("failed to readlink for %s", fpath);
free(queue->path);
free(queue);
return -1;
}
ERR("failed to readlink for %s", fpath);
free(queue->path);
free(queue);
return -1;
}
}
queue->type = strdup(fpath + ftwbuf->base);
queue->slot = num_of_backends++;
}
queue->type = strdup(fpath + ftwbuf->base);
queue->slot = num_of_backends++;