|
|
|
@ -1,5 +1,3 @@
|
|
|
|
|
Backported to 1.3.2
|
|
|
|
|
|
|
|
|
|
commit 21fe95ee828b0b9b944f6aa0bb02d24fbb981815
|
|
|
|
|
Author: Martijn van Beurden <mvanb1@gmail.com>
|
|
|
|
|
Date: Wed Aug 3 13:52:19 2022 +0200
|
|
|
|
@ -21,10 +19,11 @@ Date: Wed Aug 3 13:52:19 2022 +0200
|
|
|
|
|
could encounter double frees. Here the safe_realloc_nofree
|
|
|
|
|
functions are used.
|
|
|
|
|
|
|
|
|
|
diff -up flac-1.3.2/include/share/alloc.h.cve-2020-22219 flac-1.3.2/include/share/alloc.h
|
|
|
|
|
--- flac-1.3.2/include/share/alloc.h.cve-2020-22219 2016-12-07 21:10:26.218454157 +0100
|
|
|
|
|
+++ flac-1.3.2/include/share/alloc.h 2023-08-31 11:32:36.335453612 +0200
|
|
|
|
|
@@ -161,17 +161,30 @@ static inline void *safe_realloc_(void *
|
|
|
|
|
diff --git a/include/share/alloc.h b/include/share/alloc.h
|
|
|
|
|
index 9b53b010..74f444d6 100644
|
|
|
|
|
--- a/include/share/alloc.h
|
|
|
|
|
+++ b/include/share/alloc.h
|
|
|
|
|
@@ -161,17 +161,30 @@ static inline void *safe_realloc_(void *ptr, size_t size)
|
|
|
|
|
free(oldptr);
|
|
|
|
|
return newptr;
|
|
|
|
|
}
|
|
|
|
@ -58,7 +57,7 @@ diff -up flac-1.3.2/include/share/alloc.h.cve-2020-22219 flac-1.3.2/include/shar
|
|
|
|
|
{
|
|
|
|
|
size2 += size1;
|
|
|
|
|
if(size2 < size1)
|
|
|
|
|
@@ -182,7 +195,7 @@ static inline void *safe_realloc_add_3op
|
|
|
|
|
@@ -182,7 +195,7 @@ static inline void *safe_realloc_add_3op_(void *ptr, size_t size1, size_t size2,
|
|
|
|
|
return realloc(ptr, size3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -67,7 +66,7 @@ diff -up flac-1.3.2/include/share/alloc.h.cve-2020-22219 flac-1.3.2/include/shar
|
|
|
|
|
{
|
|
|
|
|
size2 += size1;
|
|
|
|
|
if(size2 < size1)
|
|
|
|
|
@@ -205,6 +218,15 @@ static inline void *safe_realloc_mul_2op
|
|
|
|
|
@@ -207,6 +220,15 @@ static inline void *safe_realloc_mul_2op_(void *ptr, size_t size1, size_t size2)
|
|
|
|
|
return safe_realloc_(ptr, size1*size2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -83,7 +82,7 @@ diff -up flac-1.3.2/include/share/alloc.h.cve-2020-22219 flac-1.3.2/include/shar
|
|
|
|
|
/* size1 * (size2 + size3) */
|
|
|
|
|
static inline void *safe_realloc_muladd2_(void *ptr, size_t size1, size_t size2, size_t size3)
|
|
|
|
|
{
|
|
|
|
|
@@ -216,4 +238,15 @@ static inline void *safe_realloc_muladd2
|
|
|
|
|
@@ -220,4 +242,15 @@ static inline void *safe_realloc_muladd2_(void *ptr, size_t size1, size_t size2,
|
|
|
|
|
return safe_realloc_mul_2op_(ptr, size1, size2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -99,10 +98,11 @@ diff -up flac-1.3.2/include/share/alloc.h.cve-2020-22219 flac-1.3.2/include/shar
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
#endif
|
|
|
|
|
diff -up flac-1.3.2/src/flac/encode.c.cve-2020-22219 flac-1.3.2/src/flac/encode.c
|
|
|
|
|
--- flac-1.3.2/src/flac/encode.c.cve-2020-22219 2016-12-07 21:10:26.218454157 +0100
|
|
|
|
|
+++ flac-1.3.2/src/flac/encode.c 2023-08-31 11:32:36.335453612 +0200
|
|
|
|
|
@@ -1744,10 +1744,10 @@ static void static_metadata_clear(static
|
|
|
|
|
diff --git a/src/flac/encode.c b/src/flac/encode.c
|
|
|
|
|
index a7d1f7b2..b82ced76 100644
|
|
|
|
|
--- a/src/flac/encode.c
|
|
|
|
|
+++ b/src/flac/encode.c
|
|
|
|
|
@@ -1734,10 +1734,10 @@ static void static_metadata_clear(static_metadata_t *m)
|
|
|
|
|
static FLAC__bool static_metadata_append(static_metadata_t *m, FLAC__StreamMetadata *d, FLAC__bool needs_delete)
|
|
|
|
|
{
|
|
|
|
|
void *x;
|
|
|
|
@ -115,10 +115,11 @@ diff -up flac-1.3.2/src/flac/encode.c.cve-2020-22219 flac-1.3.2/src/flac/encode.
|
|
|
|
|
return false;
|
|
|
|
|
m->needs_delete = (FLAC__bool*)x;
|
|
|
|
|
m->metadata[m->num_metadata] = d;
|
|
|
|
|
diff -up flac-1.3.2/src/flac/foreign_metadata.c.cve-2020-22219 flac-1.3.2/src/flac/foreign_metadata.c
|
|
|
|
|
--- flac-1.3.2/src/flac/foreign_metadata.c.cve-2020-22219 2016-12-07 21:10:26.222454288 +0100
|
|
|
|
|
+++ flac-1.3.2/src/flac/foreign_metadata.c 2023-08-31 11:32:36.335453612 +0200
|
|
|
|
|
@@ -75,7 +75,7 @@ static FLAC__bool copy_data_(FILE *fin,
|
|
|
|
|
diff --git a/src/flac/foreign_metadata.c b/src/flac/foreign_metadata.c
|
|
|
|
|
index 9a1fb96c..c86dff42 100644
|
|
|
|
|
--- a/src/flac/foreign_metadata.c
|
|
|
|
|
+++ b/src/flac/foreign_metadata.c
|
|
|
|
|
@@ -74,7 +74,7 @@ static FLAC__bool copy_data_(FILE *fin, FILE *fout, size_t size, const char **er
|
|
|
|
|
|
|
|
|
|
static FLAC__bool append_block_(foreign_metadata_t *fm, FLAC__off_t offset, FLAC__uint32 size, const char **error)
|
|
|
|
|
{
|
|
|
|
@ -127,10 +128,11 @@ diff -up flac-1.3.2/src/flac/foreign_metadata.c.cve-2020-22219 flac-1.3.2/src/fl
|
|
|
|
|
if(fb) {
|
|
|
|
|
fb[fm->num_blocks].offset = offset;
|
|
|
|
|
fb[fm->num_blocks].size = size;
|
|
|
|
|
diff -up flac-1.3.2/src/libFLAC/bitwriter.c.cve-2020-22219 flac-1.3.2/src/libFLAC/bitwriter.c
|
|
|
|
|
--- flac-1.3.2/src/libFLAC/bitwriter.c.cve-2020-22219 2016-12-07 21:10:26.222454288 +0100
|
|
|
|
|
+++ flac-1.3.2/src/libFLAC/bitwriter.c 2023-08-31 11:32:36.335453612 +0200
|
|
|
|
|
@@ -124,7 +124,7 @@ FLAC__bool bitwriter_grow_(FLAC__BitWrit
|
|
|
|
|
diff --git a/src/libFLAC/bitwriter.c b/src/libFLAC/bitwriter.c
|
|
|
|
|
index 79ab8649..8865a2f4 100644
|
|
|
|
|
--- a/src/libFLAC/bitwriter.c
|
|
|
|
|
+++ b/src/libFLAC/bitwriter.c
|
|
|
|
|
@@ -133,7 +133,7 @@ FLAC__bool bitwriter_grow_(FLAC__BitWriter *bw, uint32_t bits_to_add)
|
|
|
|
|
FLAC__ASSERT(new_capacity > bw->capacity);
|
|
|
|
|
FLAC__ASSERT(new_capacity >= bw->words + ((bw->bits + bits_to_add + FLAC__BITS_PER_WORD - 1) / FLAC__BITS_PER_WORD));
|
|
|
|
|
|
|
|
|
@ -139,22 +141,24 @@ diff -up flac-1.3.2/src/libFLAC/bitwriter.c.cve-2020-22219 flac-1.3.2/src/libFLA
|
|
|
|
|
if(new_buffer == 0)
|
|
|
|
|
return false;
|
|
|
|
|
bw->buffer = new_buffer;
|
|
|
|
|
diff -up flac-1.3.2/src/libFLAC/metadata_object.c.cve-2020-22219 flac-1.3.2/src/libFLAC/metadata_object.c
|
|
|
|
|
--- flac-1.3.2/src/libFLAC/metadata_object.c.cve-2020-22219 2023-08-31 11:32:36.336453612 +0200
|
|
|
|
|
+++ flac-1.3.2/src/libFLAC/metadata_object.c 2023-08-31 11:34:18.844405405 +0200
|
|
|
|
|
@@ -98,7 +98,7 @@ static FLAC__bool free_copy_bytes_(FLAC_
|
|
|
|
|
diff --git a/src/libFLAC/metadata_object.c b/src/libFLAC/metadata_object.c
|
|
|
|
|
index 7cc8ee9f..2c7da8db 100644
|
|
|
|
|
--- a/src/libFLAC/metadata_object.c
|
|
|
|
|
+++ b/src/libFLAC/metadata_object.c
|
|
|
|
|
@@ -98,7 +98,7 @@ static FLAC__bool free_copy_bytes_(FLAC__byte **to, const FLAC__byte *from, uint
|
|
|
|
|
/* realloc() failure leaves entry unchanged */
|
|
|
|
|
static FLAC__bool ensure_null_terminated_(FLAC__byte **entry, unsigned length)
|
|
|
|
|
static FLAC__bool ensure_null_terminated_(FLAC__byte **entry, uint32_t length)
|
|
|
|
|
{
|
|
|
|
|
- FLAC__byte *x = safe_realloc_add_2op_(*entry, length, /*+*/1);
|
|
|
|
|
+ FLAC__byte *x = safe_realloc_nofree_add_2op_(*entry, length, /*+*/1);
|
|
|
|
|
if (x != NULL) {
|
|
|
|
|
x[length] = '\0';
|
|
|
|
|
*entry = x;
|
|
|
|
|
diff -up flac-1.3.2/src/plugin_common/tags.c.cve-2020-22219 flac-1.3.2/src/plugin_common/tags.c
|
|
|
|
|
--- flac-1.3.2/src/plugin_common/tags.c.cve-2020-22219 2016-12-07 21:10:26.234454678 +0100
|
|
|
|
|
+++ flac-1.3.2/src/plugin_common/tags.c 2023-08-31 11:32:36.336453612 +0200
|
|
|
|
|
@@ -317,7 +317,7 @@ FLAC__bool FLAC_plugin__tags_add_tag_utf
|
|
|
|
|
diff --git a/src/plugin_common/tags.c b/src/plugin_common/tags.c
|
|
|
|
|
index e9227444..ffd846b6 100644
|
|
|
|
|
--- a/src/plugin_common/tags.c
|
|
|
|
|
+++ b/src/plugin_common/tags.c
|
|
|
|
|
@@ -317,7 +317,7 @@ FLAC__bool FLAC_plugin__tags_add_tag_utf8(FLAC__StreamMetadata *tags, const char
|
|
|
|
|
const size_t value_len = strlen(value);
|
|
|
|
|
const size_t separator_len = strlen(separator);
|
|
|
|
|
FLAC__byte *new_entry;
|
|
|
|
@ -163,10 +167,11 @@ diff -up flac-1.3.2/src/plugin_common/tags.c.cve-2020-22219 flac-1.3.2/src/plugi
|
|
|
|
|
return false;
|
|
|
|
|
memcpy(new_entry+entry->length, separator, separator_len);
|
|
|
|
|
entry->length += separator_len;
|
|
|
|
|
diff -up flac-1.3.2/src/share/utf8/iconvert.c.cve-2020-22219 flac-1.3.2/src/share/utf8/iconvert.c
|
|
|
|
|
--- flac-1.3.2/src/share/utf8/iconvert.c.cve-2020-22219 2016-12-07 21:10:26.234454678 +0100
|
|
|
|
|
+++ flac-1.3.2/src/share/utf8/iconvert.c 2023-08-31 11:32:36.336453612 +0200
|
|
|
|
|
@@ -149,7 +149,7 @@ int iconvert(const char *fromcode, const
|
|
|
|
|
diff --git a/src/share/utf8/iconvert.c b/src/share/utf8/iconvert.c
|
|
|
|
|
index 8ab53c10..876c06e8 100644
|
|
|
|
|
--- a/src/share/utf8/iconvert.c
|
|
|
|
|
+++ b/src/share/utf8/iconvert.c
|
|
|
|
|
@@ -149,7 +149,7 @@ int iconvert(const char *fromcode, const char *tocode,
|
|
|
|
|
iconv_close(cd1);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|