From ce327e34da10ef8722f06255f0060d6e4d1866ab Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 29 Nov 2018 22:08:02 +0100 Subject: add macro to check 0-terminated string messages, and fix FTBFS --- src/include/gnunet_mq_lib.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/include/gnunet_mq_lib.h') diff --git a/src/include/gnunet_mq_lib.h b/src/include/gnunet_mq_lib.h index 3d3a74e3b..f5f0fd701 100644 --- a/src/include/gnunet_mq_lib.h +++ b/src/include/gnunet_mq_lib.h @@ -500,6 +500,31 @@ struct GNUNET_MQ_MessageHandler }) +/** + * Insert code for a "check_" function that verifies that + * a given variable-length message received over the network + * is followed by a 0-terminated string. If the message @a m + * is not followed by a 0-terminated string, an error is logged + * and the function is returned with #GNUNET_NO. + * + * @param an IPC message with proper type to determine + * the size, starting with a `struct GNUNET_MessageHeader` + */ +#define GNUNET_MQ_check_zero_termination(m) \ + { \ + const char *str = (const char *) &m[1]; \ + const struct GNUNET_MessageHeader *hdr = \ + (const struct GNUNET_MessageHeader *) m; \ + uint16_t slen = ntohs (hdr->size) - sizeof (*m); \ + if ( (0 == slen) || \ + (memchr (str, 0, slen) == &str[slen - 1]) ) \ + { \ + GNUNET_break (0); \ + return GNUNET_NO; \ + } \ + } + + /** * Create a new envelope. * -- cgit v1.2.3