diff --git a/src/edge_management.c b/src/edge_management.c index 7381f1c..827a6b9 100644 --- a/src/edge_management.c +++ b/src/edge_management.c @@ -381,7 +381,7 @@ static void handleMgmtJson (mgmt_req_t *req, char *udp_buf, const int recvlen) { traceEvent(TRACE_DEBUG, "mgmt json %s", cmdlinebuf); /* we reuse the buffer already on the stack for all our strings */ - STRBUF_INIT(buf, udp_buf); + STRBUF_INIT(buf, udp_buf, N2N_SN_PKTBUF_SIZE); mgmt_req_init2(req, buf, (char *)&cmdlinebuf); @@ -476,7 +476,7 @@ void readFromMgmtSocket (n2n_edge_t *eee) { if((0 == memcmp(udp_buf, "help", 4)) || (0 == memcmp(udp_buf, "?", 1))) { strbuf_t *buf; - STRBUF_INIT(buf, &udp_buf); + STRBUF_INIT(buf, &udp_buf, sizeof(udp_buf)); msg_len = snprintf(buf->str, buf->size, "Help for edge management console:\n" "\tstop | Gracefully exit edge\n" @@ -505,7 +505,7 @@ void readFromMgmtSocket (n2n_edge_t *eee) { traceEvent(TRACE_NORMAL, "+verb traceLevel=%u", (unsigned int) getTraceLevel()); strbuf_t *buf; - STRBUF_INIT(buf, &udp_buf); + STRBUF_INIT(buf, &udp_buf, sizeof(udp_buf)); msg_len = snprintf(buf->str, buf->size, "> +OK traceLevel=%u\n", (unsigned int) getTraceLevel()); @@ -516,7 +516,7 @@ void readFromMgmtSocket (n2n_edge_t *eee) { if(0 == memcmp(udp_buf, "-verb", 5)) { strbuf_t *buf; - STRBUF_INIT(buf, &udp_buf); + STRBUF_INIT(buf, &udp_buf, sizeof(udp_buf)); if(getTraceLevel() > 0) { setTraceLevel(getTraceLevel() - 1); diff --git a/src/management.c b/src/management.c index 70a3b4f..6f914b5 100644 --- a/src/management.c +++ b/src/management.c @@ -102,7 +102,7 @@ void mgmt_event_post2 (enum n2n_event_topic topic, int data0, void *data1, mgmt_ char buf_space[100]; strbuf_t *buf; - STRBUF_INIT(buf, buf_space); + STRBUF_INIT(buf, buf_space, sizeof(buf_space)); char *tag; if(sub->type == N2N_MGMT_SUB) { diff --git a/src/sn_management.c b/src/sn_management.c index 4954cdf..5a288ca 100644 --- a/src/sn_management.c +++ b/src/sn_management.c @@ -240,7 +240,7 @@ static void handleMgmtJson (mgmt_req_t *req, char *udp_buf, const int recvlen) { /* we reuse the buffer already on the stack for all our strings */ // xx - STRBUF_INIT(buf, udp_buf); + STRBUF_INIT(buf, udp_buf, N2N_SN_PKTBUF_SIZE); mgmt_req_init2(req, buf, (char *)&cmdlinebuf); diff --git a/src/strbuf.h b/src/strbuf.h index 1bf2c4b..cc2e7c2 100644 --- a/src/strbuf.h +++ b/src/strbuf.h @@ -14,10 +14,10 @@ typedef struct strbuf { } strbuf_t; // Initialise the strbuf pointer buf to point at the storage area p -// p must be a known sized object -#define STRBUF_INIT(buf,p) do { \ +// of size buflen +#define STRBUF_INIT(buf,p,buflen) do { \ buf = (void *)p; \ - buf->size = sizeof(*p) - sizeof(size_t); \ + buf->size = buflen - sizeof(size_t); \ } while(0)