]> prime8.dev >> repos - ttyd.git/commitdiff
protocol: fix -Wstringop-overflow compile warning
authorShuanglei Tao <tsl0922@gmail.com>
Sun, 14 Mar 2021 03:57:57 +0000 (11:57 +0800)
committerShuanglei Tao <tsl0922@gmail.com>
Sun, 14 Mar 2021 03:57:57 +0000 (11:57 +0800)
src/protocol.c
src/pty.c
src/pty.h

index d34acf3ef188af754d86f379109c5a22a0bcdc2c..e63994d86bf8031b827571192f71b5adcdd4de45 100644 (file)
@@ -127,14 +127,16 @@ static bool spawn_process(struct pss_tty *pss, uint16_t columns, uint16_t rows)
 
 static void wsi_output(struct lws *wsi, pty_buf_t *buf) {
   if (buf == NULL) return;
-  char *wbuf = xmalloc(LWS_PRE + 1 + buf->len);
-  memcpy(wbuf + LWS_PRE + 1, buf->base, buf->len);
-  wbuf[LWS_PRE] = OUTPUT;
+  char message[LWS_PRE + 1 + buf->len];
+  char *ptr= &message[LWS_PRE];
+
+  *ptr = OUTPUT;
+  memcpy(ptr + 1, buf->base, buf->len);
   size_t n = buf->len + 1;
-  if (lws_write(wsi, (unsigned char *) wbuf + LWS_PRE, n, LWS_WRITE_BINARY) < n) {
+
+  if (lws_write(wsi, (unsigned char *) ptr, n, LWS_WRITE_BINARY) < n) {
     lwsl_err("write OUTPUT to WS\n");
   }
-  free(wbuf);
 }
 
 int callback_tty(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in,
index 03f6557af70ae0b9adccc6989832b4f38c82478a..e09ec30c2928e3b891e84954eea7b37b387b36fd 100644 (file)
--- a/src/pty.c
+++ b/src/pty.c
@@ -36,7 +36,7 @@ static void close_cb(uv_handle_t *handle) {
   free(handle);
 }
 
-pty_buf_t *pty_buf_init(char *base, ssize_t len) {
+pty_buf_t *pty_buf_init(char *base, size_t len) {
   pty_buf_t *buf = xmalloc(sizeof(pty_buf_t));
   buf->base = xmalloc(len);
   memcpy(buf->base, base, len);
@@ -58,7 +58,7 @@ static void read_cb(uv_stream_t *stream, ssize_t n, const uv_buf_t *buf) {
     io->read_cb(io->ctx, NULL, true);
     goto done;
   }
-  io->read_cb(io->ctx, pty_buf_init(buf->base, n), false);
+  io->read_cb(io->ctx, pty_buf_init(buf->base, (size_t) n), false);
 
 done:
   free(buf->base);
index 6b2d738cc86b02db47d4a5910bca355d388925da..07f9fc16f0fd9f82191b1e66908a2e851ed434ea 100644 (file)
--- a/src/pty.h
+++ b/src/pty.h
@@ -18,7 +18,7 @@ bool conpty_init();
 
 typedef struct {
   char *base;
-  ssize_t len;
+  size_t len;
 } pty_buf_t;
 
 typedef void (*pty_read_cb)(void *, pty_buf_t *, bool);
@@ -58,7 +58,7 @@ struct pty_process_ {
   void *ctx;
 };
 
-pty_buf_t *pty_buf_init(char *base, ssize_t len);
+pty_buf_t *pty_buf_init(char *base, size_t len);
 void pty_buf_free(pty_buf_t *buf);
 pty_process *process_init(void *ctx, uv_loop_t *loop, char **argv);
 bool process_running(pty_process *process);