You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libsndfile/SOURCES/libsndfile-1.0.28-cve-2024-...

68 lines
2.9 KiB

diff -up libsndfile-1.0.28/src/ogg.c.cve-2024-50612prereq libsndfile-1.0.28/src/ogg.c
--- libsndfile-1.0.28/src/ogg.c.cve-2024-50612prereq 2017-04-01 09:18:02.000000000 +0200
+++ libsndfile-1.0.28/src/ogg.c 2024-11-26 15:06:33.595446443 +0100
@@ -45,6 +45,16 @@ static int ogg_stream_classify (SF_PRIVA
static int ogg_page_classify (SF_PRIVATE * psf, const ogg_page * og) ;
int
+ogg_write_page (SF_PRIVATE *psf, ogg_page *page)
+{ int bytes ;
+
+ bytes = psf_fwrite (page->header, 1, page->header_len, psf) ;
+ bytes += psf_fwrite (page->body, 1, page->body_len, psf) ;
+
+ return bytes == page->header_len + page->body_len ;
+} /* ogg_write_page */
+
+int
ogg_open (SF_PRIVATE *psf)
{ OGG_PRIVATE* odata = calloc (1, sizeof (OGG_PRIVATE)) ;
sf_count_t pos = psf_ftell (psf) ;
diff -up libsndfile-1.0.28/src/ogg.h.cve-2024-50612prereq libsndfile-1.0.28/src/ogg.h
--- libsndfile-1.0.28/src/ogg.h.cve-2024-50612prereq 2024-11-26 15:06:45.023560621 +0100
+++ libsndfile-1.0.28/src/ogg.h 2024-11-26 15:06:57.731687587 +0100
@@ -48,5 +48,10 @@ typedef struct
(buf [base] & 0xff))
+/*
+** Write the whole Ogg page out. Convenience function as the ogg_page struct
+** splits header and body data into separate buffers.
+*/
+int ogg_write_page (SF_PRIVATE *, ogg_page *) ;
#endif /* SF_SRC_OGG_H */
diff -up libsndfile-1.0.28/src/ogg_vorbis.c.cve-2024-50612prereq libsndfile-1.0.28/src/ogg_vorbis.c
--- libsndfile-1.0.28/src/ogg_vorbis.c.cve-2024-50612prereq 2017-04-01 09:18:02.000000000 +0200
+++ libsndfile-1.0.28/src/ogg_vorbis.c 2024-11-26 15:06:33.595446443 +0100
@@ -423,8 +423,7 @@ vorbis_write_header (SF_PRIVATE *psf, in
* audio data will start on a new page, as per spec
*/
while ((result = ogg_stream_flush (&odata->ostream, &odata->opage)) != 0)
- { psf_fwrite (odata->opage.header, 1, odata->opage.header_len, psf) ;
- psf_fwrite (odata->opage.body, 1, odata->opage.body_len, psf) ;
+ { ogg_write_page (psf, &odata->opage) ;
} ;
}
@@ -463,8 +462,7 @@ vorbis_close (SF_PRIVATE *psf)
while (!odata->eos)
{ int result = ogg_stream_pageout (&odata->ostream, &odata->opage) ;
if (result == 0) break ;
- psf_fwrite (odata->opage.header, 1, odata->opage.header_len, psf) ;
- psf_fwrite (odata->opage.body, 1, odata->opage.body_len, psf) ;
+ ogg_write_page (psf, &odata->opage) ;
/* this could be set above, but for illustrative purposes, I do
it here (to show that vorbis does know where the stream ends) */
@@ -778,8 +776,7 @@ vorbis_write_samples (SF_PRIVATE *psf, O
{ int result = ogg_stream_pageout (&odata->ostream, &odata->opage) ;
if (result == 0)
break ;
- psf_fwrite (odata->opage.header, 1, odata->opage.header_len, psf) ;
- psf_fwrite (odata->opage.body, 1, odata->opage.body_len, psf) ;
+ ogg_write_page (psf, &odata->opage) ;
/* This could be set above, but for illustrative purposes, I do
** it here (to show that vorbis does know where the stream ends) */