Skip to content

Commit

Permalink
fix memory leak in -E mode
Browse files Browse the repository at this point in the history
When running with -fsanitize=leak enabled nasm prints these errors:

Direct leak of 114 byte(s) in 10 object(s) allocated from:
    #0 0x7f3031ef0867 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
    #1 0x564dc07a2f6c in nasm_malloc nasmlib/alloc.c:55
    #2 0x564dc07f606a in detoken asm/preproc.c:2029
    #3 0x564dc0828a62 in pp_getline asm/preproc.c:7835
    #4 0x564dc0797f3e in main asm/nasm.c:654
    #5 0x7f3031608d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #6 0x7f3031608e3f in __libc_start_main_impl ../csu/libc-start.c:392
    #7 0x564dc0799c24 in _start (/home/ivan/d/nasm/nasm+0x2e5c24)

Direct leak of 10 byte(s) in 10 object(s) allocated from:
    #0 0x7f3031ef0867 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
    #1 0x564dc07a2f6c in nasm_malloc nasmlib/alloc.c:55
    #2 0x564dc07f64f9 in detoken asm/preproc.c:2029
    #3 0x564dc0828a62 in pp_getline asm/preproc.c:7835
    #4 0x564dc0797f3e in main asm/nasm.c:654
    #5 0x7f3031608d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #6 0x7f3031608e3f in __libc_start_main_impl ../csu/libc-start.c:392
    #7 0x564dc0799c24 in _start (/home/ivan/d/nasm/nasm+0x2e5c24)

This is reproducible on tests that do preprocessing for example weirdpaste
test.

The problem is caused by the fact that the line returned by pp_getline
isn't freed in main function.
  • Loading branch information
sorokin committed Feb 26, 2023
1 parent a916e41 commit cc169e6
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion asm/nasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -682,7 +682,7 @@ int main(int argc, char **argv)

/* Skip blank lines if we will need a %line anyway */
if (linnum == -1 && !line[0])
continue;
goto done;

if (linnum != where.lineno) {
fprintf(out, "%%line %"PRId32"%+"PRId32" %s\n",
Expand All @@ -692,6 +692,9 @@ int main(int argc, char **argv)

fputs(line, out);
fputc('\n', out);

done:
nasm_free(line);
}

nasm_free(quoted_file_name);
Expand Down

0 comments on commit cc169e6

Please sign in to comment.