ubi-utils: ubicrc32: process command line arguments first

Message ID 20171110113032.1758-1-david.oberhollenzer@sigma-star.at
State New
Delegated to: David Oberhollenzer
Headers show
Series
  • ubi-utils: ubicrc32: process command line arguments first
Related show

Commit Message

David Oberhollenzer Nov. 10, 2017, 11:30 a.m.
When a command line option is used (e.g. --version), the tool
tries to open it as a file first, then *uppon success* attempts
to process the command line options (including what it assumed
to be an input file) which is obviously broken.

This patch moves command line processing first and then attempts
to open *the first unprocessed* argument.

Reported-by: Uwe Kleine-K├Ânig <ukleinek@debian.org>
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
---
 ubi-utils/ubicrc32.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

Comments

David Oberhollenzer Nov. 12, 2017, 11:59 a.m. | #1
Applied to mtd-utils.git

Patch

diff --git a/ubi-utils/ubicrc32.c b/ubi-utils/ubicrc32.c
index 0ea255d..885f348 100644
--- a/ubi-utils/ubicrc32.c
+++ b/ubi-utils/ubicrc32.c
@@ -89,19 +89,18 @@  int main(int argc, char * const argv[])
 	int err = 0;
 	uint32_t crc = UBI_CRC32_INIT;
 	char buf[BUFSIZE];
-	FILE *fp;
-
-	if (argc > 1) {
-		fp = fopen(argv[1], "r");
-		if (!fp)
-			return sys_errmsg("cannot open \"%s\"", argv[1]);
-	} else
-		fp = stdin;
+	FILE *fp = stdin;
 
 	err = parse_opt(argc, argv);
 	if (err)
 		return err;
 
+	if (optind < argc) {
+		fp = fopen(argv[optind], "r");
+		if (!fp)
+			return sys_errmsg("cannot open \"%s\"", argv[1]);
+	}
+
 	while (!feof(fp)) {
 		size_t read;