Skip to content

Commit d719954

Browse files
[libc] Fix mbrtowc test (#153721)
Previously, we were trying to memset a pointer that wasn't being initialized, and the test would randomly fail. This PR replaces the pointers with actual objects.
1 parent 1fd1d63 commit d719954

File tree

1 file changed

+30
-30
lines changed

1 file changed

+30
-30
lines changed

libc/test/src/wchar/mbrtowc_test.cpp

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,18 @@ TEST_F(LlvmLibcMBRToWCTest, TwoByte) {
3737
const char ch[2] = {static_cast<char>(0xC2),
3838
static_cast<char>(0x8E)}; // Ž car symbol
3939
wchar_t dest[2];
40-
mbstate_t *mb;
40+
mbstate_t mb;
4141
LIBC_NAMESPACE::memset(&mb, 0, sizeof(mbstate_t));
42-
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 2, mb);
42+
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 2, &mb);
4343
ASSERT_EQ(static_cast<int>(*dest), 142);
4444
ASSERT_EQ(static_cast<int>(n), 2);
4545
ASSERT_ERRNO_SUCCESS();
4646

4747
// Should fail since we have not read enough
48-
n = LIBC_NAMESPACE::mbrtowc(dest, ch, 1, mb);
48+
n = LIBC_NAMESPACE::mbrtowc(dest, ch, 1, &mb);
4949
ASSERT_EQ(static_cast<int>(n), -2);
5050
// Should pass after reading one more byte
51-
n = LIBC_NAMESPACE::mbrtowc(dest, ch + 1, 1, mb);
51+
n = LIBC_NAMESPACE::mbrtowc(dest, ch + 1, 1, &mb);
5252
ASSERT_EQ(static_cast<int>(n), 1);
5353
ASSERT_EQ(static_cast<int>(*dest), 142);
5454
ASSERT_ERRNO_SUCCESS();
@@ -58,19 +58,19 @@ TEST_F(LlvmLibcMBRToWCTest, ThreeByte) {
5858
const char ch[3] = {static_cast<char>(0xE2), static_cast<char>(0x88),
5959
static_cast<char>(0x91)}; // ∑ sigma symbol
6060
wchar_t dest[2];
61-
mbstate_t *mb;
61+
mbstate_t mb;
6262
LIBC_NAMESPACE::memset(&mb, 0, sizeof(mbstate_t));
63-
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 3, mb);
63+
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 3, &mb);
6464
ASSERT_EQ(static_cast<int>(*dest), 8721);
6565
ASSERT_EQ(static_cast<int>(n), 3);
6666
ASSERT_ERRNO_SUCCESS();
6767

