aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2020-04-22 15:09:49 +0200
committerAldy Hernandez <aldyh@redhat.com>2020-04-22 15:17:50 +0200
commit25cfa84da6650c149522bb70412aa1c9aa85526e (patch)
tree73c36c8f347066bb5bc58344b144f8ab02486aa3
parent31445ce3c2b77d8c0e3f347f4a8cd14c28f4b237 (diff)
downloadgcc-25cfa84da6650c149522bb70412aa1c9aa85526e.zip
gcc-25cfa84da6650c149522bb70412aa1c9aa85526e.tar.gz
gcc-25cfa84da6650c149522bb70412aa1c9aa85526e.tar.bz2
Do not overflow when resizing large widest_irange's.
-rw-r--r--gcc/value-range.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index 43a8a5b..cc260f1 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -281,6 +281,10 @@ widest_irange::resize_if_needed (unsigned nranges)
if (m_max_ranges >= nranges)
return;
+ // We're about to double the size. Bail if it won't fit.
+ if (nranges * 2 > sizeof (m_max_ranges) * 255)
+ return;
+
bool must_initialize = m_blob == NULL;
m_max_ranges = nranges * 2;
unsigned alloc_size = m_max_ranges * sizeof (*m_blob) * 2;