{
bool crlf = HAS_ALL_BITS(enc->flags, BASE64_ENCODE_FLAG_CRLF);
const unsigned char *src_c, *src_p;
- size_t src_pos;
+ size_t src_pos, src_left;
i_assert(!enc->finishing);
i_assert(!enc->finished);
src_p = src_c = src;
- while (src_size > 0) {
+ src_left = src_size;
+ while (src_left > 0) {
size_t dst_avail, dst_pos, line_avail, written;
/* determine how much we can write in destination buffer */
if (line_avail > 0) {
dst_pos = dest->used;
- base64_encode_more_data(enc, src_p, src_size, &src_pos,
+ base64_encode_more_data(enc, src_p, src_left, &src_pos,
line_avail, dest);
- i_assert(src_pos <= src_size);
+ i_assert(src_pos <= src_left);
src_p += src_pos;
- src_size -= src_pos;
+ src_left -= src_pos;
i_assert(dest->used >= dst_pos);
written = dest->used - dst_pos;
if (dst_avail == 0)
break;
- if (src_size > 0 && enc->cur_line_len == enc->max_line_len) {
+ if (src_left > 0 && enc->cur_line_len == enc->max_line_len) {
if (crlf) {
if (dst_avail >= 2) {
/* emit the full CRLF sequence */
test->max_line_len);
out_size = base64_get_full_encoded_size(
&enc, strlen(test->input));
- base64_encode_more(&enc, test->input, strlen(test->input),
- NULL, str);
- base64_encode_finish(&enc, str);
+ test_assert_idx(base64_encode_more(&enc, test->input,
+ strlen(test->input),
+ NULL, str), i);
+ test_assert_idx(base64_encode_finish(&enc, str), i);
test_assert_idx(strcmp(test->output, str_c(str)) == 0, i);
test_assert_idx(test->flags != 0 || test->max_line_len != 0 ||
space = buffer_append_space_unsafe(buf1, enc_size);
buffer_create_from_data(&buf, space, enc_size);
- base64_encode_more(&enc, in_buf, in_buf_size, NULL, &buf);
- base64_encode_finish(&enc, &buf);
+ if (!base64_encode_more(&enc, in_buf, in_buf_size, NULL, &buf))
+ test_assert_idx(FALSE, test_idx);
+ if (!base64_encode_finish(&enc, &buf))
+ test_assert_idx(FALSE, test_idx);
test_assert(base64_get_full_encoded_size(&enc, in_buf_size) ==
buf1->used);
size_t left = (buf_end - buf_p);
size_t used = buf1->used;
size_t src_pos, out_size;
+ bool eres;
if (chunk_size == 0) {
buf_ch = i_rand_limit(32);
out_size = base64_encode_get_size(&enc, buf_ch);
- base64_encode_more(&enc, buf_p, buf_ch, &src_pos, &out);
+ eres = base64_encode_more(&enc, buf_p, buf_ch, &src_pos, &out);
+ test_assert_idx((eres && src_pos == buf_ch) ||
+ (!eres && src_pos < buf_ch), test_idx);
test_assert_idx(out.used <= out_size, test_idx);
buf_p += src_pos;
i_assert(out_space >= out.used);
out_space -= out.used;
buffer_set_used_size(buf1, used + out.used);
}
- base64_encode_finish(&enc, buf1);
+ test_assert_idx(base64_encode_finish(&enc, buf1), test_idx);
/* Verify encode */
buffer_set_used_size(buf2, 0);
base64_encode_init(&enc, b64, enc_flags, max_line_len);
- base64_encode_more(&enc, in_buf, in_buf_size, NULL, buf2);
- base64_encode_finish(&enc, buf2);
+ test_assert_idx(base64_encode_more(&enc, in_buf, in_buf_size,
+ NULL, buf2), test_idx);
+ test_assert_idx(base64_encode_finish(&enc, buf2), test_idx);
test_assert_idx(buffer_cmp(buf1, buf2), test_idx);
/* Decode */