From: Junio C Hamano <gitster@pobox.com>
To: "Shawn O. Pearce" <spearce@spearce.org>,
Johannes Sixt <j.sixt@viscovery.net>
Cc: Charles Bailey <charles@hashpling.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Git Mailing List <git@vger.kernel.org>
Subject: Re: Be more careful about updating refs
Date: Thu, 17 Jan 2008 18:01:50 -0800 [thread overview]
Message-ID: <7v63xrki29.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <7vbq7jkixg.fsf@gitster.siamese.dyndns.org> (Junio C. Hamano's message of "Thu, 17 Jan 2008 17:43:07 -0800")
Junio C Hamano <gitster@pobox.com> writes:
> The following patch seems to fix the issue for me, but this is
> primarily meant for discussion, as I do not quite understand why
> the same issue does not manifest itself when NO_MMAP is not
> used.
> ...
BTW, the lookup of the object that dies is in update_branch().
The call to write_ref_sha1() at the last tries to verify b->sha1
is available and is a commit.
static int update_branch(struct branch *b)
{
static const char *msg = "fast-import";
struct ref_lock *lock;
unsigned char old_sha1[20];
if (read_ref(b->name, old_sha1))
hashclr(old_sha1);
lock = lock_any_ref_for_update(b->name, old_sha1, 0);
if (!lock)
return error("Unable to lock %s", b->name);
if (!force_update && !is_null_sha1(old_sha1)) {
struct commit *old_cmit, *new_cmit;
old_cmit = lookup_commit_reference_gently(old_sha1, 0);
new_cmit = lookup_commit_reference_gently(b->sha1, 0);
if (!old_cmit || !new_cmit) {
unlock_ref(lock);
return error("Branch %s is missing commits.", b->name);
}
if (!in_merge_bases(old_cmit, &new_cmit, 1)) {
unlock_ref(lock);
warning("Not updating %s"
" (new tip %s does not contain %s)",
b->name, sha1_to_hex(b->sha1), sha1_to_hex(old_sha1));
return -1;
}
}
if (write_ref_sha1(lock, b->sha1, msg) < 0)
return error("Unable to update %s", b->name);
return 0;
}
The write_ref_sha1() function previously did not even check if
the object pointed at by b->sha1 actually existed, but now it
parses the object and makes sure it is a commit, if the updated
ref is under ref/heads/ hierarchy.
What I do not quite understand is how this can be a new issue.
The codepath to allow updating an existing branch shown above
(i.e. "if it is not force and old is not NULL") uses the usual
lookup_commit_reference_gently() interface to access b->sha1,
and does not use gfi-aware gfi_unpack_entry() or anything
magical, which means it would have passed the same codepath down
to trigger the same issue. IOW, even before this tightening of
write_ref_sha1(), we already should have had the issue of not
being to able to grab the object b->sha1 refers to out of the
newly built packfile.
Is it just nobody seriously exercised the codepath yet, or is
there a difference between these two calls that is more subtle
than that?
Quite confused...
next prev parent reply other threads:[~2008-01-18 2:02 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-15 23:50 Be more careful about updating refs Linus Torvalds
2008-01-16 0:02 ` Linus Torvalds
2008-01-16 19:52 ` Junio C Hamano
2008-01-17 9:15 ` Charles Bailey
2008-01-17 10:52 ` Johannes Sixt
2008-01-17 11:01 ` Charles Bailey
2008-01-17 12:41 ` Johannes Sixt
2008-01-17 12:58 ` Johannes Schindelin
2008-01-17 13:07 ` Charles Bailey
2008-01-18 1:43 ` Junio C Hamano
2008-01-18 2:01 ` Junio C Hamano [this message]
2008-01-18 2:13 ` Shawn O. Pearce
2008-01-18 2:25 ` Junio C Hamano
2008-01-18 2:33 ` Shawn O. Pearce
2008-01-18 2:58 ` Shawn O. Pearce
2008-01-18 3:18 ` Shawn O. Pearce
2008-01-18 3:22 ` Shawn O. Pearce
[not found] ` <20080118035700.GA3458@spearce.org>
2008-01-18 4:27 ` [PATCH] Fix random fast-import errors when compiled with NO_MMAP Linus Torvalds
2008-01-18 8:42 ` Charles Bailey
2008-01-18 17:08 ` Linus Torvalds
2008-01-19 3:25 ` Junio C Hamano
2008-01-19 3:55 ` Linus Torvalds
2008-01-21 3:57 ` Shawn O. Pearce
2008-01-18 6:10 ` Junio C Hamano
2008-01-21 4:10 ` Shawn O. Pearce
2008-01-18 7:53 ` Johannes Sixt
2008-01-18 9:26 ` Charles Bailey
2008-01-18 9:36 ` Junio C Hamano
2008-01-18 9:45 ` Charles Bailey
2008-01-18 10:57 ` Junio C Hamano
2008-01-18 2:30 ` Be more careful about updating refs Shawn O. Pearce
2008-01-17 10:56 ` Charles Bailey
2008-01-16 0:29 ` Junio C Hamano
2008-01-16 0:42 ` Linus Torvalds
2008-01-16 1:11 ` Junio C Hamano
2008-01-23 22:53 ` Sam Vilain
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=7v63xrki29.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=charles@hashpling.org \
--cc=git@vger.kernel.org \
--cc=j.sixt@viscovery.net \
--cc=spearce@spearce.org \
--cc=torvalds@linux-foundation.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).