diff --git a/dokan_fuse/src/fuse_opt.c b/dokan_fuse/src/fuse_opt.c index a99139743..1e684e0bf 100644 --- a/dokan_fuse/src/fuse_opt.c +++ b/dokan_fuse/src/fuse_opt.c @@ -103,11 +103,12 @@ int fuse_opt_add_opt(char **opts, const char *opt) newopts = STRDUP(opt); else { size_t oldlen = strlen(*opts); - size_t newlen = oldlen + 1 + strlen(opt) + 1; - newopts = (char *)realloc(*opts, newlen); + size_t optlen = strlen(opt); + newopts = (char *)realloc(*opts, oldlen + 1 + optlen + 1); if (newopts) { newopts[oldlen] = ','; - strncpy(newopts + oldlen + 1, opt, newlen); + strncpy(newopts + oldlen + 1, opt, optlen); + newopts[oldlen + 1 + optlen] = '\0'; } } if (!newopts) @@ -223,19 +224,20 @@ static int process_opt_sep_arg(struct fuse_opt_context *ctx, int res; char *newarg; char *param; - size_t newarglen; + size_t paramlen; if (next_arg(ctx, arg) == -1) return -1; param = ctx->argv[ctx->argctr]; - newarglen = sep + strlen(param) + 1; - newarg = (char *)malloc(newarglen); + paramlen = strlen(param); + newarg = (char *)malloc(sep + paramlen + 1); if (!newarg) return alloc_failed(); memcpy(newarg, arg, sep); - strncpy(newarg + sep, param, newarglen); + strncpy(newarg + sep, param, paramlen); + newarg[sep+paramlen] = '\0'; res = process_opt(ctx, opt, sep, newarg, iso); free(newarg);