ifix off-by-one in handlerequest() for index files and check truncation - geomyidae - A small C-based gopherd. Err bitreich.org 70 hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ bitreich.org 70 1Log /scm/geomyidae/log.gph bitreich.org 70 1Files /scm/geomyidae/files.gph bitreich.org 70 1Refs /scm/geomyidae/refs.gph bitreich.org 70 1Tags /scm/geomyidae/tag bitreich.org 70 1README /scm/geomyidae/file/README.gph bitreich.org 70 1LICENSE /scm/geomyidae/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit b4c65d77c916d3b13ab4a1239cfb8b60d042ce6d /scm/geomyidae/commit/b4c65d77c916d3b13ab4a1239cfb8b60d042ce6d.gph bitreich.org 70 1parent 4c38a3cd677ac4ba3b61cac341ef1608508fc8d9 /scm/geomyidae/commit/4c38a3cd677ac4ba3b61cac341ef1608508fc8d9.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Sun, 9 Jul 2017 20:09:33 +0200 Err bitreich.org 70 i Err bitreich.org 70 ifix off-by-one in handlerequest() for index files and check truncation Err bitreich.org 70 i Err bitreich.org 70 ifix truncation so it prevents listing files even if it has an index Err bitreich.org 70 ifile. Err bitreich.org 70 i Err bitreich.org 70 iSigned-off-by: Christoph Lohmann <20h@r-36.net> Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M main.c | 8 +++++++- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 7 insertions(+), 1 deletion(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/main.c b/main.c /scm/geomyidae/file/main.c.gph bitreich.org 70 i@@ -161,7 +161,13 @@ handlerequest(int sock, char *base, char *ohost, char *port, char *clienth, Err bitreich.org 70 i fd = -1; Err bitreich.org 70 i if(stat(path, &dir) != -1 && S_ISDIR(dir.st_mode)) { Err bitreich.org 70 i for(i = 0; i < sizeof(indexf)/sizeof(indexf)[0]; i++) { Err bitreich.org 70 i- strncat(path, indexf[i], sizeof(path) - strlen(path)); Err bitreich.org 70 i+ if (strlen(path) + strlen(indexf[i]) >= sizeof(path)) { Err bitreich.org 70 i+ if(loglvl & ERRORS) Err bitreich.org 70 i+ logentry(clienth, clientp, recvc, Err bitreich.org 70 i+ "path truncation occurred"); Err bitreich.org 70 i+ return; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ strncat(path, indexf[i], sizeof(path) - strlen(path) - 1); Err bitreich.org 70 i fd = open(path, O_RDONLY); Err bitreich.org 70 i if(fd >= 0) Err bitreich.org 70 i break; Err bitreich.org 70 .