From: schwarze@mandoc.bsd.lv
To: source@mandoc.bsd.lv
Subject: mandoc: Add missing URI encoding when writing HTTP redirects, fixing a
Date: Mon, 1 Oct 2018 03:07:23 -0500 (EST) [thread overview]
Message-ID: <381bbdc5129987ad@fantadrom.bsd.lv> (raw)
Log Message:
-----------
Add missing URI encoding when writing HTTP redirects,
fixing a bug reported by <jungleboogie0 at gmail dot com> on bugs@.
While here, fully validate the arch name
such that we do not have to URI encode that one.
Modified Files:
--------------
mandoc:
cgi.c
Revision Data
-------------
Index: cgi.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/cgi.c,v
retrieving revision 1.158
retrieving revision 1.159
diff -Lcgi.c -Lcgi.c -u -p -r1.158 -r1.159
--- cgi.c
+++ cgi.c
@@ -69,6 +69,7 @@ enum focus {
static void html_print(const char *);
static void html_putchar(char);
static int http_decode(char *);
+static void http_encode(const char *p);
static void parse_manpath_conf(struct req *);
static void parse_path_info(struct req *req, const char *path);
static void parse_query_string(struct req *, const char *);
@@ -90,6 +91,7 @@ static void resp_format(const struct r
static void resp_searchform(const struct req *, enum focus);
static void resp_show(const struct req *, const char *);
static void set_query_attr(char **, char **);
+static int validate_arch(const char *);
static int validate_filename(const char *);
static int validate_manpath(const struct req *, const char *);
static int validate_urifrag(const char *);
@@ -316,6 +318,18 @@ http_decode(char *p)
}
static void
+http_encode(const char *p)
+{
+ for (; *p != '\0'; p++) {
+ if (isalnum((unsigned char)*p) == 0 &&
+ strchr("-._~", *p) == NULL)
+ printf("%%%02.2X", (unsigned char)*p);
+ else
+ putchar(*p);
+ }
+}
+
+static void
resp_begin_http(int code, const char *msg)
{
@@ -490,6 +504,18 @@ validate_manpath(const struct req *req,
}
static int
+validate_arch(const char *arch)
+{
+ int i;
+
+ for (i = 0; i < arch_MAX; i++)
+ if (strcmp(arch, arch_names[i]) == 0)
+ return 1;
+
+ return 0;
+}
+
+static int
validate_filename(const char *file)
{
@@ -562,9 +588,11 @@ pg_redirect(const struct req *req, const
printf("%s/", req->q.manpath);
if (req->q.arch != NULL)
printf("%s/", req->q.arch);
- printf("%s", name);
- if (req->q.sec != NULL)
- printf(".%s", req->q.sec);
+ http_encode(name);
+ if (req->q.sec != NULL) {
+ putchar('.');
+ http_encode(req->q.sec);
+ }
printf("\r\nContent-Type: text/html; charset=utf-8\r\n\r\n");
}
@@ -1089,7 +1117,7 @@ main(void)
return EXIT_FAILURE;
}
- if ( ! (NULL == req.q.arch || validate_urifrag(req.q.arch))) {
+ if (req.q.arch != NULL && validate_arch(req.q.arch) == 0) {
pg_error_badrequest(
"You specified an invalid architecture.");
return EXIT_FAILURE;
--
To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv
reply other threads:[~2018-10-01 8:07 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=381bbdc5129987ad@fantadrom.bsd.lv \
--to=schwarze@mandoc.bsd.lv \
--cc=source@mandoc.bsd.lv \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).