Range-check width passed to define-fringe-bitmap

This prevents a crash when attempting to create a zero-width bitmap.

* src/fringe.c (Fdefine_fringe_bitmap): Check value of width,
signal an error if outside documented range (Bug#39662).
This commit is contained in:
Robert Pluim 2020-02-26 19:18:54 +01:00
parent 29e415d6b0
commit 999d75c0c1

View file

@ -1500,7 +1500,8 @@ DEFUN ("define-fringe-bitmap", Fdefine_fringe_bitmap, Sdefine_fringe_bitmap,
BITMAP is a symbol identifying the new fringe bitmap. BITMAP is a symbol identifying the new fringe bitmap.
BITS is either a string or a vector of integers. BITS is either a string or a vector of integers.
HEIGHT is height of bitmap. If HEIGHT is nil, use length of BITS. HEIGHT is height of bitmap. If HEIGHT is nil, use length of BITS.
WIDTH must be an integer between 1 and 16, or nil which defaults to 8. WIDTH must be an integer from 1 to 16, or nil which defaults to 8. An
error is signaled if WIDTH is outside this range.
Optional fifth arg ALIGN may be one of `top', `center', or `bottom', Optional fifth arg ALIGN may be one of `top', `center', or `bottom',
indicating the positioning of the bitmap relative to the rows where it indicating the positioning of the bitmap relative to the rows where it
is used; the default is to center the bitmap. Fifth arg may also be a is used; the default is to center the bitmap. Fifth arg may also be a
@ -1535,7 +1536,9 @@ If BITMAP already exists, the existing definition is replaced. */)
else else
{ {
CHECK_FIXNUM (width); CHECK_FIXNUM (width);
fb.width = max (0, min (XFIXNUM (width), 255)); fb.width = max (1, min (XFIXNUM (width), 16));
if (fb.width != XFIXNUM (width))
args_out_of_range (width, build_string ("Width must be from 1 to 16"));
} }
fb.period = 0; fb.period = 0;