1
1
/*
2
- * Copyright (c) 2000, 2020 , Oracle and/or its affiliates.
2
+ * Copyright (c) 2000, 2024 , Oracle and/or its affiliates.
3
3
*
4
4
* Licensed under the Universal Permissive License v 1.0 as shown at
5
- * http ://oss.oracle.com/licenses/upl.
5
+ * https ://oss.oracle.com/licenses/upl.
6
6
*/
7
7
#include " cxxtest/TestSuite.h"
8
8
@@ -479,7 +479,7 @@ class StringTest : public CxxTest::TestSuite
479
479
String::View vString = String::create (data);
480
480
std::string conv = vString;
481
481
TS_ASSERT (data == conv);
482
-
482
+
483
483
// Test fix for COH-3709
484
484
car[0 ] = (char ) 0x01 ;
485
485
car[1 ] = (char ) 0xDD ;
@@ -499,7 +499,7 @@ class StringTest : public CxxTest::TestSuite
499
499
500
500
void testUTF8Validation ()
501
501
{
502
- // Test Euro character U+20AC; good 3 byte
502
+ // test Euro character U+20AC; good 3 byte
503
503
char euro[4 ];
504
504
euro[0 ] = (char ) 0xe2 ;
505
505
euro[1 ] = (char ) 0x82 ;
@@ -509,16 +509,17 @@ class StringTest : public CxxTest::TestSuite
509
509
String::View vString = String::create (data);
510
510
std::string conv = vString;
511
511
TS_ASSERT_EQUALS (data, conv);
512
-
513
- // Test bad 3 byte, bad second byte
512
+
513
+ // test bad 3 byte, bad second byte
514
514
char three2[4 ];
515
515
three2[0 ] = (char ) 0xe2 ;
516
516
three2[1 ] = (char ) 0x22 ; // bad - should have upper bits '10'
517
517
three2[2 ] = (char ) 0xa9 ;
518
518
three2[3 ] = ' \0 ' ;
519
519
std::string data2 (three2);
520
520
TS_ASSERT_THROWS (String::create (data2), IllegalArgumentException::View);
521
- // Test bad 3 byte, bad third byte
521
+
522
+ // test bad 3 byte, bad third byte
522
523
char three3[4 ];
523
524
three3[0 ] = (char ) 0xe2 ;
524
525
three3[1 ] = (char ) 0x82 ;
@@ -527,7 +528,7 @@ class StringTest : public CxxTest::TestSuite
527
528
std::string data3 (three3);
528
529
TS_ASSERT_THROWS (String::create (data3), IllegalArgumentException::View);
529
530
530
- // Test good 2 byte
531
+ // test good 2 byte
531
532
char two[3 ];
532
533
two[0 ] = (char ) 0xc2 ; // c2 a2 is cent character
533
534
two[1 ] = (char ) 0xa2 ;
@@ -537,12 +538,108 @@ class StringTest : public CxxTest::TestSuite
537
538
std::string conv4 = vString2;
538
539
TS_ASSERT_EQUALS (data4, conv4);
539
540
540
- // Test bad 2 byte
541
+ // test bad 2 byte
541
542
char two2[3 ];
542
- two2[0 ] = (char ) 0xc2 ;
543
- two2[1 ] = (char ) 0x22 ; // bad -should have upper bits '10'
543
+ two2[0 ] = (char ) 0xc2 ;
544
+ two2[1 ] = (char ) 0x22 ; // bad -should have upper bits '10'
544
545
two2[2 ] = ' \0 ' ;
545
546
std::string data5 (two2);
546
547
TS_ASSERT_THROWS (String::create (data5), IllegalArgumentException::View);
548
+
549
+ // test good 4 byte single character: 0xf0938080
550
+ char four[5 ];
551
+ four[0 ] = (char ) 0xf0 ;
552
+ four[1 ] = (char ) 0x93 ;
553
+ four[2 ] = (char ) 0x80 ;
554
+ four[3 ] = (char ) 0x80 ;
555
+ four[4 ] = ' \0 ' ;
556
+ std::string data6 (four);
557
+ String::View vString3 = String::create (data6);
558
+ std::string conv5 = vString3;
559
+ TS_ASSERT_EQUALS (data6, conv5);
560
+ TS_ASSERT_EQUALS (size32_t (1 ), vString3->length ());
561
+
562
+ // test good 4 byte multiple characters: 0xf09f8ebf, 0xf09f8f80, 0xf09f8e89, 0xf09f9294
563
+ char four2[17 ];
564
+ // 0xf09f8ebf
565
+ four2[0 ] = (char ) 0xf0 ;
566
+ four2[1 ] = (char ) 0x9f ;
567
+ four2[2 ] = (char ) 0x8e ;
568
+ four2[3 ] = (char ) 0xbf ;
569
+ // 0xf09f8f80
570
+ four2[4 ] = (char ) 0xf0 ;
571
+ four2[5 ] = (char ) 0x9f ;
572
+ four2[6 ] = (char ) 0x8f ;
573
+ four2[7 ] = (char ) 0x80 ;
574
+ // 0xf09f8e89
575
+ four2[8 ] = (char ) 0xf0 ;
576
+ four2[9 ] = (char ) 0x9f ;
577
+ four2[10 ] = (char ) 0x8e ;
578
+ four2[11 ] = (char ) 0x89 ;
579
+ // 0xf09f9294
580
+ four2[12 ] = (char ) 0xf0 ;
581
+ four2[13 ] = (char ) 0x9f ;
582
+ four2[14 ] = (char ) 0x92 ;
583
+ four2[15 ] = (char ) 0x94 ;
584
+ four2[16 ] = ' \0 ' ;
585
+ std::string data7 (four2);
586
+ vString3 = String::create (data7);
587
+ conv5 = vString3;
588
+ TS_ASSERT_EQUALS (data7, conv5);
589
+ TS_ASSERT_EQUALS (size32_t (4 ), vString3->length ());
590
+
591
+ // test bad 4 byte, bad second byte
592
+ char four3[5 ];
593
+ four3[0 ] = (char ) 0xf0 ;
594
+ four3[1 ] = (char ) 0x22 ; // bad - should have upper bits '10'
595
+ four3[2 ] = (char ) 0x8e ;
596
+ four3[3 ] = (char ) 0xbf ;
597
+ four3[4 ] = ' \0 ' ;
598
+ std::string data8 (four3);
599
+ TS_ASSERT_THROWS (String::create (data8), IllegalArgumentException::View);
600
+
601
+ // test bad 4 byte, bad third byte
602
+ char four4[5 ];
603
+ four4[0 ] = (char ) 0xf0 ;
604
+ four4[1 ] = (char ) 0x9f ;
605
+ four4[2 ] = (char ) 0x22 ; // bad - should have upper bits '10'
606
+ four4[3 ] = (char ) 0xbf ;
607
+ four4[4 ] = ' \0 ' ;
608
+ std::string data9 (four4);
609
+ TS_ASSERT_THROWS (String::create (data9), IllegalArgumentException::View);
610
+
611
+ // test bad 4 byte, bad fourth byte
612
+ char four5[5 ];
613
+ four5[0 ] = (char ) 0xf0 ;
614
+ four5[1 ] = (char ) 0x9f ;
615
+ four5[2 ] = (char ) 0x8e ;
616
+ four5[3 ] = (char ) 0x29 ; // bad - should have upper bits '10'
617
+ four5[4 ] = ' \0 ' ;
618
+ std::string data10 (four5);
619
+ TS_ASSERT_THROWS (String::create (data10), IllegalArgumentException::View);
620
+
621
+ // test bad 4 byte, incomplete - just one byte
622
+ char four6[2 ];
623
+ four6[0 ] = (char ) 0xf0 ;
624
+ four6[1 ] = ' \0 ' ;
625
+ std::string data11 (four6);
626
+ TS_ASSERT_THROWS (String::create (data11), IllegalArgumentException::View);
627
+
628
+ // test bad 4 byte, incomplete - just two bytes
629
+ char four7[3 ];
630
+ four7[0 ] = (char ) 0xf0 ;
631
+ four7[1 ] = (char ) 0x93 ;
632
+ four7[2 ] = ' \0 ' ;
633
+ std::string data12 (four7);
634
+ TS_ASSERT_THROWS (String::create (data12), IllegalArgumentException::View);
635
+
636
+ // test bad 4 byte, incomplete - just three bytes
637
+ char four8[4 ];
638
+ four8[0 ] = (char ) 0xf0 ;
639
+ four8[1 ] = (char ) 0x93 ;
640
+ four8[2 ] = (char ) 0x80 ;
641
+ four8[3 ] = ' \0 ' ;
642
+ std::string data13 (four8);
643
+ TS_ASSERT_THROWS (String::create (data13), IllegalArgumentException::View);
547
644
}
548
645
};
0 commit comments