Project

General

Profile

Actions

Bug #18044

closed

unusual behavior with Arabic string in a Hash

Added by 0xleaf (0x leaf) 3 months ago. Updated 3 months ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:104677]

Description

Hey all,

I found a potential bug where looking up a key that contains an arabic string always returns "nil" instead of the string. To reproduce, run the following script

foo = {"arabic‎" => "ٱلتَّوْبَة"}
p foo.keys # => ["arabic"]
p foo["arabic"] # => nil
p foo.values_at("arabic") => [nil]
foo.fetch "arabic" # Raises error with - did you mean "arabic" ?

Tested on:

  • ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
  • ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x86_64-linux]

Updated by zverok (Victor Shepelev) 3 months ago

If I'll copy-paste your example literally, and then...

foo.keys.first.chars
# => ["a", "r", "a", "b", "i", "c", "‎"]
foo.keys.first.chars.last.unpack('U') # => 8206
8206.to_s(16) # => 200e

It is U200e LTR mark character.
I assume it was introduced on code editing, not on hash storing, because if I'll try to edit your example (remove key and then re-enter it manually), everything works:

foo = {"arabic" => "ٱلتَّوْبَة"}
# => {"arabic"=>"ٱلتَّوْبَة"} 
foo["arabic"]
# => "ٱلتَّوْبَة" 

Updated by 0xleaf (0x leaf) 3 months ago

Thanks ! Indeed removing that invisible character fixes the issue. I wonder if this error could be made more obvious?

Actions #3

Updated by jeremyevans0 (Jeremy Evans) 3 months ago

  • Status changed from Open to Closed
Actions

Also available in: Atom PDF