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.
68 lines
2.9 KiB
68 lines
2.9 KiB
2 months ago
|
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) */
|