Date: Sat, 1 Jul 2000 15:13:32 -0400 (EDT) Message-Id: <200007011913.PAA16189@indy.delorie.com> From: Eli Zaretskii To: jeffw AT darwin DOT sfbr DOT org CC: djgpp AT delorie DOT com In-reply-to: <200007011741.MAA07347@darwin.sfbr.org> (message from Jeff T Williams on Sat, 1 Jul 2000 12:46:45 -0600) Subject: Re: ANNOUNCE: DJGPP ports of many packages recompiled References: <200007011741 DOT MAA07347 AT darwin DOT sfbr DOT org> Reply-To: djgpp AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk > From: Jeff T Williams > Date: Sat, 1 Jul 2000 12:46:45 -0600 > > I didn't realize that `/bcurrie/docs' was also in my INFOPATH. So, when `info' > grabs all the `dir' files in INFOPATH it ends up with essentially two copies > of the stock djgpp 2.03 `dir'. For some reason this causes the crash when I > type `info find'. Okay, this is a known bug in all versions of Texinfo including the latest v4.0: if there are several versions of DIR, and some kind of trouble happens while Info searches for files, the browser crashes. The same happens if you have DIR and DIR.gz, and the former is empty or otherwise corrupted. The bug is complicated, but in a nutshell, Info becomes confused by several copies of DIR and eventually free's the storage used for the special node where it keeps all the DIR files it finds along INFOPATH concatenated together. It then tries to use the info in the DIR node, with understandably disastrous consequences. This will be corrected in a future release of Texinfo. I sent patches to the maintainer a few months ago, reproduced below, that supply a short-term band-aid for the bug. The real solution will probably have to be more radical. If you can download the sources and rebuild them with the patch attached below, please see if it prevents Info from crashing. 2000-03-21 Eli Zaretskii * info/nodes.c (info_find_file_internal): If file_buffer has its CannotGC flag set, treat it as a DIR node. --- info/nodes.c~0 Sun Aug 15 13:18:08 1999 +++ info/nodes.c Tue Mar 21 19:17:14 2000 @@ -232,7 +232,11 @@ info_find_file_internal (filename, get_t /* This file is loaded. If the filename that we want is specifically "dir", then simply return the file buffer. */ - if (is_dir_name (filename_non_directory (filename))) + if (is_dir_name (filename_non_directory (filename)) + /* This additional clause makes sure that we don't miss + a DIR node just because it has some funny file name, + like "dir.info", scribbled on it. */ + || (file_buffer->flags & N_CannotGC) != 0) return file_buffer; #if defined (HANDLE_MAN_PAGES)