unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
@ 2021-08-08 18:01 Alan Mackenzie
  2021-08-08 18:14 ` Lars Ingebrigtsen
  2021-08-21 13:24 ` Lars Ingebrigtsen
  0 siblings, 2 replies; 20+ messages in thread
From: Alan Mackenzie @ 2021-08-08 18:01 UTC (permalink / raw)
  To: 49944; +Cc: Stefan Monnier

Hello, Emacs.

Emacs-28, emacs started with site-start.el and .emacs.

On calling

    (parse-partial-sexp 19 18 nil nil s)

Emacs surely ought to signal an error, since 18 < 19.  It doesn't,
though.  It leaves point at a random position and returns

    (0 nil nil nil nil nil 0 nil nil nil nil)

This is a bug.

-- 
Alan Mackenzie (Nuremberg, Germany).





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-08 18:01 bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT) Alan Mackenzie
@ 2021-08-08 18:14 ` Lars Ingebrigtsen
  2021-08-08 18:51   ` Alan Mackenzie
  2021-08-21 13:24 ` Lars Ingebrigtsen
  1 sibling, 1 reply; 20+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-08 18:14 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: 49944, Stefan Monnier

Alan Mackenzie <acm@muc.de> writes:

> On calling
>
>     (parse-partial-sexp 19 18 nil nil s)

(What's `s' here?)

> Emacs surely ought to signal an error, since 18 < 19.

It's common for Emacs functions that take a region to not care about
whether to is larger than from or not.  The

  validate_region (&from, &to);

function fixes it up.

> It doesn't,
> though.  It leaves point at a random position and returns
>
>     (0 nil nil nil nil nil 0 nil nil nil nil)

For me it leaves point at 19.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-08 18:14 ` Lars Ingebrigtsen
@ 2021-08-08 18:51   ` Alan Mackenzie
  2021-08-09 12:42     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 20+ messages in thread
From: Alan Mackenzie @ 2021-08-08 18:51 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 49944, Stefan Monnier

Hello, Lars.

On Sun, Aug 08, 2021 at 20:14:25 +0200, Lars Ingebrigtsen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > On calling
> >
> >     (parse-partial-sexp 19 18 nil nil s)

> (What's `s' here?)

Sorry, should have said.  It was a syntax state at position 19,
something like:

    (0 nil 8 34 nil nil 0 nil 13 nil nil)

representing a "normal" string starting at position 13.

> > Emacs surely ought to signal an error, since 18 < 19.

> It's common for Emacs functions that take a region to not care about
> whether to is larger than from or not.

parse-partial-sexp doesn't work on a region.  It works with a starting
position and ending position, which are not interchangeable.  For
example, the status s (above) is the status at 19, not at 18.

> The

>   validate_region (&from, &to);

> function fixes it up.

It doesn't fix it up, it messes it up.

> > It doesn't,
> > though.  It leaves point at a random position and returns
> >
> >     (0 nil nil nil nil nil 0 nil nil nil nil)

> For me it leaves point at 19.

I think it may have done that for me, too, though perhaps not every
time.

Getting back on topic, I think there are no legitimate uses for (> start
limit), and every such call is a bug.  It would seem such a call
discards the input state argument, which would be a bug in itself if the
whole thing weren't a bug.

It's obvious to me that Emacs should throw an error in these
circumstances.  You seem to be disagreeing, or at least to be unsure.
One data point is it took me over an hour's time to track it down, time
that could have been better spent if Emacs had thrown an error.

> -- 
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no

-- 
Alan Mackenzie (Nuremberg, Germany).





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-08 18:51   ` Alan Mackenzie
@ 2021-08-09 12:42     ` Lars Ingebrigtsen
  2021-08-09 16:50       ` Alan Mackenzie
  0 siblings, 1 reply; 20+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-09 12:42 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: 49944, Stefan Monnier

Alan Mackenzie <acm@muc.de> writes:

> parse-partial-sexp doesn't work on a region.  It works with a starting
> position and ending position, which are not interchangeable.

Well...  they are interchangeable now, as they are in many functions in
Emacs.

> It's obvious to me that Emacs should throw an error in these
> circumstances.  You seem to be disagreeing, or at least to be unsure.

Making this signal an error wouldn't be backwards-compatible, so I think
that's a no go.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-09 12:42     ` Lars Ingebrigtsen
@ 2021-08-09 16:50       ` Alan Mackenzie
  2021-08-10 13:50         ` Lars Ingebrigtsen
  0 siblings, 1 reply; 20+ messages in thread
