Hi Petr, On Tue, Aug 27, 2024 at 2:16 AM Petr Pavlu <petr.pavlu@xxxxxxxx> wrote: > > On 8/15/24 19:39, Sami Tolvanen wrote: > > +static bool is_export_symbol(struct state *state, Dwarf_Die *die) > > +{ > > + Dwarf_Die *source = die; > > + Dwarf_Die origin; > > + > > + state->sym = NULL; > > Nit: This assignment isn't strictly necessary, the value is overwritten > a few lines below and isn't used in between. True, I think this was left over from refactoring. > > +int symbol_read_exports(FILE *file) > > +{ > > + struct symbol *sym; > > + char *line = NULL; > > + char *name = NULL; > > + size_t size = 0; > > + int nsym = 0; > > + > > + while (getline(&line, &size, file) > 0) { > > + if (sscanf(line, "%ms\n", &name) != 1) { > > + error("malformed input line: %s", line); > > + return -1; > > + } > > + > > + free(line); > > + line = NULL; > > + > > + if (is_exported(name)) > > + continue; /* Ignore duplicates */ > > + > > + sym = malloc(sizeof(struct symbol)); > > + if (!sym) { > > + error("malloc failed"); > > + return -1; > > + } > > + > > + sym->name = name; > > + name = NULL; > > + > > + hash_add(symbol_names, &sym->name_hash, name_hash(sym->name)); > > + ++nsym; > > + > > + debug("%s", sym->name); > > + } > > + > > + if (line) > > + free(line); > > The loop leaks line on a potential sscanf() error and name if the symbol > is a duplicate or malloc(sizeof(struct symbol)) fails. Additionally, it > should be possible to avoid allocating line by getline() on each > iteration. > > I would change it to something like this (not tested): Good points, I'll change this to your suggested version (after testing). Thanks! Sami