aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2008-03-15 16:09:50 +0000
committerWilmer van der Gaast <wilmer@gaast.net>2008-03-15 16:09:50 +0000
commit9ad86bb22e53a40b3ad5bbc57f33d819d2748b0c (patch)
treeb6d51b2b2d2a0d587e6a62ac454344cfaceca32a
parent7f421d6b922837857d6aca342da314225023eb46 (diff)
Fixed issues with "long" URLs in url.c. Reusing code from 2001 wasn't a
good idea...
-rw-r--r--bitlbee.h2
-rw-r--r--lib/url.c24
-rw-r--r--lib/url.h18
3 files changed, 23 insertions, 21 deletions
diff --git a/bitlbee.h b/bitlbee.h
index c118d7fc..4a1c8b6d 100644
--- a/bitlbee.h
+++ b/bitlbee.h
@@ -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"
diff --git a/lib/url.c b/lib/url.c
index c6fdc4c8..de9966b4 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -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;
diff --git a/lib/url.h b/lib/url.h
index e9e1ecfe..8c038c91 100644
--- a/lib/url.h
+++ b/lib/url.h
@@ -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 );