From: Alan Mackenzie @ 2021-08-09 16:50 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 49944, Stefan Monnier

Hello, Lars.

On Mon, Aug 09, 2021 at 14:42:21 +0200, Lars Ingebrigtsen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > parse-partial-sexp doesn't work on a region.  It works with a
> > starting position and ending position, which are not
> > interchangeable.

> Well...  they are interchangeable now, as they are in many functions
> in Emacs.

I can't see any use whatsoever for reversing START and LIMIT.  Can you?
I would be extremely surprised if any hacker had _ever_ intentionally
used this "facility".

We definitely have a bug here.  The documentation in the elisp manual
says that the scanning is done "starting at START".  You're saying it's
perfectly OK to start scanning at "LIMIT"?  This violates the doc.

In other words, you're sort of saying that it's the documentation at
fault, not the function.

> > It's obvious to me that Emacs should throw an error in these
> > circumstances.  You seem to be disagreeing, or at least to be
> > unsure.

> Making this signal an error wouldn't be backwards-compatible, so I
> think that's a no go.

Fixing _any_ bug leads to "backwards-incompatibility", that is, if one
is determined to regard buggy behaviour as something to be preserved.

This whole discussion feels a bit surrealistic.  Is it not obvious that
(parse-partial-sexp 19 18) ought to throw an error?

> -- 
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no

