1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-10-06 05:47:18 +02:00

avformat/urldecode: add ff_urldecode_len function

This will be used later to decode partial strings.

Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
Marton Balint
2025-08-26 22:57:40 +02:00
parent 8cb1ff78ac
commit 6f17053e6c
2 changed files with 36 additions and 0 deletions

View File

@@ -28,6 +28,8 @@
#include <string.h> #include <string.h>
#include "libavutil/error.h"
#include "libavutil/macros.h"
#include "libavutil/mem.h" #include "libavutil/mem.h"
#include "libavutil/avstring.h" #include "libavutil/avstring.h"
#include "urldecode.h" #include "urldecode.h"
@@ -93,3 +95,19 @@ char *ff_urldecode(const char *url, int decode_plus_sign)
return dest; return dest;
} }
int ff_urldecode_len(char *dest, size_t dest_len, const char *url, size_t url_max_len, int decode_plus_sign)
{
size_t written_bytes;
size_t url_len = strlen(url);
url_len = FFMIN(url_len, url_max_len);
if (dest_len <= url_len)
return AVERROR(EINVAL);
written_bytes = urldecode(dest, url, url_len, decode_plus_sign);
dest[written_bytes] = '\0';
return written_bytes;
}

View File

@@ -19,6 +19,8 @@
#ifndef AVFORMAT_URLDECODE_H #ifndef AVFORMAT_URLDECODE_H
#define AVFORMAT_URLDECODE_H #define AVFORMAT_URLDECODE_H
#include <stddef.h>
/** /**
* Decodes an URL from its percent-encoded form back into normal * Decodes an URL from its percent-encoded form back into normal
* representation. This function returns the decoded URL in a string. * representation. This function returns the decoded URL in a string.
@@ -33,4 +35,20 @@
*/ */
char *ff_urldecode(const char *url, int decode_plus_sign); char *ff_urldecode(const char *url, int decode_plus_sign);
/**
* Decodes an URL from its percent-encoded form back into normal
* representation. This function returns the decoded URL in a string.
* The URL to be decoded does not necessarily have to be encoded but
* in that case the original string is duplicated.
*
* @param dest the destination buffer.
* @param dest_len the maximum available space in the destination buffer.
* Must be bigger than FFMIN(strlen(url), url_max_len) to avoid
* an AVERROR(EINVAL) result
* @param url_max_len the maximum number of chars to read from url
* @param decode_plus_sign if nonzero plus sign is decoded to space
* @return the number of written bytes to dest excluding the zero terminator,
* negative on error
*/
int ff_urldecode_len(char *dest, size_t dest_len, const char *url, size_t url_max_len, int decode_plus_sign);
#endif /* AVFORMAT_URLDECODE_H */ #endif /* AVFORMAT_URLDECODE_H */