To: vim_dev@googlegroups.com Subject: Patch 8.0.1254 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.1254 Problem: Undefined left shift in gethexchrs(). (geeknik) Solution: Use unsigned long. (idea by Christian Brabandt, closes #2255) Files: src/regexp.c, src/regexp_nfa.c *** ../vim-8.0.1253/src/regexp.c 2017-10-24 21:49:32.234837736 +0200 --- src/regexp.c 2017-11-02 22:18:35.864197402 +0100 *************** *** 695,703 **** 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 int coll_get_char(void); static void regcomp_start(char_u *expr, int flags); static char_u *reg(int, int *); --- 695,703 ---- static int peekchr(void); static void skipchr(void); static void ungetchr(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,1843 **** case Magic('@'): { int lop = END; ! int nr; nr = getdecchrs(); switch (no_Magic(getchr())) --- 1837,1843 ---- case Magic('@'): { int lop = END; ! long nr; nr = getdecchrs(); switch (no_Magic(getchr())) *************** *** 2278,2284 **** case 'u': /* %uabcd hex 4 */ case 'U': /* %U1234abcd hex 8 */ { ! int i; switch (c) { --- 2278,2284 ---- case 'u': /* %uabcd hex 4 */ case 'U': /* %U1234abcd hex 8 */ { ! long i; switch (c) { *************** *** 3274,3283 **** * 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 gethexchrs(int maxinputlen) { ! int nr = 0; int c; int i; --- 3274,3283 ---- * 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 long gethexchrs(int maxinputlen) { ! long_u nr = 0; int c; int i; *************** *** 3293,3309 **** if (i == 0) return -1; ! return nr; } /* * Get and return the value of the decimal string immediately after the * current position. Return -1 for invalid. Consumes all digits. */ ! static int getdecchrs(void) { ! int nr = 0; int c; int i; --- 3293,3309 ---- if (i == 0) return -1; ! 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 long getdecchrs(void) { ! long_u nr = 0; int c; int i; *************** *** 3320,3326 **** if (i == 0) return -1; ! return nr; } /* --- 3320,3326 ---- if (i == 0) return -1; ! return (long)nr; } /* *************** *** 3331,3340 **** * blahblah\%o210asdf * before-^ ^-after */ ! static int getoctchrs(void) { ! int nr = 0; int c; int i; --- 3331,3340 ---- * blahblah\%o210asdf * before-^ ^-after */ ! static long getoctchrs(void) { ! long_u nr = 0; int c; int i; *************** *** 3350,3356 **** if (i == 0) return -1; ! return nr; } /* --- 3350,3356 ---- if (i == 0) return -1; ! return (long)nr; } /* *************** *** 3360,3366 **** static int coll_get_char(void) { ! int nr = -1; switch (*regparse++) { --- 3360,3366 ---- static int coll_get_char(void) { ! long nr = -1; switch (*regparse++) { *** ../vim-8.0.1253/src/regexp_nfa.c 2017-10-24 21:49:32.234837736 +0200 --- src/regexp_nfa.c 2017-11-02 22:22:26.954796218 +0100 *************** *** 1522,1528 **** case 'u': /* %uabcd hex 4 */ case 'U': /* %U1234abcd hex 8 */ { ! int nr; switch (c) { --- 1522,1528 ---- case 'u': /* %uabcd hex 4 */ case 'U': /* %U1234abcd hex 8 */ { ! long nr; switch (c) { *************** *** 2040,2046 **** int greedy = TRUE; /* Braces are prefixed with '-' ? */ parse_state_T old_state; parse_state_T new_state; ! int c2; int old_post_pos; int my_post_start; int quest; --- 2040,2046 ---- int greedy = TRUE; /* Braces are prefixed with '-' ? */ parse_state_T old_state; parse_state_T new_state; ! long c2; int old_post_pos; int my_post_start; int quest; *** ../vim-8.0.1253/src/version.c 2017-11-02 21:04:17.991345051 +0100 --- src/version.c 2017-11-02 22:19:56.095710528 +0100 *************** *** 763,764 **** --- 763,766 ---- { /* Add new patch number below this line */ + /**/ + 1254, /**/ -- Citizens are not allowed to attend a movie house or theater nor ride in a public streetcar within at least four hours after eating garlic. [real standing law in Indiana, United States of America] /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///