commit - 26df50981fe18b5f244293b203c1a1eb30759554
commit + fcc5a371b135db8bbbb250bf1793ffffd06dc644
blob - cc5bd218c4bbae6b431cf8ffc00f01b66f47f57e
blob + 62ba57c8fc412f0f500f06f4fc2319449263f70e
--- titan.c
+++ titan.c
const char *cert = NULL, *key = NULL, *mime = NULL, *token = NULL;
const char *parse_err;
char iribuf[1025];
+ char reqbuf[1025];
char resbuf[1025];
- char *req;
+ char *path;
int sock, ch, ret = 0;
if (pledge("stdio rpath tmppath inet dns", NULL) == -1)
err(1, "fstat");
/* prepare the URL */
+ if (strlcpy(iribuf, argv[0], sizeof(iribuf)) >= sizeof(iribuf))
+ errx(1, "URL too long");
+
+ if (!parse_iri(iribuf, &iri, &parse_err))
+ errx(1, "invalid IRI: %s", parse_err);
+
if (token && mime) {
- if (asprintf(&req, "%s;size=%lld;token=%s;mime=%s\r\n", argv[0],
+ if (asprintf(&path, "%s;size=%lld;token=%s;mime=%s", iri.path,
(long long)sb.st_size, token, mime) == -1)
err(1, "asprintf");
} else if (token) {
- if (asprintf(&req, "%s;size=%lld;token=%s\r\n", argv[0],
+ if (asprintf(&path, "%s;size=%lld;token=%s", iri.path,
(long long)sb.st_size, token) == -1)
err(1, "asprintf");
} else if (mime) {
- if (asprintf(&req, "%s;size=%lld;mime=%s\r\n", argv[0],
+ if (asprintf(&path, "%s;size=%lld;mime=%s", iri.path,
(long long)sb.st_size, mime) == -1)
err(1, "asprintf");
} else {
- if (asprintf(&req, "%s;size=%lld\r\n", argv[0],
+ if (asprintf(&path, "%s;size=%lld", iri.path,
(long long)sb.st_size) == -1)
err(1, "asprintf");
}
- if (strlcpy(iribuf, argv[0], sizeof(iribuf)) >= sizeof(iribuf))
- errx(1, "URL too long");
+ iri.path = path;
+ if (!serialize_iri(&iri, reqbuf, sizeof(reqbuf)) ||
+ strlcat(reqbuf, "\r\n", sizeof(reqbuf)) >= sizeof(reqbuf))
+ errx(1, "URI too long");
- if (!parse_iri(iribuf, &iri, &parse_err))
- errx(1, "invalid IRI: %s", parse_err);
-
if ((config = tls_config_new()) == NULL)
err(1, "tls_config_new");
tls_config_insecure_noverifycert(config);
*iri.port == '\0' ? "1965" : iri.port, tls_error(ctx));
/* send request */
- if (iomux(ctx, sock, req, strlen(req), NULL, 0) == -1)
+ if (iomux(ctx, sock, reqbuf, strlen(reqbuf), NULL, 0) == -1)
errx(1, "I/O error: %s", tls_error(ctx));
for (;;) {