The output and error buffer feature depends on cookie->orig_fp to
indicate the current status of buffering: If it is set, a prior call to
init_cookie() is assumed. Though exit_cookie() missed to reset that
pointer to NULL. causing weird behaviour in applications if they do:
| nft = nft_ctx_new(0);
| nft_ctx_buffer_output(nft);
| nft_ctx_unbuffer_output(nft);
| nft_ctx_buffer_output(nft);
While being at it, apply the same fix to error path in init_cookie() as
well.
Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
cookie->fp = fopencookie(cookie, "w", cookie_fops);
if (!cookie->fp) {
cookie->fp = cookie->orig_fp;
+ cookie->orig_fp = NULL;
return 1;
}
fclose(cookie->fp);
cookie->fp = cookie->orig_fp;
+ cookie->orig_fp = NULL;
free(cookie->buf);
cookie->buf = NULL;
cookie->buflen = 0;