From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Harald =?UTF-8?Q?J=C3=B6rg?= Newsgroups: gmane.emacs.bugs Subject: bug#16368: [PATCH] cperl-mode: don't freeze over a cool regexp Date: Wed, 2 Sep 2020 22:06:40 +0200 Message-ID: References: <87iotxq4oy.fsf@xvii.vinc17.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------8162899F26987C37CC20DE14" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="8909"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 To: 16368@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Sep 02 22:07:09 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kDZ2C-0002En-Ss for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 02 Sep 2020 22:07:08 +0200 Original-Received: from localhost ([::1]:41472 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kDZ2B-0004lJ-U8 for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 02 Sep 2020 16:07:07 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:59088) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kDZ26-0004jh-FK for bug-gnu-emacs@gnu.org; Wed, 02 Sep 2020 16:07:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:49198) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kDZ26-0006bx-5W for bug-gnu-emacs@gnu.org; Wed, 02 Sep 2020 16:07:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kDZ25-0008Kv-Pq for bug-gnu-emacs@gnu.org; Wed, 02 Sep 2020 16:07:01 -0400 X-Loop: help-debbugs@gnu.org In-Reply-To: <87iotxq4oy.fsf@xvii.vinc17.org> Resent-From: Harald =?UTF-8?Q?J=C3=B6rg?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 02 Sep 2020 20:07:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 16368 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed Original-Received: via spool by 16368-submit@debbugs.gnu.org id=B16368.159907721232031 (code B ref 16368); Wed, 02 Sep 2020 20:07:01 +0000 Original-Received: (at 16368) by debbugs.gnu.org; 2 Sep 2020 20:06:52 +0000 Original-Received: from localhost ([127.0.0.1]:60744 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kDZ1w-0008KZ-DG for submit@debbugs.gnu.org; Wed, 02 Sep 2020 16:06:52 -0400 Original-Received: from mout02.posteo.de ([185.67.36.66]:55239) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kDZ1s-0008KK-6s for 16368@debbugs.gnu.org; Wed, 02 Sep 2020 16:06:51 -0400 Original-Received: from submission (posteo.de [89.146.220.130]) by mout02.posteo.de (Postfix) with ESMTPS id B6CC92400FE for <16368@debbugs.gnu.org>; Wed, 2 Sep 2020 22:06:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.de; s=2017; t=1599077201; bh=McpbLhPehdfH5RFimYeK67RDGJldaBMAwgdO0yu36b4=; h=To:From:Subject:Autocrypt:Date:From; b=Oiq3bfjvcul+Pk8UmHwmK79FgSxWUtPGGIvkTIifzXfOxRE+Kr1jWIVlWmUNu0jbx jh72a+KhEcomqv4A+ihe9CPcrQHscHxVjTOay/khYafzXJFKtBPH1fIVoOEHG82Ejj soWD3FvRoXiTKn/ep6bi9b6qks16Nc2g8FqFWfakXfiudfuFWjxj3tnmHPXFxDnOhw e5Sm8JgMy4i6+xfV7EovyDgdeqdjTSkuzV7Krxc4slZFgbd8nRHgzqqRd5r4oWYSkQ oZ8L4vGDCVgP1F7XME663AxWsqh3pZYtem8pBxcuXie3NxSJeZiLJINU5qWDhd+1kH 5HgTJwEKhJzhw== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4BhZhd15x2z9rxk for <16368@debbugs.gnu.org>; Wed, 2 Sep 2020 22:06:40 +0200 (CEST) Autocrypt: addr=haj@posteo.de; keydata= mQINBF0DVrIBEAC7TRlIilBg/5Dx7R2rV4FBDEavbyMT2cS2wWyksh7JA8e17LNmTdakf+Bm u6C2m6+frolteYRlkreoyAg0fj/5tDw/s5dJDw3tM0b+m/pj2HcwTSRpQSEy5lBiCg11E6Mt F9UngCfkGtJzu8PBWXc1RDQVBwRn5MZbpMZZatE8NOq9AA3Yg6sY11Ez3xIvYU2R7a4OSxmc RJV2+dhdQ4oOTBIGQ2urQSU81kyRtkx+/Yh8WefMrk9nF3nzYziLS53euCAXyzklwYmD6Li3 XSu7wYp5fISky9DK6DPFK7h4RXEL4GFAhy31ehrVnNTcGRohM1Dm9BV9dwXkwlaeT3q0X+nE SXVqPDHtv748bXNIg2WVCZ0WgShcA46XVlSE9Fm+w0HI/1m1L4BaMmQ7gyK5dEchbhxohkk0 AqC3hEJ4ULRidrsCoCWGMFKiOIb9rjeC00vhrUkVJDkPWEGLXjhnRQykb6cESko0rPrSDLqX 9YqaNQ6KO9Un6uogE7YnXYg35EXJ8ORdX257IbXNbFVpgM8FFsl48WV3Pl9WNdADhnnOrz3O wzyK58i/BTsnjVX8ghbWkQcPQ2Kprt+4YR2trEi7TM5Uqzzrg0vp7Oe/9KZBxdxCE67thV7h ElW3CHb4q6o31b4cFmLbtFesSy+hnUU4UymgHgi/hvhxioBxIQARAQABtBxIYXJhbGQgSsO2 cmcgPGhhakBwb3N0ZW8uZGU+iQJOBBMBCAA4FiEEIpYEZLQynxF8Q17KN4XzzzqAcpsFAl0D VrICGwMFCwkIBwIGFQgJCgsCBBYCAwECHgECF4AACgkQN Content-Language: en-US X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:186956 Archived-At: This is a multi-part message in MIME format. --------------8162899F26987C37CC20DE14 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit That bug exists since 14 years, but only surfaces if the regexp has a closing brace in the wrong place (two characters before an unfinished group starts). The reason is that `cperl-forward-group-in-re' failed to report unbalanced parentheses: In the function, the error was too narrowly localized and gets lost before returning. Patch attached, including two test cases. -- Cheers, haj --------------8162899F26987C37CC20DE14 Content-Type: text/x-patch; charset=UTF-8; name="0001-2020-09-02-Harald-J-rg-haj-posteo.de.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0001-2020-09-02-Harald-J-rg-haj-posteo.de.patch" =46rom 3e513396340736dd182e5afa562abca5641ef300 Mon Sep 17 00:00:00 2001 From: =3D?UTF-8?q?Harald=3D20J=3DC3=3DB6rg?=3D Date: Wed, 2 Sep 2020 21:47:10 +0200 Subject: [PATCH] =3D?UTF-8?q?2020-09-02=3D20=3D20Harald=3D20J=3DC3=3DB6rg= =3D20=3D20?=3D MIME-Version: 1.0 Content-Type: text/plain; charset=3DUTF-8 Content-Transfer-Encoding: 8bit * lisp/progmodes/cperl-mode.el (cperl-forward-group-in-re): Make sure that an error is reported back to the caller (Bug#16368). * test/lisp/progmodes/cperl-mode-tests.el (cperl-mode-test-bug-16368): Tests for balanced (no error) and unbalanced (caught exception) cases of `cperl-forward-group-in-re'. --- lisp/progmodes/cperl-mode.el | 9 +++++---- test/lisp/progmodes/cperl-mode-tests.el | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 44579cfd38..ac22218318 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -3241,8 +3241,8 @@ cperl-forward-group-in-re Works before syntax recognition is done." ;; Works *before* syntax recognition is done (or st-l (setq st-l (list nil))) ; Avoid overwriting '() - (let (st b reset-st) - (condition-case b + (let (st result reset-st) + (condition-case err (progn (setq st (cperl-cached-syntax-table st-l)) (modify-syntax-entry ?\( "()" st) @@ -3251,7 +3251,8 @@ cperl-forward-group-in-re (set-syntax-table st) (forward-sexp 1)) (error (message - "cperl-forward-group-in-re: error %s" b))) + "cperl-forward-group-in-re: error %s" err) + (setq result err))) ;; now restore the initial state (if st (progn @@ -3259,7 +3260,7 @@ cperl-forward-group-in-re (modify-syntax-entry ?\) "." st))) (if reset-st (set-syntax-table reset-st)) - b)) + result)) =20 =20 (defvar font-lock-string-face) diff --git a/test/lisp/progmodes/cperl-mode-tests.el b/test/lisp/progmode= s/cperl-mode-tests.el index be8b42d99a..3a49b91ec2 100644 --- a/test/lisp/progmodes/cperl-mode-tests.el +++ b/test/lisp/progmodes/cperl-mode-tests.el @@ -48,4 +48,25 @@ cperl-mode-test-bug-42168 (let ((code "{ $a- / $b } # /")) (should (equal (nth 8 (cperl-test-ppss code "/")) 7)))) =20 +(ert-deftest cperl-mode-test-bug-16368 () + "Verify that `cperl-forward-group-in-re' doesn't hide errors." + (require 'cperl-mode) + (let ((code "/(\\d{4})(?{2}/;") ; the regex from the bug report + (result)) + (with-temp-buffer + (insert code) + (goto-char 9) + (setq result (cperl-forward-group-in-re)) + (should (equal (car result) 'scan-error)) + (should (equal (nth 1 result) "Unbalanced parentheses")) + (should (=3D (point) 9)))) ; point remains unchanged on err= or + (let ((code "/(\\d{4})(?{2})/;") ; here all parens are balanced + (result)) + (with-temp-buffer + (insert code) + (goto-char 9) + (setq result (cperl-forward-group-in-re)) + (should (equal result nil)) + (should (=3D (point) 15))))) ; point has skipped the group + ;;; cperl-mode-tests.el ends here --=20 2.20.1 --------------8162899F26987C37CC20DE14--