1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-09 07:56:11 +02:00

Merge branch 'rs/receive-pack-remove-find-header'

Code simplification.

* rs/receive-pack-remove-find-header:
  receive-pack: use find_commit_header() in check_nonce()
  receive-pack: use find_commit_header() in check_cert_push_options()
This commit is contained in:
Junio C Hamano 2024-02-14 15:36:05 -08:00
commit e864023188

View File

@ -593,21 +593,6 @@ static char *prepare_push_cert_nonce(const char *path, timestamp_t stamp)
return strbuf_detach(&buf, NULL);
}
static char *find_header(const char *msg, size_t len, const char *key,
const char **next_line)
{
size_t out_len;
const char *val = find_header_mem(msg, len, key, &out_len);
if (!val)
return NULL;
if (next_line)
*next_line = val + out_len + 1;
return xmemdupz(val, out_len);
}
/*
* Return zero if a and b are equal up to n bytes and nonzero if they are not.
* This operation is guaranteed to run in constant time to avoid leaking data.
@ -622,13 +607,14 @@ static int constant_memequal(const char *a, const char *b, size_t n)
return res;
}
static const char *check_nonce(const char *buf, size_t len)
static const char *check_nonce(const char *buf)
{
char *nonce = find_header(buf, len, "nonce", NULL);
size_t noncelen;
const char *found = find_commit_header(buf, "nonce", &noncelen);
char *nonce = found ? xmemdupz(found, noncelen) : NULL;
timestamp_t stamp, ostamp;
char *bohmac, *expect = NULL;
const char *retval = NONCE_BAD;
size_t noncelen;
if (!nonce) {
retval = NONCE_MISSING;
@ -670,7 +656,6 @@ static const char *check_nonce(const char *buf, size_t len)
goto leave;
}
noncelen = strlen(nonce);
expect = prepare_push_cert_nonce(service_dir, stamp);
if (noncelen != strlen(expect)) {
/* This is not even the right size. */
@ -718,35 +703,28 @@ static const char *check_nonce(const char *buf, size_t len)
static int check_cert_push_options(const struct string_list *push_options)
{
const char *buf = push_cert.buf;
int len = push_cert.len;
char *option;
const char *next_line;
const char *option;
size_t optionlen;
int options_seen = 0;
int retval = 1;
if (!len)
if (!*buf)
return 1;
while ((option = find_header(buf, len, "push-option", &next_line))) {
len -= (next_line - buf);
buf = next_line;
while ((option = find_commit_header(buf, "push-option", &optionlen))) {
buf = option + optionlen + 1;
options_seen++;
if (options_seen > push_options->nr
|| strcmp(option,
push_options->items[options_seen - 1].string)) {
retval = 0;
goto leave;
}
free(option);
|| xstrncmpz(push_options->items[options_seen - 1].string,
option, optionlen))
return 0;
}
if (options_seen != push_options->nr)
retval = 0;
leave:
free(option);
return retval;
}
@ -773,7 +751,7 @@ static void prepare_push_cert_sha1(struct child_process *proc)
check_signature(&sigcheck, push_cert.buf + bogs,
push_cert.len - bogs);
nonce_status = check_nonce(push_cert.buf, bogs);
nonce_status = check_nonce(sigcheck.payload);
}
if (!is_null_oid(&push_cert_oid)) {
strvec_pushf(&proc->env, "GIT_PUSH_CERT=%s",