From 44f730c85e90d32d205e4d6ea2284de2eda4aacf Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 23 Mar 2011 21:17:44 -0700 Subject: [PATCH] * xselect.c (x_check_property_data): Return correct size (Bug#8335). --- src/ChangeLog | 4 ++++ src/xselect.c | 10 ++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index a8bda0915f6..cdde9673fbd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2011-03-24 Paul Eggert + + * xselect.c (x_check_property_data): Return correct size (Bug#8335). + 2011-03-23 Paul Eggert * xterm.c (x_make_frame_visible, same_x_server): Redo to avoid overflow diff --git a/src/xselect.c b/src/xselect.c index 5254fa96838..451b2a0b13f 100644 --- a/src/xselect.c +++ b/src/xselect.c @@ -2190,7 +2190,8 @@ and t is the same as `SECONDARY'. */) ***********************************************************************/ /* Check that lisp values are of correct type for x_fill_property_data. That is, number, string or a cons with two numbers (low and high 16 - bit parts of a 32 bit number). */ + bit parts of a 32 bit number). Return the number of items in DATA, + or -1 if there is an error. */ int x_check_property_data (Lisp_Object data) @@ -2198,15 +2199,16 @@ x_check_property_data (Lisp_Object data) Lisp_Object iter; int size = 0; - for (iter = data; CONSP (iter) && size != -1; iter = XCDR (iter), ++size) + for (iter = data; CONSP (iter); iter = XCDR (iter)) { Lisp_Object o = XCAR (iter); if (! NUMBERP (o) && ! STRINGP (o) && ! CONSP (o)) - size = -1; + return -1; else if (CONSP (o) && (! NUMBERP (XCAR (o)) || ! NUMBERP (XCDR (o)))) - size = -1; + return -1; + size++; } return size; -- 2.39.5