Skip to content
  • Andy Wingo's avatar
    Prevent TOCTTOU bugs in C ports · 09a69dd7
    Andy Wingo authored
    * libguile/ports-internal.h (scm_port_buffer_can_take):
      (scm_port_buffer_can_put): Add cur/end output arguments so that when a
      caller asks the buffer room, it can be relative to a fixed point in
      the buffer and not whatever point it's at when we go to fill it.
      (scm_port_buffer_did_take, scm_port_buffer_did_put): Similarly,
      require that the caller knows where they took/put data in the buffer.
      Prevents overflow.
      (scm_port_buffer_take_pointer, scm_port_buffer_put_pointer): Likewise,
      require that the caller has already checked and knows a position in
      the buffer and therefore how much data is available.
      (scm_port_buffer_take, scm_port_buffer_put, scm_port_buffer_putback):
      Adapt.
    * libguile/ports.h (scm_fill_input): Add cur/avail output arguments.
    * libguile/filesys.c:
    * libguile/poll.c:
    * libguile/ports.c:
    * libguile/r6rs-ports.c:
    * libguile/read.c:
    * libguile/rw.c: Adapt all callers.  Gnarly work!
    09a69dd7