  void * alloc_top(size_t size) {
    top -= size;
    if (top < bottom) {new_chunk(); top -= size;}
    return top;
  }
The software writes data past the end, or before the beginning, of the intended buffer.