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)