# HG changeset patch # User Gregory Szorc # Date 1484677033 28800 # Node ID 08fa3a76a0803cbae15883ee9521fe2dc4eda96d # Parent 08b34c3a6f74800b5b357f371568177827963e2b zstd: prevent potential free() of uninitialized memory This is a cherry pick of an upstream fix. The free() of uninitialed memory could likely only occur if a malloc() inside zstd fails. The patched functions aren't currently used by Mercurial. But I don't like leaving footguns sitting around. diff -r 08b34c3a6f74 -r 08fa3a76a080 contrib/python-zstandard/c-ext/compressor.c --- a/contrib/python-zstandard/c-ext/compressor.c Tue Jan 17 11:25:02 2017 -0800 +++ b/contrib/python-zstandard/c-ext/compressor.c Tue Jan 17 10:17:13 2017 -0800 @@ -258,6 +258,9 @@ return NULL; } + /* Prevent free on uninitialized memory in finally. */ + output.dst = NULL; + cstream = CStream_from_ZstdCompressor(self, sourceSize); if (!cstream) { res = NULL; diff -r 08b34c3a6f74 -r 08fa3a76a080 contrib/python-zstandard/c-ext/decompressor.c --- a/contrib/python-zstandard/c-ext/decompressor.c Tue Jan 17 11:25:02 2017 -0800 +++ b/contrib/python-zstandard/c-ext/decompressor.c Tue Jan 17 10:17:13 2017 -0800 @@ -165,6 +165,9 @@ return NULL; } + /* Prevent free on uninitialized memory in finally. */ + output.dst = NULL; + dstream = DStream_from_ZstdDecompressor(self); if (!dstream) { res = NULL;