On Thu, Sep 07, 2023 at 09:04:43AM +0200, Walter Alejandro Iglesias wrote:
> Dear OpenBSD developers,
>
> On Aug 2 I reported this bug:
>
> https://marc.info/?l=openbsd-bugs&m=169100763926909&w=2
>
> After fiddling around I found a solution that works for both vi base and
> nvi from ports:
>
> https://marc.info/?l=openbsd-bugs&m=169269999218514&w=2
>
> Since nobody answered me in bugs@ I sent a message to ports@ and Cc:
> Anthony J. Bentley who told me to contact Zhihao Yuan, nvi developer
> upstream. I don't use github, I don't have a github account, luckily
> after searching the web I found an email address of Zhihao. He
> understood the issue and answered me with what seems to be a more
> consistent patch:
>
> https://marc.info/?l=openbsd-bugs&m=169277277928008&w=2
>
> Which, needless to say, also works for both. vi on base and nvi on
> ports. Below I paste a cvs version of Zhihao's patch to use it with vi
> on base.
>
> So it only rests some OpenBSD developer here to take look. It's not
> going to take up much of your time, everything has already been chewed
> up :-).
Thanks for the detailed bug report and fix!
Committed.
>
>
> Zhihao's diff translated to cvs:
>
> Index: vi/v_paragraph.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/vi/vi/v_paragraph.c,v
> retrieving revision 1.9
> diff -u -p -r1.9 v_paragraph.c
> --- vi/v_paragraph.c 18 Apr 2017 01:45:35 -0000 1.9
> +++ vi/v_paragraph.c 23 Aug 2023 10:18:39 -0000
> @@ -41,15 +41,20 @@
> if (p[0] == '\014') { \
> if (!--cnt) \
> goto found; \
> + if (pstate == P_INTEXT && !--cnt) \
> + goto found; \
> continue; \
> } \
> if (p[0] != '.' || len < 2) \
> continue; \
> for (lp = VIP(sp)->ps; *lp != '\0'; lp += 2) \
> if (lp[0] == p[1] && \
> - ((lp[1] == ' ' && len == 2) || lp[1] == p[2]) && \
> - !--cnt) \
> - goto found; \
> + (lp[1] == ' ' && len == 2 || lp[1] == p[2])) { \
> + if (!--cnt) \
> + goto found; \
> + if (pstate == P_INTEXT && !--cnt) \
> + goto found; \
> + } \
> }
>
> /*
>
>
> --
> Walter
>