summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2020-02-04 23:44:28 +0100
committerMarton Balint <cus@passwd.hu>2020-02-15 18:41:36 +0100
commit8224f1e0ba65c064cf0fa2e11e4c688501b6eddd (patch)
treea32ddeb114d647b77c54090a33ef6ec849effa7e
parent6a7b5226e1c868fe6406b114e7303c70d886900b (diff)
avformat/urldecode: add the ability to not decode plus sign to space
Signed-off-by: Marton Balint <cus@passwd.hu>
-rw-r--r--libavformat/httpauth.c4
-rw-r--r--libavformat/urldecode.c4
-rw-r--r--libavformat/urldecode.h3
3 files changed, 6 insertions, 5 deletions
diff --git a/libavformat/httpauth.c b/libavformat/httpauth.c
index 2d42ab2190..54d0322c6a 100644
--- a/libavformat/httpauth.c
+++ b/libavformat/httpauth.c
@@ -255,7 +255,7 @@ char *ff_http_auth_create_response(HTTPAuthState *state, const char *auth,
if (state->auth_type == HTTP_AUTH_BASIC) {
int auth_b64_len, len;
- char *ptr, *decoded_auth = ff_urldecode(auth);
+ char *ptr, *decoded_auth = ff_urldecode(auth, 1);
if (!decoded_auth)
return NULL;
@@ -275,7 +275,7 @@ char *ff_http_auth_create_response(HTTPAuthState *state, const char *auth,
av_strlcat(ptr, "\r\n", len - (ptr - authstr));
av_free(decoded_auth);
} else if (state->auth_type == HTTP_AUTH_DIGEST) {
- char *username = ff_urldecode(auth), *password;
+ char *username = ff_urldecode(auth, 1), *password;
if (!username)
return NULL;
diff --git a/libavformat/urldecode.c b/libavformat/urldecode.c
index 283d912671..5261bcd0cd 100644
--- a/libavformat/urldecode.c
+++ b/libavformat/urldecode.c
@@ -32,7 +32,7 @@
#include "libavutil/avstring.h"
#include "urldecode.h"
-char *ff_urldecode(const char *url)
+char *ff_urldecode(const char *url, int decode_plus_sign)
{
int s = 0, d = 0, url_len = 0;
char c;
@@ -74,7 +74,7 @@ char *ff_urldecode(const char *url)
dest[d++] = c2;
dest[d++] = c3;
}
- } else if (c == '+') {
+ } else if (c == '+' && decode_plus_sign) {
dest[d++] = ' ';
} else {
dest[d++] = c;
diff --git a/libavformat/urldecode.h b/libavformat/urldecode.h
index cb81ebc6f7..80b11c3428 100644
--- a/libavformat/urldecode.h
+++ b/libavformat/urldecode.h
@@ -26,10 +26,11 @@
* in that case the original string is duplicated.
*
* @param url a string to be decoded.
+ * @param decode_plus_sign if nonzero plus sign is decoded to space
* @return new string with the URL decoded or NULL if decoding failed.
* Note that the returned string should be explicitly freed when not
* used anymore.
*/
-char *ff_urldecode(const char *url);
+char *ff_urldecode(const char *url, int decode_plus_sign);
#endif /* AVFORMAT_URLDECODE_H */