From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#17239: 24.3.50; competion error (cl-assertion-failed (string-prefix-p uprefix ustring)) Date: Sun, 04 May 2014 21:54:26 -0400 Message-ID: References: <871tx4qlwq.fsf@yahoo.fr> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1399413923 28467 80.91.229.3 (6 May 2014 22:05:23 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 6 May 2014 22:05:23 +0000 (UTC) Cc: 17239@debbugs.gnu.org To: Nicolas Richard Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed May 07 00:05:16 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1WhnSx-0004TT-JT for geb-bug-gnu-emacs@m.gmane.org; Wed, 07 May 2014 00:03:59 +0200 Original-Received: from localhost ([::1]:55155 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wh87h-0004XF-FD for geb-bug-gnu-emacs@m.gmane.org; Sun, 04 May 2014 21:55:17 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:53858) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wh87Z-0004W9-6e for bug-gnu-emacs@gnu.org; Sun, 04 May 2014 21:55:14 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Wh87S-00049S-Kd for bug-gnu-emacs@gnu.org; Sun, 04 May 2014 21:55:09 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:33767) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wh87S-00047t-HE for bug-gnu-emacs@gnu.org; Sun, 04 May 2014 21:55:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1Wh87R-0007eu-PB for bug-gnu-emacs@gnu.org; Sun, 04 May 2014 21:55:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 05 May 2014 01:55:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 17239 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 17239-submit@debbugs.gnu.org id=B17239.139925487529393 (code B ref 17239); Mon, 05 May 2014 01:55:01 +0000 Original-Received: (at 17239) by debbugs.gnu.org; 5 May 2014 01:54:35 +0000 Original-Received: from localhost ([127.0.0.1]:51118 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Wh870-0007e0-2x for submit@debbugs.gnu.org; Sun, 04 May 2014 21:54:34 -0400 Original-Received: from ironport2-out.teksavvy.com ([206.248.154.181]:33024) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Wh86y-0007dk-3y for 17239@debbugs.gnu.org; Sun, 04 May 2014 21:54:32 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArUGAIDvNVNLd/4Y/2dsb2JhbABZgwaDSsA9gRcXdIIlAQEBAQIBViMFCws0EhQYDSQTh3EI0hkXjikBAU8HhDgEqRmBaoFxgVshgTU X-IPAS-Result: ArUGAIDvNVNLd/4Y/2dsb2JhbABZgwaDSsA9gRcXdIIlAQEBAQIBViMFCws0EhQYDSQTh3EI0hkXjikBAU8HhDgEqRmBaoFxgVshgTU X-IronPort-AV: E=Sophos;i="4.97,753,1389762000"; d="scan'208";a="61500690" Original-Received: from 75-119-254-24.dsl.teksavvy.com (HELO ceviche.home) ([75.119.254.24]) by ironport2-out.teksavvy.com with ESMTP/TLS/ADH-AES256-SHA; 04 May 2014 21:54:26 -0400 Original-Received: by ceviche.home (Postfix, from userid 20848) id 33FCB66094; Sun, 4 May 2014 21:54:26 -0400 (EDT) In-Reply-To: <871tx4qlwq.fsf@yahoo.fr> (Nicolas Richard's message of "Fri, 11 Apr 2014 11:02:13 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:88674 Archived-At: > C-x C-f > / C-b TAB ;; hit tab between the last two slashes. > => error. > Debugger entered--Lisp error: (cl-assertion-failed (string-prefix-p uprefix ustring)) Thanks. I installed the patch below which fixes the most glaring problem (the assertion failure). The resulting behavior is not great, but it's not really clear what we should do anyway. Stefan === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2014-05-03 08:47:50 +0000 +++ lisp/ChangeLog 2014-05-05 01:44:49 +0000 @@ -1,3 +1,8 @@ +2014-05-05 Stefan Monnier + + * minibuffer.el (completion-table-with-quoting) : + Make sure the new point we return is within the new string (bug#17239). + 2014-05-03 Eli Zaretskii * mail/rmailsum.el (rmail-new-summary-1): Fix a typo in a comment. === modified file 'lisp/minibuffer.el' --- lisp/minibuffer.el 2014-05-01 23:55:25 +0000 +++ lisp/minibuffer.el 2014-05-05 01:24:34 +0000 @@ -519,11 +519,35 @@ completions)) ((eq action 'completion--unquote) - (let ((ustring (funcall unquote string)) - (uprefix (funcall unquote (substring string 0 pred)))) - ;; We presume (more or less) that `concat' and `unquote' commute. - (cl-assert (string-prefix-p uprefix ustring)) - (list ustring table (length uprefix) + ;; PRED is really a POINT in STRING. + ;; We should return a new set (STRING TABLE POINT REQUOTE) + ;; where STRING is a new (unquoted) STRING to match against the new TABLE + ;; using a new POINT inside it, and REQUOTE is a requoting function which + ;; should reverse the unquoting, (i.e. it receives the completion result + ;; of using the new TABLE and should turn it into the corresponding + ;; quoted result). + (let* ((qpos pred) + (ustring (funcall unquote string)) + (uprefix (funcall unquote (substring string 0 qpos))) + ;; FIXME: we really should pass `qpos' to `unuote' and have that + ;; function give us the corresponding `uqpos'. But for now we + ;; presume (more or less) that `concat' and `unquote' commute. + (uqpos (if (string-prefix-p uprefix ustring) + ;; Yay!! They do seem to commute! + (length uprefix) + ;; They don't commute this time! :-( + ;; Maybe qpos is in some text that disappears in the + ;; ustring (bug#17239). Let's try a second chance guess. + (let ((usuffix (funcall unquote (substring string qpos)))) + (if (string-suffix-p usuffix ustring) + ;; Yay!! They still "commute" in a sense! + (- (length ustring) (length usuffix)) + ;; Still no luck! Let's just choose *some* position + ;; within ustring. + (/ (+ (min (length uprefix) (length ustring)) + (max (- (length ustring) (length usuffix)) 0)) + 2)))))) + (list ustring table uqpos (lambda (unquoted-result op) (pcase op (1 ;;try @@ -853,6 +877,7 @@ (setq string (pop new)) (setq table (pop new)) (setq point (pop new)) + (cl-assert (<= point (length string))) (pop new)))) (result (completion--some (lambda (style)