summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hv.c3
-rw-r--r--hv.h4
2 files changed, 5 insertions, 2 deletions
diff --git a/hv.c b/hv.c
index e4cc6c999d..7efa0869db 100644
--- a/hv.c
+++ b/hv.c
@@ -85,9 +85,10 @@ S_save_hek(pTHX_ const char *str, I32 len, U32 hash)
is_utf8 = TRUE;
}
- New(54, k, HEK_BASESIZE + len + 1, char);
+ New(54, k, HEK_BASESIZE + len + 2, char);
hek = (HEK*)k;
Copy(str, HEK_KEY(hek), len, char);
+ HEK_KEY(hek)[len] = 0;
HEK_LEN(hek) = len;
HEK_HASH(hek) = hash;
HEK_UTF8(hek) = (char)is_utf8;
diff --git a/hv.h b/hv.h
index 688663a6bc..369bf3c549 100644
--- a/hv.h
+++ b/hv.h
@@ -23,6 +23,8 @@ struct hek {
U32 hek_hash; /* hash of key */
I32 hek_len; /* length of hash key */
char hek_key[1]; /* variable-length hash key */
+ /* the hash-key is \0-terminated */
+ /* after the \0 there is a byte telling whether the key is UTF8 */
};
/* hash structure: */
@@ -211,7 +213,7 @@ C<SV*>.
#define HEK_HASH(hek) (hek)->hek_hash
#define HEK_LEN(hek) (hek)->hek_len
#define HEK_KEY(hek) (hek)->hek_key
-#define HEK_UTF8(hek) (*(HEK_KEY(hek)+HEK_LEN(hek)))
+#define HEK_UTF8(hek) (*(HEK_KEY(hek)+HEK_LEN(hek)+1))
/* calculate HV array allocation */
#if defined(STRANGE_MALLOC) || defined(MYMALLOC)