summaryrefslogtreecommitdiff
path: root/src/search.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2011-09-04 10:27:38 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2011-09-04 10:27:38 -0700
commita0efffc812bd88fd3a710c84ae3bf0db989298e1 (patch)
treebdecd3cd7f5fbb26aea3bc08769c2a4e0c256704 /src/search.c
parent29ebea3b123db665db1267880df65d0ec697aff3 (diff)
downloademacs-a0efffc812bd88fd3a710c84ae3bf0db989298e1.tar.gz
* search.c: Integer overflow fixes
(Freplace_match): Use ptrdiff_t, not int, for indexes that can exceed INT_MAX. Check that EMACS_INT value is in range before assigning it to the (possibly-narrower) index. (match_limit): Don't assume that a fixnum can fit in 'int'.
Diffstat (limited to 'src/search.c')
-rw-r--r--src/search.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/search.c b/src/search.c
index d892792cbaa..b3d67e6c431 100644
--- a/src/search.c
+++ b/src/search.c
@@ -2404,7 +2404,7 @@ since only regular expressions have distinguished subexpressions. */)
int some_uppercase;
int some_nonuppercase_initial;
register int c, prevc;
- int sub;
+ ptrdiff_t sub;
EMACS_INT opoint, newpoint;
CHECK_STRING (newtext);
@@ -2423,9 +2423,9 @@ since only regular expressions have distinguished subexpressions. */)
else
{
CHECK_NUMBER (subexp);
- sub = XINT (subexp);
- if (sub < 0 || sub >= search_regs.num_regs)
+ if (! (0 <= XINT (subexp) && XINT (subexp) < search_regs.num_regs))
args_out_of_range (subexp, make_number (search_regs.num_regs));
+ sub = XINT (subexp);
}
if (NILP (string))
@@ -2662,7 +2662,7 @@ since only regular expressions have distinguished subexpressions. */)
unsigned char str[MAX_MULTIBYTE_LENGTH];
const unsigned char *add_stuff = NULL;
ptrdiff_t add_len = 0;
- int idx = -1;
+ ptrdiff_t idx = -1;
if (str_multibyte)
{
@@ -2813,7 +2813,7 @@ since only regular expressions have distinguished subexpressions. */)
static Lisp_Object
match_limit (Lisp_Object num, int beginningp)
{
- register int n;
+ EMACS_INT n;
CHECK_NUMBER (num);
n = XINT (num);