From ac1c0f6f66c727113b7a1703c639b54581618fe9 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sun, 23 Sep 2018 15:20:44 +0200 Subject: [PATCH] Check the return value from snprintf(). --- src/conf.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/conf.c b/src/conf.c index c933f099..4497b0e1 100644 --- a/src/conf.c +++ b/src/conf.c @@ -432,7 +432,11 @@ bool read_server_config(void) { // And we try to read the ones that end with ".conf" if(l > 5 && !strcmp(".conf", & ep->d_name[ l - 5 ])) { - snprintf(fname, sizeof(fname), "%s/%s", dname, ep->d_name); + if(snprintf(fname, sizeof(fname), "%s/%s", dname, ep->d_name) >= sizeof(fname)) { + logger(LOG_ERR, "Pathname too long: %s/%s", dname, ep->d_name); + return false; + } + x = read_config_file(config_tree, fname); } } @@ -573,7 +577,12 @@ FILE *ask_and_open(const char *filename, const char *what) { #endif /* The directory is a relative path or a filename. */ getcwd(directory, sizeof(directory)); - snprintf(abspath, sizeof(abspath), "%s/%s", directory, fn); + + if(snprintf(abspath, sizeof(abspath), "%s/%s", directory, fn) >= sizeof(abspath)) { + fprintf(stderr, "Pathname too long: %s/%s\n", directory, fn); + return NULL; + } + fn = abspath; } -- 2.20.1