mirror of
https://github.com/facebook/zstd.git
synced 2025-03-07 01:10:04 +02:00
Merge pull request #3220 from embg/issue3200
Disallow empty string as argument for --output-dir-flat and --output-dir-mirror
This commit is contained in:
commit
28ceb63503
@ -880,30 +880,30 @@ static const char * trimPath(const char *pathname)
|
||||
|
||||
static char* mallocAndJoin2Dir(const char *dir1, const char *dir2)
|
||||
{
|
||||
const size_t dir1Size = strlen(dir1);
|
||||
const size_t dir2Size = strlen(dir2);
|
||||
char *outDirBuffer, *buffer, trailingChar;
|
||||
|
||||
assert(dir1 != NULL && dir2 != NULL);
|
||||
outDirBuffer = (char *) malloc(dir1Size + dir2Size + 2);
|
||||
CONTROL(outDirBuffer != NULL);
|
||||
{ const size_t dir1Size = strlen(dir1);
|
||||
const size_t dir2Size = strlen(dir2);
|
||||
char *outDirBuffer, *buffer;
|
||||
|
||||
memcpy(outDirBuffer, dir1, dir1Size);
|
||||
outDirBuffer[dir1Size] = '\0';
|
||||
outDirBuffer = (char *) malloc(dir1Size + dir2Size + 2);
|
||||
CONTROL(outDirBuffer != NULL);
|
||||
|
||||
memcpy(outDirBuffer, dir1, dir1Size);
|
||||
outDirBuffer[dir1Size] = '\0';
|
||||
|
||||
if (dir2[0] == '.')
|
||||
return outDirBuffer;
|
||||
|
||||
buffer = outDirBuffer + dir1Size;
|
||||
if (dir1Size > 0 && *(buffer - 1) != PATH_SEP) {
|
||||
*buffer = PATH_SEP;
|
||||
buffer++;
|
||||
}
|
||||
memcpy(buffer, dir2, dir2Size);
|
||||
buffer[dir2Size] = '\0';
|
||||
|
||||
if (dir2[0] == '.')
|
||||
return outDirBuffer;
|
||||
|
||||
buffer = outDirBuffer + dir1Size;
|
||||
trailingChar = *(buffer - 1);
|
||||
if (trailingChar != PATH_SEP) {
|
||||
*buffer = PATH_SEP;
|
||||
buffer++;
|
||||
}
|
||||
memcpy(buffer, dir2, dir2Size);
|
||||
buffer[dir2Size] = '\0';
|
||||
|
||||
return outDirBuffer;
|
||||
}
|
||||
|
||||
/* this function will return NULL if input srcFileName is not valid name for mirrored output path */
|
||||
|
@ -1011,7 +1011,14 @@ int main(int argCount, const char* argv[])
|
||||
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;
|
||||
}
|
||||
if (longCommandWArg(&argument, "--auto-threads")) {
|
||||
const char* threadDefault = NULL;
|
||||
NEXT_FIELD(threadDefault);
|
||||
@ -1020,7 +1027,14 @@ int main(int argCount, const char* argv[])
|
||||
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; }
|
||||
|
7
tests/cli-tests/basic/output_dir.sh
Executable file
7
tests/cli-tests/basic/output_dir.sh
Executable file
@ -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
|
2
tests/cli-tests/basic/output_dir.sh.stderr.exact
Normal file
2
tests/cli-tests/basic/output_dir.sh.stderr.exact
Normal file
@ -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?)
|
2
tests/cli-tests/basic/output_dir.sh.stdout.exact
Normal file
2
tests/cli-tests/basic/output_dir.sh.stdout.exact
Normal file
@ -0,0 +1,2 @@
|
||||
+ zstd -r * --output-dir-mirror=""
|
||||
+ zstd -r * --output-dir-flat=""
|
Loading…
x
Reference in New Issue
Block a user