libpurple/protocols/jabber/jutil.c

changeset 27731
53ddfbc48e11
parent 27728
03b2a20ba465
child 27819
48b1ba24def3
equal deleted inserted replaced
27730:4fe6b98c92d2 27731:53ddfbc48e11
55 } 55 }
56 56
57 gboolean jabber_domain_validate(const char *str) 57 gboolean jabber_domain_validate(const char *str)
58 { 58 {
59 const char *c; 59 const char *c;
60 size_t len;
60 61
61 if(!str) 62 if(!str)
62 return TRUE; 63 return TRUE;
63 64
64 if(strlen(str) > 1023) 65 len = strlen(str);
66 if (len > 1023)
65 return FALSE; 67 return FALSE;
66 68
67 c = str; 69 c = str;
68 70
69 if (*c == '[') { 71 if (*c == '[') {
70 /* Check if str is a valid IPv6 identifier */ 72 /* Check if str is a valid IPv6 identifier */
71 const gchar *end_bracket = strstr(c, "]");
72 gboolean valid = FALSE; 73 gboolean valid = FALSE;
73 74
74 if (!end_bracket || *(end_bracket + 1) != '\0') 75 if (*(c + len - 1) != ']')
75 return FALSE; 76 return FALSE;
76 77
77 /* Ugly, but in-place */ 78 /* Ugly, but in-place */
78 *(gchar *)end_bracket = '\0'; 79 *(gchar *)(c + len - 1) = '\0';
79 valid = purple_ipv6_address_is_valid(c + 1); 80 valid = purple_ipv6_address_is_valid(c + 1);
80 *(gchar *)end_bracket = ']'; 81 *(gchar *)(c + len - 1) = ']';
81 82
82 return valid; 83 return valid;
83 } 84 }
84 85
85 while(c && *c) { 86 while(c && *c) {

mercurial