comparison src/regexp.c @ 17444:f4ce361bb1e5 v8.1.1720

patch 8.1.1720: crash with very long %[] pattern commit https://github.com/vim/vim/commit/2a5b52758bb327b89d22660cc28c157ec29782e5 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jul 20 18:56:06 2019 +0200 patch 8.1.1720: crash with very long %[] pattern Problem: Crash with very long %[] pattern. (Reza Mirzazade farkhani) Solution: Check for reg_toolong. (closes https://github.com/vim/vim/issues/4703)
author Bram Moolenaar <Bram@vim.org>
date Sat, 20 Jul 2019 19:00:06 +0200
parents ce04ebdf26b8
children ff097edaae89
comparison
equal deleted inserted replaced
17443:613aced7fe57 17444:f4ce361bb1e5
2173 reg_magic == MAGIC_ALL); 2173 reg_magic == MAGIC_ALL);
2174 br = regnode(BRANCH); 2174 br = regnode(BRANCH);
2175 if (ret == NULL) 2175 if (ret == NULL)
2176 ret = br; 2176 ret = br;
2177 else 2177 else
2178 {
2178 regtail(lastnode, br); 2179 regtail(lastnode, br);
2180 if (reg_toolong)
2181 return NULL;
2182 }
2179 2183
2180 ungetchr(); 2184 ungetchr();
2181 one_exactly = TRUE; 2185 one_exactly = TRUE;
2182 lastnode = regatom(flagp); 2186 lastnode = regatom(flagp);
2183 one_exactly = FALSE; 2187 one_exactly = FALSE;
2198 for (br = ret; br != lastnode; ) 2202 for (br = ret; br != lastnode; )
2199 { 2203 {
2200 if (OP(br) == BRANCH) 2204 if (OP(br) == BRANCH)
2201 { 2205 {
2202 regtail(br, lastbranch); 2206 regtail(br, lastbranch);
2207 if (reg_toolong)
2208 return NULL;
2203 br = OPERAND(br); 2209 br = OPERAND(br);
2204 } 2210 }
2205 else 2211 else
2206 br = regnext(br); 2212 br = regnext(br);
2207 } 2213 }