On Mon, Mar 27, 2006 at 01:40:56PM -0600, Karl Berry wrote: > I think that the correct solution is to replace the final default else > with the conditional test: > > } else if (elt[0] != 0) { > /* empty components can appear in TEXMFCNF; we skip over these */ > > Sounds reasonable to me. Thomas, Olaf?
Oops. When actually testing, compiling and then running the code, I get lots of error messages like: *** glibc detected *** double free or corruption (!prev): 0x0804d690 *** This next patch does the job correctly. An alternative, simpler, patch follows below, which does not remove the empty path element. --- tetex-bin/texk/kpathsea/expand.c 2006-02-16 10:58:10.000000000 +0000 +++ tetex-bin-test/texk/kpathsea/expand.c 2006-03-28 09:53:24.000000000 +0100 @@ -82,6 +82,7 @@ for (elt = kpse_path_element (path); elt; elt = kpse_path_element (NULL)) { string save_ret = ret; + boolean ret_copied = true; /* We assume that the !! magic is only used on absolute components. Single "." gets special treatment, as does "./" or its equivalent. */ if (kpse_absolute_p (elt, false) || (elt[0] == '!' && elt[1] == '!')) { @@ -91,11 +92,14 @@ #ifndef VMS } else if (elt[0] == '.' && IS_DIR_SEP(elt[1])) { ret = concatn (ret, kpse_dot, elt + 1, ENV_SEP_STRING, NULL); - } else { + } else if (*elt) { ret = concatn (ret, kpse_dot, DIR_SEP_STRING, elt, ENV_SEP_STRING, NULL); #endif + } else { + ret_copied = false; } - free (save_ret); + if (ret_copied) + free (save_ret); } #ifdef MSDOS This one is simpler and does not remove the empty path element. --- tetex-bin/texk/kpathsea/expand.c 2006-02-16 10:58:10.000000000 +0000 +++ tetex-bin-test/texk/kpathsea/expand.c 2006-03-28 10:13:27.000000000 +0100 @@ -84,7 +84,8 @@ string save_ret = ret; /* We assume that the !! magic is only used on absolute components. Single "." gets special treatment, as does "./" or its equivalent. */ - if (kpse_absolute_p (elt, false) || (elt[0] == '!' && elt[1] == '!')) { + if (kpse_absolute_p (elt, false) || (elt[0] == '!' && elt[1] == '!') || + ! *elt) { ret = concat3(ret, elt, ENV_SEP_STRING); } else if (elt[0] == '.' && elt[1] == 0) { ret = concat3 (ret, kpse_dot, ENV_SEP_STRING); Julian -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]