mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-08-07 18:52:30 +00:00
* Fix potential buffer overflows in case snprintf buffer is too
small. Patch by Josef Drexler. * Added 'view.persistance' command that makes downloads inserted into that view persist across sessions. Only call on user-created views. * Added 'ratio.*' commands that call the 'group.seeding.ratio.*' equivalents. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@1080 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
@@ -82,28 +82,28 @@ TextElementValueBase::print(char* first, char* last, Canvas::attributes_list* at
|
||||
|
||||
} else if (m_flags & flag_kb) {
|
||||
// Just use a default width of 5 for now.
|
||||
first += std::max(snprintf(first, last - first + 1, "%5.1f", (double)val / (1 << 10)), 0);
|
||||
first += std::min(std::max(snprintf(first, last - first + 1, "%5.1f", (double)val / (1 << 10)), 0), last - first + 1);
|
||||
|
||||
} else if (m_flags & flag_mb) {
|
||||
// Just use a default width of 8 for now.
|
||||
first += std::max(snprintf(first, last - first + 1, "%8.1f", (double)val / (1 << 20)), 0);
|
||||
first += std::min(std::max(snprintf(first, last - first + 1, "%8.1f", (double)val / (1 << 20)), 0), last - first + 1);
|
||||
|
||||
} else if (m_flags & flag_xb) {
|
||||
|
||||
if (val < (int64_t(1000) << 10))
|
||||
first += std::max(snprintf(first, last - first + 1, "%5.1f KB", (double)val / (int64_t(1) << 10)), 0);
|
||||
first += std::min(std::max(snprintf(first, last - first + 1, "%5.1f KB", (double)val / (int64_t(1) << 10)), 0), last - first + 1);
|
||||
else if (val < (int64_t(1000) << 20))
|
||||
first += std::max(snprintf(first, last - first + 1, "%5.1f MB", (double)val / (int64_t(1) << 20)), 0);
|
||||
first += std::min(std::max(snprintf(first, last - first + 1, "%5.1f MB", (double)val / (int64_t(1) << 20)), 0), last - first + 1);
|
||||
else if (val < (int64_t(1000) << 30))
|
||||
first += std::max(snprintf(first, last - first + 1, "%5.1f GB", (double)val / (int64_t(1) << 30)), 0);
|
||||
first += std::min(std::max(snprintf(first, last - first + 1, "%5.1f GB", (double)val / (int64_t(1) << 30)), 0), last - first + 1);
|
||||
else
|
||||
first += std::max(snprintf(first, last - first + 1, "%5.1f TB", (double)val / (int64_t(1) << 40)), 0);
|
||||
first += std::min(std::max(snprintf(first, last - first + 1, "%5.1f TB", (double)val / (int64_t(1) << 40)), 0), last - first + 1);
|
||||
|
||||
} else if (m_flags & flag_timer) {
|
||||
if (val == 0)
|
||||
first += std::max(snprintf(first, last - first + 1, "--:--:--"), 0);
|
||||
first += std::min(std::max(snprintf(first, last - first + 1, "--:--:--"), 0), last - first + 1);
|
||||
else
|
||||
first += std::max(snprintf(first, last - first + 1, "%2d:%02d:%02d", (int)(val / 3600), (int)((val / 60) % 60), (int)(val % 60)), 0);
|
||||
first += std::min(std::max(snprintf(first, last - first + 1, "%2d:%02d:%02d", (int)(val / 3600), (int)((val / 60) % 60), (int)(val % 60)), 0), last - first + 1);
|
||||
|
||||
} else if (m_flags & flag_date) {
|
||||
time_t t = val;
|
||||
@@ -112,7 +112,7 @@ TextElementValueBase::print(char* first, char* last, Canvas::attributes_list* at
|
||||
if (u == NULL)
|
||||
return first;
|
||||
|
||||
first += std::max(snprintf(first, last - first + 1, "%02u/%02u/%04u", u->tm_mday, (u->tm_mon + 1), (1900 + u->tm_year)), 0);
|
||||
first += std::min(std::max(snprintf(first, last - first + 1, "%02u/%02u/%04u", u->tm_mday, (u->tm_mon + 1), (1900 + u->tm_year)), 0), last - first + 1);;
|
||||
|
||||
} else if (m_flags & flag_time) {
|
||||
time_t t = val;
|
||||
@@ -121,10 +121,10 @@ TextElementValueBase::print(char* first, char* last, Canvas::attributes_list* at
|
||||
if (u == NULL)
|
||||
return first;
|
||||
|
||||
first += std::max(snprintf(first, last - first + 1, "%2d:%02d:%02d", u->tm_hour, u->tm_min, u->tm_sec), 0);
|
||||
first += std::min(std::max(snprintf(first, last - first + 1, "%2d:%02d:%02d", u->tm_hour, u->tm_min, u->tm_sec), 0), last - first + 1);
|
||||
|
||||
} else {
|
||||
first += std::max(snprintf(first, last - first + 1, "%lld", val), 0);
|
||||
first += std::min(std::max(snprintf(first, last - first + 1, "%lld", val), 0), last - first + 1);
|
||||
}
|
||||
|
||||
push_attribute(attributes, Attributes(first, baseAttribute));
|
||||
|
||||
Reference in New Issue
Block a user