diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-15 00:27:20 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-15 00:27:20 +0000 |
commit | f46a43fc58b945c44a726eea66b2cc8a55786b47 (patch) | |
tree | 470a9fe1b2b8fe8c85719fa9c7cf625d4bf88a06 /st.c | |
parent | 30dcac049436eb662b6b915c5a5c8978e0aee462 (diff) |
st.c: fix crashes on huge hash tables
From: Vladimir Makarov <vmakarov@redhat.com>
By Vladimir's estimation, this requires at least 64 GB of memory
to reproduce this bug due to the hash sizes required. So there
is no new test case (and I am unable to test it, myself).
* st.c (get_bins_num): avoid out-of-bounds on shift by using correct type
[ruby-core:78139] [Bug #12939]
* st.c (get_allocated_entries): ditto
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56793 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -417,7 +417,7 @@ get_size_ind(const st_table *tab) { /* Return the number of allocated bins of table TAB. */ static inline st_index_t get_bins_num(const st_table *tab) { - return 1<<tab->bin_power; + return ((st_index_t) 1)<<tab->bin_power; } /* Return mask for a bin index in table TAB. */ @@ -436,7 +436,7 @@ hash_bin(st_hash_t hash_value, st_table *tab) { /* Return the number of allocated entries of table TAB. */ static inline st_index_t get_allocated_entries(const st_table *tab) { - return 1<<tab->entry_power; + return ((st_index_t) 1)<<tab->entry_power; } /* Return size of the allocated bins of table TAB. */ |