[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

darin at apple.com darin at apple.com
Thu Apr 8 01:01:13 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 0569a02ef878774cf2230b04cfd9800358f95066
Author: darin at apple.com <darin at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Jan 12 01:48:23 2010 +0000

    Fix handling of unusual kana sequences in search
    https://bugs.webkit.org/show_bug.cgi?id=33506
    
    Reviewed by Dan Bernstein.
    
    WebCore:
    
    * editing/TextIterator.cpp:
    (WebCore::composedVoicedSoundMark): Removed unnnecessary case for a
    non-kana-letter character. This function only works for kana letters.
    (WebCore::SearchBuffer::isBadMatch): Fixed voiced sound mark code to
    properly handle cases where one character has a shorter list of
    combining voiced sound marks than the other.
    
    LayoutTests:
    
    * fast/text/find-kana-expected.txt: Updated.
    * fast/text/script-tests/find-kana.js: Added new tests for sequences
    that do not have composed equivalents. This is needed to test the code
    that compares voice marks. The old test cases didn't cover the combining
    character code path because normalizing to NFC combined all the sequences.
    * platform/mac-leopard/fast/text/find-kana-expected.txt: Updated.
    * platform/qt/fast/text/find-kana-expected.txt: Updated.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53114 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 305f466..604a1f4 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,18 @@
+2010-01-11  Darin Adler  <darin at apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Fix handling of unusual kana sequences in search
+        https://bugs.webkit.org/show_bug.cgi?id=33506
+
+        * fast/text/find-kana-expected.txt: Updated.
+        * fast/text/script-tests/find-kana.js: Added new tests for sequences
+        that do not have composed equivalents. This is needed to test the code
+        that compares voice marks. The old test cases didn't cover the combining
+        character code path because normalizing to NFC combined all the sequences.
+        * platform/mac-leopard/fast/text/find-kana-expected.txt: Updated.
+        * platform/qt/fast/text/find-kana-expected.txt: Updated.
+
 2010-01-11  Simon Fraser  <simon.fraser at apple.com>
 
         Reviewed by Kevin Decker.
diff --git a/LayoutTests/fast/text/find-kana-expected.txt b/LayoutTests/fast/text/find-kana-expected.txt
index 8bee3bf..07f6245 100644
--- a/LayoutTests/fast/text/find-kana-expected.txt
+++ b/LayoutTests/fast/text/find-kana-expected.txt
@@ -5,19 +5,27 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 Exact matches first as a baseline
 
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, decomposedHalfwidthKatakanaLetterBa) is true
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, decomposedHalfwidthKatakanaLetterPa) is true
+PASS canFind(decomposedHiraganaLetterBa, decomposedHiraganaLetterBa) is true
 PASS canFind(decomposedHiraganaLetterGa, decomposedHiraganaLetterGa) is true
+PASS canFind(decomposedHiraganaLetterPa, decomposedHiraganaLetterPa) is true
 PASS canFind(decomposedKatakanaLetterGa, decomposedKatakanaLetterGa) is true
 PASS canFind(decomposedLatinCapitalLetterAWithGrave, decomposedLatinCapitalLetterAWithGrave) is true
 PASS canFind(halfwidthKatakanaLetterA, halfwidthKatakanaLetterA) is true
+PASS canFind(halfwidthKatakanaLetterHa, halfwidthKatakanaLetterHa) is true
+PASS canFind(halfwidthKatakanaLetterKa, halfwidthKatakanaLetterKa) is true
 PASS canFind(halfwidthKatakanaLetterSmallA, halfwidthKatakanaLetterSmallA) is true
 PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
-PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
 PASS canFind(hiraganaLetterBa, hiraganaLetterBa) is true
 PASS canFind(hiraganaLetterGa, hiraganaLetterGa) is true
 PASS canFind(hiraganaLetterHa, hiraganaLetterHa) is true
 PASS canFind(hiraganaLetterKa, hiraganaLetterKa) is true
 PASS canFind(hiraganaLetterPa, hiraganaLetterPa) is true
+PASS canFind(hiraganaLetterSmallA, hiraganaLetterSmallA) is true
 PASS canFind(katakanaLetterA, katakanaLetterA) is true
+PASS canFind(katakanaLetterGa, katakanaLetterGa) is true
+PASS canFind(katakanaLetterKa, katakanaLetterKa) is true
 PASS canFind(katakanaLetterSmallA, katakanaLetterSmallA) is true
 PASS canFind(latinCapitalLetterAWithGrave, latinCapitalLetterAWithGrave) is true
 
@@ -55,14 +63,20 @@ PASS canFind(katakanaLetterSmallA, katakanaLetterA) is false
 
 Kana letters where the only difference is in voiced sound marks: Must *not* be treated as equal
 
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, halfwidthKatakanaLetterHa) is false
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, halfwidthKatakanaLetterHa) is false
 PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterHa) is false
 PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterPa) is false
 PASS canFind(decomposedHiraganaLetterGa, halfwidthKatakanaLetterKa) is false
 PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
-PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
 PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterBa) is false
 PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterHa) is false
+PASS canFind(decomposedKatakanaLetterGa, halfwidthKatakanaLetterKa) is false
+PASS canFind(decomposedKatakanaLetterGa, hiraganaLetterKa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterBa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterPa) is false
 PASS canFind(halfwidthKatakanaLetterKa, decomposedHiraganaLetterGa) is false
+PASS canFind(halfwidthKatakanaLetterKa, decomposedKatakanaLetterGa) is false
 PASS canFind(hiraganaLetterBa, decomposedHiraganaLetterPa) is false
 PASS canFind(hiraganaLetterBa, hiraganaLetterHa) is false
 PASS canFind(hiraganaLetterBa, hiraganaLetterPa) is false
@@ -72,7 +86,7 @@ PASS canFind(hiraganaLetterHa, decomposedHiraganaLetterPa) is false
 PASS canFind(hiraganaLetterHa, hiraganaLetterBa) is false
 PASS canFind(hiraganaLetterHa, hiraganaLetterPa) is false
 PASS canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) is false
-PASS canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) is false
+PASS canFind(hiraganaLetterKa, decomposedKatakanaLetterGa) is false
 PASS canFind(hiraganaLetterKa, hiraganaLetterGa) is false
 PASS canFind(hiraganaLetterPa, decomposedHiraganaLetterBa) is false
 PASS canFind(hiraganaLetterPa, hiraganaLetterBa) is false
diff --git a/LayoutTests/fast/text/script-tests/find-kana.js b/LayoutTests/fast/text/script-tests/find-kana.js
index 1bc9913..4596f74 100644
--- a/LayoutTests/fast/text/script-tests/find-kana.js
+++ b/LayoutTests/fast/text/script-tests/find-kana.js
@@ -15,7 +15,9 @@ function canFind(target, specimen)
 var combiningGraveAccent = String.fromCharCode(0x0300);
 var combiningKatakanaHiraganaSemiVoicedSoundMark = String.fromCharCode(0x309A);
 var combiningKatakanaHiraganaVoicedSoundMark = String.fromCharCode(0x3099);
+
 var halfwidthKatakanaLetterA = String.fromCharCode(0xFF71);
+var halfwidthKatakanaLetterHa = String.fromCharCode(0xFF76);
 var halfwidthKatakanaLetterKa = String.fromCharCode(0xFF76);
 var halfwidthKatakanaLetterSmallA = String.fromCharCode(0xFF67);
 var hiraganaLetterA = String.fromCharCode(0x3042);
@@ -31,6 +33,8 @@ var katakanaLetterKa = String.fromCharCode(0x30AB);
 var katakanaLetterSmallA = String.fromCharCode(0x30A1);
 var latinCapitalLetterAWithGrave = String.fromCharCode(0x00C0);
 
+var decomposedHalfwidthKatakanaLetterBa = halfwidthKatakanaLetterHa + combiningKatakanaHiraganaVoicedSoundMark;
+var decomposedHalfwidthKatakanaLetterPa = halfwidthKatakanaLetterHa + combiningKatakanaHiraganaSemiVoicedSoundMark;
 var decomposedHiraganaLetterBa = hiraganaLetterHa + combiningKatakanaHiraganaVoicedSoundMark;
 var decomposedHiraganaLetterGa = hiraganaLetterKa + combiningKatakanaHiraganaVoicedSoundMark;
 var decomposedHiraganaLetterPa = hiraganaLetterHa + combiningKatakanaHiraganaSemiVoicedSoundMark;
@@ -40,19 +44,27 @@ var decomposedLatinCapitalLetterAWithGrave = 'A' + combiningGraveAccent;
 debug('Exact matches first as a baseline');
 debug('');
 
+shouldBe('canFind(decomposedHalfwidthKatakanaLetterBa, decomposedHalfwidthKatakanaLetterBa)', 'true');
+shouldBe('canFind(decomposedHalfwidthKatakanaLetterPa, decomposedHalfwidthKatakanaLetterPa)', 'true');
+shouldBe('canFind(decomposedHiraganaLetterBa, decomposedHiraganaLetterBa)', 'true');
 shouldBe('canFind(decomposedHiraganaLetterGa, decomposedHiraganaLetterGa)', 'true');
+shouldBe('canFind(decomposedHiraganaLetterPa, decomposedHiraganaLetterPa)', 'true');
 shouldBe('canFind(decomposedKatakanaLetterGa, decomposedKatakanaLetterGa)', 'true');
 shouldBe('canFind(decomposedLatinCapitalLetterAWithGrave, decomposedLatinCapitalLetterAWithGrave)', 'true');
 shouldBe('canFind(halfwidthKatakanaLetterA, halfwidthKatakanaLetterA)', 'true');
+shouldBe('canFind(halfwidthKatakanaLetterHa, halfwidthKatakanaLetterHa)', 'true');
+shouldBe('canFind(halfwidthKatakanaLetterKa, halfwidthKatakanaLetterKa)', 'true');
 shouldBe('canFind(halfwidthKatakanaLetterSmallA, halfwidthKatakanaLetterSmallA)', 'true');
 shouldBe('canFind(hiraganaLetterA, hiraganaLetterA)', 'true');
-shouldBe('canFind(hiraganaLetterA, hiraganaLetterA)', 'true');
 shouldBe('canFind(hiraganaLetterBa, hiraganaLetterBa)', 'true');
 shouldBe('canFind(hiraganaLetterGa, hiraganaLetterGa)', 'true');
 shouldBe('canFind(hiraganaLetterHa, hiraganaLetterHa)', 'true');
 shouldBe('canFind(hiraganaLetterKa, hiraganaLetterKa)', 'true');
 shouldBe('canFind(hiraganaLetterPa, hiraganaLetterPa)', 'true');
+shouldBe('canFind(hiraganaLetterSmallA, hiraganaLetterSmallA)', 'true');
 shouldBe('canFind(katakanaLetterA, katakanaLetterA)', 'true');
+shouldBe('canFind(katakanaLetterGa, katakanaLetterGa)', 'true');
+shouldBe('canFind(katakanaLetterKa, katakanaLetterKa)', 'true');
 shouldBe('canFind(katakanaLetterSmallA, katakanaLetterSmallA)', 'true');
 shouldBe('canFind(latinCapitalLetterAWithGrave, latinCapitalLetterAWithGrave)', 'true');
 
@@ -98,14 +110,20 @@ debug('');
 debug('Kana letters where the only difference is in voiced sound marks: Must *not* be treated as equal');
 debug('');
 
+shouldBe('canFind(decomposedHalfwidthKatakanaLetterBa, halfwidthKatakanaLetterHa)', 'false');
+shouldBe('canFind(decomposedHalfwidthKatakanaLetterPa, halfwidthKatakanaLetterHa)', 'false');
 shouldBe('canFind(decomposedHiraganaLetterBa, hiraganaLetterHa)', 'false');
 shouldBe('canFind(decomposedHiraganaLetterBa, hiraganaLetterPa)', 'false');
 shouldBe('canFind(decomposedHiraganaLetterGa, halfwidthKatakanaLetterKa)', 'false');
 shouldBe('canFind(decomposedHiraganaLetterGa, hiraganaLetterKa)', 'false');
-shouldBe('canFind(decomposedHiraganaLetterGa, hiraganaLetterKa)', 'false');
 shouldBe('canFind(decomposedHiraganaLetterPa, hiraganaLetterBa)', 'false');
 shouldBe('canFind(decomposedHiraganaLetterPa, hiraganaLetterHa)', 'false');
+shouldBe('canFind(decomposedKatakanaLetterGa, halfwidthKatakanaLetterKa)', 'false');
+shouldBe('canFind(decomposedKatakanaLetterGa, hiraganaLetterKa)', 'false');
+shouldBe('canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterBa)', 'false');
+shouldBe('canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterPa)', 'false');
 shouldBe('canFind(halfwidthKatakanaLetterKa, decomposedHiraganaLetterGa)', 'false');
+shouldBe('canFind(halfwidthKatakanaLetterKa, decomposedKatakanaLetterGa)', 'false');
 shouldBe('canFind(hiraganaLetterBa, decomposedHiraganaLetterPa)', 'false');
 shouldBe('canFind(hiraganaLetterBa, hiraganaLetterHa)', 'false');
 shouldBe('canFind(hiraganaLetterBa, hiraganaLetterPa)', 'false');
@@ -115,7 +133,7 @@ shouldBe('canFind(hiraganaLetterHa, decomposedHiraganaLetterPa)', 'false');
 shouldBe('canFind(hiraganaLetterHa, hiraganaLetterBa)', 'false');
 shouldBe('canFind(hiraganaLetterHa, hiraganaLetterPa)', 'false');
 shouldBe('canFind(hiraganaLetterKa, decomposedHiraganaLetterGa)', 'false');
-shouldBe('canFind(hiraganaLetterKa, decomposedHiraganaLetterGa)', 'false');
+shouldBe('canFind(hiraganaLetterKa, decomposedKatakanaLetterGa)', 'false');
 shouldBe('canFind(hiraganaLetterKa, hiraganaLetterGa)', 'false');
 shouldBe('canFind(hiraganaLetterPa, decomposedHiraganaLetterBa)', 'false');
 shouldBe('canFind(hiraganaLetterPa, hiraganaLetterBa)', 'false');
diff --git a/LayoutTests/platform/mac-leopard/fast/text/find-kana-expected.txt b/LayoutTests/platform/mac-leopard/fast/text/find-kana-expected.txt
index 84edbf5..ea5308d 100644
--- a/LayoutTests/platform/mac-leopard/fast/text/find-kana-expected.txt
+++ b/LayoutTests/platform/mac-leopard/fast/text/find-kana-expected.txt
@@ -5,19 +5,27 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 Exact matches first as a baseline
 
-FAIL canFind(decomposedHiraganaLetterGa, decomposedHiraganaLetterGa) should be true. Was false.
-FAIL canFind(decomposedKatakanaLetterGa, decomposedKatakanaLetterGa) should be true. Was false.
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, decomposedHalfwidthKatakanaLetterBa) is true
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, decomposedHalfwidthKatakanaLetterPa) is true
+PASS canFind(decomposedHiraganaLetterBa, decomposedHiraganaLetterBa) is true
+PASS canFind(decomposedHiraganaLetterGa, decomposedHiraganaLetterGa) is true
+PASS canFind(decomposedHiraganaLetterPa, decomposedHiraganaLetterPa) is true
+PASS canFind(decomposedKatakanaLetterGa, decomposedKatakanaLetterGa) is true
 PASS canFind(decomposedLatinCapitalLetterAWithGrave, decomposedLatinCapitalLetterAWithGrave) is true
 PASS canFind(halfwidthKatakanaLetterA, halfwidthKatakanaLetterA) is true
+PASS canFind(halfwidthKatakanaLetterHa, halfwidthKatakanaLetterHa) is true
+PASS canFind(halfwidthKatakanaLetterKa, halfwidthKatakanaLetterKa) is true
 PASS canFind(halfwidthKatakanaLetterSmallA, halfwidthKatakanaLetterSmallA) is true
 PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
-PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
 PASS canFind(hiraganaLetterBa, hiraganaLetterBa) is true
 PASS canFind(hiraganaLetterGa, hiraganaLetterGa) is true
 PASS canFind(hiraganaLetterHa, hiraganaLetterHa) is true
 PASS canFind(hiraganaLetterKa, hiraganaLetterKa) is true
 PASS canFind(hiraganaLetterPa, hiraganaLetterPa) is true
+PASS canFind(hiraganaLetterSmallA, hiraganaLetterSmallA) is true
 PASS canFind(katakanaLetterA, katakanaLetterA) is true
+PASS canFind(katakanaLetterGa, katakanaLetterGa) is true
+PASS canFind(katakanaLetterKa, katakanaLetterKa) is true
 PASS canFind(katakanaLetterSmallA, katakanaLetterSmallA) is true
 PASS canFind(latinCapitalLetterAWithGrave, latinCapitalLetterAWithGrave) is true
 
@@ -55,6 +63,8 @@ PASS canFind(katakanaLetterSmallA, katakanaLetterA) is false
 
 Kana letters where the only difference is in voiced sound marks: Must *not* be treated as equal
 
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, halfwidthKatakanaLetterHa) is false
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, halfwidthKatakanaLetterHa) is false
 PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterHa) is false
 PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterPa) is false
 PASS canFind(decomposedHiraganaLetterGa, halfwidthKatakanaLetterKa) is false
@@ -62,7 +72,12 @@ PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
 PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
 PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterBa) is false
 PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterHa) is false
+PASS canFind(decomposedKatakanaLetterGa, halfwidthKatakanaLetterKa) is false
+PASS canFind(decomposedKatakanaLetterGa, hiraganaLetterKa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterBa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterPa) is false
 FAIL canFind(halfwidthKatakanaLetterKa, decomposedHiraganaLetterGa) should be false. Was true.
+PASS canFind(halfwidthKatakanaLetterKa, decomposedKatakanaLetterGa) is false
 PASS canFind(hiraganaLetterBa, decomposedHiraganaLetterPa) is false
 PASS canFind(hiraganaLetterBa, hiraganaLetterHa) is false
 PASS canFind(hiraganaLetterBa, hiraganaLetterPa) is false
@@ -72,7 +87,7 @@ FAIL canFind(hiraganaLetterHa, decomposedHiraganaLetterPa) should be false. Was
 PASS canFind(hiraganaLetterHa, hiraganaLetterBa) is false
 PASS canFind(hiraganaLetterHa, hiraganaLetterPa) is false
 FAIL canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) should be false. Was true.
-FAIL canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) should be false. Was true.
+PASS canFind(hiraganaLetterKa, decomposedKatakanaLetterGa) is false
 PASS canFind(hiraganaLetterKa, hiraganaLetterGa) is false
 PASS canFind(hiraganaLetterPa, decomposedHiraganaLetterBa) is false
 PASS canFind(hiraganaLetterPa, hiraganaLetterBa) is false
diff --git a/LayoutTests/platform/qt/fast/text/find-kana-expected.txt b/LayoutTests/platform/qt/fast/text/find-kana-expected.txt
index 1c07882..a5d3b85 100644
--- a/LayoutTests/platform/qt/fast/text/find-kana-expected.txt
+++ b/LayoutTests/platform/qt/fast/text/find-kana-expected.txt
@@ -5,19 +5,27 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 Exact matches first as a baseline
 
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, decomposedHalfwidthKatakanaLetterBa) is true
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, decomposedHalfwidthKatakanaLetterPa) is true
+PASS canFind(decomposedHiraganaLetterBa, decomposedHiraganaLetterBa) is true
 PASS canFind(decomposedHiraganaLetterGa, decomposedHiraganaLetterGa) is true
+PASS canFind(decomposedHiraganaLetterPa, decomposedHiraganaLetterPa) is true
 PASS canFind(decomposedKatakanaLetterGa, decomposedKatakanaLetterGa) is true
 PASS canFind(decomposedLatinCapitalLetterAWithGrave, decomposedLatinCapitalLetterAWithGrave) is true
 PASS canFind(halfwidthKatakanaLetterA, halfwidthKatakanaLetterA) is true
+PASS canFind(halfwidthKatakanaLetterHa, halfwidthKatakanaLetterHa) is true
+PASS canFind(halfwidthKatakanaLetterKa, halfwidthKatakanaLetterKa) is true
 PASS canFind(halfwidthKatakanaLetterSmallA, halfwidthKatakanaLetterSmallA) is true
 PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
-PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
 PASS canFind(hiraganaLetterBa, hiraganaLetterBa) is true
 PASS canFind(hiraganaLetterGa, hiraganaLetterGa) is true
 PASS canFind(hiraganaLetterHa, hiraganaLetterHa) is true
 PASS canFind(hiraganaLetterKa, hiraganaLetterKa) is true
 PASS canFind(hiraganaLetterPa, hiraganaLetterPa) is true
+PASS canFind(hiraganaLetterSmallA, hiraganaLetterSmallA) is true
 PASS canFind(katakanaLetterA, katakanaLetterA) is true
+PASS canFind(katakanaLetterGa, katakanaLetterGa) is true
+PASS canFind(katakanaLetterKa, katakanaLetterKa) is true
 PASS canFind(katakanaLetterSmallA, katakanaLetterSmallA) is true
 PASS canFind(latinCapitalLetterAWithGrave, latinCapitalLetterAWithGrave) is true
 
@@ -55,6 +63,8 @@ PASS canFind(katakanaLetterSmallA, katakanaLetterA) is false
 
 Kana letters where the only difference is in voiced sound marks: Must *not* be treated as equal
 
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, halfwidthKatakanaLetterHa) is false
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, halfwidthKatakanaLetterHa) is false
 PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterHa) is false
 PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterPa) is false
 PASS canFind(decomposedHiraganaLetterGa, halfwidthKatakanaLetterKa) is false
@@ -62,7 +72,12 @@ PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
 PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
 PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterBa) is false
 PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterHa) is false
+PASS canFind(decomposedKatakanaLetterGa, halfwidthKatakanaLetterKa) is false
+PASS canFind(decomposedKatakanaLetterGa, hiraganaLetterKa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterBa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterPa) is false
 PASS canFind(halfwidthKatakanaLetterKa, decomposedHiraganaLetterGa) is false
+PASS canFind(halfwidthKatakanaLetterKa, decomposedKatakanaLetterGa) is false
 PASS canFind(hiraganaLetterBa, decomposedHiraganaLetterPa) is false
 PASS canFind(hiraganaLetterBa, hiraganaLetterHa) is false
 PASS canFind(hiraganaLetterBa, hiraganaLetterPa) is false
@@ -72,7 +87,7 @@ FAIL canFind(hiraganaLetterHa, decomposedHiraganaLetterPa) should be false. Was
 PASS canFind(hiraganaLetterHa, hiraganaLetterBa) is false
 PASS canFind(hiraganaLetterHa, hiraganaLetterPa) is false
 FAIL canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) should be false. Was true.
-FAIL canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) should be false. Was true.
+PASS canFind(hiraganaLetterKa, decomposedKatakanaLetterGa) is false
 PASS canFind(hiraganaLetterKa, hiraganaLetterGa) is false
 PASS canFind(hiraganaLetterPa, decomposedHiraganaLetterBa) is false
 PASS canFind(hiraganaLetterPa, hiraganaLetterBa) is false
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 9ae4115..d3d23d4 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,17 @@
+2010-01-11  Darin Adler  <darin at apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Fix handling of unusual kana sequences in search
+        https://bugs.webkit.org/show_bug.cgi?id=33506
+
+        * editing/TextIterator.cpp:
+        (WebCore::composedVoicedSoundMark): Removed unnnecessary case for a
+        non-kana-letter character. This function only works for kana letters.
+        (WebCore::SearchBuffer::isBadMatch): Fixed voiced sound mark code to
+        properly handle cases where one character has a shorter list of
+        combining voiced sound marks than the other.
+
 2010-01-11  Victor Wang  <victorw at chromium.org>
 
         Reviewed by Dimitri Glazkov.
diff --git a/WebCore/editing/TextIterator.cpp b/WebCore/editing/TextIterator.cpp
index b7beefb..44a203f 100644
--- a/WebCore/editing/TextIterator.cpp
+++ b/WebCore/editing/TextIterator.cpp
@@ -1639,7 +1639,6 @@ static inline VoicedSoundMarkType composedVoicedSoundMark(UChar character)
     case 0x30F8: // KATAKANA LETTER VI
     case 0x30F9: // KATAKANA LETTER VE
     case 0x30FA: // KATAKANA LETTER VO
-    case 0x30FE: // KATAKANA VOICED ITERATION MARK
         return VoicedSoundMark;
     case 0x3071: // HIRAGANA LETTER PA
     case 0x3074: // HIRAGANA LETTER PI
@@ -1816,7 +1815,14 @@ inline bool SearchBuffer::isBadMatch(const UChar* match, size_t matchLength) con
         ++b;
 
         // Check for differences in combining voiced sound marks found after the letter.
-        while (a != aEnd && b != bEnd && isCombiningVoicedSoundMark(*a) && isCombiningVoicedSoundMark(*b)) {
+        while (1) {
+            if (!(a != aEnd && isCombiningVoicedSoundMark(*a))) {
+                if (b != bEnd && isCombiningVoicedSoundMark(*b))
+                    return true;
+                break;
+            }
+            if (!(b != bEnd && isCombiningVoicedSoundMark(*b)))
+                return true;
             if (*a != *b)
                 return true;
             ++a;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list