Pārlūkot izejas kodu

Fix allocation size overflow check in `CowData`

A Thousand Ships 1 gadu atpakaļ
vecāks
revīzija
06ffc7e952
1 mainītis faili ar 5 papildinājumiem un 2 dzēšanām
  1. 5 2
      include/godot_cpp/templates/cowdata.hpp

+ 5 - 2
include/godot_cpp/templates/cowdata.hpp

@@ -102,6 +102,10 @@ private:
 	}
 
 	_FORCE_INLINE_ bool _get_alloc_size_checked(size_t p_elements, size_t *out) const {
+		if (unlikely(p_elements == 0)) {
+			*out = 0;
+			return true;
+		}
 #if defined(__GNUC__)
 		size_t o;
 		size_t p;
@@ -113,13 +117,12 @@ private:
 		if (__builtin_add_overflow(o, static_cast<size_t>(32), &p)) {
 			return false; // No longer allocated here.
 		}
-		return true;
 #else
 		// Speed is more important than correctness here, do the operations unchecked
 		// and hope for the best.
 		*out = _get_alloc_size(p_elements);
-		return true;
 #endif
+		return *out;
 	}
 
 	void _unref(void *p_data);