Browse code

Fix more leaks.

Török Edvin authored on 2010/03/25 00:07:14
Showing 4 changed files
... ...
@@ -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