X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-hook.c;h=48eb582a7b02a5571e5418877648fa86a70dd953;hb=refs%2Ftags%2F5.99.2;hp=75e8a691fa31cf922c76e6f0d0a6bd0a7e7714e8;hpb=4521c1e7ae5371ab9d639adc617d17fb4e8ded0c;p=src%2Fapp-framework-binder.git diff --git a/src/afb-hook.c b/src/afb-hook.c index 75e8a691..48eb582a 100644 --- a/src/afb-hook.c +++ b/src/afb-hook.c @@ -735,26 +735,32 @@ static void hook_api_event_make_cb(void *closure, const struct afb_hookid *hooki static void hook_api_rootdir_get_fd_cb(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, int result) { - char path[PATH_MAX]; + char path[PATH_MAX], proc[100]; + ssize_t s; + if (result < 0) _hook_api_(export, "rootdir_get_fd() -> %d, %m", result); else { - sprintf(path, "/proc/self/fd/%d", result); - readlink(path, path, sizeof path); + snprintf(proc, sizeof proc, "/proc/self/fd/%d", result); + s = readlink(proc, path, sizeof path); + path[s < 0 ? 0 : s >= sizeof path ? sizeof path - 1 : s] = 0; _hook_api_(export, "rootdir_get_fd() -> %d = %s", result, path); } } static void hook_api_rootdir_open_locale_cb(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, const char *filename, int flags, const char *locale, int result) { - char path[PATH_MAX]; + char path[PATH_MAX], proc[100]; + ssize_t s; + if (!locale) locale = "(null)"; if (result < 0) _hook_api_(export, "rootdir_open_locale(%s, %d, %s) -> %d, %m", filename, flags, locale, result); else { - sprintf(path, "/proc/self/fd/%d", result); - readlink(path, path, sizeof path); + snprintf(proc, sizeof proc, "/proc/self/fd/%d", result); + s = readlink(proc, path, sizeof path); + path[s < 0 ? 0 : s >= sizeof path ? sizeof path - 1 : s] = 0; _hook_api_(export, "rootdir_open_locale(%s, %d, %s) -> %d = %s", filename, flags, locale, result, path); } }