diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2008-03-15 16:09:50 +0000 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2008-03-15 16:09:50 +0000 | 
| commit | 9ad86bb22e53a40b3ad5bbc57f33d819d2748b0c (patch) | |
| tree | b6d51b2b2d2a0d587e6a62ac454344cfaceca32a | |
| parent | 7f421d6b922837857d6aca342da314225023eb46 (diff) | |
Fixed issues with "long" URLs in url.c. Reusing code from 2001 wasn't a
good idea...
| -rw-r--r-- | bitlbee.h | 2 | ||||
| -rw-r--r-- | lib/url.c | 24 | ||||
| -rw-r--r-- | lib/url.h | 18 | 
3 files changed, 23 insertions, 21 deletions
| @@ -32,7 +32,7 @@  #define BITLBEE_VERSION "1.1.1dev"  #define VERSION BITLBEE_VERSION -#define MAX_STRING 128 +#define MAX_STRING 511  #if HAVE_CONFIG_H  #include "config.h" @@ -25,13 +25,16 @@  #include "url.h" -/* Convert an URL to a url_t structure					*/ +/* Convert an URL to a url_t structure */  int url_set( url_t *url, char *set_url )  { -	char s[MAX_STRING]; +	char s[MAX_STRING+1];  	char *i; -	/* protocol://							*/ +	memset( url, 0, sizeof( url_t ) ); +	memset( s, 0, sizeof( s ) ); +	 +	/* protocol:// */  	if( ( i = strstr( set_url, "://" ) ) == NULL )  	{  		url->proto = PROTO_DEFAULT; @@ -48,13 +51,12 @@ int url_set( url_t *url, char *set_url )  		else if( g_strncasecmp( set_url, "socks5", i - set_url ) == 0 )  			url->proto = PROTO_SOCKS5;  		else -		{ -			return( 0 ); -		} +			return 0; +		  		strncpy( s, i + 3, MAX_STRING );  	} -	/* Split							*/ +	/* Split */  	if( ( i = strchr( s, '/' ) ) == NULL )  	{  		strcpy( url->file, "/" ); @@ -66,7 +68,7 @@ int url_set( url_t *url, char *set_url )  	}  	strncpy( url->host, s, MAX_STRING ); -	/* Check for username in host field				*/ +	/* Check for username in host field */  	if( strrchr( url->host, '@' ) != NULL )  	{  		strncpy( url->user, url->host, MAX_STRING ); @@ -75,19 +77,19 @@ int url_set( url_t *url, char *set_url )  		strcpy( url->host, i + 1 );  		*url->pass = 0;  	} -	/* If not: Fill in defaults					*/ +	/* If not: Fill in defaults */  	else  	{  		*url->user = *url->pass = 0;  	} -	/* Password?							*/ +	/* Password? */  	if( ( i = strchr( url->user, ':' ) ) != NULL )  	{  		*i = 0;  		strcpy( url->pass, i + 1 );  	} -	/* Port number?							*/ +	/* Port number? */  	if( ( i = strchr( url->host, ':' ) ) != NULL )  	{  		*i = 0; @@ -25,20 +25,20 @@  #include "bitlbee.h" -#define PROTO_HTTP		2 -#define PROTO_HTTPS		5 -#define PROTO_SOCKS4	3 -#define PROTO_SOCKS5	4 -#define PROTO_DEFAULT	PROTO_HTTP +#define PROTO_HTTP      2 +#define PROTO_HTTPS     5 +#define PROTO_SOCKS4    3 +#define PROTO_SOCKS5    4 +#define PROTO_DEFAULT   PROTO_HTTP  typedef struct url  {  	int proto;  	int port; -	char host[MAX_STRING]; -	char file[MAX_STRING]; -	char user[MAX_STRING]; -	char pass[MAX_STRING]; +	char host[MAX_STRING+1]; +	char file[MAX_STRING+1]; +	char user[MAX_STRING+1]; +	char pass[MAX_STRING+1];  } url_t;  int url_set( url_t *url, char *set_url ); | 
