From 9e61bff9b9df564338a0d8c57442c372668719c0 Mon Sep 17 00:00:00 2001 From: Erik Boasson Date: Mon, 4 Nov 2019 14:04:53 +0100 Subject: [PATCH] Use unsigned char for XML input Sign extension causes some character values to be interpreted as special tokens, potentially causing the parser to hang, pass a null pointer as element name to the "elem_open" callback (which would crash the configuration processing). Signed-off-by: Erik Boasson --- src/ddsrt/src/xmlparser.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ddsrt/src/xmlparser.c b/src/ddsrt/src/xmlparser.c index 828d40e..0096c88 100644 --- a/src/ddsrt/src/xmlparser.c +++ b/src/ddsrt/src/xmlparser.c @@ -36,7 +36,7 @@ struct ddsrt_xmlp_state { size_t cbufmax; /* allocated size of cbuf (cbufn <= cbufmax) */ size_t cbufmark; /* NORMARKER or marker position (cbufmark <= cbufp) for rewinding */ int eof; /* fake EOF (for treating missing close tags as EOF) */ - char *cbuf; /* parser input buffer */ + unsigned char *cbuf; /* parser input buffer */ FILE *fp; /* file to refill cbuf from, or NULL if parsing a string */ int line; /* current line number */ int prevline; /* line number at last token */ @@ -147,7 +147,7 @@ struct ddsrt_xmlp_state *ddsrt_xmlp_new_string (const char *string, void *varg, st = ddsrt_malloc (sizeof (*st)); st->cbufn = strlen (string); st->cbufmax = st->cbufn; - st->cbuf = (char *) string; + st->cbuf = (unsigned char *) string; st->fp = NULL; ddsrt_xmlp_new_common (st); ddsrt_xmlp_new_setCB (st, varg, cb); @@ -239,7 +239,7 @@ static void rewind_to_input_marker (struct ddsrt_xmlp_state *st) static int next_char (struct ddsrt_xmlp_state *st) { - char c; + unsigned char c; if (!make_chars_available (st, 1)) { return TOK_EOF; }