63 lines
3.1 KiB
Diff
63 lines
3.1 KiB
Diff
From f9f27de91c89d826c6a39c3ef44fb1b02f9a43aa Mon Sep 17 00:00:00 2001
|
|
From: Elliot Gorokhovsky <embg@fb.com>
|
|
Date: Fri, 29 Jul 2022 14:44:22 -0700
|
|
Subject: [PATCH] Disallow empty output directory
|
|
|
|
---
|
|
programs/zstdcli.c | 18 ++++++++++++++++--
|
|
tests/cli-tests/basic/output_dir.sh | 7 +++++++
|
|
tests/cli-tests/basic/output_dir.sh.stderr.exact | 2 ++
|
|
tests/cli-tests/basic/output_dir.sh.stdout.exact | 2 ++
|
|
4 files changed, 27 insertions(+), 2 deletions(-)
|
|
create mode 100755 tests/cli-tests/basic/output_dir.sh
|
|
create mode 100644 tests/cli-tests/basic/output_dir.sh.stderr.exact
|
|
create mode 100644 tests/cli-tests/basic/output_dir.sh.stdout.exact
|
|
|
|
--- a/programs/zstdcli.c
|
|
+++ b/programs/zstdcli.c
|
|
@@ -931,9 +931,23 @@ int main(int const argCount, const char*
|
|
if (longCommandWArg(&argument, "--stream-size=")) { streamSrcSize = readSizeTFromChar(&argument); continue; }
|
|
if (longCommandWArg(&argument, "--target-compressed-block-size=")) { targetCBlockSize = readSizeTFromChar(&argument); continue; }
|
|
if (longCommandWArg(&argument, "--size-hint=")) { srcSizeHint = readSizeTFromChar(&argument); continue; }
|
|
- if (longCommandWArg(&argument, "--output-dir-flat")) { NEXT_FIELD(outDirName); continue; }
|
|
+ if (longCommandWArg(&argument, "--output-dir-flat")) {
|
|
+ NEXT_FIELD(outDirName);
|
|
+ if (strlen(outDirName) == 0) {
|
|
+ DISPLAY("error: output dir cannot be empty string (did you mean to pass '.' instead?)\n");
|
|
+ CLEAN_RETURN(1);
|
|
+ }
|
|
+ continue;
|
|
+ }
|
|
#ifdef UTIL_HAS_MIRRORFILELIST
|
|
- if (longCommandWArg(&argument, "--output-dir-mirror")) { NEXT_FIELD(outMirroredDirName); continue; }
|
|
+ if (longCommandWArg(&argument, "--output-dir-mirror")) {
|
|
+ NEXT_FIELD(outMirroredDirName);
|
|
+ if (strlen(outMirroredDirName) == 0) {
|
|
+ DISPLAY("error: output dir cannot be empty string (did you mean to pass '.' instead?)\n");
|
|
+ CLEAN_RETURN(1);
|
|
+ }
|
|
+ continue;
|
|
+ }
|
|
#endif
|
|
#ifndef ZSTD_NOTRACE
|
|
if (longCommandWArg(&argument, "--trace")) { char const* traceFile; NEXT_FIELD(traceFile); TRACE_enable(traceFile); continue; }
|
|
--- /dev/null
|
|
+++ b/tests/cli-tests/basic/output_dir.sh
|
|
@@ -0,0 +1,7 @@
|
|
+#!/bin/sh
|
|
+
|
|
+println "+ zstd -r * --output-dir-mirror=\"\""
|
|
+zstd -r * --output-dir-mirror="" && die "Should not allow empty output dir!"
|
|
+println "+ zstd -r * --output-dir-flat=\"\""
|
|
+zstd -r * --output-dir-flat="" && die "Should not allow empty output dir!"
|
|
+exit 0
|
|
--- /dev/null
|
|
+++ b/tests/cli-tests/basic/output_dir.sh.stderr.exact
|
|
@@ -0,0 +1,2 @@
|
|
+error: output dir cannot be empty string (did you mean to pass '.' instead?)
|
|
+error: output dir cannot be empty string (did you mean to pass '.' instead?)
|
|
--- /dev/null
|
|
+++ b/tests/cli-tests/basic/output_dir.sh.stdout.exact
|
|
@@ -0,0 +1,2 @@
|
|
++ zstd -r * --output-dir-mirror=""
|
|
++ zstd -r * --output-dir-flat=""
|