]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/comint.el (comint--common-quoted-suffix): Check string boundary
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 4 Apr 2012 16:06:59 +0000 (12:06 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 4 Apr 2012 16:06:59 +0000 (12:06 -0400)
before comparing.
* lisp/pcomplete.el (pcomplete--common-quoted-suffix): Idem.

Fixes: debbugs:11158
lisp/ChangeLog
lisp/comint.el
lisp/pcomplete.el

index 64177b03c474b41ea20ed8fc563587ccf8e0cf84..bbb4419ee9471ecd86bf364cfca1759d68a74a2a 100644 (file)
@@ -1,3 +1,9 @@
+2012-04-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * comint.el (comint--common-quoted-suffix): Check string boundary
+       before comparing (bug#11158).
+       * pcomplete.el (pcomplete--common-quoted-suffix): Idem.
+
 2012-04-04  Chong Yidong  <cyd@gnu.org>
 
        * minibuffer.el (completion-extra-properties): Doc fix.
index 9306bf8dbb2999b00c10b30c16e2f6f3ed406b37..68fedeb88a9de7c8b9c404a2d7284e6c06a542d2 100644 (file)
@@ -3069,24 +3069,25 @@ Returns t if successful."
 (defun comint--common-quoted-suffix (s1 s2)
   ;; FIXME: Copied in pcomplete.el.
   "Find the common suffix between S1 and S2 where S1 is the expanded S2.
-S1 is expected to be the unquoted and expanded version of S1.
+S1 is expected to be the unquoted and expanded version of S2.
 Returns (PS1 . PS2), i.e. the shortest prefixes of S1 and S2, such that
 S1 = (concat PS1 SS1) and S2 = (concat PS2 SS2) and
 SS1 = (unquote SS2)."
   (let* ((cs (comint--common-suffix s1 s2))
          (ss1 (substring s1 (- (length s1) cs)))
          (qss1 (comint-quote-filename ss1))
-         qc)
+         qc s2b)
     (if (and (not (equal ss1 qss1))
              (setq qc (comint-quote-filename (substring ss1 0 1)))
-             (eq t (compare-strings s2 (- (length s2) cs (length qc) -1)
-                                    (- (length s2) cs -1)
+            (setq s2b (- (length s2) cs (length qc) -1))
+            (>= s2b 0)                 ;bug#11158.
+             (eq t (compare-strings s2 s2b (- (length s2) cs -1)
                                     qc nil nil)))
         ;; The difference found is just that one char is quoted in S2
         ;; but not in S1, keep looking before this difference.
         (comint--common-quoted-suffix
          (substring s1 0 (- (length s1) cs))
-         (substring s2 0 (- (length s2) cs (length qc) -1)))
+         (substring s2 0 s2b))
       (cons (substring s1 0 (- (length s1) cs))
             (substring s2 0 (- (length s2) cs))))))
 
index 2d885a2b40f047c7b0ae68cb6756cf7599f7a797..cad2ffb2a2cd414e5f8d4b2478f4cf46ba758fb8 100644 (file)
@@ -387,24 +387,25 @@ modified to be an empty string, or the desired separation string."
 (defun pcomplete--common-quoted-suffix (s1 s2)
   ;; FIXME: Copied in comint.el.
   "Find the common suffix between S1 and S2 where S1 is the expanded S2.
-S1 is expected to be the unquoted and expanded version of S1.
+S1 is expected to be the unquoted and expanded version of S2.
 Returns (PS1 . PS2), i.e. the shortest prefixes of S1 and S2, such that
 S1 = (concat PS1 SS1) and S2 = (concat PS2 SS2) and
 SS1 = (unquote SS2)."
   (let* ((cs (comint--common-suffix s1 s2))
          (ss1 (substring s1 (- (length s1) cs)))
          (qss1 (pcomplete-quote-argument ss1))
-         qc)
+         qc s2b)
     (if (and (not (equal ss1 qss1))
              (setq qc (pcomplete-quote-argument (substring ss1 0 1)))
-             (eq t (compare-strings s2 (- (length s2) cs (length qc) -1)
-                                    (- (length s2) cs -1)
+            (setq s2b (- (length s2) cs (length qc) -1))
+            (>= s2b 0)                 ;bug#11158.
+             (eq t (compare-strings s2 s2b (- (length s2) cs -1)
                                     qc nil nil)))
         ;; The difference found is just that one char is quoted in S2
         ;; but not in S1, keep looking before this difference.
         (pcomplete--common-quoted-suffix
          (substring s1 0 (- (length s1) cs))
-         (substring s2 0 (- (length s2) cs (length qc) -1)))
+         (substring s2 0 s2b))
       (cons (substring s1 0 (- (length s1) cs))
             (substring s2 0 (- (length s2) cs))))))