My guess that the vm search bug is due to a modification of the
isearch package was right. Here is the patch that fixes it.

Apply it with 

	patch < vm-search-patch2 

in the vm directory and  byte compile the file vm-search.el. Then tye

	rm vm.elc
	make VM


This should do it.

	Guido

-------------------------- vm-search-patch2 --------------------------
*** vm-search.el.orig	Wed Jan 27 15:36:21 1993
--- vm-search.el	Wed Jan 27 18:07:58 1993
***************
*** 80,88 ****
  				(set-window-hscroll (selected-window) 0))
  		       (other-window 1))
  		     (goto-char found-point)))))
! 	 (let ((char (if quit-flag
  			 ?\C-g
! 		       (read-char))))
  	   (setq quit-flag nil adjusted nil)
  	   ;; Meta character means exit search.
  	   (cond ((and (>= char 128)
--- 80,90 ----
  				(set-window-hscroll (selected-window) 0))
  		       (other-window 1))
  		     (goto-char found-point)))))
! 	 (let* ((char (if quit-flag
  			 ?\C-g
! 		       (read-char)))
! 		(isearch-cmd (lookup-key isearch-mode-map char)))
! 
  	   (setq quit-flag nil adjusted nil)
  	   ;; Meta character means exit search.
  	   (cond ((and (>= char 128)
***************
*** 89,101 ****
  		       search-exit-option)
  		  (setq unread-command-event (character-to-event char))
  		  (throw 'search-done t))
! 		 ((eq char search-exit-char)
  		  ;; Esc means exit search normally.
  		  ;; Except, if first thing typed, it means do nonincremental
  		  (if (= 0 (length search-string))
  		      (vm-nonincremental-search forward regexp))
  		  (throw 'search-done t))
! 		 ((= char ?\C-g)
  		  ;; ^G means the user tried to quit.
  		  (ding)
  		  (discard-input)
--- 91,103 ----
  		       search-exit-option)
  		  (setq unread-command-event (character-to-event char))
  		  (throw 'search-done t))
! 		 ((eq isearch-cmd 'isearch-exit)
  		  ;; Esc means exit search normally.
  		  ;; Except, if first thing typed, it means do nonincremental
  		  (if (= 0 (length search-string))
  		      (vm-nonincremental-search forward regexp))
  		  (throw 'search-done t))
! 		 ((eq isearch-cmd 'isearch-abort)
  		  ;; ^G means the user tried to quit.
  		  (ding)
  		  (discard-input)
***************
*** 108,116 ****
  		    ;; If search is failing, rub out until it is once more
  		    ;;  successful.
  		    (while (not success) (vm-isearch-pop))))
! 		 ((or (eq char search-repeat-char)
! 		      (eq char search-reverse-char))
! 		  (if (eq forward (eq char search-repeat-char))
  		      ;; C-s in forward or C-r in reverse.
  		      (if (equal search-string "")
  			  ;; If search string is empty, use last one.
--- 110,120 ----
  		    ;; If search is failing, rub out until it is once more
  		    ;;  successful.
  		    (while (not success) (vm-isearch-pop))))
! 
! 		 ((or (eq isearch-cmd 'isearch-repeat-forward)
! 		      (eq isearch-cmd 'isearch-repeat-backward))
! 		  (if (eq forward  
! 			   (eq isearch-cmd 'isearch-repeat-forward))
  		      ;; C-s in forward or C-r in reverse.
  		      (if (equal search-string "")
  			  ;; If search string is empty, use last one.
***************
*** 122,128 ****
  					   search-string ""))
  			;; If already have what to search for, repeat it.
  			(or success
! 			    (progn (goto-char (if forward (point-min) (point-max)))
  				   (setq wrapped t))))
  		    ;; C-s in reverse or C-r in forward, change direction.
  		    (setq forward (not forward)))
--- 126,133 ----
  					   search-string ""))
  			;; If already have what to search for, repeat it.
  			(or success
! 			    (progn (goto-char (if forward (point-min) 
! 						(point-max)))
  				   (setq wrapped t))))
  		    ;; C-s in reverse or C-r in forward, change direction.
  		    (setq forward (not forward)))
***************
*** 131,137 ****
  		  (or (equal search-string "")
  		      (vm-isearch-search))
  		  (vm-isearch-push-state))
! 		 ((= char search-delete-char)
  		  ;; Rubout means discard last input item and move point
  		  ;; back.  If buffer is empty, just beep.
  		  (if (null (cdr cmds))
--- 136,142 ----
  		  (or (equal search-string "")
  		      (vm-isearch-search))
  		  (vm-isearch-push-state))
! 		 ((eq isearch-cmd 'isearch-delete-char)
  		  ;; Rubout means discard last input item and move point
  		  ;; back.  If buffer is empty, just beep.
  		  (if (null (cdr cmds))
***************
*** 138,145 ****
  		      (ding)
  		    (vm-isearch-pop)))
  		 (t
! 		  (cond ((or (eq char search-yank-word-char)
! 			     (eq char search-yank-line-char))
  			 ;; ^W means gobble next word from buffer.
  			 ;; ^Y means gobble rest of line from buffer.
  			 (let ((word (save-excursion
--- 143,150 ----
  		      (ding)
  		    (vm-isearch-pop)))
  		 (t
! 		  (cond ((or (eq isearch-cmd 'isearch-yank-word)
! 			     (eq isearch-cmd 'isearch-yank-line))
  			 ;; ^W means gobble next word from buffer.
  			 ;; ^Y means gobble rest of line from buffer.
  			 (let ((word (save-excursion
***************
*** 148,154 ****
  				       (buffer-substring
  					(point)
  					(save-excursion
! 					  (if (eq char search-yank-line-char)
  					      (end-of-line)
  					    (forward-word 1))
  					  (point))))))
--- 153,159 ----
  				       (buffer-substring
  					(point)
  					(save-excursion
! 					  (if (eq isearch-cmd 'isearch-yank-line)
  					      (end-of-line)
  					    (forward-word 1))
  					  (point))))))
***************
*** 160,166 ****
  			 ;; Any other control char =>
  			 ;;  unread it and exit the search normally.
  			 ((and search-exit-option
! 			       (/= char search-quote-char)
  			       (or (= char ?\177)
  				   (and (< char ? ) (/= char ?\t) (/= char ?\r))))
  			  (setq unread-command-event (character-to-event char))
--- 165,171 ----
  			 ;; Any other control char =>
  			 ;;  unread it and exit the search normally.
  			 ((and search-exit-option
! 			       (not (eq isearch-cmd 'isearch-quote-char))
  			       (or (= char ?\177)
  				   (and (< char ? ) (/= char ?\t) (/= char ?\r))))
  			  (setq unread-command-event (character-to-event char))
***************
*** 168,174 ****
  			 (t
  			  ;; Any other character => add it to the
  			  ;;  search string and search.
! 			  (cond ((= char search-quote-char)
  				 (setq char (read-quoted-char
  					     (vm-isearch-message t))))
  				((= char ?\r)
--- 173,179 ----
  			 (t
  			  ;; Any other character => add it to the
  			  ;;  search string and search.
! 			  (cond ((eq isearch-cmd 'isearch-quote-char)
  				 (setq char (read-quoted-char
  					     (vm-isearch-message t))))
  				((= char ?\r)
***************
*** 189,195 ****
  		    ;; Go back to place last successful search started
  		    ;; or to the last ^S/^R (barrier), whichever is nearer.
  		    (and regexp success cmds
! 			 (cond ((memq char '(?* ??))
  				(setq adjusted t)
  				(let ((cs (nth (if forward
  						   5 ; other-end
--- 194,200 ----
  		    ;; Go back to place last successful search started
  		    ;; or to the last ^S/^R (barrier), whichever is nearer.
  		    (and regexp success cmds
! 			 (cond ((eq isearch-cmd 'isearch-*-char)
  				(setq adjusted t)
  				(let ((cs (nth (if forward
  						   5 ; other-end
***************
*** 202,208 ****
  				   (if forward
  				       (max cs barrier)
  				     (min cs barrier)))))
! 			       ((eq char ?\|)
  				(setq adjusted t)
  				(goto-char barrier))))
  		    ;; In reverse regexp search, adding a character at
--- 207,213 ----
  				   (if forward
  				       (max cs barrier)
  				     (min cs barrier)))))
! 			       ((eq isearch-cmd 'isearch-|-char)
  				(setq adjusted t)
  				(goto-char barrier))))
  		    ;; In reverse regexp search, adding a character at
***************
*** 337,348 ****
      (message "%s" message)
      ;; Read 1 char and switch to word search if it is ^W.
      (setq char (read-char))
!     (if (eq char search-yank-word-char)
  	(setq message (if forward "VM Word search: " "VM Word search backward: "))
        ;; Otherwise let that 1 char be part of the search string.
        (setq unread-command-event (character-to-event char)))
      (setq function
! 	  (if (eq char search-yank-word-char)
  	      (if forward 'word-search-forward 'word-search-backward)
  	    (if regexp
  		(if forward 're-search-forward 're-search-backward)
--- 342,353 ----
      (message "%s" message)
      ;; Read 1 char and switch to word search if it is ^W.
      (setq char (read-char))
!     (if (eq (lookup-key isearch-mode-map char) 'isearch-yank-word)
  	(setq message (if forward "VM Word search: " "VM Word search backward: "))
        ;; Otherwise let that 1 char be part of the search string.
        (setq unread-command-event (character-to-event char)))
      (setq function
! 	  (if (eq (lookup-key isearch-mode-map char) 'isearch-yank-word)
  	      (if forward 'word-search-forward 'word-search-backward)
  	    (if regexp
  		(if forward 're-search-forward 're-search-backward)
x-gateway: rodan.UU.NET from bug-lucid-emacs to alt.lucid-emacs.bug; Wed, 27 Jan 1993 18:06:18 EST
Subject: memory error on shutdown (lemacs-19.4)
Date: Tue, 26 Jan 1993 11:54:14 -0500
From: anderson@sapir.cog.jhu.edu
Newsgroups: alt.lucid-emacs.bug