summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2022-02-13 12:00:55 +0000
committerJeremy Harris <jgh146exb@wizmail.org>2022-02-13 12:09:33 +0000
commit7f8394e7c983b1c199866fc6b1c14feb857b651d (patch)
tree9b314e6a90f5cd55c4ac94c409a08cfad2191f43 /src
parentb7c6d0ccbc57c958954205b2c9d70528b9688c1a (diff)
Fix include_directory in redirect routers. Bug 2715
Broken-by: 10c50704c1
Diffstat (limited to 'src')
-rw-r--r--src/src/parse.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/src/parse.c b/src/src/parse.c
index fcea2ea26..e30b80527 100644
--- a/src/src/parse.c
+++ b/src/src/parse.c
@@ -1422,8 +1422,10 @@ for (;;)
if (directory)
{
int len = Ustrlen(directory);
- uschar * p = filename + len;
+ uschar * p;
+ while (len > 0 && directory[len-1] == '/') len--; /* ignore trailing '/' */
+ p = filename + len;
if (Ustrncmp(filename, directory, len) != 0 || *p != '/')
{
*error = string_sprintf("included file %s is not in directory %s",
@@ -1448,9 +1450,10 @@ for (;;)
{
uschar temp;
int fd2;
- uschar * q = p;
+ uschar * q = p + 1; /* skip dividing '/' */
- while (*++p && *p != '/') ;
+ while (*q == '/') q++; /* skip extra '/' */
+ while (*++p && *p != '/') ; /* end of component */
temp = *p;
*p = '\0';