diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-11-02 22:29:38 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-11-02 22:29:38 +0100 |
commit | 4c22a91d20cce4f28dd2852a13129b5a4cc691da (patch) | |
tree | 7f11c3f7a21b9135af78153e5c023888e0fc126a /src | |
parent | 430dc5d360166ca5bb6a73f2c87ae53e09282ecb (diff) | |
download | vim-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)
Diffstat (limited to 'src')
-rw-r--r-- | src/regexp.c | 30 | ||||
-rw-r--r-- | src/regexp_nfa.c | 4 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |