X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Futils_cgi.c;h=ac9daca8bf690d6c0108ffaf9b3e467098489185;hb=66e1c8fe2814ddaf803ceee092f1d1dd02a5e981;hp=184578869cacda2f8f062084d19835e677d0187a;hpb=e9d94ae68f4081b25c4d278cea49b51354062e7d;p=collection4.git diff --git a/src/utils_cgi.c b/src/utils_cgi.c index 1845788..ac9daca 100644 --- a/src/utils_cgi.c +++ b/src/utils_cgi.c @@ -288,4 +288,50 @@ int time_to_rfc1123 (time_t t, char *buffer, size_t buffer_size) /* {{{ */ return (0); } /* }}} int time_to_rfc1123 */ +#define COPY_ENTITY(e) do { \ + size_t len = strlen (e); \ + if (buffer_size < (len + 1)) \ + break; \ + strcpy (buffer_ptr, (e)); \ + buffer_ptr += len; \ + buffer_size -= len; \ +} while (0) + +char *html_escape (const char *string) /* {{{ */ +{ + char buffer[4096]; + char *buffer_ptr; + size_t buffer_size; + size_t pos; + + buffer[0] = 0; + buffer_ptr = &buffer[0]; + buffer_size = sizeof (buffer); + for (pos = 0; string[pos] != 0; pos++) + { + if (string[pos] == '"') + COPY_ENTITY ("""); + else if (string[pos] == '<') + COPY_ENTITY ("<"); + else if (string[pos] == '>') + COPY_ENTITY (">"); + else if (string[pos] == '&') + COPY_ENTITY ("&"); + else + { + *buffer_ptr = string[pos]; + buffer_ptr++; + buffer_size--; + *buffer_ptr = 0; + } + + if (buffer_size <= 1) + break; + } + + return (strdup (buffer)); +} /* }}} char *html_escape */ + +#undef COPY_ENTITY + /* vim: set sw=2 sts=2 et fdm=marker : */