!36 [sync] PR-31: Fix CVE-2023-43361

From: @openeuler-sync-bot 
Reviewed-by: @wk333 
Signed-off-by: @wk333
This commit is contained in:
openeuler-ci-bot 2024-10-25 01:12:09 +00:00 committed by Gitee
commit 3899de809d
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 68 additions and 1 deletions

63
CVE-2023-43361.patch Normal file
View File

@ -0,0 +1,63 @@
From 69dfbe06ce02e6199444245397acf79fb6857b4c Mon Sep 17 00:00:00 2001
From: Ralph Giles <giles@thaumas.net>
Date: Sun, 17 Sep 2023 11:49:12 -0700
Subject: [PATCH] oggenc: Don't assume the output path ends in a file name.
Origin: https://gitlab.xiph.org/xiph/vorbis-tools/-/merge_requests/7
oggenc attempts to create any specified directories in the output
file path if they don't exist. The parser was assuming there was
a final filename after the last directory separator, and so would
try to read off the end of the argument if it was a bare directory
such as `./` or `outdir/`. This adds a check to make sure the
scan isn't starting off the end of the path string.
Thanks to Frank-Z7 (Zeng Yunxiang) at Huazhong University of Science
and Technology (cse.hust.edu.cn) for the report.
---
oggenc/platform.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/oggenc/platform.c b/oggenc/platform.c
index 6d9f4ef..ee0b7ce 100644
--- a/oggenc/platform.c
+++ b/oggenc/platform.c
@@ -136,18 +136,23 @@ 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((start+1 - fn < fn_len) &&
+ (end = strpbrk(start+1, PATH_SEPS)) != NULL)
{
int rv;
memcpy(segment, fn, end-fn);
@@ -159,7 +164,7 @@ int create_directories(char *fn, int isutf8)
rv = _wstat(seg,&statbuf);
} else
#endif
- rv = stat(segment,&statbuf);
+ rv = stat(segment, &statbuf);
if(rv) {
if(errno == ENOENT) {
#ifdef _WIN32
--
GitLab

View File

@ -1,12 +1,13 @@
Name: vorbis-tools
Summary: Several Ogg Vorbis Tools
Version: 1.4.2
Release: 3
Release: 4
Epoch: 1
License: GPLv2
URL: http://www.xiph.org/
Source: http://downloads.xiph.org/releases/vorbis/%{name}-%{version}.tar.gz
Patch1: vorbis-tools-1.4.2-man-page.patch
Patch2: CVE-2023-43361.patch
BuildRequires: flac-devel gettext gcc libao-devel libcurl-devel libvorbis-devel speex-devel chrpath
@ -48,6 +49,9 @@ chrpath -d %{buildroot}%{_bindir}/*
%exclude %{_docdir}/%{name}*
%changelog
* Thu Oct 24 2024 wangkai <13474090681@163.com> - 1:1.4.2-4
- Fix CVE-2023-43361
* Thu Oct 28 2021 Chenxi Mao <chenxi.mao@suse.com> - 1:1.4.2-3
- Add chrpath to BuildRequires