static int __init_backends(const char *fpath, const struct stat *sb,
int typeflag, struct FTW *ftwbuf)
{
+ int r;
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);
- 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;
}
+ queue->path[r] = '\0';
}
queue->type = strdup(fpath + ftwbuf->base);
queue->slot = num_of_backends++;