@@ -820,29 +820,34 @@ static ERL_NIF_TERM create_cdict_nif(
820
820
ErlNifBinary bin ;
821
821
int level ;
822
822
823
- if (!enif_inspect_iolist_as_binary (env , argv [0 ], & bin ) ||
824
- !enif_get_int (env , argv [1 ], & level )) {
823
+ if (!enif_is_binary (env , argv [0 ]) || !enif_get_int (env , argv [1 ], & level )) {
825
824
return enif_make_badarg (env );
826
825
} else {
827
- ERL_NIF_TERM result ;
828
- ZstdDict * dict ;
829
- ZSTD_CDict * cdict = ZSTD_createCDict_advanced (bin .data , bin .size ,
826
+ ERL_NIF_TERM result , binary_copy ;
827
+ ZstdDict * dictp , dict ;
828
+
829
+ dict .env = enif_alloc_env ();
830
+ binary_copy = enif_make_copy (dict .env , argv [0 ]);
831
+
832
+ (void )enif_inspect_binary (dict .env , binary_copy , & bin );
833
+
834
+ dict .c = ZSTD_createCDict_advanced (bin .data , bin .size ,
830
835
ZSTD_dlm_byRef , ZSTD_dct_auto ,
831
836
ZSTD_getCParams (level , 0 , bin .size ),
832
837
zstd_customMem );
833
838
834
- if (!cdict )
839
+ if (!dict .c ) {
840
+ enif_free_env (dict .env );
835
841
return enif_make_tuple2 (env , am_error ,
836
842
enif_make_atom (env , "invalid_compress_dict" ));
843
+ }
837
844
838
- dict = enif_alloc_resource (compress_dict_type , sizeof (ZstdDict ));
845
+ dictp = enif_alloc_resource (compress_dict_type , sizeof (ZstdDict ));
839
846
840
- dict -> c = cdict ;
841
- dict -> env = enif_alloc_env ();
842
- enif_make_binary (dict -> env , & bin );
847
+ * dictp = dict ;
843
848
844
- result = enif_make_resource (env , (void * )dict );
845
- enif_release_resource ((void * )dict );
849
+ result = enif_make_resource (env , (void * )dictp );
850
+ enif_release_resource ((void * )dictp );
846
851
return result ;
847
852
}
848
853
}
@@ -857,26 +862,32 @@ static ERL_NIF_TERM create_ddict_nif(
857
862
ErlNifEnv * env , int argc , const ERL_NIF_TERM argv []) {
858
863
ErlNifBinary bin ;
859
864
860
- if (!enif_inspect_iolist_as_binary (env , argv [0 ], & bin )) {
865
+ if (!enif_is_binary (env , argv [0 ])) {
861
866
return enif_make_badarg (env );
862
867
} else {
863
- ERL_NIF_TERM result ;
864
- ZstdDict * dict ;
865
- ZSTD_DDict * ddict = ZSTD_createDDict_advanced (bin .data , bin .size ,
868
+ ERL_NIF_TERM result , binary_copy ;
869
+ ZstdDict * dictp , dict ;
870
+
871
+ dict .env = enif_alloc_env ();
872
+ binary_copy = enif_make_copy (dict .env , argv [0 ]);
873
+
874
+ (void )enif_inspect_binary (dict .env , binary_copy , & bin );
875
+
876
+ dict .d = ZSTD_createDDict_advanced (bin .data , bin .size ,
866
877
ZSTD_dlm_byRef , ZSTD_dct_auto , zstd_customMem );
867
878
868
- if (!ddict )
879
+ if (!dict .d ) {
880
+ enif_free_env (dict .env );
869
881
return enif_make_tuple2 (env , am_error ,
870
882
enif_make_atom (env , "invalid_decompress_dict" ));
883
+ }
871
884
872
- dict = enif_alloc_resource (decompress_dict_type , sizeof (ZstdDict ));
885
+ dictp = enif_alloc_resource (decompress_dict_type , sizeof (ZstdDict ));
873
886
874
- dict -> d = ddict ;
875
- dict -> env = enif_alloc_env ();
876
- enif_make_binary (dict -> env , & bin );
887
+ * dictp = dict ;
877
888
878
- result = enif_make_resource (env , (void * )dict );
879
- enif_release_resource ((void * )dict );
889
+ result = enif_make_resource (env , (void * )dictp );
890
+ enif_release_resource ((void * )dictp );
880
891
return result ;
881
892
}
882
893
}
0 commit comments