Changeset: 85de08709475 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/85de08709475 Modified Files: monetdb5/modules/atoms/str.c Branch: sw_ew_c_sorting Log Message:
don't use references to stack variables after the stack ended. fixed leak in batstr_strlower diffs (100 lines): diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c --- a/monetdb5/modules/atoms/str.c +++ b/monetdb5/modules/atoms/str.c @@ -5809,17 +5809,19 @@ batstr_strlower(BAT *b) bi = bat_iterator(b); BATloop(b, p, q) { - str vb = BUNtail(bi, p), vb_low; + str vb = BUNtail(bi, p), vb_low = NULL; if (STRlower(&vb_low, &vb)) { bat_iterator_end(&bi); BBPreclaim(bn); return NULL; } if (BUNappend(bn, vb_low, false) != GDK_SUCCEED) { + GDKfree(vb_low); bat_iterator_end(&bi); BBPreclaim(bn); return NULL; } + GDKfree(vb_low); } bat_iterator_end(&bi); return bn; @@ -6211,7 +6213,7 @@ STRjoin(bat *rl_id, bat *rr_id, const ba assert(ATOMtype(l->ttype) == ATOMtype(r->ttype)); assert(ATOMtype(l->ttype) == TYPE_str); - BAT **l_ptr = &l, **r_ptr = &r; + BAT *nl = l, *nr = r; if (strcmp(fname, "str.containsjoin") == 0) { msg = contains_join(rl, rr, l, r, cl, cr, anti, str_cmp, fname); @@ -6230,41 +6232,40 @@ STRjoin(bat *rl_id, bat *rr_id, const ba + rcnt*log2((double)rcnt))); if (nl_cost < sorted_cost) { - msg = str_join_nested(rl, rr, *l_ptr, *r_ptr, cl, cr, anti, str_cmp, fname); + msg = str_join_nested(rl, rr, nl, nr, cl, cr, anti, str_cmp, fname); } else { BAT *l_low = NULL, *r_low = NULL, *l_rev = NULL, *r_rev = NULL; if (icase) { - l_low = batstr_strlower(*l_ptr); + l_low = batstr_strlower(nl); if (l_low == NULL) { - BBPnreclaim(6, rl, rr, *l_ptr, *r_ptr, cl, cr); + BBPnreclaim(6, rl, rr, nl, nr, cl, cr); throw(MAL, fname, "Failed lowering strings of left input"); } - r_low = batstr_strlower(*r_ptr); + r_low = batstr_strlower(nr); if (r_low == NULL) { - BBPnreclaim(7, rl, rr, *l_ptr, *r_ptr, cl, cr, l_low); + BBPnreclaim(7, rl, rr, nl, nr, cl, cr, l_low); throw(MAL, fname, "Failed lowering strings of right input"); } - BBPnreclaim(2, *l_ptr, *r_ptr); - l_ptr = &l_low; - r_ptr = &r_low; + BBPnreclaim(2, nl, nr); + nl = l_low; + nr = r_low; } if (strcmp(fname, "str.endswithjoin") == 0) { - l_rev = batstr_strrev(*l_ptr); + l_rev = batstr_strrev(nl); if (l_rev == NULL) { - BBPnreclaim(6, rl, rr, *l_ptr, *r_ptr, cl, cr); + BBPnreclaim(6, rl, rr, nl, nr, cl, cr); throw(MAL, fname, "Failed reversing strings of left input"); } - r_rev = batstr_strrev(*r_ptr); + r_rev = batstr_strrev(nr); if (r_rev == NULL) { - BBPnreclaim(7, rl, rr, *l_ptr, *r_ptr, cl, cr, l_rev); + BBPnreclaim(7, rl, rr, nl, nr, cl, cr, l_rev); throw(MAL, fname, "Failed reversing strings of right input"); } - BBPnreclaim(2, *l_ptr, *r_ptr); - l_ptr = &l_rev; - r_ptr = &r_rev; + BBPnreclaim(2, nl, nr); + nl = l_rev; + nr = r_rev; } - msg = startswith_join(&rl, &rr, *l_ptr, *r_ptr, cl, cr, - anti, str_is_prefix, fname); + msg = startswith_join(&rl, &rr, nl, nr, cl, cr, anti, str_is_prefix, fname); } } @@ -6279,7 +6280,7 @@ STRjoin(bat *rl_id, bat *rr_id, const ba BBPnreclaim(2, rl, rr); } - BBPnreclaim(4, *l_ptr, *r_ptr, cl, cr); + BBPnreclaim(4, nl, nr, cl, cr); return msg; } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org