-- 
Alan Mackenzie (Nuremberg, Germany).





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-09 16:50       ` Alan Mackenzie
@ 2021-08-10 13:50         ` Lars Ingebrigtsen
  2021-08-10 14:03           ` Eli Zaretskii
  0 siblings, 1 reply; 20+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-10 13:50 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: 49944, Stefan Monnier

Alan Mackenzie <acm@muc.de> writes:

> We definitely have a bug here.  The documentation in the elisp manual
> says that the scanning is done "starting at START".  You're saying it's
> perfectly OK to start scanning at "LIMIT"?  This violates the doc.

This is what all function like this say.  To take patient zero --
narrow-to-region:

---
When calling from Lisp, pass two arguments START and END:
positions (integers or markers) bounding the text that should
remain visible.
---

Nothing here about allowing END to come before START, but it does allow
that, and so do most (all?) similar commands.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-10 13:50         ` Lars Ingebrigtsen
@ 2021-08-10 14:03           ` Eli Zaretskii
  2021-08-10 14:41             ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 20+ messages in thread
From: Eli Zaretskii @ 2021-08-10 14:03 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: acm, monnier, 49944

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Date: Tue, 10 Aug 2021 15:50:49 +0200
> Cc: 49944@debbugs.gnu.org, Stefan Monnier <monnier@iro.umontreal.ca>
> 
> Alan Mackenzie <acm@muc.de> writes:
> 
> > We definitely have a bug here.  The documentation in the elisp manual
> > says that the scanning is done "starting at START".  You're saying it's
> > perfectly OK to start scanning at "LIMIT"?  This violates the doc.
> 
> This is what all function like this say.  To take patient zero --
> narrow-to-region:
> 
> ---
> When calling from Lisp, pass two arguments START and END:
> positions (integers or markers) bounding the text that should
> remain visible.
> ---
> 
> Nothing here about allowing END to come before START, but it does allow
> that, and so do most (all?) similar commands.

Indeed, if the results are predictable, I see no reason not to support
START and END in any order, as we do in many places.





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-10 14:03           ` Eli Zaretskii
@ 2021-08-10 14:41             ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-08-10 14:54               ` Lars Ingebrigtsen
  0 siblings, 1 reply; 20+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-08-10 14:41 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, Lars Ingebrigtsen, 49944

>> > We definitely have a bug here.  The documentation in the elisp manual
>> > says that the scanning is done "starting at START".  You're saying it's
>> > perfectly OK to start scanning at "LIMIT"?  This violates the doc.
>> 
>> This is what all function like this say.  To take patient zero --
>> narrow-to-region:
>> 
>> ---
>> When calling from Lisp, pass two arguments START and END:
>> positions (integers or markers) bounding the text that should
>> remain visible.
>> ---
>> 
>> Nothing here about allowing END to come before START, but it does allow
>> that, and so do most (all?) similar commands.
>
> Indeed, if the results are predictable, I see no reason not to support
> START and END in any order, as we do in many places.

I think the case of `parse-partial-sexp` is different because it
receives the argument OLDSTATE which provides the parser's state which
should apply at START.  If START and END are swapped you'll generally
get an incorrect result.

So, I don't care if we signal an error when START > END or if we "do
nothing" (as is customary in some language's `for` loops), but we should
always consider that OLDSTATE is the state that belongs with START and
hence we can't start parsing at END towards START because we don't know
what parsing state to use at END.


        Stefan






^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-10 14:41             ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2021-08-10 14:54               ` Lars Ingebrigtsen
  2021-08-10 15:07                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-08-10 15:36                 ` Eli Zaretskii
  0 siblings, 2 replies; 20+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-10 14:54 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: acm, 49944

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> I think the case of `parse-partial-sexp` is different because it
> receives the argument OLDSTATE which provides the parser's state which
> should apply at START.  If START and END are swapped you'll generally
> get an incorrect result.
>
> So, I don't care if we signal an error when START > END or if we "do
> nothing" (as is customary in some language's `for` loops), but we should
> always consider that OLDSTATE is the state that belongs with START and
> hence we can't start parsing at END towards START because we don't know
> what parsing state to use at END.

Ah; thanks for the explanation.

But I guess you'll get incorrect results if you pass in any OLDSTATE
that doesn't belong to START, not just when START and END are swapped?
It's just that if START/END obviously wrong (i.e., END is smaller than
START), then the function here "helpfully" swaps them and things get
even more confusing than they would normally be if you pass in a wrong
OLDSTATE (or wrong START).

So perhaps signalling an error here is the correct thing after all?  (Or
just not doing any swapping.)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-10 14:54               ` Lars Ingebrigtsen
@ 2021-08-10 15:07                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-08-10 15:36                 ` Eli Zaretskii
  1 sibling, 0 replies; 20+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-08-10 15:07 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: acm, Eli Zaretskii, 49944

Lars Ingebrigtsen [2021-08-10 16:54:59] wrote:
> But I guess you'll get incorrect results if you pass in any OLDSTATE
> that doesn't belong to START, not just when START and END are swapped?

If the caller needs to know whether swapping will take place in order to
pass the right OLDSTATE, then it defeats the purpose of swapping (which
is presumably to make life easier for the caller).

> So perhaps signalling an error here is the correct thing after all?
> (Or just not doing any swapping.)

I don't have an opinion on signaling an error or not, but swapping is
a bad idea here IMO.


        Stefan






^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-10 14:54               ` Lars Ingebrigtsen
  2021-08-10 15:07                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2021-08-10 15:36                 ` Eli Zaretskii
  2021-08-10 15:44                   ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 20+ messages in thread
From: Eli Zaretskii @ 2021-08-10 15:36 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: acm, monnier, 49944

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: Eli Zaretskii <eliz@gnu.org>,  acm@muc.de,  49944@debbugs.gnu.org
> Date: Tue, 10 Aug 2021 16:54:59 +0200
> 
> > So, I don't care if we signal an error when START > END or if we "do
> > nothing" (as is customary in some language's `for` loops), but we should
> > always consider that OLDSTATE is the state that belongs with START and
> > hence we can't start parsing at END towards START because we don't know
> > what parsing state to use at END.
> 
> Ah; thanks for the explanation.
> 
> But I guess you'll get incorrect results if you pass in any OLDSTATE
> that doesn't belong to START, not just when START and END are swapped?
> It's just that if START/END obviously wrong (i.e., END is smaller than
> START), then the function here "helpfully" swaps them and things get
> even more confusing than they would normally be if you pass in a wrong
> OLDSTATE (or wrong START).
> 
> So perhaps signalling an error here is the correct thing after all?  (Or
> just not doing any swapping.)

The reordering is the side effect of calling validate_region, so we'd
need to expend extra effort NOT to reorder START and END.

How about just documenting that OLDSTATE should be the state at START,
and that's it?





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-10 15:36                 ` Eli Zaretskii
@ 2021-08-10 15:44                   ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-08-10 16:38                     ` Eli Zaretskii
  0 siblings, 1 reply; 20+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-08-10 15:44 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, Lars Ingebrigtsen, 49944

> The reordering is the side effect of calling validate_region, so we'd
> need to expend extra effort NOT to reorder START and END.
>
> How about just documenting that OLDSTATE should be the state at START,
> and that's it?

The current use of `validate_region` means that OLDSTATE will be used as
the state at "either FROM or TO, whichever is smaller".

So I don't understand what it is you're proposing: if we document 
that OLDSTATE should be the state at FROM, then we need to change the
code so that it never swaps FROM and TO.  And if we don't want to change
the code, then we should document that OLDSTATE will be used as the
state at TO when TO is smaller than FROM.


        Stefan







^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-10 15:44                   ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2021-08-10 16:38                     ` Eli Zaretskii
  2021-08-11 11:04                       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 20+ messages in thread
