... | ... |
@@ -91,12 +91,17 @@ int cli_bytecode_context_getresult_file(struct cli_bc_ctx *ctx, char **tempfilen |
91 | 91 |
/* resets bytecode state, so you can run another bytecode with same ctx */ |
92 | 92 |
static int cli_bytecode_context_reset(struct cli_bc_ctx *ctx) |
93 | 93 |
{ |
94 |
+ unsigned i; |
|
95 |
+ |
|
94 | 96 |
free(ctx->opsizes); |
97 |
+ ctx->opsizes = NULL; |
|
98 |
+ |
|
95 | 99 |
free(ctx->values); |
100 |
+ ctx->values = NULL; |
|
101 |
+ |
|
96 | 102 |
free(ctx->operands); |
97 | 103 |
ctx->operands = NULL; |
98 |
- ctx->values = NULL; |
|
99 |
- ctx->opsizes = NULL; |
|
104 |
+ |
|
100 | 105 |
if (ctx->outfd) { |
101 | 106 |
cli_bcapi_extract_new(ctx, -1); |
102 | 107 |
if (ctx->outfd) |
... | ... |
@@ -105,6 +110,10 @@ static int cli_bytecode_context_reset(struct cli_bc_ctx *ctx) |
105 | 105 |
ctx->tempfile = NULL; |
106 | 106 |
ctx->outfd = 0; |
107 | 107 |
} |
108 |
+ ctx->numParams = 0; |
|
109 |
+ ctx->funcid = 0; |
|
110 |
+ ctx->file_size = 0; |
|
111 |
+ ctx->off = 0; |
|
108 | 112 |
ctx->written = 0; |
109 | 113 |
#if USE_MPOOL |
110 | 114 |
if (ctx->mpool) { |
... | ... |
@@ -114,6 +123,23 @@ static int cli_bytecode_context_reset(struct cli_bc_ctx *ctx) |
114 | 114 |
#else |
115 | 115 |
/*TODO: implement for no-mmap case too*/ |
116 | 116 |
#endif |
117 |
+ for (i=0;i<ctx->ninflates;i++) |
|
118 |
+ cli_bcapi_inflate_done(ctx, i); |
|
119 |
+ free(ctx->inflates); |
|
120 |
+ ctx->inflates = NULL; |
|
121 |
+ ctx->ninflates = 0; |
|
122 |
+ |
|
123 |
+ for (i=0;i<ctx->nbuffers;i++) |
|
124 |
+ cli_bcapi_buffer_pipe_done(ctx, i); |
|
125 |
+ free(ctx->buffers); |
|
126 |
+ ctx->buffers = NULL; |
|
127 |
+ ctx->nbuffers = 0; |
|
128 |
+ |
|
129 |
+ for (i=0;i<ctx->nhashsets;i++) |
|
130 |
+ cli_bcapi_hashset_done(ctx, i); |
|
131 |
+ free(ctx->hashsets); |
|
132 |
+ ctx->hashsets = NULL; |
|
133 |
+ ctx->nhashsets = 0; |
|
117 | 134 |
return CL_SUCCESS; |
118 | 135 |
} |
119 | 136 |
|
... | ... |
@@ -505,8 +505,11 @@ int32_t cli_bcapi_hashset_empty(struct cli_bc_ctx *ctx, int32_t id) |
505 | 505 |
|
506 | 506 |
int32_t cli_bcapi_hashset_done(struct cli_bc_ctx *ctx , int32_t id) |
507 | 507 |
{ |
508 |
- /* TODO */ |
|
509 |
- return -1; |
|
508 |
+ struct cli_hashset *s = get_hashset(ctx, id); |
|
509 |
+ if (!s) |
|
510 |
+ return -1; |
|
511 |
+ cli_hashset_destroy(s); |
|
512 |
+ return 0; |
|
510 | 513 |
} |
511 | 514 |
|
512 | 515 |
int32_t cli_bcapi_buffer_pipe_new(struct cli_bc_ctx *ctx, uint32_t size) |
... | ... |
@@ -650,8 +653,12 @@ int32_t cli_bcapi_buffer_pipe_write_stopped(struct cli_bc_ctx *ctx , int32_t id, |
650 | 650 |
|
651 | 651 |
int32_t cli_bcapi_buffer_pipe_done(struct cli_bc_ctx *ctx , int32_t id) |
652 | 652 |
{ |
653 |
- /* TODO */ |
|
654 |
- return -1; |
|
653 |
+ struct bc_buffer *b = get_buffer(ctx, id); |
|
654 |
+ if (!b) |
|
655 |
+ return -1; |
|
656 |
+ free(b->data); |
|
657 |
+ b->data = NULL; |
|
658 |
+ return -0; |
|
655 | 659 |
} |
656 | 660 |
|
657 | 661 |
int32_t cli_bcapi_inflate_init(struct cli_bc_ctx *ctx, int32_t from, int32_t to, int32_t windowBits) |
... | ... |
@@ -219,6 +219,15 @@ START_TEST (test_bswap) |
219 | 219 |
} |
220 | 220 |
END_TEST |
221 | 221 |
|
222 |
+START_TEST (test_inflate) |
|
223 |
+{ |
|
224 |
+ cl_init(CL_INIT_DEFAULT); |
|
225 |
+ if (have_clamjit) |
|
226 |
+ runtest("input/inflate.cbc", 0xbeef, 0, 0, NULL, NULL, NULL, NULL); |
|
227 |
+// runtest("input/inflate.cbc", 0xbeef, 0, 1, NULL, NULL, NULL, NULL); |
|
228 |
+} |
|
229 |
+END_TEST |
|
230 |
+ |
|
222 | 231 |
Suite *test_bytecode_suite(void) |
223 | 232 |
{ |
224 | 233 |
Suite *s = suite_create("bytecode"); |
... | ... |
@@ -235,5 +244,6 @@ Suite *test_bytecode_suite(void) |
235 | 235 |
tcase_add_test(tc_cli_arith, test_matchwithread); |
236 | 236 |
tcase_add_test(tc_cli_arith, test_pdf); |
237 | 237 |
tcase_add_test(tc_cli_arith, test_bswap); |
238 |
+ tcase_add_test(tc_cli_arith, test_inflate); |
|
238 | 239 |
return s; |
239 | 240 |
} |
240 | 241 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,21 @@ |
0 |
+ClamBCafhdjibjjkd|afefdfggifnf```````|bhacflfafmfbfcfmb`cnbac`cmbacdcmbgfffdfbcafbfafbc``bbaaap`clamcoincidencejb:485 |
|
1 |
+ |
|
2 |
+Tedebaeeb`eebadaaa`aabb`bb`baacbadb`bb`baacb`bb`bb`baacb`bbadb`baadb`bb`bb`bb`baadb`bbadbadb`baae`badbadb`bb`bdafahdblaah |
|
3 |
+Ebibajbnabid|b`abfegffffefbgoe`gif`gefoenfefgg``b`bbid|bgabfegffffefbgoe`gif`gefoebgefafdfoeaffgafiflf``bcbbid|bhabfegffffefbgoe`gif`gefoeggbgifdgefoeaffgafiflf``bibbid|amifnffflfafdgefoedfofnfef``bhbbid|b`aifnffflfafdgefoe`gbgofcfefcgcg``babbjd|beabfegffffefbgoe`gif`gefoebgefafdfoegfefdg``bdbbjd|bfabfegffffefbgoe`gif`gefoeggbgifdgefoegfefdg``bebbkd|bjabfegffffefbgoe`gif`gefoeggbgifdgefoecgdgof`g`gefdf``afbld|b`adfefbfeggfoe`gbgifnfdgoecgdgbg``bgbbmd|amifnffflfafdgefoeifnfifdg`` |
|
4 |
+G`ae`@`baeBoaBkhAhAhB`jBjaBejBkd@AcBffBofBof@BkbBidBmbBnbAa@AlBngBogBhmAd@@@`b`eBdgBefBcgBdgBkc@`bad@Aa`bad@Ab` |
|
5 |
+A`b`bLbgab`bab`b`b`b`aa`aa`aa```b`b`bad```b`b`b`b`aa```b`b`b`b`bad`b`b`b`b`aa```b`b`b`b`Fbkaae |
|
6 |
+Bb`baaababnaD```adb`babababnaD```adaaacnab`baa@daaadnab`bab@daaael`adac``bbEamjnmd`Taaaeadaa |
|
7 |
+Bb`bagababcbaabadahabbbdbaaag``ibahAc`Bladb`bajabbbebaaBladb`bakabcbgbaaabBoadaaalnab`bak@d``bbEbmjnmd`Taaaladab |
|
8 |
+Bb`banababhbakb`baoabab`babbadb`aabbbababaob`bbaaabbafb`a@db`bbbakbb`aAd`Aedaabcaeab`bbba@d``bbEcmjnmd`Taabcaacad |
|
9 |
+Bb`bbeaababibakTcab`bDonnkd |
|
10 |
+Bb`bbfabb`bfaTcab`bbfaE |
|
11 |
+Scgdgafdgifcf`bcfofnfcgdg`begifnfdghcoedg`bifnf`gegdgkeme`bmc`bkgS`chgacfflb`b`chghcbflb`b`chg`chclb`b`chg`chclb`b`chgaf`clb`b`chgacaflb`b`chgafeclb`b`chgdcbflb`b`chg`c`clb`b`chg`ccclb`b`chgfcfclb`b`chgfcfflb |
|
12 |
+`chgfcfflb`b`chg`c`clb`b`chgbcbflb`b`chgdciclb`b`chgbcdflb`b`chgbceflb`b`chg`caclb`b`chg`c`clb`b`chg`ccflb`b`chggceflb`b`chggcfflb`b`chgdfhclbS`chg`cdclb`b`chg`c`clb`b`chg`c`clb`b`chg`c`c`bmgkc |
|
13 |
+ifnfdg`befnfdgbgig`gofifnfdghbibSkgSegifnfdgccbcoedg`baffgafiflfkcSegifnfdghcoedg`bjbifnf`gegdgoebflb`bjbofegdgoebfkcSifnfdgccbcoedg`bifnf`gegdgoebfegff`bmc`bbfegffffefbgoe`gif`gefoenfefgghbdc`cicfcibkc |
|
14 |
+ifnfdgccbcoedg`bofegdg`gegdgoebfegff`bmc`bbfegffffefbgoe`gif`gefoenfefgghbdc`cicfcibkcSifff`bhbifnf`gegdgoebfegff`blc`b`c`blglg`bofegdg`gegdgoebfegff`blc`b`cibSbgefdgegbgnf`b`chgdfefafdfackc |
|
15 |
+affgafiflf`bmc`bbfegffffefbgoe`gif`gefoeggbgifdgefoeaffgafiflfhbifnf`gegdgoebfegffibkcSifnf`gegdgoebf`bmc`bbfegffffefbgoe`gif`gefoeggbgifdgefoegfefdghbifnf`gegdgoebfegfflb`baffgafiflfibkc |
|
16 |
+mfefmfcf`gighbifnf`gegdgoebflb`bifnf`gegdglb`bcgifjgefofffhbifnf`gegdgibibkcSbfegffffefbgoe`gif`gefoeggbgifdgefoecgdgof`g`gefdfhbifnf`gegdgoebfegfflb`bcgifjgefofffhbifnf`gegdgibibkc |
|
17 |
+Sifnfdgccbcoedg`bifdf`bmc`bifnffflfafdgefoeifnfifdghbifnf`gegdgoebfegfflb`bofegdg`gegdgoebfegfflb`bccacibkcSifff`bhbifdf`blc`b`cibSbgefdgegbgnf`b`chgdfefafdfbckcSifnffflfafdgefoe`gbgofcfefcgcghbifdfibkc |
|
18 |
+affgafiflf`bmc`bbfegffffefbgoe`gif`gefoebgefafdfoeaffgafiflfhbofegdg`gegdgoebfegffibkcSofegdgoebf`bmc`bbfegffffefbgoe`gif`gefoebgefafdfoegfefdghbofegdg`gegdgoebfegfflb`baffgafiflfibkc |
|
19 |
+dfefbfeggfhbofegdgoebfibkcSifff`bhbmfefmfcfmf`ghbofegdgoebflb`bbbdgefcgdgkcbblb`becibibSbgefdgegbgnf`b`chgdfefafdfcckcSifnffflfafdgefoedfofnfefhbifdfibkcSbgefdgegbgnf`b`chgbfefefffkc |
|
20 |
+mgSS |
|
0 | 21 |
\ No newline at end of file |