summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'media-sound/vorbis-tools/files/vorbis-tools-1.4.2-fix-buffer-overflow.patch')
-rw-r--r--media-sound/vorbis-tools/files/vorbis-tools-1.4.2-fix-buffer-overflow.patch32
1 files changed, 32 insertions, 0 deletions
diff --git a/media-sound/vorbis-tools/files/vorbis-tools-1.4.2-fix-buffer-overflow.patch b/media-sound/vorbis-tools/files/vorbis-tools-1.4.2-fix-buffer-overflow.patch
new file mode 100644
index 000000000000..20d4b65e2630
--- /dev/null
+++ b/media-sound/vorbis-tools/files/vorbis-tools-1.4.2-fix-buffer-overflow.patch
@@ -0,0 +1,32 @@
+fix from https://gitlab.xiph.org/xiph/vorbis-tools/-/merge_requests/7
+
+ diff --git a/oggenc/platform.c b/oggenc/platform.c
+ index 6d9f4ef..b66e47a 100644
+ --- a/oggenc/platform.c
+ +++ b/oggenc/platform.c
+ @@ -136,18 +136,22 @@ int create_directories(char *fn, int isutf8)
+ {
+ char *end, *start;
+ struct stat statbuf;
+ - char *segment = malloc(strlen(fn)+1);
+ + const size_t fn_len = strlen(fn);
+ + char *segment = malloc(fn_len+1);
+ #ifdef _WIN32
+ wchar_t seg[MAX_PATH+1];
+ #endif
+
+ start = fn;
+ #ifdef _WIN32
+ - if(strlen(fn) >= 3 && isalpha(fn[0]) && fn[1]==':')
+ + // Strip drive prefix
+ + if(fn_len >= 3 && isalpha(fn[0]) && fn[1]==':') {
+ +
+ start = start+2;
+ #endif
+
+ - while((end = strpbrk(start+1, PATH_SEPS)) != NULL)
+ + // Loop through path segments, creating directories if necessary
+ + while((end = strpbrk(start + strspn(start, PATH_SEPS), PATH_SEPS)) != NULL)
+ {
+ int rv;
+ memcpy(segment, fn, end-fn);