diff options
Diffstat (limited to 'lib/util/charset/util_str.c')
-rw-r--r-- | lib/util/charset/util_str.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/lib/util/charset/util_str.c b/lib/util/charset/util_str.c index e76c1dbbf5..80e5bde354 100644 --- a/lib/util/charset/util_str.c +++ b/lib/util/charset/util_str.c @@ -487,9 +487,10 @@ char *strstr_m(const char *src, const char *findstr) const char *s; char *s2; char *retp; - size_t converted_size, findstr_len = 0; + TALLOC_CTX *frame; /* Only set up in the iconv case */ + /* for correctness */ if (!findstr[0]) { return discard_const_p(char, src); @@ -524,35 +525,34 @@ char *strstr_m(const char *src, const char *findstr) s = src; #endif - if (!push_ucs2_talloc(talloc_tos(), &src_w, src, &converted_size)) { + frame = talloc_stackframe(); + + if (!push_ucs2_talloc(frame, &src_w, src, &converted_size)) { DEBUG(0,("strstr_m: src malloc fail\n")); + TALLOC_FREE(frame); return NULL; } - if (!push_ucs2_talloc(talloc_tos(), &find_w, findstr, &converted_size)) { - TALLOC_FREE(src_w); + if (!push_ucs2_talloc(frame, &find_w, findstr, &converted_size)) { DEBUG(0,("strstr_m: find malloc fail\n")); + TALLOC_FREE(frame); return NULL; } p = strstr_w(src_w, find_w); if (!p) { - TALLOC_FREE(src_w); - TALLOC_FREE(find_w); + TALLOC_FREE(frame); return NULL; } *p = 0; - if (!pull_ucs2_talloc(talloc_tos(), &s2, src_w, &converted_size)) { - TALLOC_FREE(src_w); - TALLOC_FREE(find_w); + if (!pull_ucs2_talloc(frame, &s2, src_w, &converted_size)) { + TALLOC_FREE(frame); DEBUG(0,("strstr_m: dest malloc fail\n")); return NULL; } retp = discard_const_p(char, (s+strlen(s2))); - TALLOC_FREE(src_w); - TALLOC_FREE(find_w); - TALLOC_FREE(s2); + TALLOC_FREE(frame); return retp; } |