# HG changeset patch # User Timo Sirainen # Date 1096990178 -10800 # Node ID 631611c2d6e6635cc24faa40cf03cf2ddf9639a9 # Parent 606c793274341b8e69ef69f498e3bd42e2ff98df Added string sanitization functions. diff -r 606c79327434 -r 631611c2d6e6 src/lib/Makefile.am --- a/src/lib/Makefile.am Tue Oct 05 03:50:28 2004 +0300 +++ b/src/lib/Makefile.am Tue Oct 05 18:29:38 2004 +0300 @@ -59,6 +59,7 @@ sendfile-util.c \ sha1.c \ str.c \ + str-sanitize.c \ strescape.c \ strfuncs.c \ unlink-directory.c \ @@ -117,6 +118,7 @@ sendfile-util.h \ sha1.h \ str.h \ + str-sanitize.h \ strescape.h \ strfuncs.h \ unlink-directory.h \ diff -r 606c79327434 -r 631611c2d6e6 src/lib/str-sanitize.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib/str-sanitize.c Tue Oct 05 18:29:38 2004 +0300 @@ -0,0 +1,37 @@ +/* Copyright (c) 2004 Timo Sirainen */ + +#include "lib.h" +#include "str.h" +#include "str-sanitize.h" + +void str_sanitize_append(string_t *dest, const char *src, size_t max_len) +{ + const char *p; + + for (p = src; *p != '\0'; p++) { + if ((unsigned char)*p < 32) + break; + } + + str_append_n(dest, src, (size_t)(p - src)); + for (; *p != '\0' && max_len > 0; p++, max_len--) { + if ((unsigned char)*p < 32) + str_append_c(dest, '?'); + else + str_append_c(dest, *p); + } + + if (*p != '\0') { + str_truncate(dest, str_len(dest)-3); + str_append(dest, "..."); + } +} + +const char *str_sanitize(const char *src, size_t max_len) +{ + string_t *str; + + str = t_str_new(I_MIN(max_len, 256)); + str_sanitize_append(str, src, max_len); + return str_c(str); +} diff -r 606c79327434 -r 631611c2d6e6 src/lib/str-sanitize.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib/str-sanitize.h Tue Oct 05 18:29:38 2004 +0300 @@ -0,0 +1,9 @@ +#ifndef __STR_SANITIZE_H +#define __STR_SANITIZE_H + +/* All control characters in src will be appended as '?'. If src is longer + than max_len, it's truncated with "..." appended to the end. */ +void str_sanitize_append(string_t *dest, const char *src, size_t max_len); +const char *str_sanitize(const char *src, size_t max_len); + +#endif