Text   |  XML   |  ReML   |   Visible Warnings:

Unreasonable Size Argument  at buffer.c:252

No properties have been set. | edit properties
Jump to warning location ↓ warning details...
Show Events | Options

mail_cache_transaction_flush

(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib-index/mail-cache-transaction.c)expand/collapse
Show more  
 590  mail_cache_transaction_flush(struct mail_cache_transaction_ctx *ctx)
 591  {
 592          struct mail_cache *cache = ctx->cache;
 593          const struct mail_cache_record *rec, *tmp_rec;
 594          const uint32_t *seq;
 595          uint32_t write_offset, write_size, rec_pos, seq_idx, seq_limit;
 596          size_t size, max_size;
 597          unsigned int seq_count;
 598          int ret;
 599          bool commit;
 600   
 601          if (MAIL_CACHE_IS_UNUSABLE(cache))
 602                  return -1;
 603   
 604          commit = ctx->prev_seq == 0;
 605          if (commit) {
 606                  /* committing, remove the last dummy record */
 607                  buffer_set_used_size(ctx->cache_data, ctx->prev_pos);
 608          }
 609   
 610          if (ctx->cache_file_seq != ctx->cache->hdr->file_seq) {
 611                  /* cache file reopened - need to abort */
 612                  mail_cache_transaction_reset(ctx);
 613                  return 0;
 614          }
 615   
 616          rec = buffer_get_data(ctx->cache_data, &size);
 617          i_assert(ctx->prev_pos <= size);
 618   
 619          seq = array_get(&ctx->cache_data_seq, &seq_count);
 620          seq_limit = 0;
 621   
 622          for (seq_idx = 0, rec_pos = 0; rec_pos < ctx->prev_pos;) {
 623                  max_size = ctx->prev_pos - rec_pos;
 624   
 625                  ret = mail_cache_transaction_get_space(ctx, rec->size,
 626                                                         max_size, &write_offset,
 627                                                         &max_size, commit);
 628                  if (ret <= 0) {
 629                          /* error / couldn't lock / cache file reopened */
 630                          return ret;
 631                  }
 632   
 633
652
Show [ Lines 633 to 652 omitted. ]
 653                                                          &seq_idx, seq_limit,
 654                                                          write_offset,
 655                                                          &write_size) < 0)
 656                          return -1;
 657   
 658                  rec_pos += write_size;
 659                  rec = CONST_PTR_OFFSET(rec, write_size);
 660          }
 661   
 662          /* drop the written data from buffer */
 663          buffer_copy(ctx->cache_data, 0,
 664[+]                     ctx->cache_data, ctx->prev_pos, (size_t)-1);
expand/collapse

buffer_copy

(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib/buffer.c)expand/collapse
Show more  
 236  void buffer_copy(buffer_t *_dest, size_t dest_pos,
 237                   const buffer_t *_src, size_t src_pos, size_t copy_size)
 238  {
 239          struct real_buffer *dest = (struct real_buffer *)_dest;
 240          const struct real_buffer *src = (const struct real_buffer *)_src;
 241          size_t max_size;
 242   
 243          i_assert(src_pos <= src->used);
 244   
 245          max_size = src->used - src_pos;
 246          if (copy_size > max_size)
 247                  copy_size = max_size;
 248   
 249          buffer_check_limits(dest, dest_pos, copy_size);
 250          if (src == dest) {
 251                  memmove(dest->w_buffer + dest_pos,
 252                          src->r_buffer + src_pos, copy_size);
Show more  
Show more  




Change Warning 7231.25870 : Unreasonable Size Argument

Priority:
State:
Finding:
Owner:
Note: