It shouldn't be possible for input to have NULs in any of these places.
This makes the extra NUL-check in str_append_n() unnecessary.
str_append_c(str, data[0]);
else {
str_append_c(str, '{');
- str_append_n(str, data, len);
+ str_append_data(str, data, len);
str_append_c(str, '}');
}
}
str_printfa(str, "\t%%%c", p[0]);
} else {
str_append(str, "\t%{");
- str_append_n(str, p, size);
+ str_append_data(str, p, size);
str_append_c(str, '}');
}
p += size;
if (IS_LDAP_ESCAPED_CHAR(*p)) {
if (ret == NULL) {
ret = t_str_new((size_t) (p - str) + 64);
- str_append_n(ret, str, (size_t) (p - str));
+ str_append_data(ret, str, (size_t) (p - str));
}
str_printfa(ret, "\\%02X", (unsigned char)*p);
} else if (ret != NULL)
/* Now make the output string */
passwd = t_str_new(sl + 64);
str_append(passwd, magic);
- str_append_n(passwd, sp, sl);
+ str_append_data(passwd, sp, sl);
str_append_c(passwd, '$');
md5_final(&ctx,final);
str = t_str_new(256);
p = strchr(line, '=');
- str_append_n(str, line, p-line);
+ str_append_data(str, line, p-line);
str_append_c(str, SETTINGS_SEPARATOR);
str_append(str, p+1);
if (info != NULL) {
len--;
}
if(len >= 1) {
- str_append_n(full_line, line, len);
+ str_append_data(full_line, line, len);
str_append_c(full_line, ' ');
}
return CONFIG_LINE_TYPE_CONTINUE;
str_append_n(ctx->list_prefix, indent_str, indent*2);
p = strchr(key2, '/');
if (p != NULL)
- str_append_n(ctx->list_prefix, key2, p - key2);
+ str_append_data(ctx->list_prefix, key2, p - key2);
else
str_append(ctx->list_prefix, key2);
if (unique_key && *value != '\0') {
if (IS_LDAP_ESCAPED_CHAR(*p)) {
if (ret == NULL) {
ret = t_str_new((size_t) (p - str) + 64);
- str_append_n(ret, str, (size_t) (p - str));
+ str_append_data(ret, str, (size_t) (p - str));
}
str_printfa(ret, "\\%02X", (unsigned char)*p);
} else if (ret != NULL)
/* escape */
ret = t_str_new((size_t) (p - str) + 128);
- str_append_n(ret, str, (size_t) (p - str));
+ str_append_data(ret, str, (size_t) (p - str));
for (; *p != '\0'; p++) {
switch (*p) {
/* unescape */
ret = t_str_new((size_t) (p - str) + strlen(p) + 1);
- str_append_n(ret, str, (size_t) (p - str));
+ str_append_data(ret, str, (size_t) (p - str));
for (; *p != '\0'; p++) {
if (*p != '\\')
i_assert(file->temp_path == NULL);
if ((slash = strrchr(file->full_path, '/')) != NULL) {
- str_append_n(str, file->full_path, slash - file->full_path);
+ str_append_data(str, file->full_path, slash - file->full_path);
if (fs_posix_get_mode(fs, str_c(str), &mode) < 0)
return -1;
str_append_c(str, '/');
if (hash_fname == NULL)
hash_fname = file->hash_path;
else {
- str_append_n(temp_path, file->hash_path,
- (hash_fname-file->hash_path) + 1);
+ str_append_data(temp_path, file->hash_path,
+ (hash_fname-file->hash_path) + 1);
hash_fname++;
}
str_printfa(temp_path, "%s%s.tmp",
}
/* localpart and @ */
if (seen_at && (pos > 1 || str_len(tok->last_word) > 0)) {
- str_append_n(tok->last_word, data, pos);
+ str_append_data(tok->last_word, data, pos);
*skip_r = pos;
return EMAIL_ADDRESS_PARSER_STATE_DOMAIN;
}
/* localpart, @ not included yet */
if (pos > 0 && (IS_ATEXT(data[pos-1]) || data[pos-1] == '.')) {
- str_append_n(tok->last_word, data, pos);
+ str_append_data(tok->last_word, data, pos);
*skip_r = pos;
return EMAIL_ADDRESS_PARSER_STATE_LOCALPART;
}
/* A complete domain name */
if ((pos > 0 && pos < size) || /* non-atext after atext in this data*/
(pos < size && !domain_is_empty(tok))) { /* non-atext after previous atext */
- str_append_n(tok->last_word, data, pos);
+ str_append_data(tok->last_word, data, pos);
*skip_r = pos;
return EMAIL_ADDRESS_PARSER_STATE_COMPLETE;
}
if (pos == size) { /* All good, but possibly not complete. */
- str_append_n(tok->last_word, data, pos);
+ str_append_data(tok->last_word, data, pos);
*skip_r = pos;
return EMAIL_ADDRESS_PARSER_STATE_DOMAIN;
}
p = first = param->value;
while (*p != '\0') {
if (*p == '\\' || *p == '"') {
- str_append_n(out, first, p-first);
+ str_append_data(out, first, p-first);
str_append_c(out, '\\');
first = p;
}
p++;
}
- str_append_n(out, first, p-first);
+ str_append_data(out, first, p-first);
str_append_c(out, '"');
} else {
str_append(out, param->value);
while (parser->cur < parser->end && http_char_is_token(*parser->cur))
parser->cur++;
- str_append_n(parser->name, first, parser->cur-first);
+ str_append_data(parser->name, first, parser->cur-first);
if (parser->cur == parser->end)
return 0;
if (parser->cur >= parser->end)
return -1;
- str_append_n(str, first, parser->cur - first);
+ str_append_data(str, first, parser->cur - first);
/* DQUOTE */
if (*parser->cur == '"') {
}
if (url != NULL && pend > pbegin)
- str_append_n(fullpath, pbegin, pend-pbegin);
+ str_append_data(fullpath, pbegin, pend-pbegin);
}
/* append relative path */
/* fast path: we can simply write it as quoted string
without any escaping */
str_append_c(dest, '"');
- str_append_n(dest, src, size);
+ str_append_data(dest, src, size);
str_append_c(dest, '"');
return;
}
if (p[-1] == '/') section_endslash = TRUE;
if (section == NULL)
section = t_str_new(256);
- str_append_n(section, base->section, p-base->section);
+ str_append_data(section, base->section, p-base->section);
}
}
/* /;UID= */
if (--rel <= 0 && p > base->mailbox) {
if (p[-1] == '/')
mailbox_endslash = TRUE;
- str_append_n(mailbox, base->mailbox,
- p - base->mailbox);
+ str_append_data(mailbox, base->mailbox,
+ p - base->mailbox);
}
}
}
}
/* at least one encoded character */
- str_append_n(dest, src, p-src);
+ str_append_data(dest, src, p-src);
utf16 = t_malloc0(MALLOC_MULTIPLY(strlen(p), 2));
while (*p != '\0') {
if (*p == '&') {
}
/* at least one encoded character */
- str_append_n(dest, src, p-src);
+ str_append_data(dest, src, p-src);
while (*p != '\0') {
if (*p == '&') {
if (*++p == '-') {
with use_full_value */
line->middle = msg + colon_pos;
line->middle_len = (size_t)(line->value - line->middle);
- str_append_n(ctx->name, line->middle, line->middle_len);
+ str_append_data(ctx->name, line->middle, line->middle_len);
line->name = str_c(ctx->name);
line->name_len = colon_pos;
ctx->chars_left--;
count = uni_utf8_char_bytes(data[i]);
i_assert(i + count <= size);
- str_append_n(ctx->snippet, data + i, count);
+ str_append_data(ctx->snippet, data + i, count);
break;
case SNIPPET_STATE_QUOTED:
if (data[i] == '\n')
if (IS_ATEXT(*ctx->data))
continue;
- str_append_n(str, start, ctx->data - start);
+ str_append_data(str, start, ctx->data - start);
return rfc822_skip_lwsp(ctx);
}
- str_append_n(str, start, ctx->data - start);
+ str_append_data(str, start, ctx->data - start);
return 0;
}
continue;
}
- str_append_n(str, start, ctx->data - start);
+ str_append_data(str, start, ctx->data - start);
if ((ret = rfc822_skip_lwsp(ctx)) <= 0)
return ret;
start = ctx->data;
}
- str_append_n(str, start, ctx->data - start);
+ str_append_data(str, start, ctx->data - start);
return 0;
}
if (IS_ATEXT_NON_TSPECIAL(*ctx->data) || *ctx->data == '.')
continue;
- str_append_n(str, start, ctx->data - start);
+ str_append_data(str, start, ctx->data - start);
return rfc822_skip_lwsp(ctx);
}
- str_append_n(str, start, ctx->data - start);
+ str_append_data(str, start, ctx->data - start);
return 0;
}
if (IS_ATEXT(*ctx->data) || *ctx->data == '.')
continue;
- str_append_n(str, start, ctx->data - start);
+ str_append_data(str, start, ctx->data - start);
return rfc822_skip_lwsp(ctx);
}
- str_append_n(str, start, ctx->data - start);
+ str_append_data(str, start, ctx->data - start);
return 0;
}
test_assert(ret > 0);
data = i_stream_get_data(input, &size);
- str_append_n(str, data, size);
+ str_append_data(str, data, size);
i_stream_skip(input, size);
}
}
data = i_stream_get_data(input, &size);
if (size > 0)
- str_append_n(str, data, size);
+ str_append_data(str, data, size);
}
test_assert(input->stream_errno == 0);
test_assert(str_len(str) == output_len);
break;
if (ret == -2) {
data = i_stream_get_data(filter, &size);
- str_append_n(output, data, size);
+ str_append_data(output, data, size);
i_stream_skip(filter, size);
}
}
data = i_stream_get_data(filter, &size);
test_assert(size <= 8192);
- str_append_n(output, data, size);
+ str_append_data(output, data, size);
p = strstr(str_c(input), "To: ");
i_assert(p != NULL);
for (i = 0; i < 2; i++) {
while ((ret = i_stream_read_more(filter, &data, &size)) > 0) {
- str_append_n(output, data, size);
+ str_append_data(output, data, size);
i_stream_skip(filter, size);
}
test_assert(ret == -1);
data = i_stream_get_data(filter, &size);
if (size > 0)
- str_append_n(str, data, size);
+ str_append_data(str, data, size);
i_stream_skip(filter, size);
}
test_istream_set_size(istream, input_len);
test_assert(i_stream_read(filter) == -1);
data = i_stream_get_data(filter, &size);
- str_append_n(str, data, size);
+ str_append_data(str, data, size);
test_assert(strcmp(str_c(str), output) == 0);
i_stream_unref(&filter);
for (i = 1; i <= qp_input_len; i++) {
test_istream_set_size(input_data, i);
while ((ret = i_stream_read_more(input, &data, &size)) > 0) {
- str_append_n(str, data, size);
+ str_append_data(str, data, size);
i_stream_skip(input, size);
}
if (ret == -1 && stream_errno != 0)
if (ret == 0) {
test_istream_set_allow_eof(input_data, TRUE);
while ((ret = i_stream_read_more(input, &data, &size)) > 0) {
- str_append_n(str, data, size);
+ str_append_data(str, data, size);
i_stream_skip(input, size);
}
}
for (i = 1; i <= qp_input_len; i++) {
test_istream_set_size(input_data, i);
while ((ret = i_stream_read_more(input, &data, &size)) > 0) {
- str_append_n(str, data, size);
+ str_append_data(str, data, size);
i_stream_skip(input, size);
}
if (ret == -1 && stream_errno != 0)
if (ret == 0) {
test_istream_set_allow_eof(input_data, TRUE);
while ((ret = i_stream_read_more(input, &data, &size)) > 0) {
- str_append_n(str, data, size);
+ str_append_data(str, data, size);
i_stream_skip(input, size);
}
}
if (!hdr->continued) {
str_append(str, hdr->name);
if (hdr->middle_len > 0)
- str_append_n(str, hdr->middle, hdr->middle_len);
+ str_append_data(str, hdr->middle, hdr->middle_len);
}
- str_append_n(str, hdr->value, hdr->value_len);
+ str_append_data(str, hdr->value, hdr->value_len);
if (!hdr->no_newline) {
if (hdr->crlf_newline)
str_append_c(str, '\r');
if (block.hdr != NULL)
message_header_line_write(output, block.hdr);
else if (block.size > 0)
- str_append_n(output, block.data, block.size);
+ str_append_data(output, block.data, block.size);
}
test_assert(ret < 0);
return name;
str = t_str_new(i + strlen(name+i) + 8);
- str_append_n(str, name, i);
+ str_append_data(str, name, i);
for (; name[i] != '\0'; i++) {
switch (name[i]) {
case '=':
len--;
while (IS_WHITE(line[len-1]))
len--;
- str_append_n(full_line, line, len);
+ str_append_data(full_line, line, len);
str_append_c(full_line, ' ');
continue;
}
str_insert(out, begin, "\"");
}
- str_append_n(out, pblock, p - pblock);
+ str_append_data(out, pblock, p - pblock);
if (p >= pend)
break;
parser->cur = palnum+1;
if (out != NULL)
- str_append_n(out, pbegin, parser->cur - pbegin);
+ str_append_data(out, pbegin, parser->cur - pbegin);
return 1;
}
} while (*parser->cur >= '0' && *parser->cur <= '9');
if (literal != NULL)
- str_append_n(literal, pbegin, parser->cur - pbegin);
+ str_append_data(literal, pbegin, parser->cur - pbegin);
*octet_r = octet;
return 1;
}
return -1;
}
if (value_r != NULL)
- str_append_n(value, pblock, parser->cur - pblock);
+ str_append_data(value, pblock, parser->cur - pblock);
if (ipv6) {
i_zero(&ip6);
}
if (value_r != NULL)
- str_append_n(value, pbegin, parser->cur - pbegin);
+ str_append_data(value, pbegin, parser->cur - pbegin);
if (parser->cur >= parser->end || *parser->cur != '\\')
break;
parser->cur++;
if (out != NULL)
- str_append_n(out, pbegin, parser->cur - pbegin);
+ str_append_data(out, pbegin, parser->cur - pbegin);
if (parser->cur >= parser->end || *parser->cur != '+')
break;
if (str_len(parser->strbuf) + (parser->cur-first) > 3)
return -1;
- str_append_n(parser->strbuf, first, parser->cur - first);
+ str_append_data(parser->strbuf, first, parser->cur - first);
if (parser->cur == parser->end)
return 0;
if (str_len(parser->strbuf) != 3)
return -1;
}
- str_append_n(parser->strbuf, first, parser->cur - first);
+ str_append_data(parser->strbuf, first, parser->cur - first);
if (parser->cur == parser->end)
return 0;
return 1;
"Reply exceeds size limit");
return -1;
}
- str_append_n(parser->strbuf, first, parser->cur - first);
+ str_append_data(parser->strbuf, first, parser->cur - first);
if (parser->cur == parser->end)
return 0;
return 1;
}
/* sanitize bad characters */
- str_append_n(parser->strbuf,
+ str_append_data(parser->strbuf,
first, parser->cur - first);
if (parser->cur == parser->end)
text = NULL;
} else {
if (p > text && *(p-1) == '\r')
- str_append_n(textbuf, text, p - text - 1);
+ str_append_data(textbuf, text, p - text - 1);
else
- str_append_n(textbuf, text, p - text);
+ str_append_data(textbuf, text, p - text);
text = p + 1;
}
str_append(textbuf, "\r\n");
for (;;) {
p = strchr(text, '\n');
i_assert(p != NULL && p > text && *(p-1) == '\r');
- str_append_n(str, text, p - text - 1);
+ str_append_data(str, text, p - text - 1);
line_len = (size_t)(p - text) + 1;
i_assert(text_len >= line_len);
text_len -= line_len;
str_insert(out, begin, "\"");
}
- str_append_n(out, pblock, p-pblock);
+ str_append_data(out, pblock, p-pblock);
if (p >= pend)
break;
while (p < pend && smtp_char_is_xtext(*p))
p++;
- str_append_n(out, pbegin, p-pbegin);
+ str_append_data(out, pbegin, p-pbegin);
if (p >= pend)
break;
data->parse_line.start_pos = str_len(mail->header_data);
data->parse_line.line_num = data->parse_line_num;
str_append(mail->header_data, hdr->name);
- str_append_n(mail->header_data, hdr->middle, hdr->middle_len);
+ str_append_data(mail->header_data, hdr->middle, hdr->middle_len);
/* remember that we saw this header so we don't add it to
cache as nonexistent. */
i_assert(MAILDIR_UIDLIST_REC_EXT_KEY_IS_VALID(*p));
len = strlen((const char *)p);
str_append_c(str, ' ');
- str_append_n(str, p, len);
+ str_append_data(str, p, len);
p += len + 1;
}
}
if (strp == NULL)
str_append(str, rec->filename);
else
- str_append_n(str, rec->filename, strp - rec->filename);
+ str_append_data(str, rec->filename, strp - rec->filename);
str_append_c(str, '\n');
o_stream_nsend(output, str_data(str), str_len(str));
}
}
memset(space, ' ', sizeof(space));
- str_append_n(ctx->headers, space, sizeof(space));
+ str_append_data(ctx->headers, space, sizeof(space));
ctx->space_end_idx = str_len(ctx->headers);
str_append_c(ctx->headers, '\n');
}
}
str_truncate(keyword, 0);
- str_append_n(keyword, hdr->full_value + keyword_start,
- pos - keyword_start);
+ str_append_data(keyword, hdr->full_value + keyword_start,
+ pos - keyword_start);
if (!mail_index_keyword_lookup(box->index, str_c(keyword),
&idx)) {
/* keyword wasn't found. that means the sent mail
if (!hdr->continued) {
line_start_pos = str_len(ctx->header);
str_append(ctx->header, hdr->name);
- str_append_n(ctx->header, hdr->middle, hdr->middle_len);
+ str_append_data(ctx->header, hdr->middle, hdr->middle_len);
}
func = bsearch(hdr->name, header_funcs,
"Attribute string value has NULs");
return -1;
}
- str_append_n(str, data, size);
+ str_append_data(str, data, size);
i_stream_skip(value->value_stream, size);
}
if (value->value_stream->stream_errno != 0) {
/* no escaping of namespace prefix */
if (str_begins(vname, ns_prefix)) {
- str_append_n(escaped_name, vname, ns_prefix_len);
+ str_append_data(escaped_name, vname, ns_prefix_len);
vname += ns_prefix_len;
}
unsigned int num;
if (str_begins(src, ns_prefix)) {
- str_append_n(dest, src, ns_prefix_len);
+ str_append_data(dest, src, ns_prefix_len);
src += ns_prefix_len;
}
continue;
str_truncate(str, 0);
- str_append_n(str, name, (size_t) (path - name));
+ str_append_data(str, name, (size_t) (path - name));
name = str_c(str);
/* find the node */
size_t max_text_len, pos = prefix_len;
str = t_str_new(PIPE_BUF);
- str_append_n(str, str_c(full_str), prefix_len);
+ str_append_data(str, str_data(full_str), prefix_len);
max_text_len = PIPE_BUF - prefix_len - 1;
while (pos < str_len(full_str)) {
if (temp_prefix != NULL) {
if (*temp_prefix != '/' && p != NULL) {
/* add directory */
- str_append_n(tmp_path, lock_info->lock_path,
- p - lock_info->lock_path);
+ str_append_data(tmp_path, lock_info->lock_path,
+ p - lock_info->lock_path);
str_append_c(tmp_path, '/');
}
str_append(tmp_path, temp_prefix);
} else {
if (p != NULL) {
/* add directory */
- str_append_n(tmp_path, lock_info->lock_path,
- p - lock_info->lock_path);
+ str_append_data(tmp_path, lock_info->lock_path,
+ p - lock_info->lock_path);
str_append_c(tmp_path, '/');
}
str_printfa(tmp_path, ".temp.%s.%s.",
if (stream->line_str == NULL)
stream->line_str = str_new(default_pool, 256);
str_truncate(stream->line_str, 0);
- str_append_n(stream->line_str, stream->buffer + stream->skip,
- end - stream->skip);
+ str_append_data(stream->line_str, stream->buffer + stream->skip,
+ end - stream->skip);
ret = str_c_modifiable(stream->line_str);
}
if ((unsigned char)src[i] < 32)
str_append_c(dest, '?');
else
- str_append_n(dest, src+i, len);
+ str_append_data(dest, src+i, len);
i += len;
}
if ((unsigned char)src[i] < 32)
str_append(dest, UNICODE_REPLACEMENT_CHAR_UTF8);
else
- str_append_n(dest, src+i, len);
+ str_append_data(dest, src+i, len);
i += len;
c++;
}
for (p = str; *p != '\0'; p++) {
if (*p <= '\r') {
tmp = t_str_new(128);
- str_append_n(tmp, str, p-str);
+ str_append_data(tmp, str, p-str);
str_append_tabescaped(tmp, p);
return str_c(tmp);
}
memset(buf, 'x', sizeof(buf));
for (size_t i = 1; i <= sizeof(buf); i++) {
str_truncate(basedir, base_len);
- str_append_n(basedir, buf, i);
+ str_append_data(basedir, buf, i);
tmpdir = str_c(basedir);
(void)mkdir(str_c(basedir), 0700);
break;
if (host_name != NULL) {
if (offset > part)
- str_append_n(host_name, part, offset - part);
+ str_append_data(host_name, part, offset - part);
str_append_c(host_name, ch);
}
part = parser->cur;
}
if (host_name != NULL && parser->cur > part)
- str_append_n(host_name, part, parser->cur - part);
+ str_append_data(host_name, part, parser->cur - part);
/* "." */
if (parser->cur >= parser->end || ch != '.')
}
if (literal != NULL)
- str_append_n(literal, parser->cur, p-parser->cur+1);
+ str_append_data(literal, parser->cur, p-parser->cur+1);
address = t_strdup_until(parser->cur+1, p);
parser->cur = p + 1;
if ((*p & 0x80) != 0 || (esc_table[*p] & esc_mask) == 0 ||
(esc_extra != NULL && strchr(esc_extra, (char)*p) != NULL)) {
if ((p - pbegin) > 0)
- str_append_n(out, pbegin, p - pbegin);
+ str_append_data(out, pbegin, p - pbegin);
str_printfa(out, "%%%02x", *p);
p++;
pbegin = p;
}
}
if ((p - pbegin) > 0)
- str_append_n(out, pbegin, p - pbegin);
+ str_append_data(out, pbegin, p - pbegin);
}
void uri_append_scheme(string_t *out, const char *scheme)
unsigned int char_len =
uni_utf8_get_char_n(data + i, len - i, &chr);
if (char_len > 0 && is_valid_xml_char(chr))
- str_append_n(dest, data + i, char_len);
+ str_append_data(dest, data + i, char_len);
else {
- str_append_n(dest, utf8_replacement_char,
- UTF8_REPLACEMENT_CHAR_LEN);
+ str_append_data(dest, utf8_replacement_char,
+ UTF8_REPLACEMENT_CHAR_LEN);
}
i += char_len - 1;
} else {
unsigned int char_len =
uni_utf8_get_char_n(data + i, len - i, &chr);
if (char_len > 0 && is_valid_xml_char(chr))
- str_append_n(dest, data + i, char_len);
+ str_append_data(dest, data + i, char_len);
else {
- str_append_n(dest, utf8_replacement_char,
- UTF8_REPLACEMENT_CHAR_LEN);
+ str_append_data(dest, utf8_replacement_char,
+ UTF8_REPLACEMENT_CHAR_LEN);
}
i += char_len - 1;
} else {