Hi Theo,

Thanks for the feedback, good catch on 'len'! Following your suggestions
- how about the below?

Kind regards,

Job

Index: main.c
===================================================================
RCS file: /cvs/src/usr.bin/rsync/main.c,v
retrieving revision 1.65
diff -u -p -r1.65 main.c
--- main.c      2 Aug 2022 20:01:12 -0000       1.65
+++ main.c      14 Feb 2023 16:55:43 -0000
@@ -231,17 +231,21 @@ fargs_parse(size_t argc, char *argv[], s
                j = strlen(cp);
                if (f->remote &&
                    strncasecmp(cp, "rsync://", 8) == 0) {
-                       /* rsync://path */
+                       /* rsync://host[:port]/path */
+                       size_t module_offset = len;
                        cp += 8;
-                       if ((ccp = strchr(cp, ':')))    /* skip :port */
+                       /* skip :port */
+                       if ((ccp = strchr(cp, ':')) != NULL) {
                                *ccp = '\0';
+                               module_offset += strcspn(ccp + 1, "/") + 1;
+                       }
                        if (strncmp(cp, f->host, len) ||
                            (cp[len] != '/' && cp[len] != '\0'))
                                errx(ERR_SYNTAX, "different remote host: %s",
                                    f->sources[i]);
                        memmove(f->sources[i],
-                               f->sources[i] + len + 8 + 1,
-                               j - len - 8);
+                               f->sources[i] + module_offset + 8 + 1,
+                               j - module_offset - 8);
                } else if (f->remote && strncmp(cp, "::", 2) == 0) {
                        /* ::path */
                        memmove(f->sources[i],

Reply via email to