Mercurial > vim
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 } |