One of those pesky bugs, caused by not knowing your snprintf's well...
This strange, seemingly inexplicable bug only manifested whenever a
series of config file lines + preprocessor tokens formed a multiple
of 4096 bytes, the amount by which the preprocessor buffer gets extended
with each reallocation.
With such config files, the snprintf() would truncate the last byte of
the config file line adding up to N*4096 bytes (usually a '\n'), and put
a '\0' instead, after which the preprocessing continued normally.
However, it seems Yacc isn't too happy when you feed it with a buffer
which includes '\0' characters, as this will cause it to barf some
binary data to stdout, somewhat ruining the logfile.
(cherry picked from commit bf968d01679a48b9ff79f4edb9abf2743d3586b1)