diff options
-rw-r--r-- | genx.c | 23 |
1 files changed, 21 insertions, 2 deletions
@@ -7,6 +7,11 @@ #define GENX_VERSION "cs-1" +/* Use snprintf() unless instructed otherwise. */ +#ifndef GENX_SNPRINTF +# define GENX_SNPRINTF 1 +#endif + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -362,7 +367,18 @@ static utf8 storePrefix(genxWriter w, constUtf8 prefix, Boolean force) prefix = (utf8) "xmlns"; else { - sprintf((char *) buf, "xmlns:%s", prefix); + size_t pl = strlen((const char *) prefix); + + if (pl > sizeof(buf) - (6 + 1)) + { + w->status = GENX_BAD_NAMESPACE_NAME; + return NULL; + } + + memcpy (buf, "xmlns:", 6); + memcpy (buf + 6, prefix, pl); + buf[pl + 6] = 0; + prefix = buf; } @@ -988,11 +1004,14 @@ genxNamespace genxDeclareNamespace(genxWriter w, constUtf8 uri, /* wasn't already declared */ else { - /* make a default prefix if none provided */ if (defaultPref == NULL) { +#if GENX_SNPRINTF + snprintf((char *) newPrefix, sizeof(newPrefix), "g%d", w->nextPrefix++); +#else sprintf((char *) newPrefix, "g%d", w->nextPrefix++); +#endif defaultPref = newPrefix; } |