Not all environs support stack arrays
diff --git a/src/shapes/paint/linear_gradient.cpp b/src/shapes/paint/linear_gradient.cpp
index 24d0c6a..92fb7a6 100644
--- a/src/shapes/paint/linear_gradient.cpp
+++ b/src/shapes/paint/linear_gradient.cpp
@@ -80,9 +80,13 @@
         // build up the color and positions lists
         const double ro = opacity() * renderOpacity();
         const auto count = m_Stops.size();
-        // TODO: replace these with stack-alloc helpers?
-        ColorInt colors[count];
-        float stops[count];
+
+        // need some temporary storage. Allocate enough for both arrays
+        assert(sizeof(ColorInt) == sizeof(float));
+        std::vector<ColorInt> storage(count * 2);
+        ColorInt* colors = storage.data();
+        float* stops = (float*)colors + count;
+
         for (size_t i = 0; i < count; ++i) {
             colors[i] = colorModulateOpacity(m_Stops[i]->colorValue(), ro);
             stops[i] = m_Stops[i]->position();