From 963580c2d503eab7c6d8f60a367498ff103bfa3e Mon Sep 17 00:00:00 2001
From: Chris Robinson <chris.kcat@gmail.com>
Date: Tue, 8 Oct 2019 21:52:08 -0700
Subject: Never return null from CreateRingBuffer

Allocation failure would already throw a bad_alloc anyway, now a size overflow
throws an exception too.
---
 alc/ringbuffer.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'alc/ringbuffer.cpp')

diff --git a/alc/ringbuffer.cpp b/alc/ringbuffer.cpp
index d61f6129..1f72f4b1 100644
--- a/alc/ringbuffer.cpp
+++ b/alc/ringbuffer.cpp
@@ -25,6 +25,7 @@
 #include <algorithm>
 #include <climits>
 #include <cstdint>
+#include <stdexcept>
 
 #include "almalloc.h"
 
@@ -45,7 +46,8 @@ RingBufferPtr CreateRingBuffer(size_t sz, size_t elem_sz, int limit_writes)
 #endif
     }
     ++power_of_two;
-    if(power_of_two < sz) return nullptr;
+    if(power_of_two <= sz || power_of_two > std::numeric_limits<size_t>::max()/elem_sz)
+        throw std::overflow_error{"Ring buffer size overflow"};
 
     const size_t bufbytes{power_of_two * elem_sz};
     RingBufferPtr rb{new (FamCount{bufbytes}) RingBuffer{bufbytes}};
-- 
cgit v1.2.3