diff options
| author | Paul Eggert | 2011-07-06 19:24:56 -0700 |
|---|---|---|
| committer | Paul Eggert | 2011-07-06 19:24:56 -0700 |
| commit | ac82cc6ad7793d477015227629070cf87c6225b0 (patch) | |
| tree | ec53319884b3de3f689836ae5b1963da85c4c6b8 /src | |
| parent | c2d1e36da89642b8916965a967b000aff7d59099 (diff) | |
| download | emacs-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/ChangeLog | 7 | ||||
| -rw-r--r-- | src/xselect.c | 7 | ||||
| -rw-r--r-- | src/xterm.h | 4 |
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 @@ | |||
| 1 | 2011-07-07 Paul Eggert <eggert@cs.ucla.edu> | 1 | 2011-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. */ |