diff --git a/src/files.c b/src/files.c
index 2abda50ec4fbc29aa91f723618bfedb58e78ef37..b79238e579ba4b25a4dad2a4ccd66ad77919fd81 100644
--- a/src/files.c
+++ b/src/files.c
@@ -2961,9 +2961,11 @@ void load_history(void)
 
 	    while ((read = getline(&line, &buf_len, hist)) > 0) {
 		line[--read] = '\0';
-		if (read > 0)
+		if (read > 0) {
+		    /* Encode any embedded NUL as 0x0A. */
+		    unsunder(line, read);
 		    update_history(history, line);
-		else
+		} else
 		    history = &replace_history;
 	    }
 
@@ -2986,6 +2988,9 @@ bool writehist(FILE *hist, const filestruct *head)
     for (item = head; item != NULL; item = item->next) {
 	size_t length = strlen(item->data);
 
+	/* Decode 0x0A bytes as embedded NULs. */
+	sunder(item->data);
+
 	if (fwrite(item->data, sizeof(char), length, hist) < length)
 	    return FALSE;
 	if (putc('\n', hist) == EOF)