Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP2:GA
flac
0003-Leave-metadata-items-untouched-if-resize-f...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0003-Leave-metadata-items-untouched-if-resize-function-fa.patch of Package flac
From 707dace4bd82cd6042e524c72544ab50de223a10 Mon Sep 17 00:00:00 2001 From: Martijn van Beurden <mvanb1@gmail.com> Date: Wed, 3 Aug 2022 19:23:46 +0200 Subject: [PATCH] Leave metadata items untouched if resize function fails --- include/FLAC/metadata.h | 12 ++++++++---- src/libFLAC/metadata_object.c | 36 +++++++++++++++++++++++++----------- 2 files changed, 33 insertions(+), 15 deletions(-) --- a/include/FLAC/metadata.h +++ b/include/FLAC/metadata.h @@ -1378,7 +1378,8 @@ FLAC_API FLAC__bool FLAC__metadata_objec /** Resize the seekpoint array. * * If the size shrinks, elements will truncated; if it grows, new placeholder - * points will be added to the end. + * points will be added to the end. If this function returns false, the + * object is left untouched. * * \param object A pointer to an existing SEEKTABLE object. * \param new_num_points The desired length of the array; may be \c 0. @@ -1591,7 +1592,8 @@ FLAC_API FLAC__bool FLAC__metadata_objec /** Resize the comment array. * * If the size shrinks, elements will truncated; if it grows, new empty - * fields will be added to the end. + * fields will be added to the end. If this function returns false, the + * object is left untouched. * * \param object A pointer to an existing VORBIS_COMMENT object. * \param new_num_comments The desired length of the array; may be \c 0. @@ -1871,7 +1873,8 @@ FLAC_API void FLAC__metadata_object_cues /** Resize a track's index point array. * * If the size shrinks, elements will truncated; if it grows, new blank - * indices will be added to the end. + * indices will be added to the end. If this function returns false, the + * track object is left untouched. * * \param object A pointer to an existing CUESHEET object. * \param track_num The index of the track to modify. NOTE: this is not @@ -1957,7 +1960,8 @@ FLAC_API FLAC__bool FLAC__metadata_objec /** Resize the track array. * * If the size shrinks, elements will truncated; if it grows, new blank - * tracks will be added to the end. + * tracks will be added to the end. If this function returns false, the + * object is left untouched. * * \param object A pointer to an existing CUESHEET object. * \param new_num_tracks The desired length of the array; may be \c 0. --- a/src/libFLAC/metadata_object.c +++ b/src/libFLAC/metadata_object.c @@ -950,8 +950,13 @@ FLAC_API FLAC__bool FLAC__metadata_objec free(object->data.seek_table.points); object->data.seek_table.points = 0; } - else if ((object->data.seek_table.points = safe_realloc_(object->data.seek_table.points, new_size)) == NULL) - return false; + else { + /* Leave object->data.seek_table.points untouched if realloc fails */ + FLAC__StreamMetadata_SeekPoint *tmpptr; + if ((tmpptr = realloc(object->data.seek_table.points, new_size)) == NULL) + return false; + object->data.seek_table.points = tmpptr; + } /* if growing, set new elements to placeholders */ if (new_size > old_size) { @@ -1197,12 +1202,11 @@ FLAC_API FLAC__bool FLAC__metadata_objec object->data.vorbis_comment.comments = 0; } else { - FLAC__StreamMetadata_VorbisComment_Entry *oldptr = object->data.vorbis_comment.comments; - if ((object->data.vorbis_comment.comments = realloc(object->data.vorbis_comment.comments, new_size)) == NULL) { - vorbiscomment_entry_array_delete_(oldptr, object->data.vorbis_comment.num_comments); - object->data.vorbis_comment.num_comments = 0; + /* Leave object->data.vorbis_comment.comments untouched if realloc fails */ + FLAC__StreamMetadata_VorbisComment_Entry *tmpptr; + if ((tmpptr = realloc(object->data.vorbis_comment.comments, new_size)) == NULL) return false; - } + object->data.vorbis_comment.comments = tmpptr; } /* if growing, zero all the length/pointers of new elements */ @@ -1502,8 +1506,13 @@ FLAC_API FLAC__bool FLAC__metadata_objec free(track->indices); track->indices = 0; } - else if ((track->indices = safe_realloc_(track->indices, new_size)) == NULL) - return false; + else { + /* Leave track->indices untouched if realloc fails */ + FLAC__StreamMetadata_CueSheet_Index *tmpptr; + if ((tmpptr = realloc(track->indices, new_size)) == NULL) + return false; + track->indices = tmpptr; + } /* if growing, zero all the lengths/pointers of new elements */ if (new_size > old_size) @@ -1597,8 +1606,13 @@ FLAC_API FLAC__bool FLAC__metadata_objec free(object->data.cue_sheet.tracks); object->data.cue_sheet.tracks = 0; } - else if ((object->data.cue_sheet.tracks = safe_realloc_(object->data.cue_sheet.tracks, new_size)) == NULL) - return false; + else { + /* Leave object->data.cue_sheet.tracks untouched if realloc fails */ + FLAC__StreamMetadata_CueSheet_Track *tmpptr; + if ((tmpptr = realloc(object->data.cue_sheet.tracks, new_size)) == NULL) + return false; + object->data.cue_sheet.tracks = tmpptr; + } /* if growing, zero all the lengths/pointers of new elements */ if (new_size > old_size)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor