Backported patch from Mats Erik Andersson <mats.andersson@gisladisker.se>
for iftop >= 0.17, which fixes a segfault when using the same command line
argument multiple times. For further information, please have a look to
Debian bug ID #425488.
--- iftop-0.17/cfgfile.c 2010-11-18 23:18:15.237057004 +0100
+++ iftop-0.17/cfgfile.c.stringmap 2010-11-18 23:22:57.360812876 +0100
@@ -230,8 +230,15 @@
stringmap S;
S = stringmap_find(config, directive);
- if (S) stringmap_delete_free(S);
- stringmap_insert(config, directive, item_ptr(xstrdup(s)));
+ if (S) {
+ /* Replace any already stored string value.
+ * The node can simply not be deleted straight off,
+ * due to possible presence of leafs on either side. */
+ if (S->d.v)
+ xfree(S->d.v);
+ S->d.v = xstrdup(s);
+ } else
+ stringmap_insert(config, directive, item_ptr(xstrdup(s)));
}
int read_config(char *file, int whinge_on_error) {
--- iftop-0.17/stringmap.c 2010-11-18 23:18:15.229995287 +0100
+++ iftop-0.17/stringmap.c.stringmap 2010-11-18 23:24:20.853809501 +0100
@@ -61,11 +61,11 @@
}
/* stringmap_insert:
- * Insert into S an item having key k and value d. Returns an existing key
- * or NULL if it was inserted.
+ * Insert into S an item having key k and value d. Returns a pointer to
+ * the existing item value, or NULL if a new item was created.
*/
item *stringmap_insert(stringmap S, const char *k, const item d) {
- if (!S) return 0;
+ if (!S) return NULL;
if (S->key == NULL) {
S->key = xstrdup(k);
S->d = d;