summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-10-02 16:59:57 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-10-02 16:59:57 +0100
commit2fd553b3902e7d8772c90af0b0f20824002b38af (patch)
tree88ff95b10943f736632a0ceac47073e18384d6fd /src
parent4c9f6b21186be5c87785d5f6c91fb26cb8300b5b (diff)
downloadrspamd-2fd553b3902e7d8772c90af0b0f20824002b38af.tar.gz
rspamd-2fd553b3902e7d8772c90af0b0f20824002b38af.zip
[Fix] Allow to call fstring append with NULL string
Diffstat (limited to 'src')
-rw-r--r--src/libutil/fstring.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/src/libutil/fstring.c b/src/libutil/fstring.c
index 6c51ad62e..fac3b364b 100644
--- a/src/libutil/fstring.c
+++ b/src/libutil/fstring.c
@@ -160,14 +160,19 @@ rspamd_fstring_grow (rspamd_fstring_t *str, gsize needed_len)
rspamd_fstring_t *
rspamd_fstring_append (rspamd_fstring_t *str, const char *in, gsize len)
{
- gsize avail = fstravail (str);
-
- if (avail < len) {
- str = rspamd_fstring_grow (str, len);
+ if (str == NULL) {
+ str = rspamd_fstring_new_init (in, len);
}
+ else {
+ gsize avail = fstravail (str);
+
+ if (avail < len) {
+ str = rspamd_fstring_grow (str, len);
+ }
- memcpy (str->str + str->len, in, len);
- str->len += len;
+ memcpy (str->str + str->len, in, len);
+ str->len += len;
+ }
return str;
}
@@ -176,14 +181,22 @@ rspamd_fstring_t *
rspamd_fstring_append_chars (rspamd_fstring_t *str,
char c, gsize len)
{
- gsize avail = fstravail (str);
+ if (str == NULL) {
+ str = rspamd_fstring_sized_new (len);
- if (avail < len) {
- str = rspamd_fstring_grow (str, len);
+ memset (str->str + str->len, c, len);
+ str->len += len;
}
+ else {
+ gsize avail = fstravail (str);
- memset (str->str + str->len, c, len);
- str->len += len;
+ if (avail < len) {
+ str = rspamd_fstring_grow (str, len);
+ }
+
+ memset (str->str + str->len, c, len);
+ str->len += len;
+ }
return str;
}