Mercurial > dovecot > original-hg > dovecot-1.2
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 |
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 } |