From e2229c7e2eeb1b0245cc2c7b9c9188f95867e344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 3 Aug 2019 21:30:06 +0200 Subject: [PATCH] osc: bug: uneven clipboard bytes where not buffered correctly When responding to a OSC 52 clipboard request, we need to base64 encode the clipboard data. This is done in, potentially, several calls. Since we need at least 3 bytes to be able to produce any base64 output, we may have to buffer up to 2 bytes between the callback calls with clipboard data. This was being done incorrectly, where both bytes were written to index 0 in the buffer. --- osc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/osc.c b/osc.c index 2381f35c..16a1d1b8 100644 --- a/osc.c +++ b/osc.c @@ -111,10 +111,12 @@ from_clipboard_cb(const char *text, size_t size, void *user) if (left == 0) return; + assert(ctx->idx == 0); + int remaining = left % 3; for (int i = remaining; i > 0; i--) - ctx->buf[0] = text[size - i]; - ctx->idx = remaining; + ctx->buf[ctx->idx++] = text[size - i]; + assert(ctx->idx == remaining); char *chunk = base64_encode((const uint8_t *)t, left / 3 * 3); assert(chunk != NULL);