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.
--- 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;
--- 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;