You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
PyConfig_Clear() doesn't clear _orig_argv member (_PyWideStringList_Copy breaks asan builds) #85125
changed the title [-]_PyWideStringList_Copy breaks asan builds[/-][+]PyConfig_Clear() doesn't clear _orig_argv member (_PyWideStringList_Copy breaks asan builds)[/+]on Jun 15, 2020
changed the title [-]_PyWideStringList_Copy breaks asan builds[/-][+]PyConfig_Clear() doesn't clear _orig_argv member (_PyWideStringList_Copy breaks asan builds)[/+]on Jun 15, 2020
I'm surprised that libasan doesn't allow to run an application which leaks memory :-) I understand that it's the intented behavior. At least in this case, it was a real bug and hopefully it was trivial to fix it!
Activity
tiran commentedon Jun 12, 2020
It's not possible to build Python with address sanitizer and memory leak checker asan.
=================================================================
==1585722==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 48 byte(s) in 1 object(s) allocated from:
#0 0x7fa404ea9667 in __interceptor_malloc (/lib64/libasan.so.6+0xb0667)
#1 0x9ab398 in _PyWideStringList_Copy Python/initconfig.c:315
#2 0x9b48bd in _PyConfig_Copy Python/initconfig.c:857
#3 0xa20b4c in _PyInterpreterState_SetConfig Python/pystate.c:1834
#4 0xa07a14 in pycore_create_interpreter Python/pylifecycle.c:554
#5 0xa07a14 in pyinit_config Python/pylifecycle.c:759
#6 0xa07a14 in pyinit_core Python/pylifecycle.c:926
#7 0xa09b17 in Py_InitializeFromConfig Python/pylifecycle.c:1136
#8 0x4766c2 in pymain_init Modules/main.c:66
#9 0x47bd12 in pymain_main Modules/main.c:653
#10 0x47bd12 in Py_BytesMain Modules/main.c:686
#11 0x7fa404173041 in __libc_start_main (/lib64/libc.so.6+0x27041)
Direct leak of 48 byte(s) in 1 object(s) allocated from:
#0 0x7fa404ea9667 in __interceptor_malloc (/lib64/libasan.so.6+0xb0667)
#1 0x9ab398 in _PyWideStringList_Copy Python/initconfig.c:315
#2 0x9b8ee8 in PyConfig_Read Python/initconfig.c:2506
#3 0xa07282 in pyinit_core Python/pylifecycle.c:920
#4 0xa09b17 in Py_InitializeFromConfig Python/pylifecycle.c:1136
#5 0x4766c2 in pymain_init Modules/main.c:66
#6 0x47bd12 in pymain_main Modules/main.c:653
#7 0x47bd12 in Py_BytesMain Modules/main.c:686
#8 0x7fa404173041 in __libc_start_main (/lib64/libc.so.6+0x27041)
Indirect leak of 200 byte(s) in 6 object(s) allocated from:
#0 0x7fa404ea9667 in __interceptor_malloc (/lib64/libasan.so.6+0xb0667)
#1 0x63351c in PyMem_RawMalloc Objects/obmalloc.c:572
#2 0x63351c in _PyMem_RawWcsdup Objects/obmalloc.c:644
#3 0x9ab457 in _PyWideStringList_Copy Python/initconfig.c:321
#4 0x9b48bd in _PyConfig_Copy Python/initconfig.c:857
#5 0xa20b4c in _PyInterpreterState_SetConfig Python/pystate.c:1834
#6 0xa07a14 in pycore_create_interpreter Python/pylifecycle.c:554
#7 0xa07a14 in pyinit_config Python/pylifecycle.c:759
#8 0xa07a14 in pyinit_core Python/pylifecycle.c:926
#9 0xa09b17 in Py_InitializeFromConfig Python/pylifecycle.c:1136
#10 0x4766c2 in pymain_init Modules/main.c:66
#11 0x47bd12 in pymain_main Modules/main.c:653
#12 0x47bd12 in Py_BytesMain Modules/main.c:686
#13 0x7fa404173041 in __libc_start_main (/lib64/libc.so.6+0x27041)
Indirect leak of 200 byte(s) in 6 object(s) allocated from:
#0 0x7fa404ea9667 in __interceptor_malloc (/lib64/libasan.so.6+0xb0667)
#1 0x63351c in PyMem_RawMalloc Objects/obmalloc.c:572
#2 0x63351c in _PyMem_RawWcsdup Objects/obmalloc.c:644
#3 0x9ab457 in _PyWideStringList_Copy Python/initconfig.c:321
#4 0x9b8ee8 in PyConfig_Read Python/initconfig.c:2506
#5 0xa07282 in pyinit_core Python/pylifecycle.c:920
#6 0xa09b17 in Py_InitializeFromConfig Python/pylifecycle.c:1136
#7 0x4766c2 in pymain_init Modules/main.c:66
#8 0x47bd12 in pymain_main Modules/main.c:653
#9 0x47bd12 in Py_BytesMain Modules/main.c:686
#10 0x7fa404173041 in __libc_start_main (/lib64/libc.so.6+0x27041)
Workaround:
$ cat Misc/asan-suppression.txt leak:_PyWideStringList_Copy $ LSAN_OPTIONS="suppressions=Misc/asan-suppression.txt" makevstinner commentedon Jun 15, 2020
Regression introduced by commit e81f6e6 in bpo-40910. I wrote PR 20886 to fix it.
[-]_PyWideStringList_Copy breaks asan builds[/-][+]PyConfig_Clear() doesn't clear _orig_argv member (_PyWideStringList_Copy breaks asan builds)[/+][-]_PyWideStringList_Copy breaks asan builds[/-][+]PyConfig_Clear() doesn't clear _orig_argv member (_PyWideStringList_Copy breaks asan builds)[/+]vstinner commentedon Jun 15, 2020
New changeset e2d47a0 by Victor Stinner in branch 'master':
bpo-40910: PyConfig_Clear() clears _orig_argv (GH-20886)
e2d47a0
tiran commentedon Jun 15, 2020
Works for me, thanks for the quick fix!
miss-islington commentedon Jun 15, 2020
New changeset bab0833 by Miss Islington (bot) in branch '3.9':
bpo-40910: PyConfig_Clear() clears _orig_argv (GH-20886)
bab0833
vstinner commentedon Jun 15, 2020
I'm surprised that libasan doesn't allow to run an application which leaks memory :-) I understand that it's the intented behavior. At least in this case, it was a real bug and hopefully it was trivial to fix it!