Commit Briefs

Omar Polo

gemini_parse_reply: return code and don't close connection

clang static analyzer found a possible use after free: if the code is not 2X in gemini_parse_reply we call close_conn. Then, in net_read we set req->done_header, but req may have been free'd! Actually, this is almost impossible to trigger. close_conn never ends up calling free(req) on its first try, because tls_close takes a while and is rescheduled by libevent. (The check req->ctx != NULL in close_conn is always true if it's a gemini request.) Nevertheless, it's clear to move close_conn out of gemini_parse_reply and simply return the response code: it feels wrong that a "parsing function" takes logic decisions.



Omar Polo

move util.c declarations in utils.h

it's not spelled `util.h' because otherwise it'd get included instead of /usr/include/util.h


Omar Polo

re-create the tls_config for each request

this is just to simplify the future additions of client certificates.


Omar Polo

handle empty replies (i.e. no header)

thanks mansfield for breaking your server so I notice this error


Omar Polo

send received page in chunks

imsg can't handle buffer "too big" (around INT16_MAX) and solene@ capsule index is ~29K. The 4K chunk size is completely arbitrary.



Omar Polo

wrap unfreeze in ifdef

instead of defining macros in compat.h. It's clearer that it's only for libevent2 this way


Omar Polo

unfrozen by default

it seems that we can "melt" :P the evbuffer from the start to avoid the unfreeze/freeze dance



Omar Polo

fix bufferevent tls I/O on libevent2

on libevent2 we need to wrap evbuffer_add with evbuffer_freeze/evbuffer_unfreeze. Not sure exactly why, probably because we're doing some evbuffer_enable/disable/enable-again. Retain compatibility with the custom libevent1 in base on OpenBSD.


Omar Polo

drain read buffer before EOF


Omar Polo

initial gopher support


Omar Polo

support finger:// urls!


Omar Polo

fix possible overflow

sizeof(buf) should be equal to howmuch, otherwise we may end up reading with tls_read out of bounds and corrupting the stack.