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>

David Turner committed Jul 15, 2015 at 18:05 UTC 2c3aed1381f22494bc06fd66dec8292a296db10f
1 file changed +5 -2
refs.c
+5 -2
@@ -2868,7 +2868,9 @@ static int write_pseudoref(const char *pseudoref, const unsigned char *sha1,
2868
2869 if (old_sha1) {
2870 unsigned char actual_old_sha1[20];
2871 - read_ref(pseudoref, actual_old_sha1);
2871 +
2872 + if (read_ref(pseudoref, actual_old_sha1))
2873 + die("could not read ref '%s'", pseudoref);
2874 if (hashcmp(actual_old_sha1, old_sha1)) {
2875 strbuf_addf(err, "Unexpected sha1 when writing %s", pseudoref);
2876 rollback_lock_file(&lock);
@@ -2904,7 +2906,8 @@ static int delete_pseudoref(const char *pseudoref, const unsigned char *old_sha1
2906 LOCK_DIE_ON_ERROR);
2907 if (fd < 0)
2908 die_errno(_("Could not open '%s' for writing"), filename);
2907 - read_ref(pseudoref, actual_old_sha1);
2909 + if (read_ref(pseudoref, actual_old_sha1))
2910 + die("could not read ref '%s'", pseudoref);
2911 if (hashcmp(actual_old_sha1, old_sha1)) {
2912 warning("Unexpected sha1 when deleting %s", pseudoref);
2913 rollback_lock_file(&lock);