Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Use xfree in hash_st_free | John Hawthorn | 2023-12-07 | 1 | -2/+2 |
| | | | | | | | st.c redefines malloc and free to be ruby_xmalloc and ruby_xfree, so when this was copied into hash.c it ended up mismatching an xmalloc with a regular free, which ended up inflating oldmalloc_increase_bytes when hashes were freed by minor GC. | ||||
* | Do not change hash type in Hash#assoc | Nobuyoshi Nakada | 2023-11-21 | 1 | -34/+27 |
| | |||||
* | Raise an exception when Hash#compare_by_identity during its iteration | Yusuke Endoh | 2023-11-21 | 1 | -0/+3 |
| | |||||
* | Raise an exception if ar_table is converted to st_table during iteration | Yusuke Endoh | 2023-11-21 | 1 | -0/+11 |
| | | | | | | | | | | | ar_table may be converted to st_table by `ar_force_convert_table`. If the conversion occurs during the iteration of ar_table, the iteration may lead to memory corruption. This change prevents the catastrophy by throwing an exception when the conversion is detected. This issue is reported by [SuperS](https://hackerone.com/superss) | ||||
* | Just check if iteration level is non-zero | Nobuyoshi Nakada | 2023-11-12 | 1 | -23/+16 |
| | | | | | The level in ivar is no longer needed to check if iterating, only used for increment/decrement. | ||||
* | Refactor hash iteration level | Nobuyoshi Nakada | 2023-11-12 | 1 | -23/+31 |
| | | | | | | - Make it unsigned like as in-flags bits - Make it long since it should be fixable - Reduce it to in-flags bits after decrement | ||||
* | [Bug #19969] Compact st_table after deleted if possible | Nobuyoshi Nakada | 2023-11-11 | 1 | -0/+19 |
| | |||||
* | [DOC] Update documentation for typical implementation of hash | Yuki Tsujimoto | 2023-10-22 | 1 | -1/+1 |
| | |||||
* | [DOC] Missing comment marker | Nobuyoshi Nakada | 2023-09-27 | 1 | -1/+1 |
| | |||||
* | Add rb_hash_free for the GC to use | Peter Zhu | 2023-09-24 | 1 | -0/+8 |
| | |||||
* | Add hash_st_free | Peter Zhu | 2023-09-24 | 1 | -2/+8 |
| | |||||
* | Fix memory leak in Hash#rehash for ST hashes | Peter Zhu | 2023-09-23 | 1 | -8/+9 |
| | | | | | | We need to free the old ST table in Hash#rehash. Co-authored-by: Adam Hess <adamhess1991@gmail.com> | ||||
* | `RHASH_AR_TABLE` never returns NULL now [ci skip] | Nobuyoshi Nakada | 2023-09-06 | 1 | -5/+1 |
| | |||||
* | [DOC] Typo in Hash#key description "so/no such value" | Dorian MariƩ (perso) | 2023-09-03 | 1 | -1/+1 |
| | |||||
* | [DOC] FIx typo in description of Hash#hash (regardless or/of order) | Dorian MariƩ (perso) | 2023-09-03 | 1 | -1/+1 |
| | |||||
* | [DOC] Don't suppress autolinks | BurdetteLamar | 2023-08-12 | 1 | -61/+61 |
| | |||||
* | Add assertion in `RHASH_AR_TABLE_BOUND` | Nobuyoshi Nakada | 2023-08-03 | 1 | -4/+10 |
| | |||||
* | Remove RARRAY_PTR_USE_TRANSIENT | Peter Zhu | 2023-07-13 | 1 | -3/+3 |
| | | | | RARRAY_PTR_USE now does the same things as RARRAY_PTR_USE_TRANSIENT. | ||||
* | Don't check for null pointer in calls to free | Peter Zhu | 2023-06-30 | 1 | -1/+1 |
| | | | | | | | | According to the C99 specification section 7.20.3.2 paragraph 2: > If ptr is a null pointer, no action occurs. So we do not need to check that the pointer is a null pointer. | ||||
* | Fix memory leak in Hash#replace | Peter Zhu | 2023-06-29 | 1 | -1/+14 |
| | | | | Hash#replace can leak memory if the receiver has an ST table. | ||||
* | Fix memory leak when copying ST tables | Peter Zhu | 2023-06-29 | 1 | -2/+5 |
| | | | | | | | | | | | | | | | | | st_copy allocates a st_table, which is not needed for hashes since it is allocated by VWA and embedded, so this causes a memory leak. The following script demonstrates the issue: ```ruby 20.times do 100_000.times do {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9} end puts `ps -o rss= -p #{$$}` end ``` | ||||
* | Refactor rb_hash_replace to use hash_copy | Peter Zhu | 2023-06-29 | 1 | -28/+21 |
| | |||||
* | Declare `RHASH_AR_TABLE` and `RHASH_ST_TABLE` return non-null | Nobuyoshi Nakada | 2023-06-23 | 1 | -4/+2 |
| | |||||
* | Remove dead code in hash.c | Peter Zhu | 2023-06-22 | 1 | -53/+0 |
| | | | | | RHASH_TABLE_NULL_P and ar_alloc_table are no longer needed since all Hash will have AR tables. | ||||
* | hash.c no longer needs the transient heap | Peter Zhu | 2023-06-12 | 1 | -5/+2 |
| | |||||
* | * remove trailing spaces. [ci skip] | git | 2023-06-08 | 1 | -1/+1 |
| | |||||
* | [DOC] Add comment about flags for Hash | Peter Zhu | 2023-06-08 | 1 | -0/+17 |
| | |||||
* | [DOC] Mention the edge case of `any?`/`all?` | Nobuyoshi Nakada | 2023-06-01 | 1 | -0/+5 |
| | |||||
* | Remove dead code in rb_hash_replace | Peter Zhu | 2023-05-23 | 1 | -5/+0 |
| | | | | | We now always copy the ST table, so we don't need to initialize the ST table of hash when hash2 is empty. | ||||
* | Fix crash when replacing ST hash with AR hash | Peter Zhu | 2023-05-23 | 1 | -3/+27 |
| | | | | | | | | | With VWA, AR hashes are much larger than ST hashes. Hash#replace attempts to directly copy the contents of AR hashes into ST hashes so there will be memory corruption caused by writing past the end of memory. This commit changes it so that if a ST hash is being replaced with an AR hash it will insert each element into the ST hash. | ||||
* | Remove dead code in ar_copy | Peter Zhu | 2023-05-23 | 1 | -4/+0 |
| | | | | new_tab can no longer ever be NULL so this is dead code. | ||||
* | Hash.new: print a deprecation warning when receiving keyword arguments (#7828) | Jean byroot Boussier | 2023-05-23 | 1 | -5/+9 |
| | | | | | | | | | | [Feature #19236] In Ruby 3.3, `Hash.new` shall print a deprecation warning if keyword arguments are passed instead of treating them as an implicit positional Hash. This will allow to safely introduce a `capacity` keyword argument in 3.4 Co-authored-by: Jean Boussier <byroot@ruby-lang.org> | ||||
* | Move ar_hint to ar_table_struct | Peter Zhu | 2023-05-17 | 1 | -14/+17 |
| | | | | This allows Hashes with ST tables to fit int he 80 byte size pool. | ||||
* | Implement Hash ST tables on VWA | Peter Zhu | 2023-05-17 | 1 | -71/+39 |
| | |||||
* | Implement Hash AR tables on VWA | Peter Zhu | 2023-05-17 | 1 | -77/+22 |
| | |||||
* | Add `rb_sys_fail_sprintf` macro | Nobuyoshi Nakada | 2023-05-12 | 1 | -4/+4 |
| | |||||
* | [DOC] hash.c: fix typo in `#<=>` docs | Piotr Szotkowski | 2023-05-01 | 1 | -1/+1 |
| | |||||
* | Adjust function style [ci skip] | Nobuyoshi Nakada | 2023-04-15 | 1 | -3/+1 |
| | |||||
* | hash.c: Fix hash_iter_lev_dec corrupting shape | Jean Boussier | 2023-04-11 | 1 | -3/+9 |
| | | | | | | | [Bug #19589] When decrementing `iter_lev` from `65` to `64` the flags would be corrupted, causing the shape_id to be invalid. | ||||
* | [Feature #19474] Refactor NEWOBJ macros | Matt Valentine-House | 2023-04-06 | 1 | -1/+1 |
| | | | | NEWOBJ_OF is now our canonical newobj macro. It takes an optional ec | ||||
* | Change Hash#compact to keep default values and compare_by_identity flag | Jeremy Evans | 2023-03-24 | 1 | -11/+5 |
| | | | | | | | | | The documentation states it returns a copy of self with nil value entries removed. However, the previous behavior was creating a plain new hash with non-nil values copied into it. This change aligns the behavior with the documentation. Fixes [Bug #19113] | ||||
* | Copy compare_by_identity flag for empty hashes in Hash.ruby2_keywords_hash | Jeremy Evans | 2023-03-24 | 1 | -3/+6 |
| | | | | | | | This was already copied for non-empty hashes. As Hash.ruby2_keywords_hash copies default values, it should also copy the compare_by_identity flag. Partially Fixes [Bug #19113] | ||||
* | Do not copy compare_by_identity flag for non-empty hashes in Hash.[] | Jeremy Evans | 2023-03-24 | 1 | -4/+16 |
| | | | | | | | | It wasn't copied for empty hashes, and Hash.[] doesn't copy the default value, so copying the compare_by_identity flag does not make sense. Partially Fixes [Bug #19113] | ||||
* | Resurrect symbols used by ObjectSpace | Takashi Kokubun | 2023-03-06 | 1 | -1/+1 |
| | |||||
* | Stop exporting symbols for MJIT | Takashi Kokubun | 2023-03-06 | 1 | -8/+8 |
| | |||||
* | Implement ObjectSpace::WeakKeyMap basic allocator | Jean Boussier | 2023-02-23 | 1 | -2/+2 |
| | | | | [Feature #18498] | ||||
* | Remove (newly unneeded) remarks about aliases | BurdetteLamar | 2023-02-19 | 1 | -26/+2 |
| | |||||
* | Merge gc.h and internal/gc.h | Matt Valentine-House | 2023-02-09 | 1 | -1/+1 |
| | | | | [Feature #19425] | ||||
* | Remove dead code in ar_copy | Peter Zhu | 2023-02-03 | 1 | -32/+16 |
| | | | | | | All of the callers of ar_copy guarantee that hash2 has an ar table, so we don't need the logic to handle the case when hash2 doesn't have an ar table. | ||||
* | Remove redundant else if statement in hash.c | Peter Zhu | 2023-02-02 | 1 | -2/+4 |
| | | | | Hashes can only be ar or st, so the else if is redundant. |