summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-11-02 22:29:38 +0100
committerBram Moolenaar <Bram@vim.org>2017-11-02 22:29:38 +0100
commit4c22a91d20cce4f28dd2852a13129b5a4cc691da (patch)
tree7f11c3f7a21b9135af78153e5c023888e0fc126a
parent430dc5d360166ca5bb6a73f2c87ae53e09282ecb (diff)
downloadvim-4c22a91d20cce4f28dd2852a13129b5a4cc691da.zip
patch 8.0.1254: undefined left shift in gethexchrs()
Problem: Undefined left shift in gethexchrs(). (geeknik) Solution: Use unsigned long. (idea by Christian Brabandt, closes #2255)
-rw-r--r--src/regexp.c30
-rw-r--r--src/regexp_nfa.c4
-rw-r--r--src/version.c2
3 files changed, 19 insertions, 17 deletions
diff --git a/src/regexp.c b/src/regexp.c
index a5d7a13a4..7f5e265eb 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -695,9 +695,9 @@ static void skipchr_keepstart(void);
static int peekchr(void);
static void skipchr(void);
static void ungetchr(void);
-static int gethexchrs(int maxinputlen);
-static int getoctchrs(void);
-static int getdecchrs(void);
+static long gethexchrs(int maxinputlen);
+static long getoctchrs(void);
+static long getdecchrs(void);
static int coll_get_char(void);
static void regcomp_start(char_u *expr, int flags);
static char_u *reg(int, int *);
@@ -1837,7 +1837,7 @@ regpiece(int *flagp)
case Magic('@'):
{
int lop = END;
- int nr;
+ long nr;
nr = getdecchrs();
switch (no_Magic(getchr()))
@@ -2278,7 +2278,7 @@ regatom(int *flagp)
case 'u': /* %uabcd hex 4 */
case 'U': /* %U1234abcd hex 8 */
{
- int i;
+ long i;
switch (c)
{
@@ -3274,10 +3274,10 @@ ungetchr(void)
* The parameter controls the maximum number of input characters. This will be
* 2 when reading a \%x20 sequence and 4 when reading a \%u20AC sequence.
*/
- static int
+ static long
gethexchrs(int maxinputlen)
{
- int nr = 0;
+ long_u nr = 0;
int c;
int i;
@@ -3293,17 +3293,17 @@ gethexchrs(int maxinputlen)
if (i == 0)
return -1;
- return nr;
+ return (long)nr;
}
/*
* Get and return the value of the decimal string immediately after the
* current position. Return -1 for invalid. Consumes all digits.
*/
- static int
+ static long
getdecchrs(void)
{
- int nr = 0;
+ long_u nr = 0;
int c;
int i;
@@ -3320,7 +3320,7 @@ getdecchrs(void)
if (i == 0)
return -1;
- return nr;
+ return (long)nr;
}
/*
@@ -3331,10 +3331,10 @@ getdecchrs(void)
* blahblah\%o210asdf
* before-^ ^-after
*/
- static int
+ static long
getoctchrs(void)
{
- int nr = 0;
+ long_u nr = 0;
int c;
int i;
@@ -3350,7 +3350,7 @@ getoctchrs(void)
if (i == 0)
return -1;
- return nr;
+ return (long)nr;
}
/*
@@ -3360,7 +3360,7 @@ getoctchrs(void)
static int
coll_get_char(void)
{
- int nr = -1;
+ long nr = -1;
switch (*regparse++)
{
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index 86061a3a5..feb17bcaf 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -1522,7 +1522,7 @@ nfa_regatom(void)
case 'u': /* %uabcd hex 4 */
case 'U': /* %U1234abcd hex 8 */
{
- int nr;
+ long nr;
switch (c)
{
@@ -2040,7 +2040,7 @@ nfa_regpiece(void)
int greedy = TRUE; /* Braces are prefixed with '-' ? */
parse_state_T old_state;
parse_state_T new_state;
- int c2;
+ long c2;
int old_post_pos;
int my_post_start;
int quest;
diff --git a/src/version.c b/src/version.c
index 059510462..7c293bafa 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1254,
+/**/
1253,
/**/
1252,