Project

General

Profile

Actions

Bug #3522

closed

String::size return invalid size on mswin64

Added by beuniv (shintaro kuwamoto) over 13 years ago. Updated almost 13 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.2dev (2010-07-01 revision 28513) [x64-mswin64_90]
Backport:
[ruby-dev:41782]

Description

=begin
x64-mswin64_90環境で、15文字以上のUTF-8文字列のサイズが正常に取得できません。

Z:\ruby-trunk\build>ruby -e"puts "1234567890123\u{3042}".size"
14

Z:\ruby-trunk\build>ruby -e"puts "12345678901234\u{3042}".size"
19
=end

Actions #1

Updated by mame (Yusuke Endoh) over 13 years ago

=begin
遠藤です。

2010年7月2日19:05 shintaro kuwamoto :

x64-mswin64_90環境で、15文字以上のUTF-8文字列のサイズが正常に取得できません。

Z:\ruby-trunk\build>ruby -e"puts "1234567890123\u{3042}".size"
14

Z:\ruby-trunk\build>ruby -e"puts "12345678901234\u{3042}".size"
19

ひょっとして以下のパッチで直らないでしょうか。

diff --git a/string.c b/string.c
index 703797f..510c04e 100644
--- a/string.c
+++ b/string.c
@@ -141,7 +141,7 @@ static inline const char *
search_nonascii(const char *p, const char *e)
{
#if SIZEOF_VALUE == 8
-# define NONASCII_MASK 0x8080808080808080LL
+# define NONASCII_MASK 0x8080808080808080ULL
#elif SIZEOF_VALUE == 4

define NONASCII_MASK 0x80808080UL

#endif

--
Yusuke Endoh

=end

Actions #2

Updated by beuniv (shintaro kuwamoto) over 13 years ago

=begin
こんばんわ。

ひょっとして以下のパッチで直らないでしょうか。

diff --git a/string.c b/string.c
index 703797f..510c04e 100644
--- a/string.c
+++ b/string.c
@@ -141,7 +141,7 @@ static inline const char *
search_nonascii(const char *p, const char *e)
{
#if SIZEOF_VALUE == 8
-# define NONASCII_MASK 0x8080808080808080LL
+# define NONASCII_MASK 0x8080808080808080ULL
#elif SIZEOF_VALUE == 4

define NONASCII_MASK 0x80808080UL

#endif

おお。動くようになりました。
ありがとうございます。

Z:\ruby-trunk\build>ruby -e"puts "1234567890123\u{3042}".size"
14

Z:\ruby-trunk\build>ruby -e"puts "12345678901234\u{3042}".size"
15

--
kuwamoto

=end

Actions #3

Updated by mame (Yusuke Endoh) over 13 years ago

=begin
遠藤です。

2010年7月5日23:42 kuwamoto shintaro :

おお。動くようになりました。
ありがとうございます。

おお。確認ありがとうございます。コミットしておきます。

しかし、0x8080808080808080LL を signed long long int にしてしまうのは

VC のバグのような気もする

--
Yusuke Endoh

=end

Actions #4

Updated by mame (Yusuke Endoh) over 13 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
This issue was solved with changeset r28544.
shintaro, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

=end

Actions #5

Updated by nobu (Nobuyoshi Nakada) over 13 years ago

  • Status changed from Closed to Assigned
  • Assignee set to yugui (Yuki Sonoda)

=begin

=end

Actions #6

Updated by nobu (Nobuyoshi Nakada) over 13 years ago

  • Status changed from Assigned to Closed
  • Assignee changed from yugui (Yuki Sonoda) to mame (Yusuke Endoh)

=begin

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0