Merge pull request #852 from facebook/fix851
fix #851 : sudo zstd -t file.zst changes /dev/null permissions
This commit is contained in:
commit
79e8ae61a7
6
NEWS
6
NEWS
@ -1,8 +1,12 @@
|
|||||||
v1.3.2
|
v1.3.2
|
||||||
|
new : long range mode, using --long command, by Stella Lau (@stellamplau)
|
||||||
license : changed /examples license to BSD + GPLv2
|
license : changed /examples license to BSD + GPLv2
|
||||||
license : fix a few header files to reflect new license (#825)
|
license : fix a few header files to reflect new license (#825)
|
||||||
fix : 32-bits build can now decode large offsets (levels 21+)
|
fix : multi-threading compression works with custom allocators
|
||||||
fix : a rare compression bug when compression generates very large distances (only possible at --ultra -22)
|
fix : a rare compression bug when compression generates very large distances (only possible at --ultra -22)
|
||||||
|
fix : 32-bits build can now decode large offsets (levels 21+)
|
||||||
|
cli : new : can split input file for dictionary training, using command -B#
|
||||||
|
cli : fix : do not change /dev/null permissions when using command -t with root access, reported by @mike155 (#851)
|
||||||
build: fix : no-multithread variant compiles without pool.c dependency, reported by Mitchell Blank Jr (@mitchblank) (#819)
|
build: fix : no-multithread variant compiles without pool.c dependency, reported by Mitchell Blank Jr (@mitchblank) (#819)
|
||||||
build: better compatibility with reproducible builds, by Bernhard M. Wiedemann (@bmwiedemann) (#818)
|
build: better compatibility with reproducible builds, by Bernhard M. Wiedemann (@bmwiedemann) (#818)
|
||||||
|
|
||||||
|
@ -105,9 +105,6 @@ static clock_t g_time = 0;
|
|||||||
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||||
|
|
||||||
|
|
||||||
/*-*************************************
|
|
||||||
* Errors
|
|
||||||
***************************************/
|
|
||||||
/*-*************************************
|
/*-*************************************
|
||||||
* Debug
|
* Debug
|
||||||
***************************************/
|
***************************************/
|
||||||
@ -1023,8 +1020,8 @@ int FIO_compressMultipleFilenames(const char** inFileNamesTable, unsigned nbFile
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
void* srcBuffer;
|
void* srcBuffer;
|
||||||
size_t srcBufferLoaded;
|
|
||||||
size_t srcBufferSize;
|
size_t srcBufferSize;
|
||||||
|
size_t srcBufferLoaded;
|
||||||
void* dstBuffer;
|
void* dstBuffer;
|
||||||
size_t dstBufferSize;
|
size_t dstBufferSize;
|
||||||
ZSTD_DStream* dctx;
|
ZSTD_DStream* dctx;
|
||||||
@ -1560,7 +1557,7 @@ static int FIO_decompressSrcFile(dRess_t ress, const char* dstFileName, const ch
|
|||||||
|
|
||||||
/* Close file */
|
/* Close file */
|
||||||
if (fclose(srcFile)) {
|
if (fclose(srcFile)) {
|
||||||
DISPLAYLEVEL(1, "zstd: %s: %s \n", srcFileName, strerror(errno)); /* error should never happen */
|
DISPLAYLEVEL(1, "zstd: %s: %s \n", srcFileName, strerror(errno)); /* error should not happen */
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if ( g_removeSrcFile /* --rm */
|
if ( g_removeSrcFile /* --rm */
|
||||||
@ -1590,7 +1587,8 @@ static int FIO_decompressDstFile(dRess_t ress,
|
|||||||
ress.dstFile = FIO_openDstFile(dstFileName);
|
ress.dstFile = FIO_openDstFile(dstFileName);
|
||||||
if (ress.dstFile==0) return 1;
|
if (ress.dstFile==0) return 1;
|
||||||
|
|
||||||
if (strcmp (srcFileName, stdinmark) && UTIL_getFileStat(srcFileName, &statbuf))
|
if ( strcmp(srcFileName, stdinmark)
|
||||||
|
&& UTIL_getFileStat(srcFileName, &statbuf) )
|
||||||
stat_result = 1;
|
stat_result = 1;
|
||||||
result = FIO_decompressSrcFile(ress, dstFileName, srcFileName);
|
result = FIO_decompressSrcFile(ress, dstFileName, srcFileName);
|
||||||
|
|
||||||
@ -1601,10 +1599,14 @@ static int FIO_decompressDstFile(dRess_t ress,
|
|||||||
|
|
||||||
if ( (result != 0) /* operation failure */
|
if ( (result != 0) /* operation failure */
|
||||||
&& strcmp(dstFileName, nulmark) /* special case : don't remove() /dev/null (#316) */
|
&& strcmp(dstFileName, nulmark) /* special case : don't remove() /dev/null (#316) */
|
||||||
&& remove(dstFileName) /* remove artefact */ )
|
&& strcmp(dstFileName, stdoutmark) ) /* special case : don't remove() stdout */
|
||||||
result=1; /* don't do anything special if remove() fails */
|
remove(dstFileName); /* remove decompression artefact; note don't do anything special if remove() fails */
|
||||||
else if (strcmp (dstFileName, stdoutmark) && stat_result)
|
else { /* operation success */
|
||||||
UTIL_setFileStat(dstFileName, &statbuf);
|
if ( strcmp(dstFileName, stdoutmark) /* special case : don't chmod stdout */
|
||||||
|
&& strcmp(dstFileName, nulmark) /* special case : don't chmod /dev/null */
|
||||||
|
&& stat_result ) /* file permissions correctly extracted from src */
|
||||||
|
UTIL_setFileStat(dstFileName, &statbuf); /* transfer file permissions from src into dst */
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user