summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--encoding.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/encoding.c b/encoding.c
index 1ede6a677c..a0be931c97 100644
--- a/encoding.c
+++ b/encoding.c
@@ -1543,7 +1543,14 @@ enc_set_default_encoding(struct default_encoding *def, VALUE encoding, const cha
if (NIL_P(encoding)) {
def->index = -1;
def->enc = 0;
- st_insert(enc_table->names, (st_data_t)strdup(name),
+ char *name_dup = strdup(name);
+
+ st_data_t existing_name = (st_data_t)name_dup;
+ if (st_delete(enc_table->names, &existing_name, NULL)) {
+ xfree((void *)existing_name);
+ }
+
+ st_insert(enc_table->names, (st_data_t)name_dup,
(st_data_t)UNSPECIFIED_ENCODING);
}
else {