Subject: bug#41125: closed (Re: bug#41125: 28.0.50; Fwindow_text_pixel_size uses FETCH_CHAR (charpos))

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 08 May 2020 10:39:01 +0000

Your bug report

#41125: 28.0.50; Fwindow_text_pixel_size uses FETCH_CHAR (charpos)

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
41125: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=41125
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#41125: 28.0.50; Fwindow_text_pixel_size uses FETCH_CHAR (charpos)
From: Eli Zaretskii <[email-masked]>
To: martin rudalics <[email-masked]>
Cc: [email-masked], [email-masked]
Date: Fri, 08 May 2020 13:37:42 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

> Cc: [email-masked]
> From: martin rudalics <[email-masked]>
> Date: Fri, 8 May 2020 09:18:27 +0200
> 
>  >> which cannot possibly be correct: FETCH_CHAR takes a byte position,
>  >> not a character position, but BEGV and ZV are measured in characters.
>  >
>  > Ouch!  Thanks.  Does the patch below look good?
> 
> It does.  Thanks for fixing yet another of my blunders in this function.
> And thanks to Pip for catching it.

Thanks, I pushed the fix to the emacs-27 branch.

Subject: 28.0.50; Fwindow_text_pixel_size uses FETCH_CHAR (charpos)
From: Pip Cet <[email-masked]>
To: [email-masked]
Date: Thu, 7 May 2020 11:55:07 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Fwindow_text_pixel_size contains this code:

      start = pos = BEGV;
      while ((pos++ < ZV) && (c = FETCH_CHAR (pos))
         && (c == ' ' || c == '\t' || c == '\n' || c == '\r'))
    start = pos;
      while ((pos-- > BEGV) && (c = FETCH_CHAR (pos)) && (c == ' ' ||
c == '\t'))
    start = pos;

which cannot possibly be correct: FETCH_CHAR takes a byte position,
not a character position, but BEGV and ZV are measured in characters.

(I'm familiarizing myself with the xdisp.c code, partly by replacing
bytepos/charpos pairs of variables with a combined pos_t type
variable. I think that's a good idea partly because it would prevent
precisely this kind of bug.)