Skip to content

Commit

Permalink
recode zstdDecompressPlugin, set errorValue to decError when catched …
Browse files Browse the repository at this point in the history
…mem alloc error.
  • Loading branch information
sisong committed Sep 1, 2022
1 parent 27b0a00 commit f990e32
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 23 deletions.
50 changes: 30 additions & 20 deletions decompress_plugin_demo.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,22 @@
#define _dec_close_check(value) { if (!(value)) { LOG_ERR("check "#value " ERROR!\n"); \
result=hpatch_FALSE; _hpatch_update_decError(decompressPlugin,hpatch_dec_close_error); } }

#define _dec_onDecErr_rt() do { (self)->decError=hpatch_dec_error; return 0; } while(0)
#define _dec_onDecErr_up() do { if ((self)->decError) _hpatch_update_decError(decompressPlugin,(self)->decError); } while(0)
#define _dec_onDecErr_rt() do { if (!(self)->decError) (self)->decError=hpatch_dec_error; return 0; } while(0)
#define _dec_onDecErr_up() do { if ((self)->decError) _hpatch_update_decError(decompressPlugin,(self)->decError); } while(0)

static void* _dec_malloc(hpatch_size_t size) {
void* result=malloc(size);
if (!result) LOG_ERRNO(errno);
return result;
}
#define __dec_Alloc_fun(_type_TDecompress,p,size) { \
void* result=_dec_malloc(size); \
if (!result) \
((_type_TDecompress*)p)->decError=hpatch_dec_mem_error; \
return result; }

static void __dec_free(void* _, void* address){
if (address) free(address); }

#ifdef _CompressPlugin_zlib
#if (_IsNeedIncludeDefaultCompressHead)
Expand Down Expand Up @@ -384,14 +391,6 @@ static void* _dec_malloc(hpatch_size_t size) {
# include "Lzma2Dec.h"
# endif
#endif

#define __lzmax_dec_Alloc(_lzmax_TDecompress,p,size) { \
void* result=_dec_malloc(size); \
if (!result) \
((_lzmax_TDecompress*)p)->decError=hpatch_dec_mem_error; \
return result; }
static void __lzmax_dec_Free(ISzAllocPtr p, void *address){
if (address) free(address); }
#endif

#ifdef _CompressPlugin_lzma
Expand All @@ -408,7 +407,7 @@ static void* _dec_malloc(hpatch_size_t size) {
unsigned char dec_buf[kDecompressBufSize];
} _lzma_TDecompress;
static void * __lzma1_dec_Alloc(ISzAllocPtr p, size_t size)
__lzmax_dec_Alloc(_lzma_TDecompress,p,size)
__dec_Alloc_fun(_lzma_TDecompress,p,size)

