annotate src/lib/str-sanitize.c @ 9191:b340ecb24469 HEAD

Fix VPATH build of RQUOTA support. Some rpcgen derive #include "..." paths from the infile argument. This will be off for VPATH builds, as the generated rquota_xdr.c code will look in $(srcdir), but we'll generate the rquota.h file in $(builddir). Play safe and copy rquota.x to $(builddir) first. This fixes the build on openSUSE 11.1.
author Matthias Andree <matthias.andree@gmx.de>
date Tue, 07 Jul 2009 21:01:36 +0200
parents b9faf4db2a9f
children 23abbf14279c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8590
b9faf4db2a9f Updated copyright notices to include year 2009.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
1 /* Copyright (c) 2004-2009 Dovecot authors, see the included COPYING file */
2689
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "str.h"
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "str-sanitize.h"
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6
7002
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
7 static size_t str_sanitize_skip_start(const char *src, size_t max_len)
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
8 {
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
9 size_t i;
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
10
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
11 for (i = 0; i < max_len; i++) {
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
12 if (((unsigned char)src[i] & 0x7f) < 32)
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
13 break;
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
14 }
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
15 return i;
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
16 }
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
17
2689
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 void str_sanitize_append(string_t *dest, const char *src, size_t max_len)
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 {
7002
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
20 size_t i;
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
21
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
22 i = str_sanitize_skip_start(src, max_len);
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
23 str_append_n(dest, src, i);
2689
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24
7002
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
25 for (; i < max_len && src[i] != '\0'; i++) {
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
26 if (((unsigned char)src[i] & 0x7f) < 32)
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
27 str_append_c(dest, '?');
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
28 else
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
29 str_append_c(dest, src[i]);
2689
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 }
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31
7002
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
32 if (src[i] != '\0') {
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
33 str_truncate(dest, str_len(dest) <= 3 ? 0 : str_len(dest)-3);
2689
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 str_append(dest, "...");
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 }
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 }
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 const char *str_sanitize(const char *src, size_t max_len)
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 {
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 string_t *str;
7002
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
41 size_t i;
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
42
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
43 if (src == NULL)
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
44 return NULL;
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
45
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
46 i = str_sanitize_skip_start(src, max_len);
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
47 if (src[i] == '\0')
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
48 return src;
2689
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 str = t_str_new(I_MIN(max_len, 256));
7002
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
51 str_append_n(str, src, i);
f359a0a9407f str_sanitize*(): Don't crash if max_len is less than 3.
Timo Sirainen <tss@iki.fi>
parents: 6891
diff changeset
52 str_sanitize_append(str, src + i, max_len - i);
2689
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 return str_c(str);
631611c2d6e6 Added string sanitization functions.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 }