[#122643] [Ruby Bug#21498] Windows - Ruby Overrides C Library APIs thus breaking them — "cfis (Charlie Savage) via ruby-core" <ruby-core@...>

Issue #21498 has been reported by cfis (Charlie Savage).

9 messages 2025/07/02

[#122658] [Ruby Feature#21501] Include native filenames in backtraces as sources for native methods — "ivoanjo (Ivo Anjo) via ruby-core" <ruby-core@...>

Issue #21501 has been reported by ivoanjo (Ivo Anjo).

10 messages 2025/07/05

[#122665] [Ruby Bug#21503] \p{Word} does not match on \p{Join_Control} while docs say it does — "procmarco (Marco Concetto Rudilosso) via ruby-core" <ruby-core@...>

SXNzdWUgIzIxNTAzIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IHByb2NtYXJjbyAoTWFyY28gQ29uY2V0

8 messages 2025/07/07

[#122734] [Ruby Bug#21511] Use-after-free of the execution context after the fiber object carrying it is freed in GC — "tuonigou (tianyang sun) via ruby-core" <ruby-core@...>

Issue #21511 has been reported by tuonigou (tianyang sun).

10 messages 2025/07/14

[#122797] [Ruby Feature#21515] Add `&return` as sugar for `x=my_calculation; return x if x` — "nhorton (Noah Horton) via ruby-core" <ruby-core@...>

Issue #21515 has been reported by nhorton (Noah Horton).

13 messages 2025/07/16

[#122842] [Ruby Feature#21518] Statistical helpers to `Enumerable` — "Amitleshed (Amit Leshed) via ruby-core" <ruby-core@...>

SXNzdWUgIzIxNTE4IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IEFtaXRsZXNoZWQgKEFtaXQgTGVzaGVk

12 messages 2025/07/23

[#122847] [Ruby Feature#21520] Feature Proposal: Enumerator::Lazy#peek — "nuzair46 (Nuzair Rasheed) via ruby-core" <ruby-core@...>

SXNzdWUgIzIxNTIwIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IG51emFpcjQ2IChOdXphaXIgUmFzaGVl

12 messages 2025/07/24

[ruby-core:122768] [Ruby Bug#21437] Date#hash may return different values for equal dates with large years

From: "k0kubun (Takashi Kokubun) via ruby-core" <ruby-core@...>
Date: 2025-07-14 21:33:13 UTC
List: ruby-core #122768
Issue #21437 has been updated by k0kubun (Takashi Kokubun).

Backport changed from 3.2: WONTFIX, 3.3: DONE, 3.4: REQUIRED to 3.2: WONTFIX, 3.3: DONE, 3.4: DONE

ruby_3_4 commit:02744e58f3d410931a58873e1dab8752740e60ff merged revision(s) commit:c1877d431e76f4a782d51602fa8487e98d302956.

----------------------------------------
Bug #21437: Date#hash may return different values for equal dates with large years
https://bugs.ruby-lang.org/issues/21437#change-114047

* Author: Stranger6667 (Dmitry Dygalo)
* Status: Closed
* ruby -v: 3.2.8 - 3.4.4 (and older versions too)
* Backport: 3.2: WONTFIX, 3.3: DONE, 3.4: DONE
----------------------------------------
Parsing the same date string allocates new large integer objects with different pointer addresses, which then affects the hash value due to `d_lite_hash` behavior.

```ruby
require 'date'

# Small year - consistent hashes
Date.strptime('2024-5-9', '%Y-%m-%d').hash
#=> 3287407234087466140
Date.strptime('2024-5-9', '%Y-%m-%d').hash  
#=> 3287407234087466140

# BUG - Large year - different hashes for identical date strings
Date.strptime('3171505571716611468830131104691-5-9', '%Y-%m-%d').hash
#=> 3525034678868094350
Date.strptime('3171505571716611468830131104691-5-9', '%Y-%m-%d').hash
#=> 2502076152602341316  # Different hash for same date!
```

In [ext/date/date_core.c](https://github.com/ruby/ruby/blob/v3_4_4/ext/date/date_core.c#L6936):

```c
static VALUE
d_lite_hash(VALUE self)
{
    st_index_t v, h[4];
    get_d1(self);
    h[0] = m_nth(dat);  // Could be different for equal large integers
    // ...
    v = rb_memhash(h, sizeof(h));
    return ST2FIX(v);
}
```

The hash function uses this pointer address directly in `rb_memhash`, so equal dates parsed separately get different hashes.

This breaks the hash contract that equal objects must have equal hashes.



-- 
https://bugs.ruby-lang.org/
______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/


In This Thread

Prev Next