# New Ticket Created by Mark Glines # Please include the string: [perl #53072] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=53072 >
Gcc emits the following warnings: ./lua.pmc: In function 'Parrot_Lua_nci_caller': ./lua.pmc:127: warning: passing argument 2 of 'strncmp' from incompatible pointer type ./lua.pmc:128: warning: passing argument 1 of 'string_cstring_free' from incompatible pointer type Looking at the code in question, I'd have to agree. 120 Parrot_Context_info info; 121 Parrot_block_DOD(INTERP); 122 123 if (Parrot_Context_get_info(INTERP, sub_ctx, &info)) { 124 STRING *retval = info.subname; 125 126 /* free the non-constant string, but not the constant one */ 127 if (strncmp("(unknown file)", info.file, 14) < 0) 128 string_cstring_free(info.file); 129 130 Parrot_unblock_DOD(INTERP); 131 RETURN(STRING *retval); The problem is, info.file isn't a char*, its a STRING*. This means 2 things: you can't call strncmp on it directly, and you can't free it like a char* string. Actually, this isn't just a warning. This bug causes crashes, resulting in almost ALL of the lua test failures on my list: Failed Test Stat Wstat Total Fail List of Failed ------------------------------------------------------------------------------- lua/t/alarm.t 2 512 6 2 4 6 lua/t/basic.t 12 3072 54 12 7 13-14 28-29 35 40-42 51 53-54 lua/t/io.t 2 512 41 2 28 35 lua/t/lfs.t 1 256 18 1 15 lua/t/math.t 1 256 32 1 18 lua/t/os.t 2 512 25 2 20 23 lua/t/string.t 3 768 34 3 10-11 25 lua/t/table.t 2 512 18 2 3-4 os.t test 23 is something unrelated. The rest of them are caused by this bug. Glibc aborts with an error that looks like: *** glibc detected *** ./parrot: double free or corruption (out): 0x00002b4aed18ef00 *** I propose just removing this code entirely. The attached patch does so. The GC will clean it up, right? I'm hoping someone familiar with the internals can review this, to make sure I haven't just created a memory leak. Mark
Index: languages/lua/src/pmc/lua.pmc =================================================================== --- languages/lua/src/pmc/lua.pmc (revision 27035) +++ languages/lua/src/pmc/lua.pmc (working copy) @@ -123,10 +123,6 @@ if (Parrot_Context_get_info(INTERP, sub_ctx, &info)) { STRING *retval = info.subname; - /* free the non-constant string, but not the constant one */ - if (strncmp("(unknown file)", info.file, 14) < 0) - string_cstring_free(info.file); - Parrot_unblock_DOD(INTERP); RETURN(STRING *retval); }