Hi,
reviewing the potential problems g_strsplit could cause in others parts of wireshark. I noticed that my patch was not completely safe. here is a patch which should be safe. (please also review) Regards, Sebastien Tandel
Index: epan/stats_tree.c =================================================================== --- epan/stats_tree.c (révision 20131) +++ epan/stats_tree.c (copie de travail) @@ -526,16 +526,47 @@ static range_pair_t* get_range(guint8* rngstr) { gchar** split; - range_pair_t* rng = g_malloc(sizeof(range_pair_t)); + range_pair_t* rng; - split = g_strsplit(rngstr,"-",2); + split = g_strsplit(rngstr,"-",0); - rng->floor = strtol(split[0],NULL,10); - rng->ceil = strtol(split[1],NULL,10); + /* empty string */ + if (split[0] == NULL) { + printf("0==null, rng : %s(%x)\n", rngstr); + g_strfreev(split); + return NULL; + } + +#if GLIB_MAJOR_VERSION >= 2 + /* means we have a non empty string + * which does not contain a delimiter */ + if (split[1] == NULL) { + printf("1==null, rng : %s\n", rngstr); + g_strfreev(split); + return NULL; + } +#endif + + rng = g_malloc(sizeof(range_pair_t)); + + /* string == "X-?" */ + if (*(split[0]) != '\0') { + rng->floor = strtol(split[0],NULL,10); + } else + /* string == "-?" */ + rng->floor = G_MININT; + + /* string != "?-" */ +#if GLIB_MAJOR_VERSION >= 2 + if (*(split[1]) != '\0') { +#else + if (split[1] != NULL) { +#endif + rng->ceil = strtol(split[1],NULL,10); + } else + /* string == "?-Y" */ + rng->ceil = G_MAXINT; - if (rng->ceil == 0) rng->ceil = G_MAXINT; - if (rng->floor == 0) rng->floor = G_MININT; - g_strfreev(split); return rng;
_______________________________________________ Wireshark-dev mailing list Wireshark-dev@wireshark.org http://www.wireshark.org/mailman/listinfo/wireshark-dev