From: Eli Zaretskii @ 2021-08-10 16:38 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: acm, larsi, 49944

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: Lars Ingebrigtsen <larsi@gnus.org>,  acm@muc.de,  49944@debbugs.gnu.org
> Date: Tue, 10 Aug 2021 11:44:55 -0400
> 
> > The reordering is the side effect of calling validate_region, so we'd
> > need to expend extra effort NOT to reorder START and END.
> >
> > How about just documenting that OLDSTATE should be the state at START,
> > and that's it?
> 
> The current use of `validate_region` means that OLDSTATE will be used as
> the state at "either FROM or TO, whichever is smaller".
> 
> So I don't understand what it is you're proposing: if we document 
> that OLDSTATE should be the state at FROM, then we need to change the
> code so that it never swaps FROM and TO.  And if we don't want to change
> the code, then we should document that OLDSTATE will be used as the
> state at TO when TO is smaller than FROM.

The latter.  By documenting the expectations of the function, we leave
it to the callers to make sure their code works as intended.





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-10 16:38                     ` Eli Zaretskii
@ 2021-08-11 11:04                       ` Lars Ingebrigtsen
  0 siblings, 0 replies; 20+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-11 11:04 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, Stefan Monnier, 49944

Eli Zaretskii <eliz@gnu.org> writes:

>> So I don't understand what it is you're proposing: if we document 
>> that OLDSTATE should be the state at FROM, then we need to change the
>> code so that it never swaps FROM and TO.  And if we don't want to change
>> the code, then we should document that OLDSTATE will be used as the
>> state at TO when TO is smaller than FROM.
>
> The latter.  By documenting the expectations of the function, we leave
> it to the callers to make sure their code works as intended.

I think that sounds like a very complicated interface -- it would be
better if we didn't swap.

