]> granicus.if.org Git - vim/commitdiff
patch 8.0.1254: undefined left shift in gethexchrs() v8.0.1254
authorBram Moolenaar <Bram@vim.org>
Thu, 2 Nov 2017 21:29:38 +0000 (22:29 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 2 Nov 2017 21:29:38 +0000 (22:29 +0100)
Problem:    Undefined left shift in gethexchrs(). (geeknik)
Solution:   Use unsigned long. (idea by Christian Brabandt, closes #2255)

src/regexp.c
src/regexp_nfa.c
src/version.c

index a5d7a13a4286e061b3247a3999e372cde388a259..7f5e265eb868478a8bda79ad66fb28456312fa9d 100644 (file)
@@ -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++)
     {
index 86061a3a502e6a8f36eb75a157c2796e6ef13b34..feb17bcaf57bf91872b55ff6740547c2f2e565f9 100644 (file)
@@ -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;
index 059510462b7abf744290afc3f009e93c6263d79e..7c293bafa568ec8fb0e0c078dc3db7417de5d9a8 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1254,
 /**/
     1253,
 /**/