X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=src%2Fweb_buffer.c;h=9f9ceda63da26a5f3d9720c863494dabe46755b8;hb=f5fef72a72cfc1c799b7a9b37ff2dfa25e731420;hp=93ba782af279a05356765964862bdff770b07d4b;hpb=098028852337443bad09539ca24f18878b7a30d7;p=netdata.git diff --git a/src/web_buffer.c b/src/web_buffer.c index 93ba782a..9f9ceda6 100644 --- a/src/web_buffer.c +++ b/src/web_buffer.c @@ -113,6 +113,8 @@ void buffer_print_llu(BUFFER *wb, unsigned long long uvalue) void buffer_strcat(BUFFER *wb, const char *txt) { + // buffer_sprintf(wb, "%s", txt); + if(unlikely(!txt || !*txt)) return; buffer_need_bytes(wb, 1); @@ -143,6 +145,26 @@ void buffer_strcat(BUFFER *wb, const char *txt) } } +void buffer_strcat_htmlescape(BUFFER *wb, const char *txt) +{ + char b[2] = { [0] = '\0', [1] = '\0' }; + + while(*txt) { + switch(*txt) { + case '&': buffer_strcat(wb, "&"); break; + case '<': buffer_strcat(wb, "<"); break; + case '>': buffer_strcat(wb, ">"); break; + case '"': buffer_strcat(wb, """); break; + case '/': buffer_strcat(wb, "/"); break; + case '\'': buffer_strcat(wb, "'"); break; + default: { + b[0] = *txt; + buffer_strcat(wb, b); + } + } + txt++; + } +} void buffer_snprintf(BUFFER *wb, size_t len, const char *fmt, ...) { @@ -337,8 +359,9 @@ BUFFER *buffer_create(size_t size) return(b); } -void buffer_free(BUFFER *b) -{ +void buffer_free(BUFFER *b) { + if(unlikely(!b)) return; + buffer_overflow_check(b); debug(D_WEB_BUFFER, "Freeing web buffer of size %zu.", b->size);