However, there may well be code out there today that calls the function
with OLDSTATE matching the point passed in by END, which is then swapped
with START (because it's smaller), and things work by accident.

Probably unlikely, but to detect this we'd have to signal an error, like
Alan suggested originally.  So...  perhaps we should just do that?
I.e., signal an error if END is smaller than START?  (And we could fix
up the swapping for clarity, but it wouldn't be necessary.)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-08 18:01 bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT) Alan Mackenzie
  2021-08-08 18:14 ` Lars Ingebrigtsen
@ 2021-08-21 13:24 ` Lars Ingebrigtsen
  2021-08-21 14:05   ` Alan Mackenzie
  2021-08-21 22:11   ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 2 replies; 20+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-21 13:24 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: 49944, Stefan Monnier

Alan Mackenzie <acm@muc.de> writes:

> Emacs-28, emacs started with site-start.el and .emacs.
>
> On calling
>
>     (parse-partial-sexp 19 18 nil nil s)
>
> Emacs surely ought to signal an error, since 18 < 19.  It doesn't,
> though.  It leaves point at a random position and returns
>
>     (0 nil nil nil nil nil 0 nil nil nil nil)
>
> This is a bug.

I've now made this change (and the doc string clarification discussed).
There are no test failures after the change, and I'm not getting any
errors when running it normally, either.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-21 13:24 ` Lars Ingebrigtsen
@ 2021-08-21 14:05   ` Alan Mackenzie
  2021-08-21 22:11   ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 0 replies; 20+ messages in thread
From: Alan Mackenzie @ 2021-08-21 14:05 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 49944, Stefan Monnier

Hello, Lars.

On Sat, Aug 21, 2021 at 15:24:20 +0200, Lars Ingebrigtsen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > Emacs-28, emacs started with site-start.el and .emacs.

> > On calling

> >     (parse-partial-sexp 19 18 nil nil s)

> > Emacs surely ought to signal an error, since 18 < 19.  It doesn't,
> > though.  It leaves point at a random position and returns

> >     (0 nil nil nil nil nil 0 nil nil nil nil)

> > This is a bug.

> I've now made this change (and the doc string clarification discussed).
> There are no test failures after the change, and I'm not getting any
> errors when running it normally, either.

Thanks!

> -- 
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no

-- 
Alan Mackenzie (Nuremberg, Germany).





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-21 13:24 ` Lars Ingebrigtsen
  2021-08-21 14:05   ` Alan Mackenzie
@ 2021-08-21 22:11   ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-08-22 10:50     ` Alan Mackenzie
  2021-08-22 15:02     ` Lars Ingebrigtsen
  1 sibling, 2 replies; 20+ messages in thread
From: Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-08-21 22:11 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Alan Mackenzie, Stefan Monnier, 49944

[-- Attachment #1: Type: text/plain, Size: 1163 bytes --]

Lars Ingebrigtsen [2021-08-21 15:24 +0200] wrote:

> Alan Mackenzie <acm@muc.de> writes:
>
>> Emacs-28, emacs started with site-start.el and .emacs.
>>
>> On calling
>>
>>     (parse-partial-sexp 19 18 nil nil s)
>>
>> Emacs surely ought to signal an error, since 18 < 19.  It doesn't,
>> though.  It leaves point at a random position and returns
>>
>>     (0 nil nil nil nil nil 0 nil nil nil nil)
>>
>> This is a bug.
>
> I've now made this change (and the doc string clarification discussed).
> There are no test failures after the change, and I'm not getting any
> errors when running it normally, either.

Found one :).

0. emacs -Q
1. M-x toggle-debug-on-error RET
2. M-x ielm RET RET

Debugger entered--Lisp error:
    (error "End position should be larger than start position.")
  parse-partial-sexp(#<marker at 64 in *ielm*> 64)
  ielm-return()
  funcall-interactively(ielm-return)
  call-interactively(ielm-return nil nil)
  command-execute(ielm-return)

One option is to replace XFIXNUM with fix_position, which is what the
subsequent validate_region also does.  Another option is to
CHECK_FIXNUM_COERCE_MARKER before the comparison.  Any preference?


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fix-recent-parse-partial-sexp-argument-validation.patch --]
[-- Type: text/x-diff, Size: 1069 bytes --]

From 34c87c83fa86263da863da6c0a920c746b8af02b Mon Sep 17 00:00:00 2001
From: "Basil L. Contovounesios" <contovob@tcd.ie>
Date: Sat, 21 Aug 2021 22:55:58 +0100
Subject: [PATCH] Fix recent parse-partial-sexp argument validation

* src/syntax.c (parse-partial-sexp): Also handle markers as
arguments (bug#49944).  Tweak error message to follow conventions in
"(elisp) Signaling Errors".
---
 src/syntax.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/syntax.c b/src/syntax.c
index adc0da730e..057a4c3b1f 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -3595,8 +3595,8 @@ DEFUN ("parse-partial-sexp", Fparse_partial_sexp, Sparse_partial_sexp, 2, 6, 0,
   else
     target = TYPE_MINIMUM (EMACS_INT);	/* We won't reach this depth.  */
 
-  if (XFIXNUM (to) < XFIXNUM (from))
-    error ("End position should be larger than start position.");
+  if (fix_position (to) < fix_position (from))
+    error ("End position is smaller than start position");
 
   validate_region (&from, &to);
   internalize_parse_state (oldstate, &state);
-- 
2.32.0


[-- Attachment #3: Type: text/plain, Size: 20 bytes --]


Thanks,

-- 
Basil

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-21 22:11   ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2021-08-22 10:50     ` Alan Mackenzie
  2021-08-22 15:02     ` Lars Ingebrigtsen
  1 sibling, 0 replies; 20+ messages in thread
From: Alan Mackenzie @ 2021-08-22 10:50 UTC (permalink / raw)
  To: Basil L. Contovounesios; +Cc: 49944, Lars Ingebrigtsen, Stefan Monnier

Hello, Basil.

On Sat, Aug 21, 2021 at 23:11:55 +0100, Basil L. Contovounesios wrote:
> Lars Ingebrigtsen [2021-08-21 15:24 +0200] wrote:

[ .... ]

> > I've now made this change (and the doc string clarification discussed).
> > There are no test failures after the change, and I'm not getting any
> > errors when running it normally, either.

> Found one :).

> 0. emacs -Q
> 1. M-x toggle-debug-on-error RET
> 2. M-x ielm RET RET

> Debugger entered--Lisp error:
>     (error "End position should be larger than start position.")
>   parse-partial-sexp(#<marker at 64 in *ielm*> 64)
>   ielm-return()
>   funcall-interactively(ielm-return)
>   call-interactively(ielm-return nil nil)
>   command-execute(ielm-return)

> One option is to replace XFIXNUM with fix_position, which is what the
> subsequent validate_region also does.  Another option is to
> CHECK_FIXNUM_COERCE_MARKER before the comparison.  Any preference?

I think the use of fix_position is the best here, and your patch is
right.  Importantly, it corrects the error message, such that it does not
give the impression that End position == Start position would signal an
error.

> >From 34c87c83fa86263da863da6c0a920c746b8af02b Mon Sep 17 00:00:00 2001
> From: "Basil L. Contovounesios" <contovob@tcd.ie>
> Date: Sat, 21 Aug 2021 22:55:58 +0100
> Subject: [PATCH] Fix recent parse-partial-sexp argument validation

> * src/syntax.c (parse-partial-sexp): Also handle markers as
> arguments (bug#49944).  Tweak error message to follow conventions in
> "(elisp) Signaling Errors".
> ---
>  src/syntax.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)

> diff --git a/src/syntax.c b/src/syntax.c
> index adc0da730e..057a4c3b1f 100644
> --- a/src/syntax.c
> +++ b/src/syntax.c
> @@ -3595,8 +3595,8 @@ DEFUN ("parse-partial-sexp", Fparse_partial_sexp, Sparse_partial_sexp, 2, 6, 0,
>    else
>      target = TYPE_MINIMUM (EMACS_INT);	/* We won't reach this depth.  */

> -  if (XFIXNUM (to) < XFIXNUM (from))
> -    error ("End position should be larger than start position.");
> +  if (fix_position (to) < fix_position (from))
> +    error ("End position is smaller than start position");

>    validate_region (&from, &to);
>    internalize_parse_state (oldstate, &state);
> -- 
> 2.32.0



> Thanks,

> -- 
> Basil

-- 
Alan Mackenzie (Nuremberg, Germany).





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-21 22:11   ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-08-22 10:50     ` Alan Mackenzie
@ 2021-08-22 15:02     ` Lars Ingebrigtsen
  2021-08-22 22:54       ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 20+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-22 15:02 UTC (permalink / raw)
  To: Basil L. Contovounesios; +Cc: Alan Mackenzie, Stefan Monnier, 49944

"Basil L. Contovounesios" <contovob@tcd.ie> writes:

> -  if (XFIXNUM (to) < XFIXNUM (from))
> -    error ("End position should be larger than start position.");
> +  if (fix_position (to) < fix_position (from))
> +    error ("End position is smaller than start position");

Looks good to me.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 20+ messages in thread

* bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT).
  2021-08-22 15:02     ` Lars Ingebrigtsen
@ 2021-08-22 22:54       ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 20+ messages in thread
From: Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-08-22 22:54 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Alan Mackenzie, Stefan Monnier, 49944

Lars Ingebrigtsen [2021-08-22 17:02 +0200] wrote:

> Looks good to me.

Thanks Alan and Lars, pushed.

Fix recent parse-partial-sexp argument validation
ff2124d297 2021-08-22 23:52:23 +0100
https://git.sv.gnu.org/cgit/emacs.git/commit/?id=ff2124d2979ee9ba5b8e22147fa8ccaa00e2cc4f

-- 
Basil





^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2021-08-22 22:54 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-08 18:01 bug#49944: parse-partial-sexp fails to signal an error when (> START LIMIT) Alan Mackenzie
2021-08-08 18:14 ` Lars Ingebrigtsen
2021-08-08 18:51   ` Alan Mackenzie
2021-08-09 12:42     ` Lars Ingebrigtsen
2021-08-09 16:50       ` Alan Mackenzie
2021-08-10 13:50         ` Lars Ingebrigtsen
2021-08-10 14:03           ` Eli Zaretskii
2021-08-10 14:41             ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-08-10 14:54               ` Lars Ingebrigtsen
2021-08-10 15:07                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-08-10 15:36                 ` Eli Zaretskii
2021-08-10 15:44                   ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-08-10 16:38                     ` Eli Zaretskii
2021-08-11 11:04                       ` Lars Ingebrigtsen
2021-08-21 13:24 ` Lars Ingebrigtsen
2021-08-21 14:05   ` Alan Mackenzie
2021-08-21 22:11   ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-08-22 10:50     ` Alan Mackenzie
2021-08-22 15:02     ` Lars Ingebrigtsen
2021-08-22 22:54       ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).