aboutsummaryrefslogtreecommitdiff
path: root/ext/misc/compress.c
diff options
context:
space:
mode:
authormistachkin <mistachkin@noemail.net>2015-02-26 21:04:44 +0000
committermistachkin <mistachkin@noemail.net>2015-02-26 21:04:44 +0000
commit38e40ee2e5e4960bd5c7247018da08b018f1b552 (patch)
tree21f5361a637b3c567e26f480f7e2aff9458128b0 /ext/misc/compress.c
parent531b55ead0e2063575d1dcead08fa12d82a454c5 (diff)
downloadsqlite-38e40ee2e5e4960bd5c7247018da08b018f1b552.tar.gz
sqlite-38e40ee2e5e4960bd5c7247018da08b018f1b552.zip
Fix potential memory leaks in the misc 'compress' extension.
FossilOrigin-Name: 3bc34fd427d9d7819cd9740237b1f5d4180341fa
Diffstat (limited to 'ext/misc/compress.c')
-rw-r--r--ext/misc/compress.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/ext/misc/compress.c b/ext/misc/compress.c
index a4059116c..bf38d4c93 100644
--- a/ext/misc/compress.c
+++ b/ext/misc/compress.c
@@ -38,6 +38,7 @@ static void compressFunc(
unsigned int nIn;
unsigned long int nOut;
unsigned char x[8];
+ int rc;
int i, j;
pIn = sqlite3_value_blob(argv[0]);
@@ -50,8 +51,12 @@ static void compressFunc(
for(i=0; i<4 && x[i]==0; i++){}
for(j=0; i<=4; i++, j++) pOut[j] = x[i];
pOut[j-1] |= 0x80;
- compress(&pOut[j], &nOut, pIn, nIn);
- sqlite3_result_blob(context, pOut, nOut+j, sqlite3_free);
+ rc = compress(&pOut[j], &nOut, pIn, nIn);
+ if( rc==Z_OK ){
+ sqlite3_result_blob(context, pOut, nOut+j, sqlite3_free);
+ }else{
+ sqlite3_free(pOut);
+ }
}
/*
@@ -82,6 +87,8 @@ static void uncompressFunc(
rc = uncompress(pOut, &nOut, &pIn[i], nIn-i);
if( rc==Z_OK ){
sqlite3_result_blob(context, pOut, nOut, sqlite3_free);
+ }else{
+ sqlite3_free(pOut);
}
}