Introduction
Introduction Statistics Contact Development Disclaimer Help
Encode characters for 'q' parameter to get passed and parsed correctly - gopher…
git clone git://git.codemadness.org/gopherproxy-c
Log
Files
Refs
README
LICENSE
---
commit e96ccc93928250ede30995cff7bf0e11758b2602
parent 21855e485f7a47b90546f9039fec6a4b4f382567
Author: Julian Schweinsberg <[email protected]>
Date: Wed, 13 Nov 2024 18:41:56 +0000
Encode characters for 'q' parameter to get passed and parsed correctly
Without encoding the characters '&' and '=' they would be interpreted by
getparam(), this is not correct because these characters are part of the
selector of the gopher URI and shouldn't be interpreted by the
gopherproxy but the gopher server.
Additionally '#' gets escaped or it wouldn't be passed to the
gopherproxy and by this not to the gopher server.
The additional characters get URL escaped, so that no xmlenode is
needed.
For the character '&' gopher://gopherddit.com/1 is a good test case.
Diffstat:
M gopherproxy.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
---
diff --git a/gopherproxy.c b/gopherproxy.c
@@ -91,6 +91,30 @@ xmlencode(const char *s)
}
}
+/* Percent-encode characters so that the string can be used as a value for a
+ query string.
+ Additional characters get encoded so that no xmlencode() is needed */
+void
+encodeparam(const char *s)
+{
+ for (; *s; s++) {
+ switch (*s) {
+ case '<':
+ case '>':
+ case '\'':
+ case '&':
+ case '"':
+ case '#':
+ case '=':
+ printf("%%%02X", (unsigned char)*s);
+ break;
+ default:
+ putchar(*s);
+ break;
+ }
+ }
+}
+
int
edial(const char *host, const char *port)
{
@@ -371,7 +395,7 @@ servedir(const char *server, const char *port, const char *…
xmlencode(v.path + sizeof("URL:") - 1);
} else {
fputs("?q=", stdout);
- xmlencode(uri);
+ encodeparam(uri);
}
fputs("\">", stdout);
xmlencode(v.username);
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.