Index: Parser/tokenizer.c =================================================================== --- Parser/tokenizer.c (revision 41454) +++ Parser/tokenizer.c (working copy) @@ -867,6 +867,9 @@ if (decoding_fgets(tok->inp, (int)(tok->end - tok->inp), tok) == NULL) { + /* XXX: tok->buf was already free'd + this writes to free memory, + doesn't it??? */ /* Last line does not end in \n, fake one */ strcpy(tok->inp, "\n"); @@ -874,14 +877,16 @@ tok->inp = strchr(tok->inp, '\0'); done = tok->inp[-1] == '\n'; } - tok->cur = tok->buf + cur; - /* replace "\r\n" with "\n" */ - /* For Mac we leave the \r, giving a syntax error */ - pt = tok->inp - 2; - if (pt >= tok->buf && *pt == '\r') { - *pt++ = '\n'; - *pt = '\0'; - tok->inp = pt; + if (tok->buf != NULL) { + tok->cur = tok->buf + cur; + /* replace "\r\n" with "\n" */ + /* For Mac leave the \r, giving syntax error */ + pt = tok->inp - 2; + if (pt >= tok->buf && *pt == '\r') { + *pt++ = '\n'; + *pt = '\0'; + tok->inp = pt; + } } } if (tok->done != E_OK) {