All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brandon Williams <bmwill@google.com>
To: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Cc: git@vger.kernel.org, "Junio C Hamano" <gitster@pobox.com>,
	"Jeff King" <peff@peff.net>,
	"Jeffrey Walton" <noloader@gmail.com>,
	"Michał Kiedrowicz" <michal.kiedrowicz@gmail.com>,
	"J Smith" <dark.panda@gmail.com>,
	"Victor Leschuk" <vleschuk@gmail.com>,
	"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
	"Fredrik Kuivinen" <frekui@gmail.com>,
	"Zoltán Herczeg" <hzmester@freemail.hu>
Subject: Re: [PATCH v3 03/18] grep: submodule-related case statements should die if new fields are added
Date: Thu, 20 Apr 2017 15:20:16 -0700	[thread overview]
Message-ID: <20170420222016.GJ142567@google.com> (raw)
In-Reply-To: <20170420212345.7408-4-avarab@gmail.com>

On 04/20, Ævar Arnfjörð Bjarmason wrote:
> Change two case statements added in commit 0281e487fd ("grep:
> optionally recurse into submodules", 2016-12-16) so that they die if
> new GREP_PATTERN_* enum fields are added without updating them.
> 
> These case statements currently check for an exhaustive list of
> fields, but if a new field is added it's easy to introduce a bug here
> where the code will start subtly doing the wrong thing, e.g. if a new
> pattern type is added we'll fall through to
> GREP_PATTERN_TYPE_UNSPECIFIED, i.e. the "basic" POSIX regular
> expressions.
> 
> This should arguably be done for the switch(opt->binary)
> case-statement as well, but isn't trivial to add since that code isn't
> currently working with an exhaustive list.

I was under the impression that the code wouldn't compile if there is a
missing enum field in the switch statement.  Does it instead silently
fall through?  I would choose not compiling over a die statement that may
not be caught during the development of a new series.

> 
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
>  builtin/grep.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/builtin/grep.c b/builtin/grep.c
> index 3ffb5b4e81..be3dbd6957 100644
> --- a/builtin/grep.c
> +++ b/builtin/grep.c
> @@ -495,6 +495,8 @@ static void compile_submodule_options(const struct grep_opt *opt,
>  		break;
>  	case GREP_PATTERN_TYPE_UNSPECIFIED:
>  		break;
> +	default:
> +		die("BUG: Added a new grep pattern type without updating switch statement");
>  	}
>  
>  	for (pattern = opt->pattern_list; pattern != NULL;
> @@ -515,6 +517,8 @@ static void compile_submodule_options(const struct grep_opt *opt,
>  		case GREP_PATTERN_BODY:
>  		case GREP_PATTERN_HEAD:
>  			break;
> +		default:
> +			die("BUG: Added a new grep token type without updating case statement");
>  		}
>  	}
>  
> -- 
> 2.11.0
> 

-- 
Brandon Williams

  reply	other threads:[~2017-04-20 22:20 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-20 21:23 [PATCH v3 00/18] PCRE v1 improvements & PCRE v2 support Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 01/18] grep: amend submodule recursion test in preparation for rx engine testing Ævar Arnfjörð Bjarmason
2017-04-20 22:22   ` Brandon Williams
2017-04-20 21:23 ` [PATCH v3 02/18] grep: add tests for grep pattern types being passed to submodules Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 03/18] grep: submodule-related case statements should die if new fields are added Ævar Arnfjörð Bjarmason
2017-04-20 22:20   ` Brandon Williams [this message]
2017-04-20 22:27     ` Jeff King
2017-04-20 21:23 ` [PATCH v3 04/18] grep: remove redundant regflags assignment under PCRE Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 05/18] Makefile & configure: reword outdated comment about PCRE Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 06/18] grep: add a test for backreferences in PCRE patterns Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 07/18] log: add exhaustive tests for pattern style options & config Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 08/18] log: add -P as a synonym for --perl-regexp Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 09/18] grep & rev-list doc: stop promising libpcre " Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 10/18] grep: make grep.patternType=[pcre|pcre1] a synonym for "perl" Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 11/18] test-lib: rename the LIBPCRE prerequisite to PCRE Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 12/18] grep: change the internal PCRE macro names to be PCRE1 Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 13/18] grep: change the internal PCRE code & header " Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 14/18] perf: add a performance comparison test of grep -E and -P Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 15/18] grep: add support for the PCRE v1 JIT API Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 16/18] grep: add support for PCRE v2 Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 17/18] grep: remove support concurrent use of both PCRE v1 & v2 Ævar Arnfjörð Bjarmason
2017-04-20 21:23 ` [PATCH v3 18/18] Makefile & configure: make PCRE v2 the default PCRE implementation Ævar Arnfjörð Bjarmason

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170420222016.GJ142567@google.com \
    --to=bmwill@google.com \
    --cc=avarab@gmail.com \
    --cc=dark.panda@gmail.com \
    --cc=frekui@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=hzmester@freemail.hu \
    --cc=michal.kiedrowicz@gmail.com \
    --cc=noloader@gmail.com \
    --cc=pclouds@gmail.com \
    --cc=peff@peff.net \
    --cc=vleschuk@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.