|
From 427d61131a1af5eed48d5428e723ab4602b56cc1 Mon Sep 17 00:00:00 2001
|
|
From: Mark Harris <mark.hsj@gmail.com>
|
|
Date: Tue, 29 Dec 2020 01:43:37 -0800
|
|
Subject: [PATCH] Fix use of uninitialized serialno
|
|
|
|
Also do not crash if OPE_GET_SERIALNO_REQUEST is used after draining.
|
|
---
|
|
src/opusenc.c | 14 +++++++++++---
|
|
1 file changed, 11 insertions(+), 3 deletions(-)
|
|
|
|
--- a/src/opusenc.c
|
|
+++ b/src/opusenc.c
|
|
@@ -356,6 +356,11 @@ fail:
|
|
return NULL;
|
|
}
|
|
|
|
+static void stream_generate_serialno(EncStream *stream) {
|
|
+ stream->serialno = rand();
|
|
+ stream->serialno_is_set = 1;
|
|
+}
|
|
+
|
|
static void stream_destroy(EncStream *stream) {
|
|
if (stream->comment) free(stream->comment);
|
|
free(stream);
|
|
@@ -512,9 +517,7 @@ int ope_encoder_deferred_init_with_mappi
|
|
|
|
static void init_stream(OggOpusEnc *enc) {
|
|
assert(!enc->streams->stream_is_init);
|
|
- if (!enc->streams->serialno_is_set) {
|
|
- enc->streams->serialno = rand();
|
|
- }
|
|
+ if (!enc->streams->serialno_is_set) stream_generate_serialno(enc->streams);
|
|
|
|
if (enc->oggp != NULL) oggp_chain(enc->oggp, enc->streams->serialno);
|
|
else {
|
|
@@ -1071,6 +1074,11 @@ int ope_encoder_ctl(OggOpusEnc *enc, int
|
|
case OPE_GET_SERIALNO_REQUEST:
|
|
{
|
|
opus_int32 *value = va_arg(ap, opus_int32*);
|
|
+ if (!enc->last_stream) {
|
|
+ ret = OPE_TOO_LATE;
|
|
+ break;
|
|
+ }
|
|
+ if (!enc->last_stream->serialno_is_set) stream_generate_serialno(enc->last_stream);
|
|
*value = enc->last_stream->serialno;
|
|
}
|
|
break;
|