After teaching `read_ref_at()` we need to teach `get_oid_basic()` that `read_ref_at()` might not call `exit()`, but report an error through the return value. Signed-off-by: Paul-Sebastian Ungureanu <ungureanupaulsebastian@xxxxxxxxx> --- sha1-name.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sha1-name.c b/sha1-name.c index d741e1129..74ecbd550 100644 --- a/sha1-name.c +++ b/sha1-name.c @@ -778,6 +778,7 @@ static int get_oid_basic(const char *str, int len, struct object_id *oid, timestamp_t at_time; timestamp_t co_time; int co_tz, co_cnt; + int ret; /* Is it asking for N-th entry, or approxidate? */ for (i = nth = 0; 0 <= nth && i < reflog_len; i++) { @@ -802,8 +803,12 @@ static int get_oid_basic(const char *str, int len, struct object_id *oid, return -1; } } - if (read_ref_at(real_ref, flags, at_time, nth, oid, NULL, - &co_time, &co_tz, &co_cnt)) { + + ret = read_ref_at(real_ref, flags, at_time, nth, oid, NULL, + &co_time, &co_tz, &co_cnt); + if (ret == -1) + return -1; + if (ret) { if (!len) { if (starts_with(real_ref, "refs/heads/")) { str = real_ref + 11; @@ -821,9 +826,12 @@ static int get_oid_basic(const char *str, int len, struct object_id *oid, show_date(co_time, co_tz, DATE_MODE(RFC2822))); } } else { - if (flags & GET_OID_QUIETLY) { - exit(128); + if (flags & GET_OID_GENTLY) { + free(real_ref); + return -1; } + if (flags & GET_OID_QUIETLY) + exit(128); die("Log for '%.*s' only has %d entries.", len, str, co_cnt); } -- 2.18.0.rc2.184.ga79db55c2.dirty