From: Junio C Hamano <gitster@pobox.com>
To: Lars Schneider <larsxschneider@gmail.com>
Cc: git@vger.kernel.org, peff@peff.net, tboegi@web.de, e@80x24.org,
ttaylorr@github.com, peartben@gmail.com
Subject: Re: [PATCH v6 6/6] convert: add "status=delayed" to filter process protocol
Date: Mon, 26 Jun 2017 15:38:13 -0700 [thread overview]
Message-ID: <xmqqzicu2x4a.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <xmqqa84u4cuk.fsf@gitster.mtv.corp.google.com> (Junio C. Hamano's message of "Mon, 26 Jun 2017 15:13:07 -0700")
Junio C Hamano <gitster@pobox.com> writes:
>>>> + filter->string = "";
>>>> + continue;
>>>> + }
>>>> +
>>>> + /* In dco->paths we store a list of all delayed paths.
>>>> + The filter just send us a list of available paths.
>>>> + Remove them from the list.
>>>> + */
>>>> + filter_string_list(&dco->paths, 0,
>>>> + &remove_available_paths, &available_paths);
>>>
>>> We first remove from the outstanding request list (dco->paths) what
>>> are now ready...
>>>
>>>> + for_each_string_list_item(path, &available_paths) {
>>>
>>> ...and go over those paths that are now ready.
>>>
>>>> + struct cache_entry* ce = index_file_exists(
>>>> + state->istate, path->string,
>>>> + strlen(path->string), 0);
>>>> + assert(dco->state == CE_RETRY);
>>>> + errs |= (ce ? checkout_entry(ce, state, NULL) : 1);
>>>> + }
>>>
>>> But we never checked if the contents of this available_paths list is
>>> a subset of the set of paths we originally asked the external
>>> process to filter.
>>
>> Correct.
>>
>>> This will allow the process to overwrite any
>>> random path that is not even involved in the checkout.
>>
>> No, not "any random path". Only paths that are part of the checkout.
>
> Isn't it "any path that index_file_exists() returns a CE for". Did
> you filter out elements in available_paths that weren't part of
> dco->paths? I thought the filter-string-list you have are for the
> other way around (which is necessary to keep track of work to be
> done, but that filtering does not help rejecting rogue responses at
> all).
That is, something along the lines of this on top of the series.
When going over the list of delayed paths to see if any of them is
answered, in remove_available_paths(), we mark the util field of the
answered one. Later when we go over the list of answered one, we
make sure that it was actually matched with something on dco->paths
before calling checkout_entry().
entry.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/entry.c b/entry.c
index c6d5cc01dc..f2af67e015 100644
--- a/entry.c
+++ b/entry.c
@@ -150,7 +150,12 @@ void enable_delayed_checkout(struct checkout *state)
static int remove_available_paths(struct string_list_item *item, void *cb_data)
{
struct string_list *available_paths = cb_data;
- return !string_list_has_string(available_paths, item->string);
+ struct string_list_item *available;
+
+ available = string_list_lookup(available_paths, item->string);
+ if (available)
+ avaiable->util = (void *)item->string;
+ return !available;
}
int finish_delayed_checkout(struct checkout *state)
@@ -192,9 +197,16 @@ int finish_delayed_checkout(struct checkout *state)
&remove_available_paths, &available_paths);
for_each_string_list_item(path, &available_paths) {
- struct cache_entry* ce = index_file_exists(
- state->istate, path->string,
- strlen(path->string), 0);
+ struct cache_entry* ce;
+
+ if (!path->util) {
+ error("filter gave '%s' which was unasked for",
+ path->string);
+ errs |= 1;
+ continue;
+ }
+ ce = index_file_exists(state->istate, path->string,
+ strlen(path->string), 0);
assert(dco->state == CE_RETRY);
errs |= (ce ? checkout_entry(ce, state, NULL) : 1);
}
next prev parent reply other threads:[~2017-06-26 22:38 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-25 18:21 [PATCH v6 0/6] convert: add "status=delayed" to filter process protocol Lars Schneider
2017-06-25 18:21 ` [PATCH v6 1/6] t0021: keep filter log files on comparison Lars Schneider
2017-06-25 22:12 ` Junio C Hamano
2017-06-26 9:02 ` Lars Schneider
2017-06-26 17:31 ` Junio C Hamano
2017-06-25 18:21 ` [PATCH v6 2/6] t0021: make debug log file name configurable Lars Schneider
2017-06-25 22:15 ` Junio C Hamano
2017-06-25 18:21 ` [PATCH v6 3/6] t0021: write "OUT" only on success Lars Schneider
2017-06-25 22:17 ` Junio C Hamano
2017-06-26 9:26 ` Lars Schneider
2017-06-26 17:50 ` Junio C Hamano
2017-06-26 18:32 ` Lars Schneider
2017-06-25 18:21 ` [PATCH v6 4/6] convert: put the flags field before the flag itself for consistent style Lars Schneider
2017-06-25 22:19 ` Junio C Hamano
2017-06-25 18:21 ` [PATCH v6 5/6] convert: move multiple file filter error handling to separate function Lars Schneider
2017-06-26 17:56 ` Junio C Hamano
2017-06-27 2:51 ` Stefan Beller
2017-06-26 18:00 ` Junio C Hamano
2017-06-25 18:21 ` [PATCH v6 6/6] convert: add "status=delayed" to filter process protocol Lars Schneider
2017-06-26 19:02 ` Junio C Hamano
2017-06-26 21:28 ` Lars Schneider
2017-06-26 22:13 ` Junio C Hamano
2017-06-26 22:38 ` Junio C Hamano [this message]
2017-06-27 12:07 ` Lars Schneider
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=xmqqzicu2x4a.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=e@80x24.org \
--cc=git@vger.kernel.org \
--cc=larsxschneider@gmail.com \
--cc=peartben@gmail.com \
--cc=peff@peff.net \
--cc=tboegi@web.de \
--cc=ttaylorr@github.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.