static hpatch_BOOL _lzma_is_can_open(const char* compressType){
return (0==strcmp(compressType,"lzma"));
Expand All @@ -435,7 +434,7 @@ static void* _dec_malloc(hpatch_size_t size) {
if (!self) _dec_memErr_rt();
memset(self,0,sizeof(_lzma_TDecompress)-kDecompressBufSize);
self->memAllocBase.Alloc=__lzma1_dec_Alloc;
self->memAllocBase.Free=__lzmax_dec_Free;
*((void**)&self->memAllocBase.Free)=__dec_free;
self->codeStream=codeStream;
self->code_begin=code_begin;
self->code_end=code_end;
Expand All @@ -445,7 +444,7 @@ static void* _dec_malloc(hpatch_size_t size) {

LzmaDec_Construct(&self->decEnv);
ret=LzmaDec_Allocate(&self->decEnv,props,propsSize,&self->memAllocBase);
if (ret!=SZ_OK){ free(self); _dec_onDecErr_up(); _dec_openErr_rt(); }
if (ret!=SZ_OK){ _dec_onDecErr_up(); free(self); _dec_openErr_rt(); }
LzmaDec_Init(&self->decEnv);
return self;
}
Expand Down Expand Up @@ -523,7 +522,7 @@ static void* _dec_malloc(hpatch_size_t size) {
unsigned char dec_buf[kDecompressBufSize];
} _lzma2_TDecompress;
static void * __lzma2_dec_Alloc(ISzAllocPtr p, size_t size)
__lzmax_dec_Alloc(_lzma2_TDecompress,p,size)
__dec_Alloc_fun(_lzma2_TDecompress,p,size)

static hpatch_BOOL _lzma2_is_can_open(const char* compressType){
return (0==strcmp(compressType,"lzma2"));
Expand All @@ -545,7 +544,7 @@ static void* _dec_malloc(hpatch_size_t size) {
if (!self) _dec_memErr_rt();
memset(self,0,sizeof(_lzma2_TDecompress)-kDecompressBufSize);
self->memAllocBase.Alloc=__lzma2_dec_Alloc;
self->memAllocBase.Free=__lzmax_dec_Free;
*((void**)&self->memAllocBase.Free)=__dec_free;
self->codeStream=codeStream;
self->code_begin=code_begin;
self->code_end=code_end;
Expand All @@ -555,7 +554,7 @@ static void* _dec_malloc(hpatch_size_t size) {

Lzma2Dec_Construct(&self->decEnv);
ret=Lzma2Dec_Allocate(&self->decEnv,propsSize,&self->memAllocBase);
if (ret!=SZ_OK){ free(self); _dec_onDecErr_up(); _dec_openErr_rt(); }
if (ret!=SZ_OK){ _dec_onDecErr_up(); free(self); _dec_openErr_rt(); }
Lzma2Dec_Init(&self->decEnv);
return self;
}
Expand Down Expand Up @@ -724,6 +723,7 @@ static void* _dec_malloc(hpatch_size_t size) {

#ifdef _CompressPlugin_zstd
#if (_IsNeedIncludeDefaultCompressHead)
//# define ZSTD_STATIC_LINKING_ONLY //for ZSTD_customMem
# include "zstd.h" // "zstd/lib/zstd.h" https://github.com/facebook/zstd
#endif
typedef struct _zstd_TDecompress{
Expand All @@ -738,6 +738,10 @@ static void* _dec_malloc(hpatch_size_t size) {
hpatch_dec_error_t decError;
unsigned char buf[1];
} _zstd_TDecompress;
#ifdef ZSTD_STATIC_LINKING_ONLY
static void* __ZSTD_alloc(void* opaque, size_t size)
__dec_Alloc_fun(_zstd_TDecompress,opaque,size)
#endif
static hpatch_BOOL _zstd_is_can_open(const char* compressType){
return (0==strcmp(compressType,"zstd"));
}
Expand All @@ -764,11 +768,17 @@ static void* _dec_malloc(hpatch_size_t size) {
self->s_output.size=_output_size;
self->s_output.pos=0;
self->data_begin=0;

self->s = ZSTD_createDStream();
if (!self->s){ free(self); _dec_openErr_rt(); }
#ifdef ZSTD_STATIC_LINKING_ONLY
{
ZSTD_customMem customMem={__ZSTD_alloc,__dec_free,self};
self->s=ZSTD_createDStream_advanced(customMem);
}
#else
self->s=ZSTD_createDStream();
#endif
if (!self->s){ _dec_onDecErr_up(); free(self); _dec_openErr_rt(); }
ret=ZSTD_initDStream(self->s);
if (ZSTD_isError(ret)) { ZSTD_freeDStream(self->s); free(self); _dec_openErr_rt(); }
if (ZSTD_isError(ret)) { ZSTD_freeDStream(self->s); _dec_onDecErr_up(); free(self); _dec_openErr_rt(); }
#define _ZSTD_WINDOWLOG_MAX ((sizeof(size_t)<=4)?30:31)
ret=ZSTD_DCtx_setParameter(self->s,ZSTD_d_windowLogMax,_ZSTD_WINDOWLOG_MAX);
//if (ZSTD_isError(ret)) { printf("WARNING: ZSTD_DCtx_setMaxWindowSize() error!"); }
Expand Down
3 changes: 0 additions & 3 deletions file_for_patch.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,6 @@
# include <unistd.h> // rmdir
# endif
#endif
#ifndef _HPATCH_IS_USED_errno
# define _HPATCH_IS_USED_errno 1
#endif
#if (_HPATCH_IS_USED_errno)
# define _setFileErrNo(v) do {errno=v;} while(0)
#else
Expand Down
3 changes: 3 additions & 0 deletions libHDiffPatch/HPatch/patch_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ extern "C" {
# include <stdio.h> //for stderr
# define LOG_ERR(...) fprintf(stderr,__VA_ARGS__)
#endif
#ifndef _HPATCH_IS_USED_errno
# define _HPATCH_IS_USED_errno 1
#endif
#define _hpatch_import_system_tag "call import system api"
#if (_HPATCH_IS_USED_errno)
# define LOG_ERRNO(_err_no) \
Expand Down

0 comments on commit f990e32

Please sign in to comment.