1 /* Test of u8_strchr() function.
2 Copyright (C) 2010-2017 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17 /* Written by Paolo Bonzini <bonzini@gnu.org>, 2010. */
26 #include "zerosize-ptr.h"
30 #define U_UCTOMB u8_uctomb
31 #define U32_TO_U u32_to_u8
32 #define U_STRCHR u8_strchr
34 #include "test-strchr.h"
41 /* Check that u8_strchr() does not read past the end of the string. */
43 char *page_boundary
= (char *) zerosize_ptr ();
45 if (page_boundary
!= NULL
)
49 mem
= (UNIT
*) (page_boundary
- 1 * sizeof (UNIT
));
51 ASSERT (u8_strchr (mem
, 0x55) == NULL
);
52 ASSERT (u8_strchr (mem
, 0x123) == NULL
);
53 ASSERT (u8_strchr (mem
, 0x3456) == NULL
);
54 ASSERT (u8_strchr (mem
, 0x23456) == NULL
);
56 mem
= (UNIT
*) (page_boundary
- 2 * sizeof (UNIT
));
59 ASSERT (u8_strchr (mem
, 0x55) == NULL
);
60 ASSERT (u8_strchr (mem
, 0x123) == NULL
);
61 ASSERT (u8_strchr (mem
, 0x3456) == NULL
);
62 ASSERT (u8_strchr (mem
, 0x23456) == NULL
);
64 mem
= (UNIT
*) (page_boundary
- 3 * sizeof (UNIT
));
68 ASSERT (u8_strchr (mem
, 0x55) == NULL
);
69 ASSERT (u8_strchr (mem
, 0x123) == NULL
);
70 ASSERT (u8_strchr (mem
, 0x3456) == NULL
);
71 ASSERT (u8_strchr (mem
, 0x23456) == NULL
);
73 mem
= (UNIT
*) (page_boundary
- 3 * sizeof (UNIT
));
74 mem
[0] = 0xC4; mem
[1] = 0xA0; /* U+0120 */
76 ASSERT (u8_strchr (mem
, 0x55) == NULL
);
77 ASSERT (u8_strchr (mem
, 0x123) == NULL
);
78 ASSERT (u8_strchr (mem
, 0x3456) == NULL
);
79 ASSERT (u8_strchr (mem
, 0x23456) == NULL
);
81 mem
= (UNIT
*) (page_boundary
- 3 * sizeof (UNIT
));
82 mem
[0] = 0xC5; mem
[1] = 0xA3; /* U+0163 */
84 ASSERT (u8_strchr (mem
, 0x55) == NULL
);
85 ASSERT (u8_strchr (mem
, 0x123) == NULL
);
86 ASSERT (u8_strchr (mem
, 0x3456) == NULL
);
87 ASSERT (u8_strchr (mem
, 0x23456) == NULL
);
89 mem
= (UNIT
*) (page_boundary
- 4 * sizeof (UNIT
));
94 ASSERT (u8_strchr (mem
, 0x55) == NULL
);
95 ASSERT (u8_strchr (mem
, 0x123) == NULL
);
96 ASSERT (u8_strchr (mem
, 0x3456) == NULL
);
97 ASSERT (u8_strchr (mem
, 0x23456) == NULL
);
99 mem
= (UNIT
*) (page_boundary
- 4 * sizeof (UNIT
));
101 mem
[1] = 0xC5; mem
[2] = 0xA3; /* U+0163 */
103 ASSERT (u8_strchr (mem
, 0x55) == NULL
);
104 ASSERT (u8_strchr (mem
, 0x123) == NULL
);
105 ASSERT (u8_strchr (mem
, 0x3456) == NULL
);
106 ASSERT (u8_strchr (mem
, 0x23456) == NULL
);
107 ASSERT (u8_strchr (mem
, 0x163) == mem
+ 1);
109 mem
= (UNIT
*) (page_boundary
- 4 * sizeof (UNIT
));
110 mem
[0] = 0xE3; mem
[1] = 0x91; mem
[2] = 0x00; /* U+3450 */
112 ASSERT (u8_strchr (mem
, 0x55) == NULL
);
113 ASSERT (u8_strchr (mem
, 0x123) == NULL
);
114 ASSERT (u8_strchr (mem
, 0x3456) == NULL
);
115 ASSERT (u8_strchr (mem
, 0x23456) == NULL
);
117 mem
= (UNIT
*) (page_boundary
- 4 * sizeof (UNIT
));
118 mem
[0] = 0xE3; mem
[1] = 0x92; mem
[2] = 0x96; /* U+3496 */
120 ASSERT (u8_strchr (mem
, 0x55) == NULL
);
121 ASSERT (u8_strchr (mem
, 0x123) == NULL
);
122 ASSERT (u8_strchr (mem
, 0x3456) == NULL
);
123 ASSERT (u8_strchr (mem
, 0x23456) == NULL
);
125 mem
= (UNIT
*) (page_boundary
- 5 * sizeof (UNIT
));
131 ASSERT (u8_strchr (mem
, 0x55) == NULL
);
132 ASSERT (u8_strchr (mem
, 0x123) == NULL
);
133 ASSERT (u8_strchr (mem
, 0x3456) == NULL
);
134 ASSERT (u8_strchr (mem
, 0x23456) == NULL
);
136 mem
= (UNIT
*) (page_boundary
- 5 * sizeof (UNIT
));
138 mem
[1] = 0xE3; mem
[2] = 0x92; mem
[3] = 0x96; /* U+3496 */
140 ASSERT (u8_strchr (mem
, 0x55) == NULL
);
141 ASSERT (u8_strchr (mem
, 0x123) == NULL
);
142 ASSERT (u8_strchr (mem
, 0x3456) == NULL
);
143 ASSERT (u8_strchr (mem
, 0x23456) == NULL
);
144 ASSERT (u8_strchr (mem
, 0x3496) == mem
+ 1);