git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/3] grep: make pcre1_tables version agnostic

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Jul 27, 2019, 23:47 UTC
Message-ID
<875znn6nvt.fsf@evledraar.gmail.com>
In-Reply-To
<20190727202759.22310-2-carenas@gmail.com>
On Sat, Jul 27 2019, Carlo Marcelo Arenas Belón wrote:
Show 5 quoted lines
> 6d4b5747f0 ("grep: change internal *pcre* variable & function names
> to be *pcre1*", 2017-05-25), renamed most variables to be PCRE1
> specific to give space to similarly named variables for PCRE2, but
> in this case the change wasn't needed as the types were compatible
> enough (const unsigned char* vs const uint8_t*) to be shared.

Both the v1 and v2 functions return const unsigned char *. I don't know where I got the uint8_t from. This makes more sense.

This series looks good to me. Thanks for the fix. Just one caveat:

The point of 6d4b5747f0 was not to only split out those variables we couldn't get away with re-using. Then I would have later re-used e.g. pcre1_jit_on & pcre2_jit_on as just pcre_jit_on. We could also do that now.

I think doing that & this part of the your changes makes things less readable. The two code branches we compile with ifdefs are mutually exclusive, so having the variables be unique helps with eyeballing / reasoning when changing the code.

Show 52 quoted lines
> Revert that change, as 94da9193a6 ("grep: add support for PCRE v2",
> 2017-06-01) failed to create an equivalent PCRE2 version.
>
> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
> ---
>  grep.c | 6 +++---
>  grep.h | 2 +-
>  2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/grep.c b/grep.c
> index f7c3a5803e..cc65f7a987 100644
> --- a/grep.c
> +++ b/grep.c
> @@ -389,14 +389,14 @@ static void compile_pcre1_regexp(struct grep_pat *p, const struct grep_opt *opt)
>
>  	if (opt->ignore_case) {
>  		if (has_non_ascii(p->pattern))
> -			p->pcre1_tables = pcre_maketables();
> +			p->pcre_tables = pcre_maketables();
>  		options |= PCRE_CASELESS;
>  	}
>  	if (is_utf8_locale() && has_non_ascii(p->pattern))
>  		options |= PCRE_UTF8;
>
>  	p->pcre1_regexp = pcre_compile(p->pattern, options, &error, &erroffset,
> -				      p->pcre1_tables);
> +				      p->pcre_tables);
>  	if (!p->pcre1_regexp)
>  		compile_regexp_failed(p, error);
>
> @@ -462,7 +462,7 @@ static void free_pcre1_regexp(struct grep_pat *p)
>  	{
>  		pcre_free(p->pcre1_extra_info);
>  	}
> -	pcre_free((void *)p->pcre1_tables);
> +	pcre_free((void *)p->pcre_tables);
>  }
>  #else /* !USE_LIBPCRE1 */
>  static void compile_pcre1_regexp(struct grep_pat *p, const struct grep_opt *opt)
> diff --git a/grep.h b/grep.h
> index 1875880f37..d34f66b384 100644
> --- a/grep.h
> +++ b/grep.h
> @@ -89,7 +89,7 @@ struct grep_pat {
>  	pcre *pcre1_regexp;
>  	pcre_extra *pcre1_extra_info;
>  	pcre_jit_stack *pcre1_jit_stack;
> -	const unsigned char *pcre1_tables;
> +	const unsigned char *pcre_tables;
>  	int pcre1_jit_on;
>  	pcre2_code *pcre2_pattern;
>  	pcre2_match_data *pcre2_match_data;
Previous: Carlo Marcelo Arenas BelónNext: Carlo Arenas
Message 3 of 15 in “grep: memory leak in PCRE2”
  1. 0/3 grep: memory leak in PCRE2Carlo Marcelo Arenas Belón, Jul 27, 2019
  2. 1/3 grep: make pcre1_tables version agnosticCarlo Marcelo Arenas Belón, Jul 27, 2019
  3. Ævar Arnfjörð BjarmasonJul 27, 2019
  4. Carlo ArenasJul 28, 2019
  5. 2/3 grep: use pcre_tables also for PCRE2Carlo Marcelo Arenas Belón, Jul 27, 2019
  6. 3/3 grep: plug leak of pcre chartables in PCRE2Carlo Marcelo Arenas Belón, Jul 27, 2019
  7. Ævar Arnfjörð BjarmasonJul 27, 2019
  8. Carlo ArenasJul 28, 2019
  9. René ScharfeJul 29, 2019
  10. Carlo ArenasJul 30, 2019
  11. René ScharfeJul 30, 2019
  12. grep: avoid leak of chartables in PCRE2Carlo Marcelo Arenas Belón, Aug 1, 2019
  13. Junio C HamanoAug 2, 2019
  14. Carlo ArenasAug 3, 2019
  15. Junio C HamanoAug 5, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.