Opened 10 years ago
Last modified 10 years ago
#6827 new Bugs
Integer overflow in read function
Reported by: | Owned by: | Jonathan Turkanis | |
---|---|---|---|
Milestone: | To Be Determined | Component: | iostreams |
Version: | Boost Development Trunk | Severity: | Showstopper |
Keywords: | security, overflow, restrict, restriction | Cc: |
Description
The problem with this chunk of code (from boost/iostreams/detail/restrict_impl.hpp read function):
std::streamsize amt = end_ != -1 ? (std::min) (n, static_cast<std::streamsize>(end_ - pos_)) : n;
is that it's prone to integer overflow. So if you have let's say end_ that is > INT_MAX std::min will return 'wrong' (unwanted) value, e.g.:
std::streamsize a = 0xb14c1000; std::streamsize b = 1; std::streamsize result = (std::min)(a, b);
This will return result = 0xb14c1000 which if applied to our case means we will read 0xb14c1000 instead of 1 bytes.
This can be fixed like this:
std::streamsize amt(n); if (end_ != -1 && end_ <= std::numeric_limits<std::streamsize>::max()) { amt = (std::min) (n, static_cast<std::streamsize>(end_ - pos_)); }
Attachments (2)
Change History (3)
by , 10 years ago
Attachment: | restrict_impl.patch added |
---|
comment:1 by , 10 years ago
My previous patch had a bug, my colleague noticed that, so I've uploaded a fix.
Note:
See TracTickets
for help on using tickets.
Patch for the bug.