1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-30 06:46:38 +02:00

xfer: limit bytes received to file size (for DCC file received), fix crash when displaying a xfer file with pos greater than size

This commit is contained in:
Sebastien Helleu
2012-11-27 19:23:59 +01:00
parent 52519e11d2
commit 9c3ee3c407
3 changed files with 12 additions and 5 deletions
+2
View File
@@ -56,6 +56,8 @@ Version 0.4.0 (under dev!)
"ipv4." and/or "ipv6." before protocol name, to force IPv4/IPv6 (task #12270)
* relay: add missing "ssl." in output of /relay listrelay
* script: fix compilation on OS X
* xfer: limit bytes received to file size (for DCC file received), fix crash
when displaying a xfer file with pos greater than size
Version 0.3.9.2 (2012-11-18)
----------------------------
+5 -4
View File
@@ -48,7 +48,7 @@ xfer_buffer_refresh (const char *hotlist)
char str_color[256], suffix[32], status[64], date[128], eta[128];
char *progress_bar, *str_pos, *str_total, *str_bytes_per_sec;
int i, length, line, progress_bar_size, num_bars;
unsigned long long pct_complete;
unsigned long long pos, pct_complete;
struct tm *date_tmp;
if (xfer_buffer)
@@ -145,6 +145,7 @@ xfer_buffer_refresh (const char *hotlist)
else
{
/* build progress bar */
pos = (ptr_xfer->pos <= ptr_xfer->size) ? ptr_xfer->pos : ptr_xfer->size;
progress_bar = NULL;
progress_bar_size = weechat_config_integer (xfer_config_look_progress_bar_size);
if (progress_bar_size > 0)
@@ -159,7 +160,7 @@ xfer_buffer_refresh (const char *hotlist)
num_bars = 0;
}
else
num_bars = (int)(((float)(ptr_xfer->pos)/(float)(ptr_xfer->size)) * (float)progress_bar_size);
num_bars = (int)(((float)(pos)/(float)(ptr_xfer->size)) * (float)progress_bar_size);
for (i = 0; i < num_bars - 1; i++)
{
strcat (progress_bar, "=");
@@ -182,10 +183,10 @@ xfer_buffer_refresh (const char *hotlist)
pct_complete = 0;
}
else
pct_complete = (unsigned long long)(((float)(ptr_xfer->pos)/(float)(ptr_xfer->size)) * 100);
pct_complete = (unsigned long long)(((float)(pos)/(float)(ptr_xfer->size)) * 100);
/* position, total and bytes per second */
str_pos = weechat_string_format_size (ptr_xfer->pos);
str_pos = weechat_string_format_size (pos);
str_total = weechat_string_format_size (ptr_xfer->size);
str_bytes_per_sec = weechat_string_format_size (ptr_xfer->bytes_per_sec);
+5 -1
View File
@@ -185,6 +185,7 @@ xfer_dcc_recv_file_child (struct t_xfer *xfer)
static char buffer[XFER_BLOCKSIZE_MAX];
uint32_t pos;
time_t last_sent, new_time;
unsigned long long bytes_remaining;
/* first connect to sender (blocking) */
if (!weechat_network_connect_to (xfer->proxy, xfer->sock,
@@ -202,7 +203,10 @@ xfer_dcc_recv_file_child (struct t_xfer *xfer)
last_sent = time (NULL);
while (1)
{
num_read = recv (xfer->sock, buffer, sizeof (buffer), 0);
bytes_remaining = xfer->size - xfer->pos;
num_read = recv (xfer->sock, buffer,
(bytes_remaining >= sizeof (buffer)) ? sizeof (buffer) : bytes_remaining,
0);
if (num_read == -1)
{
/* socket is temporarily not available (sender is not fast ?!) */