6868
// Should fail since we have not read enough
69-
n = LIBC_NAMESPACE::mbrtowc(dest, ch, 1, mb);
69+
n = LIBC_NAMESPACE::mbrtowc(dest, ch, 1, &mb);
7070
ASSERT_EQ(static_cast<int>(n), -2);
7171
ASSERT_ERRNO_SUCCESS();
7272
// Should pass after reading two more bytes
73-
n = LIBC_NAMESPACE::mbrtowc(dest, ch + 1, 2, mb);
73+
n = LIBC_NAMESPACE::mbrtowc(dest, ch + 1, 2, &mb);
7474
ASSERT_EQ(static_cast<int>(n), 2);
7575
ASSERT_EQ(static_cast<int>(*dest), 8721);
7676
ASSERT_ERRNO_SUCCESS();
@@ -81,18 +81,18 @@ TEST_F(LlvmLibcMBRToWCTest, FourByte) {
8181
static_cast<char>(0xA4),
8282
static_cast<char>(0xA1)}; // 🤡 clown emoji
8383
wchar_t dest[2];
84-
mbstate_t *mb;
84+
mbstate_t mb;
8585
LIBC_NAMESPACE::memset(&mb, 0, sizeof(mbstate_t));
86-
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 4, mb);
86+
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 4, &mb);
8787
ASSERT_EQ(static_cast<int>(*dest), 129313);
8888
ASSERT_EQ(static_cast<int>(n), 4);
8989
ASSERT_ERRNO_SUCCESS();
9090
// Should fail since we have not read enough
91-
n = LIBC_NAMESPACE::mbrtowc(dest, ch, 2, mb);
91+
n = LIBC_NAMESPACE::mbrtowc(dest, ch, 2, &mb);
9292
ASSERT_EQ(static_cast<int>(n), -2);
9393
ASSERT_ERRNO_SUCCESS();
9494
// Should pass after reading two more bytes
95-
n = LIBC_NAMESPACE::mbrtowc(dest, ch + 2, 2, mb);
95+
n = LIBC_NAMESPACE::mbrtowc(dest, ch + 2, 2, &mb);
9696
ASSERT_EQ(static_cast<int>(n), 2);
9797
ASSERT_EQ(static_cast<int>(*dest), 129313);
9898
ASSERT_ERRNO_SUCCESS();
@@ -101,9 +101,9 @@ TEST_F(LlvmLibcMBRToWCTest, FourByte) {
101101
TEST_F(LlvmLibcMBRToWCTest, InvalidByte) {
102102
const char ch[1] = {static_cast<char>(0x80)};
103103
wchar_t dest[2];
104-
mbstate_t *mb;
104+
mbstate_t mb;
105105
LIBC_NAMESPACE::memset(&mb, 0, sizeof(mbstate_t));
106-
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 1, mb);
106+
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 1, &mb);
107107
ASSERT_EQ(static_cast<int>(n), -1);
108108
ASSERT_ERRNO_EQ(EILSEQ);
109109
}
@@ -113,18 +113,18 @@ TEST_F(LlvmLibcMBRToWCTest, InvalidMultiByte) {
113113
static_cast<char>(0x80),
114114
static_cast<char>(0x00)}; // invalid sequence of bytes
115115
wchar_t dest[2];
116-
mbstate_t *mb;
116+
mbstate_t mb;
117117
LIBC_NAMESPACE::memset(&mb, 0, sizeof(mbstate_t));
118118
// Trying to push all 4 should error
119-
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 4, mb);
119+
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 4, &mb);
120120
ASSERT_EQ(static_cast<int>(n), -1);
121121
ASSERT_ERRNO_EQ(EILSEQ);
122122
// Trying to push just the first one should error
123-
n = LIBC_NAMESPACE::mbrtowc(dest, ch, 1, mb);
123+
n = LIBC_NAMESPACE::mbrtowc(dest, ch, 1, &mb);
124124
ASSERT_EQ(static_cast<int>(n), -1);
125125
ASSERT_ERRNO_EQ(EILSEQ);
126126
// Trying to push the second and third should correspond to null wc
127-
n = LIBC_NAMESPACE::mbrtowc(dest, ch + 1, 2, mb);
127+
n = LIBC_NAMESPACE::mbrtowc(dest, ch + 1, 2, &mb);
128128
ASSERT_EQ(static_cast<int>(n), 0);
129129
ASSERT_TRUE(*dest == L'\0');
130130
ASSERT_ERRNO_SUCCESS();
@@ -136,10 +136,10 @@ TEST_F(LlvmLibcMBRToWCTest, InvalidLastByte) {
136136
const char ch[4] = {static_cast<char>(0xF1), static_cast<char>(0x80),
137137
static_cast<char>(0x80), static_cast<char>(0xC0)};
138138
wchar_t dest[2];
139-
mbstate_t *mb;
139+
mbstate_t mb;
140140
LIBC_NAMESPACE::memset(&mb, 0, sizeof(mbstate_t));
141141
// Trying to push all 4 should error
142-
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 4, mb);
142+
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 4, &mb);
143143
ASSERT_EQ(static_cast<int>(n), -1);
144144
ASSERT_ERRNO_EQ(EILSEQ);
145145
}
@@ -148,10 +148,10 @@ TEST_F(LlvmLibcMBRToWCTest, ValidTwoByteWithExtraRead) {
148148
const char ch[3] = {static_cast<char>(0xC2), static_cast<char>(0x8E),
149149
static_cast<char>(0x80)};
150150
wchar_t dest[2];
151-
mbstate_t *mb;
151+
mbstate_t mb;
152152
LIBC_NAMESPACE::memset(&mb, 0, sizeof(mbstate_t));
153153
// Trying to push all 3 should return valid 2 byte
154-
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 3, mb);
154+
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 3, &mb);
155155
ASSERT_EQ(static_cast<int>(n), 2);
156156
ASSERT_EQ(static_cast<int>(*dest), 142);
157157
ASSERT_ERRNO_SUCCESS();
@@ -161,31 +161,31 @@ TEST_F(LlvmLibcMBRToWCTest, TwoValidTwoBytes) {
161161
const char ch[4] = {static_cast<char>(0xC2), static_cast<char>(0x8E),
162162
static_cast<char>(0xC7), static_cast<char>(0x8C)};
163163
wchar_t dest[2];
164-
mbstate_t *mb;
164+
mbstate_t mb;
165165
LIBC_NAMESPACE::memset(&mb, 0, sizeof(mbstate_t));
166166
// mbstate should reset after reading first one
167-
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 2, mb);
167+
size_t n = LIBC_NAMESPACE::mbrtowc(dest, ch, 2, &mb);
168168
ASSERT_EQ(static_cast<int>(n), 2);
169169
ASSERT_EQ(static_cast<int>(*dest), 142);
170170
ASSERT_ERRNO_SUCCESS();
171-
n = LIBC_NAMESPACE::mbrtowc(dest + 1, ch + 2, 2, mb);
171+
n = LIBC_NAMESPACE::mbrtowc(dest + 1, ch + 2, 2, &mb);
172172
ASSERT_EQ(static_cast<int>(n), 2);
173173
ASSERT_EQ(static_cast<int>(*(dest + 1)), 460);
174174
ASSERT_ERRNO_SUCCESS();
175175
}
176176

