summaryrefslogtreecommitdiffstats
path: root/glob.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-04-15 06:23:25 -0700
committerKaz Kylheku <kaz@kylheku.com>2016-04-15 06:23:25 -0700
commit15be06e5c6e151b6c954c1ee4ee093c00c8cc4b9 (patch)
treeb505ea083581d20657c82f7c401bd5eaf309020e /glob.c
parente1a681d66738eedbfdbd351e9ca4d2aaf1b3fb69 (diff)
downloadtxr-15be06e5c6e151b6c954c1ee4ee093c00c8cc4b9.tar.gz
txr-15be06e5c6e151b6c954c1ee4ee093c00c8cc4b9.tar.bz2
txr-15be06e5c6e151b6c954c1ee4ee093c00c8cc4b9.zip
Fix memory leak in glob.
* glob.c (glob_wrap): Must free the temporary UTF-8 version of the search pattern.
Diffstat (limited to 'glob.c')
-rw-r--r--glob.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/glob.c b/glob.c
index 76673a59..5806f1fd 100644
--- a/glob.c
+++ b/glob.c
@@ -69,9 +69,11 @@ val glob_wrap(val pattern, val flags, val errfunc)
char *pat_u8 = utf8_dup_to(c_str(pattern));
glob_t gl;
- if (s_errfunc)
+ if (s_errfunc) {
+ free(pat_u8);
uw_throwf(error_s, lit("glob: glob cannot be re-entered from "
"its error callback function"), nao);
+ }
s_errfunc = default_bool_arg(errfunc);
@@ -79,6 +81,7 @@ val glob_wrap(val pattern, val flags, val errfunc)
s_errfunc ? errfunc_thunk : 0, &gl);
s_errfunc = nil;
+ free(pat_u8);
if (s_exit_point) {
uw_frame_t *ep = s_exit_point;