Thread (34 messages) 34 messages, 4 authors, 2019-10-28

Re: [PATCH 5/5] path.c: don't call the match function without value in trie_find()

From: Johannes Schindelin <hidden>
Date: 2019-10-28 21:30:48

Hi Gábor,

On Mon, 28 Oct 2019, SZEDER Gábor wrote:
On Mon, Oct 28, 2019 at 11:57:10AM +0100, Johannes Schindelin wrote:
quoted
quoted
  - According to the comment describing trie_find(), it should only
    call the given match function 'fn' for a "/-or-\0-terminated
    prefix of the key for which the trie contains a value".  This is
    not true: there are three places where trie_find() calls the match
    function, but one of them is missing the check for value's
    existence.
quoted
Thank you for this entire patch series. Just one nit:

quoted
diff --git a/path.c b/path.c
index cf57bd52dd..e21b00c4d4 100644
--- a/path.c
+++ b/path.c
@@ -299,9 +299,13 @@ static int trie_find(struct trie *root, const char *key, match_fn fn,

 	/* Matched the entire compressed section */
 	key += i;
-	if (!*key)
+	if (!*key) {
 		/* End of key */
-		return fn(key, root->value, baton);
+		if (root->value)
+			return fn(key, root->value, baton);
+		else
+			return -1;
I would have preferred this:

+		if (!root->value)
+			return -1;
+		return fn(key, root->value, baton);

... as it would more accurately reflect my mental model of an "early
out".
The checks at the other two of those three callsites look like this,
and I just followed suit for the sake of consistency.
Oh, okay. Sorry for the noise, then.

Thanks,
Dscho
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help