GNU bug report logs -
#34100
26.1; Incomplete ? and ?? handling in rx
Previous Next
Reported by: Mattias Engdegård <mattiase <at> acm.org>
Date: Wed, 16 Jan 2019 11:41:01 UTC
Severity: normal
Found in version 26.1
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Fri, 01 Feb 2019 11:44:20 +0200
with message-id <83va23yhaj.fsf <at> gnu.org>
and subject line Re: bug#34100: Acknowledgement (26.1; Incomplete ? and ?? handling in rx)
has caused the debbugs.gnu.org bug report #34100,
regarding 26.1; Incomplete ? and ?? handling in rx
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
34100: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=34100
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
In rx, the ? and ?? operators can be written verbatim as ? and ?? (space and ? character), or by using symbols whose leading character needs to be escaped, \? and \?? respectively. The names come from Olin Shivers's SRE, but ? is not a special character in Scheme syntax, hence the character syntax hack.
However, the symbols only partially work:
(rx (\? "x") (\?? "y")) --> "x?y?" ; expected "x?y??"
(rx (minimal-match (\? "x"))) --> "x??" ; expected "x?"
While it could be argued that only the character-based syntax should be used, the fact is that the symbols are accepted and seem to work, just in a subtly broken way.
The documentation is also not clear on this point, and a programmer knowing the elisp syntax might very well assume that the symbols are the ones to use.
Suggested fix:
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index a39fe55c32..8b4551d0d3 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -733,8 +733,8 @@
is non-nil."
(rx-check form)
(setq form (rx-trans-forms form))
- (let ((suffix (cond ((memq (car form) '(* + ?\s)) "")
- ((memq (car form) '(*? +? ??)) "?")
+ (let ((suffix (cond ((memq (car form) '(* + \? ?\s)) "")
+ ((memq (car form) '(*? +? \?? ??)) "?")
(rx-greedy-flag "")
(t "?")))
(op (cond ((memq (car form) '(* *? 0+ zero-or-more)) "*")
[Message part 3 (message/rfc822, inline)]
> From: Michael Heerdegen <michael_heerdegen <at> web.de>
> Date: Mon, 28 Jan 2019 16:53:28 +0100
> Cc: 34100 <at> debbugs.gnu.org
>
> Mattias Engdegård <mattiase <at> acm.org> writes:
>
> > Anything more I can do? I thought this one would be rather
> > straightforward. I do understand that there are more pressing
> > matters.
>
> I guess you just have to be patient until someone has a look. That can
> sometimes take some time, there are a lot of open bug reports...
>
> For me what you suggest looks like a good idea btw.
Sorry for the long delay, Mattias. I've now pushed your changes to
the master branch, and I'm marking this bug done.
Thanks.
This bug report was last modified 6 years and 173 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.