177177
TEST_F(LlvmLibcMBRToWCTest, NullString) {
178178
wchar_t dest[2] = {L'O', L'K'};
179-
mbstate_t *mb;
179+
mbstate_t mb;
180180
LIBC_NAMESPACE::memset(&mb, 0, sizeof(mbstate_t));
181181
// reading on nullptr should return 0
182-
size_t n = LIBC_NAMESPACE::mbrtowc(dest, nullptr, 2, mb);
182+
size_t n = LIBC_NAMESPACE::mbrtowc(dest, nullptr, 2, &mb);
183183
ASSERT_EQ(static_cast<int>(n), 0);
184184
ASSERT_TRUE(dest[0] == L'O');
185185
ASSERT_ERRNO_SUCCESS();
186186
// reading a null terminator should return 0
187187
const char *ch = "\0";
188-
n = LIBC_NAMESPACE::mbrtowc(dest, ch, 1, mb);
188+
n = LIBC_NAMESPACE::mbrtowc(dest, ch, 1, &mb);
189189
ASSERT_EQ(static_cast<int>(n), 0);
190190
ASSERT_ERRNO_SUCCESS();
191191
}
@@ -194,10 +194,10 @@ TEST_F(LlvmLibcMBRToWCTest, NullDest) {
194194
const char ch[4] = {static_cast<char>(0xF0), static_cast<char>(0x9F),
195195
static_cast<char>(0xA4),
196196
static_cast<char>(0xA1)}; // 🤡 clown emoji
197-
mbstate_t *mb;
197+
mbstate_t mb;
198198
LIBC_NAMESPACE::memset(&mb, 0, sizeof(mbstate_t));
199199
// reading nullptr should return correct size
200-
size_t n = LIBC_NAMESPACE::mbrtowc(nullptr, ch, 10, mb);
200+
size_t n = LIBC_NAMESPACE::mbrtowc(nullptr, ch, 10, &mb);
201201
ASSERT_EQ(static_cast<int>(n), 4);
202202
ASSERT_ERRNO_SUCCESS();
203203
}

0 commit comments

Comments
 (0)