mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2026-01-02 07:11:47 +01:00
53 lines
1.1 KiB
Diff
53 lines
1.1 KiB
Diff
Origin: commit b7484c224738247b510ed0d268cd577076958f1b
|
|
Author: Kuang-che Wu <kcwu@csie.org>
|
|
Bug: https://savannah.gnu.org/bugs/?45713
|
|
Bug-Debian: http://bugs.debian.org/797624
|
|
Description: Fix stack overflow due to too deep recursion
|
|
How to reproduce:
|
|
Run this command inside screen
|
|
$ printf '\x1b[10000000T'
|
|
.
|
|
screen will recursively call MScrollV to depth n/256.
|
|
This is time consuming and will overflow stack if n is huge.
|
|
|
|
diff --git a/ansi.c b/ansi.c
|
|
index a342fb1..152d2ef 100644
|
|
--- a/ansi.c
|
|
+++ b/ansi.c
|
|
@@ -2502,13 +2502,13 @@ int n, ys, ye, bce;
|
|
return;
|
|
if (n > 0)
|
|
{
|
|
+ if (ye - ys + 1 < n)
|
|
+ n = ye - ys + 1;
|
|
if (n > 256)
|
|
{
|
|
MScrollV(p, n - 256, ys, ye, bce);
|
|
n = 256;
|
|
}
|
|
- if (ye - ys + 1 < n)
|
|
- n = ye - ys + 1;
|
|
#ifdef COPY_PASTE
|
|
if (compacthist)
|
|
{
|
|
@@ -2562,14 +2562,14 @@ int n, ys, ye, bce;
|
|
}
|
|
else
|
|
{
|
|
- if (n < -256)
|
|
- {
|
|
- MScrollV(p, n + 256, ys, ye, bce);
|
|
- n = -256;
|
|
- }
|
|
n = -n;
|
|
if (ye - ys + 1 < n)
|
|
n = ye - ys + 1;
|
|
+ if (n > 256)
|
|
+ {
|
|
+ MScrollV(p, - (n - 256), ys, ye, bce);
|
|
+ n = 256;
|
|
+ }
|
|
|
|
ml = p->w_mlines + ye;
|
|
/* Clear lines */
|