comparison src/regexp.c @ 14358:72d506d94f3f v8.1.0194

patch 8.1.0194: possibly use of NULL pointer commit https://github.com/vim/vim/commit/414998023fbff15cce20ef01a54d0366370ad8b6 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Jul 18 06:02:09 2018 +0200 patch 8.1.0194: possibly use of NULL pointer Problem: Possibly use of NULL pointer. (Coverity) Solution: Reset the re_in_use flag earlier.
author Christian Brabandt <cb@256bit.org>
date Wed, 18 Jul 2018 06:15:04 +0200
parents ffd834f893aa
children 27b9a84395b5
comparison
equal deleted inserted replaced
14357:2144c5e79a7c 14358:72d506d94f3f
8264 rex.reg_endp = NULL; 8264 rex.reg_endp = NULL;
8265 rex.reg_startpos = NULL; 8265 rex.reg_startpos = NULL;
8266 rex.reg_endpos = NULL; 8266 rex.reg_endpos = NULL;
8267 8267
8268 result = rmp->regprog->engine->regexec_nl(rmp, line, col, nl); 8268 result = rmp->regprog->engine->regexec_nl(rmp, line, col, nl);
8269 rmp->regprog->re_in_use = FALSE;
8269 8270
8270 /* NFA engine aborted because it's very slow. */ 8271 /* NFA engine aborted because it's very slow. */
8271 if (rmp->regprog->re_engine == AUTOMATIC_ENGINE 8272 if (rmp->regprog->re_engine == AUTOMATIC_ENGINE
8272 && result == NFA_TOO_EXPENSIVE) 8273 && result == NFA_TOO_EXPENSIVE)
8273 { 8274 {
8282 #ifdef FEAT_EVAL 8283 #ifdef FEAT_EVAL
8283 report_re_switch(pat); 8284 report_re_switch(pat);
8284 #endif 8285 #endif
8285 rmp->regprog = vim_regcomp(pat, re_flags); 8286 rmp->regprog = vim_regcomp(pat, re_flags);
8286 if (rmp->regprog != NULL) 8287 if (rmp->regprog != NULL)
8288 {
8289 rmp->regprog->re_in_use = TRUE;
8287 result = rmp->regprog->engine->regexec_nl(rmp, line, col, nl); 8290 result = rmp->regprog->engine->regexec_nl(rmp, line, col, nl);
8291 rmp->regprog->re_in_use = FALSE;
8292 }
8288 vim_free(pat); 8293 vim_free(pat);
8289 } 8294 }
8290 8295
8291 p_re = save_p_re; 8296 p_re = save_p_re;
8292 } 8297 }
8293 8298
8294 rex_in_use = rex_in_use_save; 8299 rex_in_use = rex_in_use_save;
8295 if (rex_in_use) 8300 if (rex_in_use)
8296 rex = rex_save; 8301 rex = rex_save;
8297 rmp->regprog->re_in_use = FALSE;
8298 8302
8299 return result > 0; 8303 return result > 0;
8300 } 8304 }
8301 8305
8302 /* 8306 /*
8380 rex_save = rex; 8384 rex_save = rex;
8381 rex_in_use = TRUE; 8385 rex_in_use = TRUE;
8382 8386
8383 result = rmp->regprog->engine->regexec_multi( 8387 result = rmp->regprog->engine->regexec_multi(
8384 rmp, win, buf, lnum, col, tm, timed_out); 8388 rmp, win, buf, lnum, col, tm, timed_out);
8389 rmp->regprog->re_in_use = FALSE;
8385 8390
8386 /* NFA engine aborted because it's very slow. */ 8391 /* NFA engine aborted because it's very slow. */
8387 if (rmp->regprog->re_engine == AUTOMATIC_ENGINE 8392 if (rmp->regprog->re_engine == AUTOMATIC_ENGINE
8388 && result == NFA_TOO_EXPENSIVE) 8393 && result == NFA_TOO_EXPENSIVE)
8389 { 8394 {
8407 #ifdef FEAT_SYN_HL 8412 #ifdef FEAT_SYN_HL
8408 reg_do_extmatch = 0; 8413 reg_do_extmatch = 0;
8409 #endif 8414 #endif
8410 8415
8411 if (rmp->regprog != NULL) 8416 if (rmp->regprog != NULL)
8417 {
8418 rmp->regprog->re_in_use = TRUE;
8412 result = rmp->regprog->engine->regexec_multi( 8419 result = rmp->regprog->engine->regexec_multi(
8413 rmp, win, buf, lnum, col, tm, timed_out); 8420 rmp, win, buf, lnum, col, tm, timed_out);
8421 rmp->regprog->re_in_use = FALSE;
8422 }
8414 vim_free(pat); 8423 vim_free(pat);
8415 } 8424 }
8416 p_re = save_p_re; 8425 p_re = save_p_re;
8417 } 8426 }
8418 8427
8419 rex_in_use = rex_in_use_save; 8428 rex_in_use = rex_in_use_save;
8420 if (rex_in_use) 8429 if (rex_in_use)
8421 rex = rex_save; 8430 rex = rex_save;
8422 rmp->regprog->re_in_use = FALSE;
8423 8431
8424 return result <= 0 ? 0 : result; 8432 return result <= 0 ? 0 : result;
8425 } 8433 }