e->dev = g_strdup(fields[3]);
e->dev now contains malloc'd memory...
- errors += qemu_strtou64(fields[4], NULL, 10, &e->inode);
+ errors |= qemu_strtou64(fields[4], NULL, 10, &e->inode);
...and if this qemu_strtou64 fails...
- /*
- * The last field may have leading spaces which we
- * need to strip.
- */
- if (g_strv_length(fields) == 6) {
- e->path = g_strdup(g_strchug(fields[5]));
+ if (!errors) {
+ /*
+ * The last field may have leading spaces which we
+ * need to strip.
+ */
+ if (g_strv_length(fields) == 6) {
+ e->path = g_strdup(g_strchug(fields[5]));
+ }
+ map_info = g_slist_prepend(map_info, e);
+ } else {
+ g_free(e);
...you've now leaked it. Oops.