mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 14:30:50 -08:00
Avoid crashes in very large buffers with long lines
* src/xdisp.c (get_large_narrowing_begv, get_large_narrowing_zv) (get_medium_narrowing_begv, get_medium_narrowing_zv): Use 'ptrdiff_t' instead of 'int', to prevent integer overflow in large buffers. (Bug#72497)
This commit is contained in:
parent
3817355aed
commit
f1e37ae423
1 changed files with 6 additions and 6 deletions
12
src/xdisp.c
12
src/xdisp.c
|
|
@ -3621,14 +3621,14 @@ get_narrowed_len (struct window *w)
|
||||||
static ptrdiff_t
|
static ptrdiff_t
|
||||||
get_medium_narrowing_begv (struct window *w, ptrdiff_t pos)
|
get_medium_narrowing_begv (struct window *w, ptrdiff_t pos)
|
||||||
{
|
{
|
||||||
int len = get_narrowed_len (w);
|
ptrdiff_t len = get_narrowed_len (w);
|
||||||
return max ((pos / len - 1) * len, BEGV);
|
return max ((pos / len - 1) * len, BEGV);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ptrdiff_t
|
static ptrdiff_t
|
||||||
get_medium_narrowing_zv (struct window *w, ptrdiff_t pos)
|
get_medium_narrowing_zv (struct window *w, ptrdiff_t pos)
|
||||||
{
|
{
|
||||||
int len = get_narrowed_len (w);
|
ptrdiff_t len = get_narrowed_len (w);
|
||||||
return min ((pos / len + 1) * len, ZV);
|
return min ((pos / len + 1) * len, ZV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3678,9 +3678,9 @@ get_large_narrowing_begv (ptrdiff_t pos)
|
||||||
{
|
{
|
||||||
if (long_line_optimizations_region_size <= 0)
|
if (long_line_optimizations_region_size <= 0)
|
||||||
return BEGV;
|
return BEGV;
|
||||||
int len = long_line_optimizations_region_size / 2;
|
ptrdiff_t len = long_line_optimizations_region_size / 2;
|
||||||
int begv = max (pos - len, BEGV);
|
ptrdiff_t begv = max (pos - len, BEGV);
|
||||||
int limit = long_line_optimizations_bol_search_limit;
|
ptrdiff_t limit = long_line_optimizations_bol_search_limit;
|
||||||
while (limit > 0)
|
while (limit > 0)
|
||||||
{
|
{
|
||||||
if (begv == BEGV || FETCH_BYTE (CHAR_TO_BYTE (begv) - 1) == '\n')
|
if (begv == BEGV || FETCH_BYTE (CHAR_TO_BYTE (begv) - 1) == '\n')
|
||||||
|
|
@ -3696,7 +3696,7 @@ get_large_narrowing_zv (ptrdiff_t pos)
|
||||||
{
|
{
|
||||||
if (long_line_optimizations_region_size <= 0)
|
if (long_line_optimizations_region_size <= 0)
|
||||||
return ZV;
|
return ZV;
|
||||||
int len = long_line_optimizations_region_size / 2;
|
ptrdiff_t len = long_line_optimizations_region_size / 2;
|
||||||
return min (pos + len, ZV);
|
return min (pos + len, ZV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue