diff options
author | Vincent Sanders <vince@kyllikki.org> | 2020-05-09 22:42:12 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2020-05-09 22:42:12 +0100 |
commit | fbc0847db06fa91765d5b83b34dabee85f65d4ec (patch) | |
tree | 64815b720817fef78e3ce74694903aa927c2575a /desktop | |
parent | a98003674be06798ad4e7a6c59b99ee8674ea1fe (diff) | |
download | netsurf-fbc0847db06fa91765d5b83b34dabee85f65d4ec.tar.gz netsurf-fbc0847db06fa91765d5b83b34dabee85f65d4ec.tar.bz2 |
move ssl certificate serialisation into a url to the ssl_cert utility code
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/browser_window.c | 62 |
1 files changed, 10 insertions, 52 deletions
diff --git a/desktop/browser_window.c b/desktop/browser_window.c index 03943f163..8ef2c7704 100644 --- a/desktop/browser_window.c +++ b/desktop/browser_window.c @@ -4769,65 +4769,23 @@ nserror browser_window_show_certificates(struct browser_window *bw) { nserror res; nsurl *url; - size_t allocsize; - size_t urlstrlen; - uint8_t *urlstr; - size_t depth; if (bw->current_cert_chain == NULL) { return NSERROR_NOT_FOUND; } - allocsize = 20; - for (depth = 0; depth < bw->current_cert_chain->depth; depth++) { - allocsize += 7; /* allow for &cert= */ - allocsize += 4 * ((bw->current_cert_chain->certs[depth].der_length + 2) / 3); - } - - urlstr = malloc(allocsize); - if (urlstr == NULL) { - return NSERROR_NOMEM; - } - - urlstrlen = snprintf((char *)urlstr, allocsize, "about:certificate"); - for (depth = 0; depth < bw->current_cert_chain->depth; depth++) { - nsuerror nsures; - size_t output_length; - - urlstrlen += snprintf((char *)urlstr + urlstrlen, - allocsize - urlstrlen, - "&cert="); - - output_length = allocsize - urlstrlen; - nsures = nsu_base64_encode_url( - bw->current_cert_chain->certs[depth].der, - bw->current_cert_chain->certs[depth].der_length, - (uint8_t *)urlstr + urlstrlen, - &output_length); - if (nsures != NSUERROR_OK) { - free(urlstr); - return (nserror)nsures; - } - urlstrlen += output_length; - } - urlstr[17] = '?'; - urlstr[urlstrlen] = 0; + res = cert_chain_to_query(bw->current_cert_chain, &url); + if (res == NSERROR_OK) { + res = browser_window_create(BW_CREATE_HISTORY | + BW_CREATE_FOREGROUND | + BW_CREATE_TAB, + url, + NULL, + bw, + NULL); - res = nsurl_create((const char *)urlstr, &url); - free(urlstr); - if (res != NSERROR_OK) { - return res; + nsurl_unref(url); } - res = browser_window_create(BW_CREATE_HISTORY | - BW_CREATE_FOREGROUND | - BW_CREATE_TAB, - url, - NULL, - bw, - NULL); - - nsurl_unref(url); - return res; } |