pseudoref: check return values from read_ref()
These codepaths attempt to compare the "expected" current value with the actual current value, but did not check if we successfully read the current value before comparison. Signed-off-by: David Turner <dturner@twopensource.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
d96a53996b
commit
2c3aed1381
7
refs.c
7
refs.c
@ -2868,7 +2868,9 @@ static int write_pseudoref(const char *pseudoref, const unsigned char *sha1,
|
|||||||
|
|
||||||
if (old_sha1) {
|
if (old_sha1) {
|
||||||
unsigned char actual_old_sha1[20];
|
unsigned char actual_old_sha1[20];
|
||||||
read_ref(pseudoref, actual_old_sha1);
|
|
||||||
|
if (read_ref(pseudoref, actual_old_sha1))
|
||||||
|
die("could not read ref '%s'", pseudoref);
|
||||||
if (hashcmp(actual_old_sha1, old_sha1)) {
|
if (hashcmp(actual_old_sha1, old_sha1)) {
|
||||||
strbuf_addf(err, "Unexpected sha1 when writing %s", pseudoref);
|
strbuf_addf(err, "Unexpected sha1 when writing %s", pseudoref);
|
||||||
rollback_lock_file(&lock);
|
rollback_lock_file(&lock);
|
||||||
@ -2904,7 +2906,8 @@ static int delete_pseudoref(const char *pseudoref, const unsigned char *old_sha1
|
|||||||
LOCK_DIE_ON_ERROR);
|
LOCK_DIE_ON_ERROR);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
die_errno(_("Could not open '%s' for writing"), filename);
|
die_errno(_("Could not open '%s' for writing"), filename);
|
||||||
read_ref(pseudoref, actual_old_sha1);
|
if (read_ref(pseudoref, actual_old_sha1))
|
||||||
|
die("could not read ref '%s'", pseudoref);
|
||||||
if (hashcmp(actual_old_sha1, old_sha1)) {
|
if (hashcmp(actual_old_sha1, old_sha1)) {
|
||||||
warning("Unexpected sha1 when deleting %s", pseudoref);
|
warning("Unexpected sha1 when deleting %s", pseudoref);
|
||||||
rollback_lock_file(&lock);
|
rollback_lock_file(&lock);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user