+2013-06-19 Tim Ruehsen <tim.ruehsen@gmx.de>
+
+ * connect.c (socket_ip_address): zero out ip address structure to
+ avoid access to uninitialized values by inet_ntop().
+ * ftp.c (ftp_loop_internal): fix segfault caused by warc_tmp NULL pointer.
+
2013-05-21 Ray Satiro <raysatiro@yahoo.com>
* url.c (url_file_name): Use MAX_PATH in Windows.
if (ret < 0)
return false;
+ memset(ip, 0, sizeof(ip_address));
ip->family = sockaddr->sa_family;
switch (sockaddr->sa_family)
{
orig_lp = con->cmd & LEAVE_PENDING ? 1 : 0;
- /* For file RETR requests, we can write a WARC record.
- We record the file contents to a temporary file. */
- if (warc_enabled && (con->cmd & DO_RETR))
- {
- warc_tmp = warc_tempfile ();
- if (warc_tmp == NULL)
- return WARC_TMP_FOPENERR;
-
- if (!con->proxy && con->csock != -1)
- {
- warc_ip = (ip_address *) alloca (sizeof (ip_address));
- socket_ip_address (con->csock, warc_ip, ENDPOINT_PEER);
- }
- }
-
/* THE loop. */
do
{
con->cmd |= DO_CWD;
}
+ /* For file RETR requests, we can write a WARC record.
+ We record the file contents to a temporary file. */
+ if (warc_enabled && (con->cmd & DO_RETR) && warc_tmp == NULL)
+ {
+ warc_tmp = warc_tempfile ();
+ if (warc_tmp == NULL)
+ return WARC_TMP_FOPENERR;
+
+ if (!con->proxy && con->csock != -1)
+ {
+ warc_ip = (ip_address *) alloca (sizeof (ip_address));
+ socket_ip_address (con->csock, warc_ip, ENDPOINT_PEER);
+ }
+ }
+
/* Decide whether or not to restart. */
if (con->cmd & DO_LIST)
restval = 0;