Guido Trentalancia <[email protected]> writes: > Hello Simon !
Hi! I re-added help-libidn on the cc list, please keep it so that others can learn from our discussion. > Here is the output with -g added: .. > ==31295== Invalid read of size 4 > ==31295== at 0x402E46: idna_to_ascii_4z (idna.c:516) ... > ==31295== Address 0x51ca8d8 is 8 bytes inside a block of size 10 > alloc'd > ==31295== at 0x4C282CD: malloc (vg_replace_malloc.c:236) > ==31295== by 0x402F90: idna_to_ascii_4z (idna.c:528) ... > Using only -g in the CFLAGS and dropping all the rest (-O3 and > processor-specific optimisations) produces no errors. > > The problem is triggered by -O3, -O2 but not -O1. That offending line contains a strlen. I think this is just a matter of the compiler chosing a (too) optimized 'strlen' implementation that reads in chunks of 4 bytes even when the buffer is shorter. In this case, it reads 4 + 4 + 4 bytes but the buffer is only 10 bytes It could be a compiler bug, but I suspect it is intentional to read even beyond the end of a buffer because it will be faster. Thus, unless it is a compiler bug, you need to compile with the default compiler flags or specify --disable-valgrind-tests when building libidn. I hope this answers everything. /Simon _______________________________________________ Help-libidn mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-libidn
