summaryrefslogtreecommitdiff
path: root/converters
diff options
context:
space:
mode:
authorDmitry Sivachenko <demon@FreeBSD.org>2005-12-08 11:18:11 +0000
committerDmitry Sivachenko <demon@FreeBSD.org>2005-12-08 11:18:11 +0000
commit129f54943ebae582b41066ce0d4a4a2ac86262a3 (patch)
treeffbddc322247d0fc7302fd399e7f297617abd342 /converters
parentUpdate to 3.48. (diff)
Plug memory leak in librecode.
Bump PORTREVISION. PR: 89934 Submitted by: Sergey Prikhodko <sergey@network-asp.biz>
Notes
Notes: svn path=/head/; revision=150652
Diffstat (limited to 'converters')
-rw-r--r--converters/recode/Makefile2
-rw-r--r--converters/recode/files/patch-src::names.c33
-rw-r--r--converters/recode/files/patch-src::outer.c18
3 files changed, 52 insertions, 1 deletions
diff --git a/converters/recode/Makefile b/converters/recode/Makefile
index 7a7c4eddc7e0..69149089c59c 100644
--- a/converters/recode/Makefile
+++ b/converters/recode/Makefile
@@ -7,7 +7,7 @@
PORTNAME= recode
PORTVERSION= 3.6
-PORTREVISION= 4
+PORTREVISION= 5
CATEGORIES= converters
MASTER_SITES= ${MASTER_SITE_GNU}
MASTER_SITE_SUBDIR= recode
diff --git a/converters/recode/files/patch-src::names.c b/converters/recode/files/patch-src::names.c
new file mode 100644
index 000000000000..b4fddb093067
--- /dev/null
+++ b/converters/recode/files/patch-src::names.c
@@ -0,0 +1,33 @@
+--- src/names.c.orig Wed Dec 6 21:41:29 2000
++++ src/names.c Fri Dec 2 16:12:26 2005
+@@ -101,6 +101,21 @@
+ return strcmp (first->name, second->name) == 0;
+ }
+
++static void
++alias_freer (void *param)
++{
++ RECODE_ALIAS alias = param;
++ struct recode_surface_list *next = alias->implied_surfaces;
++ struct recode_surface_list *p;
++ while (next)
++ {
++ p = next->next;
++ free(next);
++ next = p;
++ }
++ free(alias);
++}
++
+ bool
+ prepare_for_aliases (RECODE_OUTER outer)
+ {
+@@ -108,7 +123,7 @@
+ outer->number_of_symbols = 0;
+
+ outer->alias_table
+- = hash_initialize (800, NULL, alias_hasher, alias_comparator, free);
++ = hash_initialize (800, NULL, alias_hasher, alias_comparator, alias_freer);
+ if (!outer->alias_table)
+ return false;
+
diff --git a/converters/recode/files/patch-src::outer.c b/converters/recode/files/patch-src::outer.c
new file mode 100644
index 000000000000..04801f3d0726
--- /dev/null
+++ b/converters/recode/files/patch-src::outer.c
@@ -0,0 +1,18 @@
+--- src/outer.c.orig Wed Aug 30 23:16:14 2000
++++ src/outer.c Fri Dec 2 16:12:26 2005
+@@ -617,7 +617,14 @@
+ if (outer->alias_table)
+ hash_free (outer->alias_table);
+ if (outer->argmatch_charset_array)
+- free (outer->argmatch_charset_array);
++ {
++ char **cursor;
++ for (cursor = outer->argmatch_charset_array; *cursor; cursor++)
++ free (*cursor);
++ for (cursor = outer->argmatch_surface_array; *cursor; cursor++)
++ free (*cursor);
++ free (outer->argmatch_charset_array);
++ }
+ if (outer->one_to_same)
+ free ((void *) outer->one_to_same);
+ free (outer);