aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2011-07-06 19:24:56 -0700
committerPaul Eggert2011-07-06 19:24:56 -0700
commitac82cc6ad7793d477015227629070cf87c6225b0 (patch)
treeec53319884b3de3f689836ae5b1963da85c4c6b8 /src
parentc2d1e36da89642b8916965a967b000aff7d59099 (diff)
downloademacs-ac82cc6ad7793d477015227629070cf87c6225b0.tar.gz
emacs-ac82cc6ad7793d477015227629070cf87c6225b0.zip
* xselect.c: Integer signedness and overflow fixes.
(Fx_register_dnd_atom, x_handle_dnd_message): Use ptrdiff_t, not size_t, since we prefer signed. (Fx_register_dnd_atom): Check for ptrdiff_t (and size_t) overflow. * xterm.h (struct x_display_info): Use ptrdiff_t, not size_t, for x_dnd_atoms_size and x_dnd_atoms_length.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog7
-rw-r--r--src/xselect.c7
-rw-r--r--src/xterm.h4
3 files changed, 14 insertions, 4 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 6e63fdd6333..43d449b459b 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,12 @@
12011-07-07 Paul Eggert <eggert@cs.ucla.edu> 12011-07-07 Paul Eggert <eggert@cs.ucla.edu>
2 2
3 * xselect.c: Integer signedness and overflow fixes.
4 (Fx_register_dnd_atom, x_handle_dnd_message):
5 Use ptrdiff_t, not size_t, since we prefer signed.
6 (Fx_register_dnd_atom): Check for ptrdiff_t (and size_t) overflow.
7 * xterm.h (struct x_display_info): Use ptrdiff_t, not size_t, for
8 x_dnd_atoms_size and x_dnd_atoms_length.
9
3 * doprnt.c: Prefer signed to unsigned when either works. 10 * doprnt.c: Prefer signed to unsigned when either works.
4 * eval.c (verror): 11 * eval.c (verror):
5 * doprnt.c (doprnt): 12 * doprnt.c (doprnt):
diff --git a/src/xselect.c b/src/xselect.c
index 7f4e0b40f62..93a5c8bfa02 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -2380,7 +2380,7 @@ FRAME is on. If FRAME is nil, the selected frame is used. */)
2380{ 2380{
2381 Atom x_atom; 2381 Atom x_atom;
2382 struct frame *f = check_x_frame (frame); 2382 struct frame *f = check_x_frame (frame);
2383 size_t i; 2383 ptrdiff_t i;
2384 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); 2384 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
2385 2385
2386 2386
@@ -2401,6 +2401,9 @@ FRAME is on. If FRAME is nil, the selected frame is used. */)
2401 2401
2402 if (dpyinfo->x_dnd_atoms_length == dpyinfo->x_dnd_atoms_size) 2402 if (dpyinfo->x_dnd_atoms_length == dpyinfo->x_dnd_atoms_size)
2403 { 2403 {
2404 if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof *dpyinfo->x_dnd_atoms / 2
2405 < dpyinfo->x_dnd_atoms_size)
2406 memory_full (SIZE_MAX);
2404 dpyinfo->x_dnd_atoms_size *= 2; 2407 dpyinfo->x_dnd_atoms_size *= 2;
2405 dpyinfo->x_dnd_atoms = xrealloc (dpyinfo->x_dnd_atoms, 2408 dpyinfo->x_dnd_atoms = xrealloc (dpyinfo->x_dnd_atoms,
2406 sizeof (*dpyinfo->x_dnd_atoms) 2409 sizeof (*dpyinfo->x_dnd_atoms)
@@ -2423,7 +2426,7 @@ x_handle_dnd_message (struct frame *f, XClientMessageEvent *event, struct x_disp
2423 int x, y; 2426 int x, y;
2424 unsigned char *data = (unsigned char *) event->data.b; 2427 unsigned char *data = (unsigned char *) event->data.b;
2425 int idata[5]; 2428 int idata[5];
2426 size_t i; 2429 ptrdiff_t i;
2427 2430
2428 for (i = 0; i < dpyinfo->x_dnd_atoms_length; ++i) 2431 for (i = 0; i < dpyinfo->x_dnd_atoms_length; ++i)
2429 if (dpyinfo->x_dnd_atoms[i] == event->message_type) break; 2432 if (dpyinfo->x_dnd_atoms[i] == event->message_type) break;
diff --git a/src/xterm.h b/src/xterm.h
index a4767361bb3..30867656710 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -326,8 +326,8 @@ struct x_display_info
326 326
327 /* Atoms that are drag and drop atoms */ 327 /* Atoms that are drag and drop atoms */
328 Atom *x_dnd_atoms; 328 Atom *x_dnd_atoms;
329 size_t x_dnd_atoms_size; 329 ptrdiff_t x_dnd_atoms_size;
330 size_t x_dnd_atoms_length; 330 ptrdiff_t x_dnd_atoms_length;
331 331
332 /* Extended window manager hints, Atoms supported by the window manager and 332 /* Extended window manager hints, Atoms supported by the window manager and
333 atoms for settig the window type. */ 333 atoms for settig the window type. */