Path: utzoo!utgpu!watmath!uunet!bu-cs!bloom-beacon!tut.cis.ohio-state.edu!BERKELEY.EDU!munson%elm.Berkeley.EDU From: munson%elm.Berkeley.EDU@BERKELEY.EDU (Ethan V. Munson) Newsgroups: gnu.emacs.bug Subject: Possible Bug in store-match-data Message-ID: <8812292130.AA01436@elm.Berkeley.EDU> Date: 29 Dec 88 21:30:23 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 48 I believe I have found a bug in GNU Emacs 18.59.9 in "store-match-data". When you store a match list of the form (nil nil marker1 marker2), a subsequent call to "match-data" returns (nil nil nil nil marker1 marker2). I have inspected the code in search.c and believe that the bug is the result of a missing call to Fcdr. A proposed fixed version of the function definition follows. Ethan Munson munson@renoir.Berkeley.EDU ...ucbvax!renoir!munson --------------------------------- DEFUN ("store-match-data", Fstore_match_data, Sstore_match_data, 1, 1, 0, "Set internal data on last search match from elements of LIST.\n\ LIST should have been created by calling match-data previously.") (list) register Lisp_Object list; { register int i; register Lisp_Object marker; if (!CONSP (list) && !NULL (list)) list = wrong_type_argument (Qconsp, list, 0); for (i = 0; i < RE_NREGS; i++) { marker = Fcar (list); if (NULL (marker)) { search_regs.start[i] = -1; list = Fcdr (list); /* added statement */ } else { CHECK_MARKER (marker, 0); search_regs.start[i] = marker_position (marker); list = Fcdr (list); marker = Fcar (list); CHECK_MARKER (marker, 0); search_regs.end[i] = marker_position (marker); } list = Fcdr (list); } return Qnil; }