I think I found it.
commit be8d0c60fcd3bb8615740d55ba300460c9062679 (HEAD -> master) Author: Stephen R. van den Berg srb@cuci.nl Date: Mon Jul 6 00:13:44 2020 +0200
Stdio.Buffer: Put null in a freed io->output.u.object.
src/modules/_Stdio/buffer.cmod | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
This should/might fix it.
| diff --git a/src/modules/_Stdio/buffer.cmod b/src/modules/_Stdio/buffer.cmod | index 7cf3feadd1..ed42aa5224 100644 | --- a/src/modules/_Stdio/buffer.cmod | +++ b/src/modules/_Stdio/buffer.cmod | @@ -990,8 +990,10 @@ PIKECLASS Buffer | if (f) | assign_svalue(&io->output, f); | else { | - if (io->output.u.object) | + if (io->output.u.object) { | free_svalue(&io->output); | + io->output.u.object = 0; // free_svalue() puts in -1 | + } | SET_SVAL(io->output, PIKE_T_INT, NUMBER_NUMBER, integer, 0); | } | }
Strange that this should be needed; the SET_SVAL() on the line below ought to have the same effect (during normal circumstances where sizeof(void *) == sizeof(INT_TYPE)). What are the sizes for the members of union anything on your system?
/grubba