--- jabberd/lib/xmlnode.cc.orig 2007-04-07 19:43:18 UTC +++ jabberd/lib/xmlnode.cc @@ -879,9 +879,9 @@ xmlnode xmlnode_get_tag(xmlnode parent, xmlnode_list_item xmlnode_get_tags(xmlnode context_node, const char *path, xht namespaces, pool p) { char *this_step = NULL; const char *ns_iri = NULL; - char *next_step = NULL; - char *start_predicate = NULL; - char *end_predicate = NULL; + const char *next_step = NULL; + const char *start_predicate = NULL; + const char *end_predicate = NULL; char *predicate = NULL; char *end_prefix = NULL; int axis = 0; /* 0 = child, 1 = parent, 2 = attribute */ @@ -1830,13 +1830,14 @@ xmlnode xmlnode_select_by_lang(xmlnode_l } /* if language has a geographical veriant, get the language as well */ - if (lang != NULL && strchr(lang, '-') != NULL) { - snprintf(general_lang, sizeof(general_lang), "%s", lang); - if (strchr(lang, '-') != NULL) { - strchr(lang, '-')[0] = 0; - } else { - general_lang[0] = 0; - } + if (lang != NULL) { +#define MIN(a,b) ((a) < (b) ? (a) : (b)) + size_t len = sizeof(general_lang); + const char *pos; + if ((pos = strchr(lang, '-'))) + len = MIN(len, pos - lang + 1); + + snprintf(general_lang, len, "%s", lang); } /* iterate the nodes */