X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/a9269c187774dea6e939066a79901f23ae79641f..8d0eb4c275581847990b85dbb350caa3df9e653f:/src/fringe.c?ds=sidebyside diff --git a/src/fringe.c b/src/fringe.c index a4dc9433af..727547b1ab 100644 --- a/src/fringe.c +++ b/src/fringe.c @@ -456,7 +456,7 @@ static struct fringe_bitmap standard_bitmaps[] = #define NO_FRINGE_BITMAP 0 #define UNDEF_FRINGE_BITMAP 1 -#define MAX_STANDARD_FRINGE_BITMAPS (sizeof(standard_bitmaps)/sizeof(standard_bitmaps[0])) +#define MAX_STANDARD_FRINGE_BITMAPS (sizeof (standard_bitmaps)/sizeof (standard_bitmaps[0])) static struct fringe_bitmap **fringe_bitmaps; static Lisp_Object *fringe_faces; @@ -474,7 +474,7 @@ int max_used_fringe_bitmap = MAX_STANDARD_FRINGE_BITMAPS; int lookup_fringe_bitmap (Lisp_Object bitmap) { - int bn; + EMACS_INT bn; bitmap = Fget (bitmap, Qfringe); if (!INTEGERP (bitmap)) @@ -696,7 +696,7 @@ static int get_logical_fringe_bitmap (struct window *w, Lisp_Object bitmap, int right_p, int partial_p) { Lisp_Object cmap, bm1 = Qnil, bm2 = Qnil, bm; - int ln1 = 0, ln2 = 0; + EMACS_INT ln1 = 0, ln2 = 0; int ix1 = right_p; int ix2 = ix1 + (partial_p ? 2 : 0); @@ -1165,7 +1165,7 @@ update_window_fringes (struct window *w, int keep_current_p) } else if ((!row->reversed_p && row->truncated_on_left_p) || (row->reversed_p && row->truncated_on_right_p)) - left = LEFT_FRINGE(0, Qtruncation, 0); + left = LEFT_FRINGE (0, Qtruncation, 0); else if (row->indicate_bob_p && EQ (boundary_top, Qleft)) { left = ((row->indicate_eob_p && EQ (boundary_bot, Qleft)) @@ -1555,7 +1555,7 @@ If BITMAP already exists, the existing definition is replaced. */) else { CHECK_NUMBER (height); - fb.height = min (XINT (height), 255); + fb.height = max (0, min (XINT (height), 255)); if (fb.height > h) { fill1 = (fb.height - h) / 2; @@ -1568,7 +1568,7 @@ If BITMAP already exists, the existing definition is replaced. */) else { CHECK_NUMBER (width); - fb.width = min (XINT (width), 255); + fb.width = max (0, min (XINT (width), 255)); } fb.period = 0; @@ -1610,22 +1610,25 @@ If BITMAP already exists, the existing definition is replaced. */) if (n == max_fringe_bitmaps) { - if ((max_fringe_bitmaps + 20) > MAX_FRINGE_BITMAPS) + int bitmaps = max_fringe_bitmaps + 20; + if (MAX_FRINGE_BITMAPS < bitmaps) error ("No free fringe bitmap slots"); i = max_fringe_bitmaps; - max_fringe_bitmaps += 20; fringe_bitmaps = ((struct fringe_bitmap **) - xrealloc (fringe_bitmaps, max_fringe_bitmaps * sizeof (struct fringe_bitmap *))); + xrealloc (fringe_bitmaps, bitmaps * sizeof *fringe_bitmaps)); fringe_faces - = (Lisp_Object *) xrealloc (fringe_faces, max_fringe_bitmaps * sizeof (Lisp_Object)); + = (Lisp_Object *) xrealloc (fringe_faces, + bitmaps * sizeof *fringe_faces); - for (; i < max_fringe_bitmaps; i++) + for (i = max_fringe_bitmaps; i < bitmaps; i++) { fringe_bitmaps[i] = NULL; fringe_faces[i] = Qnil; } + + max_fringe_bitmaps = bitmaps; } } @@ -1701,7 +1704,7 @@ Return nil if POS is not visible in WINDOW. */) { struct window *w; struct glyph_row *row; - int textpos; + ptrdiff_t textpos; if (NILP (window)) window = selected_window; @@ -1711,6 +1714,8 @@ Return nil if POS is not visible in WINDOW. */) if (!NILP (pos)) { CHECK_NUMBER_COERCE_MARKER (pos); + if (! (BEGV <= XINT (pos) && XINT (pos) <= ZV)) + args_out_of_range (window, pos); textpos = XINT (pos); } else if (w == XWINDOW (selected_window)) @@ -1784,7 +1789,7 @@ init_fringe_once (void) int bt; for (bt = NO_FRINGE_BITMAP + 1; bt < MAX_STANDARD_FRINGE_BITMAPS; bt++) - init_fringe_bitmap(bt, &standard_bitmaps[bt], 1); + init_fringe_bitmap (bt, &standard_bitmaps[bt], 1); } void