Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP4:Update
cyrus-imapd
cyrus-imapd_urlfetch_range_handling.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File cyrus-imapd_urlfetch_range_handling.patch of Package cyrus-imapd
Index: cyrus-imapd-2.3.18/imap/index.c =================================================================== --- cyrus-imapd-2.3.18.orig/imap/index.c +++ cyrus-imapd-2.3.18/imap/index.c @@ -2774,8 +2774,10 @@ int index_urlfetch(struct mailbox *mailb cacherecord crec; const char *cachestr; int fetchmime = 0; - unsigned size, offset = 0, skip = 0; - int n, r = 0; + size_t size, offset = 0; + unsigned skip = 0; + unsigned long n; + int r = 0; if (outsize) *outsize = 0; @@ -2863,26 +2865,42 @@ int index_urlfetch(struct mailbox *mailb goto done; } - offset = CACHE_ITEM_BIT32(cachestr); - size = CACHE_ITEM_BIT32(cachestr + CACHE_ITEM_SIZE_SKIP); + size_t section_offset = CACHE_ITEM_BIT32(cachestr); + size_t section_size = CACHE_ITEM_BIT32(cachestr + CACHE_ITEM_SIZE_SKIP); + + if (section_offset + section_size < section_offset + || section_offset + section_size > size) { + r = IMAP_INTERNAL; + goto done; + } + + offset += section_offset; + size = section_size; } - /* Handle PARTIAL request */ - offset += start_octet; - if (octet_count) size = octet_count; + /* Handle PARTIAL request */ + n = octet_count ? octet_count : size; /* Sanity check the requested size */ - if (size && (offset + size > msg_size)) - n = msg_size - offset; - else - n = size; + if (start_octet > size) { + start_octet = size; + n = 0; + } + else if (start_octet + n < start_octet || start_octet + n > size) { + if (size - start_octet >= 0){ + n = size - start_octet; + } + else { + n = 0; + } + } if (outsize) *outsize = n; else - prot_printf(pout, "{%u}\r\n", n); + prot_printf(pout, "{%lu}\r\n", n); - prot_write(pout, msg_base + offset, n); + if (n) prot_write(pout, msg_base + offset, n); done: /* Close the message file */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor