Bug #12204
closedInvalid range of capital letters at Greek alphabet
Description
Greek alphabet's first and last letter is:
- α - ω (lower case)
- Α - Ω (upper case)
So if we write on a ruby console the following script, we get:
('α'..'ω').to_a
=> ["α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "ς", "σ", "τ", "υ", "φ", "χ", "ψ", "ω"]
which is correct, we get all 24 lower case characters of the greek alphabet, and a "special one", the letter "ς" which HAS NO EQUIVALENT uppercase letter. TOTAL: 25 characters
Now if we try to run the above script with upper case characters...
('Α'..'Ω').to_a
=> ["Α", "Β", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", "Π", "Ρ"]
we only get 17 characters. The rest 7 upper case characters are missing! Those are (["Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω"])
Now if we try to "construct" the greek alphabet by using the UTF-8 equivalent number of its chatacter, we get the following:
(913..937).map { |char| char.chr('UTF-8') }
=> ["Α", "Β", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", "Π", "Ρ", "\u03A2", "Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω"]
Note the invalid character "\u03A2" between letters "Ρ" and "Σ".
I believe that the problem is the letter "ς" (greek sigma) which has no upper case equivalent. Ruby throws an exception at this point and never returns the rest of the characters.
[[http://www.fileformat.info/info/unicode/char/03a2/index.htm]]
Updated by tzabaman (George Vrettos) over 8 years ago
- ruby -v changed from 2.3.0 to ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
- Status changed from Open to Closed
Applied in changeset r54210.
string.c: skip invalid char gap
- string.c (enc_succ_alnum_char): try to skip an invalid character
gap between GREEK CAPITAL RHO and SIGMA.
[ruby-core:74478] [Bug #12204]
Updated by usa (Usaku NAKAMURA) over 8 years ago
- Backport changed from 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED
Updated by usa (Usaku NAKAMURA) over 8 years ago
- Backport changed from 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED to 2.1: DONE, 2.2: REQUIRED, 2.3: REQUIRED
ruby_2_1 r54284 merged revision(s) 54210.
Updated by nagachika (Tomoyuki Chikanaga) over 8 years ago
- Backport changed from 2.1: DONE, 2.2: REQUIRED, 2.3: REQUIRED to 2.1: DONE, 2.2: DONE, 2.3: REQUIRED
Backported into ruby_2_2
branch at r54336.
Updated by naruse (Yui NARUSE) over 8 years ago
- Backport changed from 2.1: DONE, 2.2: DONE, 2.3: REQUIRED to 2.1: DONE, 2.2: DONE, 2.3: DONE
ruby_2_3 r54384 merged revision(s) 54210.