commit 0e8f22ed5bac3d23402a29c24f7dee6cd75add5b from: Omar Polo date: Sun Sep 12 10:48:05 2021 UTC 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. commit - 5c38fd5f56d53ec2c71a4e29c234329704962b58 commit + 0e8f22ed5bac3d23402a29c24f7dee6cd75add5b blob - 88b9b979998d210062fdde5d8e9507772e1a56d3 blob + 6d8e0e4e3262ab70488c88ff0cdbc9e1f647b5a8 --- net.c +++ net.c @@ -541,7 +541,7 @@ net_read(struct bufferevent *bev, void *d) struct req *req = d; struct evbuffer *src = EVBUFFER_INPUT(bev); void *data; - size_t len; + size_t len, chunk; int r; char *header; @@ -562,8 +562,19 @@ net_read(struct bufferevent *bev, void *d) if ((len = EVBUFFER_LENGTH(src)) == 0) return; data = EVBUFFER_DATA(src); - net_send_ui(IMSG_BUF, req->id, data, len); - evbuffer_drain(src, len); + + /* + * Split data into chunks before sending. imsg can't handle + * message that are "too big". + */ + while (len != 0) { + chunk = MIN(len, 4096); + net_send_ui(IMSG_BUF, req->id, data, chunk); + data += chunk; + len -= chunk; + } + + evbuffer_drain(src, EVBUFFER_LENGTH(src)); return; err: