Browse Source

libobs: Fix overflow subtracting unsigned numbers

When offset_size is greater than size, size would overflow
Exeldro 3 years ago
parent
commit
27bb608130
1 changed files with 6 additions and 4 deletions
  1. 6 4
      libobs/obs-encoder.c

+ 6 - 4
libobs/obs-encoder.c

@@ -1086,13 +1086,15 @@ static inline void push_back_audio(struct obs_encoder *encoder,
 				   struct audio_data *data, size_t size,
 				   struct audio_data *data, size_t size,
 				   size_t offset_size)
 				   size_t offset_size)
 {
 {
+	if (offset_size >= size)
+		return;
+
 	size -= offset_size;
 	size -= offset_size;
 
 
 	/* push in to the circular buffer */
 	/* push in to the circular buffer */
-	if (size)
-		for (size_t i = 0; i < encoder->planes; i++)
-			circlebuf_push_back(&encoder->audio_input_buffer[i],
-					    data->data[i] + offset_size, size);
+	for (size_t i = 0; i < encoder->planes; i++)
+		circlebuf_push_back(&encoder->audio_input_buffer[i],
+				    data->data[i] + offset_size, size);
 }
 }
 
 
 static inline size_t calc_offset_size(struct obs_encoder *encoder,
 static inline size_t calc_offset_size(struct obs_encoder *encoder,