Branch: Tag:

2020-07-19

2020-07-19 22:45:52 by Stephen R. van den Berg <srb@cuci.nl>

Stdio.Buffer: Check for PIKE_T_FUNCTION before acting on objects.

455:       PMOD_EXPORT void io_actually_trigger_output( Buffer *io )    { +  if (io->output.tu.named_type == PIKE_T_FUNCTION) {    if (UNLIKELY(!io->output.u.object->prog)) {    /* Destructed object. */    free_svalue(&io->output); -  SET_SVAL(io->output, PIKE_T_INT, NUMBER_NUMBER, integer, 0); +     return;    }    -  if ( io->output.u.object ) { +     move_svalue(Pike_sp++, &io->output); -  SET_SVAL(io->output, PIKE_T_INT, NUMBER_NUMBER, integer, 0); +     apply_svalue(Pike_sp-1, 0);    pop_n_elems(2);    }
990:    if (f)    assign_svalue(&io->output, f);    else { -  if (io->output.u.object) { +  if (io->output.tu.named_type == PIKE_T_FUNCTION)    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); +     } -  } +        /*! @decl int(-1..) output_to( Stdio.Stream|function(string(8bit):int) fun, @    *! int(0..)|void nbytes )