diff options
| -rw-r--r-- | dcc.c | 24 | ||||
| -rw-r--r-- | protocols/jabber/s5bytestream.c | 11 | 
2 files changed, 24 insertions, 11 deletions
| @@ -583,11 +583,17 @@ file_transfer_t *dcc_request( struct im_connection *ic, char *line )  	regex_t re;  	file_transfer_t *ft;  	dcc_file_transfer_t *df; - -	if( regcomp( &re, pattern, REG_EXTENDED ) ) -		return NULL; -	if( regexec( &re, line, 9, pmatch, 0 ) ) +	char errbuf[256]; +	int regerrcode, gret; + +	if( ( regerrcode = regcomp( &re, pattern, REG_EXTENDED ) ) || +	    ( regerrcode = regexec( &re, line, 9, pmatch, 0 ) ) ) { +		regerror( regerrcode,&re,errbuf,sizeof( errbuf ) ); +		imcb_log( ic,  +			  "DCC: error parsing 'DCC SEND': %s, line: %s",  +			  errbuf, line );  		return NULL; +	}  	if( ( pmatch[1].rm_so > 0 ) &&  	    ( pmatch[4].rm_so > 0 ) && @@ -615,7 +621,7 @@ file_transfer_t *dcc_request( struct im_connection *ic, char *line )  		/* number means ipv4, something else means ipv6 */  		if ( pmatch[5].rm_so > 0 )  		{ -			struct in_addr ipaddr = { htonl( atoi( input + pmatch[5].rm_so ) ) }; +			struct in_addr ipaddr = { .s_addr = htonl( atoi( input + pmatch[5].rm_so ) ) };  			host = inet_ntoa( ipaddr );  		} else  		{ @@ -630,9 +636,13 @@ file_transfer_t *dcc_request( struct im_connection *ic, char *line )  		filesize = atoll( input + pmatch[8].rm_so );  		memset( &hints, 0, sizeof ( struct addrinfo ) ); -		if ( getaddrinfo( host, port, &hints, &rp ) ) +		if ( ( gret = getaddrinfo( host, port, &hints, &rp ) ) )  		{  			g_free( input ); +			imcb_log( ic, "DCC: getaddrinfo() failed with %s " +				  "when parsing incoming 'DCC SEND': " +				  "host %s, port %s",  +				  gai_strerror( gret ), host, port );  			return NULL;  		} @@ -649,6 +659,8 @@ file_transfer_t *dcc_request( struct im_connection *ic, char *line )  		return ft;  	} +	imcb_log( ic, "DCC: couldnt parse 'DCC SEND' line: %s", line ); +  	return NULL;  } diff --git a/protocols/jabber/s5bytestream.c b/protocols/jabber/s5bytestream.c index 0abc2c1b..1008f162 100644 --- a/protocols/jabber/s5bytestream.c +++ b/protocols/jabber/s5bytestream.c @@ -352,6 +352,7 @@ gboolean jabber_bs_recv_handshake( gpointer data, gint fd, b_input_condition con  	struct bs_transfer *bt = data;  	short revents; +	int gret;  	if ( ( fd != 0 ) && !jabber_bs_poll( bt, fd, &revents ) )  		return FALSE; @@ -365,8 +366,8 @@ gboolean jabber_bs_recv_handshake( gpointer data, gint fd, b_input_condition con  			memset( &hints, 0, sizeof( struct addrinfo ) );  			hints.ai_socktype = SOCK_STREAM; -			if ( getaddrinfo( bt->sh->host, bt->sh->port, &hints, &rp ) != 0 ) -				return jabber_bs_abort( bt, "getaddrinfo() failed: %s", strerror( errno ) ); +			if ( ( gret = getaddrinfo( bt->sh->host, bt->sh->port, &hints, &rp ) ) != 0 ) +				return jabber_bs_abort( bt, "getaddrinfo() failed: %s", gai_strerror( gret ) );  			ASSERTSOCKOP( bt->tf->fd = fd = socket( rp->ai_family, rp->ai_socktype, 0 ), "Opening socket" ); @@ -922,7 +923,7 @@ gboolean jabber_bs_send_handshake_abort(struct bs_transfer *bt, char *error )  gboolean jabber_bs_send_listen( struct bs_transfer *bt, struct sockaddr_storage *saddr, char *host, char *port )  {  	struct jabber_transfer *tf = bt->tf; -	int fd; +	int fd,gret;  	char hostname[ HOST_NAME_MAX + 1 ];  	struct addrinfo hints, *rp;  	socklen_t ssize = sizeof( struct sockaddr_storage ); @@ -935,8 +936,8 @@ gboolean jabber_bs_send_listen( struct bs_transfer *bt, struct sockaddr_storage  	hints.ai_socktype = SOCK_STREAM;  	hints.ai_flags = AI_NUMERICSERV; -	if ( getaddrinfo( hostname, "0", &hints, &rp ) != 0 ) -		return jabber_bs_abort( bt, "getaddrinfo()" ); +	if ( ( gret = getaddrinfo( hostname, "0", &hints, &rp ) ) != 0 ) +		return jabber_bs_abort( bt, "getaddrinfo() failed: %s", gai_strerror( gret ) );  	memcpy( saddr, rp->ai_addr, rp->ai_addrlen ); | 
