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:
commit
e864023188
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue