]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
cpio: Improve mode argument checks
authorTobias Stoeckmann <tobias@stoeckmann.org>
Mon, 16 Mar 2026 09:16:19 +0000 (10:16 +0100)
committerTobias Stoeckmann <tobias@stoeckmann.org>
Mon, 16 Mar 2026 09:16:19 +0000 (10:16 +0100)
Complain only if contradicting mode options are supplied. Passing the
same argument multiple times should not lead to errors.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
cpio/cpio.c

index dd5b65ef7aaa962de6e765013939e723483d0511..80ed251dd777af3b17227dfb7162916b0bd96a33 100644 (file)
@@ -247,7 +247,7 @@ main(int argc, char *argv[])
                        cpio->filename = cpio->argument;
                        break;
                case 'i': /* POSIX 1997 */
-                       if (cpio->mode != '\0')
+                       if (cpio->mode != '\0' && cpio->mode != opt)
                                lafe_errc(1, 0,
                                    "Cannot use both -i and -%c", cpio->mode);
                        cpio->mode = opt;
@@ -289,13 +289,13 @@ main(int argc, char *argv[])
                        cpio->filename = cpio->argument;
                        break;
                case 'o': /* POSIX 1997 */
-                       if (cpio->mode != '\0')
+                       if (cpio->mode != '\0' && cpio->mode != opt)
                                lafe_errc(1, 0,
                                    "Cannot use both -o and -%c", cpio->mode);
                        cpio->mode = opt;
                        break;
                case 'p': /* POSIX 1997 */
-                       if (cpio->mode != '\0')
+                       if (cpio->mode != '\0' && cpio->mode != opt)
                                lafe_errc(1, 0,
                                    "Cannot use both -p and -%c", cpio->mode);
                        cpio->mode = opt;