Ver Fonte

* Fix glibc 2.10.1 issues

glibc 2.10.1 added a 2nd strchr()/strrchr() prototype, resulting in:
char *strchr(char *, int)
const char *strchr(const char *, int)

This causes code passing in a (const char*) string to return a
(const char*) result. This causes (invalid) code to be revealed.

This patch fixes the compile problem, but not the broken code. This
code is likely destroying valid string buffers and will be fixed in
1.2.17.
Bryan Drewery há 17 anos atrás
pai
commit
b9028e8dd0
4 ficheiros alterados com 12 adições e 9 exclusões
  1. 3 0
      doc/UPDATES
  2. 2 2
      src/adns.c
  3. 3 3
      src/match.c
  4. 4 4
      src/set.c

+ 3 - 0
doc/UPDATES

@@ -1,3 +1,6 @@
+1.2.16.1
+* Fix linux compile errors
+
 1.2.16 - http://wraith.botpack.net/milestone/1.2.16
 * Add 'set altchars' so that alternative characters used for nicks can be changed. (fixes #418)
 * Fix channels added by cmd_slowjoin not having the user who added them associated with the channel.

+ 2 - 2
src/adns.c

@@ -736,7 +736,7 @@ static int cut_host(const char *host, char *query)
 	int len;
 
 	orig = query;
-	while ((period = strchr(host, '.'))) {
+	while ((period = strchr((char*)host, '.'))) {
 		len = period - host;
 		if (len > 63) return(-1);
 		*query++ = len;
@@ -759,7 +759,7 @@ static int reverse_ip(const char *host, char *reverse)
 	char *period;
 	int offset, len;
 
-	period = strchr(host, '.');
+	period = strchr((char*)host, '.');
 	if (!period) {
 		len = strlen(host);
 		egg_memcpy(reverse, host, len);

+ 3 - 3
src/match.c

@@ -251,15 +251,15 @@ comp_with_mask(void *addr, void *dest, unsigned int mask)
 int
 match_cidr(const char *s1, const char *s2)
 {
-  char *len = strrchr(s1, '/');
+  char *len = strrchr((char*)s1, '/');
   if(len == NULL)
     return 0;
 
-  char *ipmask = strrchr(s1, '@');
+  char *ipmask = strrchr((char*)s1, '@');
   if(ipmask == NULL)
     return 0;
 
-  char *ip = strrchr(s2, '@');
+  char *ip = strrchr((char*)s2, '@');
   if(ip == NULL)
     return 0;
 

+ 4 - 4
src/set.c

@@ -202,7 +202,7 @@ char *var_sanitize(variable_t *var, const char *data)
     char *p = NULL;
     rate_t rate = {0, 0};
     
-    if (data && (p = strchr(data, ':'))) {
+    if (data && (p = strchr((char*)data, ':'))) {
       *p = 0;
       p++;
 
@@ -724,7 +724,7 @@ static bool var_find_list(const char *botnick, variable_t *var, const char *elem
   char *p = NULL;
 
   /* The first word only .. */
-  if (!strcmp(var->name, "alias") && (p = strchr(element, ' ')))
+  if (!strcmp(var->name, "alias") && (p = strchr((char*)element, ' ')))
     slen = p - element;
   /* Or the whole word */
   else
@@ -1023,7 +1023,7 @@ int cmd_set_real(const char *botnick, int idx, char *par)
       if (list == LIST_ADD) {
         if (var_find_list(botnick, var, data)) {
           if (!strcmp(var->name, "alias")) {
-            char *p = strchr(data, ' ');
+            char *p = strchr((char*)data, ' ');
             if (p)
               *p = 0;
           }
@@ -1041,7 +1041,7 @@ int cmd_set_real(const char *botnick, int idx, char *par)
           return 1;
         } else if (!var_find_list(botnick, var, data)) {
           if (!strcmp(var->name, "alias")) {
-            char *p = strchr(data, ' ');
+            char *p = strchr((char*)data, ' ');
             if (p)
               *p = 0;
           }