this patch fix my problem :) mb bug in escaped = g_regex_replace(xml_encode_regexen[i], translated, -1, 0, xml_decode_regexen_str[i], 0, NULL); g_regex_replace forever return NULL ... translated = escaped ... and strncat(item->description, translated, XKL_MAX_CI_DESC_LENGTH - 1); try cat null poitner — translated and catch segfault :) .. desc_element->children->content — USA
10x -------------------------------------------------------------------- --- /home/nick/test/libxklavier-5.0/libxklavier/xklavier_config.c 2009-06-24 15:08:38.000000000 +0400 +++ /home/nick/test/libxklavier-5.0_/libxklavier/xklavier_config.c 2011-01-18 19:22:51.000000000 +0300 @@ -142,6 +142,26 @@ #include "libxml/parserInternals.h" +gchar * replace(gchar *str,size_t max, gchar* from, gchar*to) { + gchar *output = malloc(max); + gchar *ptr = str; + size_t len = 0; + for(;*str;str++) { + if(len >= max) { + break; + } + if(strstr(str,from) == str) { + strncat(output,to,max-len); + str+=strlen(from); + len+=strlen(to); + continue; + } + output[len++]=*str; + } + output[len++]=0; + return output; +} + gboolean xkl_read_config_item(XklConfigRegistry * config, gint doc_index, xmlNodePtr iptr, XklConfigItem * item) @@ -199,14 +219,11 @@ * The conversion is not using libxml2, because there are no handy functions in API */ translated = g_strdup((gchar *) desc_element->children->content); + for (i = sizeof(xml_encode_regexen_str) / sizeof(xml_encode_regexen_str[0]); --i >= 0;) { - escaped = - g_regex_replace(xml_encode_regexen[i], - translated, -1, 0, - xml_decode_regexen_str[i], 0, - NULL); + escaped = replace(translated,XKL_MAX_CI_DESC_LENGTH - 1 ,xml_encode_regexen_str[i], xml_decode_regexen_str[i]); g_free(translated); translated = escaped; } @@ -221,14 +238,11 @@ for (i = sizeof(xml_decode_regexen_str) / sizeof(xml_decode_regexen_str[0]); --i >= 0;) { - unescaped = - g_regex_replace(xml_decode_regexen[i], - translated, -1, 0, - xml_encode_regexen_str[i], 0, - NULL); + unescaped = replace(translated, XKL_MAX_CI_DESC_LENGTH - 1, xml_decode_regexen_str[i],xml_encode_regexen_str[i]); g_free(translated); translated = unescaped; } + strncat(item->description, translated, XKL_MAX_CI_DESC_LENGTH - 1); g_free(translated); -------------------------------- On Fri, Nov 5, 2010 at 11:09 PM, Debian Bug Tracking System < ow...@bugs.debian.org> wrote: > Thank you for the additional information you have supplied regarding > this Bug report. > > This is an automatically generated reply to let you know your message > has been received. > > Your message is being forwarded to the package maintainers and other > interested parties for their attention; they will reply in due course. > > Your message has been sent to the package maintainer(s): > Debian GNOME Maintainers <pkg-gnome-maintain...@lists.alioth.debian.org> > > If you wish to submit further information on this problem, please > send it to 602...@bugs.debian.org. > > Please do not send mail to ow...@bugs.debian.org unless you wish > to report a problem with the Bug-tracking system. > > -- > 602440: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=602440 > Debian Bug Tracking System > Contact ow...@bugs.debian.org with problems > -- wbr nick.