diff options
Diffstat (limited to 'gl/regexec.c')
| -rw-r--r-- | gl/regexec.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/gl/regexec.c b/gl/regexec.c index ac6c258e..5452ef78 100644 --- a/gl/regexec.c +++ b/gl/regexec.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* Extended regular expression matching and search library. | 1 | /* Extended regular expression matching and search library. |
| 2 | Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, | 2 | Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 |
| 3 | Inc. | 3 | Free Software Foundation, Inc. |
| 4 | This file is part of the GNU C Library. | 4 | This file is part of the GNU C Library. |
| 5 | Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. | 5 | Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. |
| 6 | 6 | ||
| @@ -701,7 +701,8 @@ re_search_internal (const regex_t *preg, | |||
| 701 | fl_longest_match = (nmatch != 0 || dfa->nbackref); | 701 | fl_longest_match = (nmatch != 0 || dfa->nbackref); |
| 702 | 702 | ||
| 703 | err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1, | 703 | err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1, |
| 704 | preg->translate, preg->syntax & RE_ICASE, dfa); | 704 | preg->translate, (preg->syntax & RE_ICASE) != 0, |
| 705 | dfa); | ||
| 705 | if (BE (err != REG_NOERROR, 0)) | 706 | if (BE (err != REG_NOERROR, 0)) |
| 706 | goto free_return; | 707 | goto free_return; |
| 707 | mctx.input.stop = stop; | 708 | mctx.input.stop = stop; |
| @@ -1044,6 +1045,11 @@ prune_impossible_nodes (re_match_context_t *mctx) | |||
| 1044 | re_node_set_free (&sctx.limits); | 1045 | re_node_set_free (&sctx.limits); |
| 1045 | if (BE (ret != REG_NOERROR, 0)) | 1046 | if (BE (ret != REG_NOERROR, 0)) |
| 1046 | goto free_return; | 1047 | goto free_return; |
| 1048 | if (sifted_states[0] == NULL) | ||
| 1049 | { | ||
| 1050 | ret = REG_NOMATCH; | ||
| 1051 | goto free_return; | ||
| 1052 | } | ||
| 1047 | } | 1053 | } |
| 1048 | re_free (mctx->state_log); | 1054 | re_free (mctx->state_log); |
| 1049 | mctx->state_log = sifted_states; | 1055 | mctx->state_log = sifted_states; |
| @@ -3078,7 +3084,9 @@ check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, | |||
| 3078 | const re_dfa_t *const dfa = mctx->dfa; | 3084 | const re_dfa_t *const dfa = mctx->dfa; |
| 3079 | bool ok; | 3085 | bool ok; |
| 3080 | Idx cur_idx; | 3086 | Idx cur_idx; |
| 3087 | #ifdef RE_ENABLE_I18N | ||
| 3081 | reg_errcode_t err = REG_NOERROR; | 3088 | reg_errcode_t err = REG_NOERROR; |
| 3089 | #endif | ||
| 3082 | re_node_set union_set; | 3090 | re_node_set union_set; |
| 3083 | re_node_set_init_empty (&union_set); | 3091 | re_node_set_init_empty (&union_set); |
| 3084 | for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx) | 3092 | for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx) |
| @@ -3467,7 +3475,7 @@ out_free: | |||
| 3467 | CONTEXT_NEWLINE); | 3475 | CONTEXT_NEWLINE); |
| 3468 | if (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0)) | 3476 | if (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0)) |
| 3469 | goto out_free; | 3477 | goto out_free; |
| 3470 | } | 3478 | } |
| 3471 | else | 3479 | else |
| 3472 | { | 3480 | { |
| 3473 | dest_states_word[i] = dest_states[i]; | 3481 | dest_states_word[i] = dest_states[i]; |
