Skip to content

Commit 19daca4

Browse files
committed
QA: stratum: Add buffer size tests
1 parent b7afc55 commit 19daca4

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

src/datum_stratum_tests.c

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,58 @@ void datum_stratum_mod_username_tests() {
124124
datum_test(0 == strcmp(buf, "def.ghi"));
125125
datum_test(datum_stratum_mod_username(s, buf, sizeof(buf), 0x8000, modname, 2) == pool_addr);
126126
datum_test(datum_stratum_mod_username(s, buf, sizeof(buf), 0xffff, modname, 2) == pool_addr);
127+
128+
// Intentionally overflow buf with address: we lose the worker name, but get the full address via its umod buffer
129+
s = "def.ghi~x";
130+
modname = &s[8];
131+
memset(buf, 0x0e, 8);
132+
res = datum_stratum_mod_username(s, buf, 2, 0, modname, 1);
133+
datum_test(res != buf);
134+
datum_test(res != pool_addr);
135+
datum_test(buf[2] == 0x0e);
136+
datum_test(0 == strcmp(res, "addrA"));
137+
res = datum_stratum_mod_username(s, buf, 2, 0x4ccc, modname, 1);
138+
datum_test(0 == strcmp(res, "addrA"));
139+
datum_test(datum_stratum_mod_username(s, buf, 2, 0x4ccd, modname, 1) == pool_addr);
140+
datum_test(datum_stratum_mod_username(s, buf, 2, 0xffff, modname, 1) == pool_addr);
141+
datum_test(buf[2] == 0x0e);
142+
datum_test(buf[6] == 0x0e);
143+
res = datum_stratum_mod_username(s, buf, 6, 0, modname, 1);
144+
datum_test(res == buf);
145+
datum_test(res != pool_addr);
146+
datum_test(buf[6] == 0x0e);
147+
datum_test(0 == strcmp(res, "addrA"));
148+
memset(buf, 0x0e, 9);
149+
datum_test(datum_stratum_mod_username(s, buf, 7, 0, modname, 1) == buf);
150+
datum_test(buf[8] == 0x0e);
151+
datum_test(0 == strcmp(res, "addrA."));
152+
memset(buf, 0x0e, 10);
153+
datum_test(datum_stratum_mod_username(s, buf, 8, 0, modname, 1) == buf);
154+
datum_test(buf[9] == 0x0e);
155+
datum_test(0 == strcmp(res, "addrA.g"));
156+
memset(buf, 0x0e, 11);
157+
datum_test(datum_stratum_mod_username(s, buf, 9, 0, modname, 1) == buf);
158+
datum_test(buf[10] == 0x0e);
159+
datum_test(0 == strcmp(res, "addrA.gh"));
160+
memset(buf, 0x0e, 12);
161+
datum_test(datum_stratum_mod_username(s, buf, 10, 0, modname, 1) == buf);
162+
datum_test(buf[11] == 0x0e);
163+
datum_test(0 == strcmp(res, "addrA.ghi"));
164+
s = "def.ghi~:)";
165+
modname = &s[8];
166+
memset(buf, 0x0e, 9);
167+
datum_test(datum_stratum_mod_username(s, buf, 2, 0, modname, 2) == buf);
168+
datum_test(buf[2] == 0x0e);
169+
datum_test(0 == strcmp(res, "d"));
170+
datum_test(datum_stratum_mod_username(s, buf, 6, 0, modname, 2) == buf);
171+
datum_test(buf[6] == 0x0e);
172+
datum_test(0 == strcmp(res, "def.g"));
173+
datum_test(datum_stratum_mod_username(s, buf, 7, 0, modname, 2) == buf);
174+
datum_test(buf[7] == 0x0e);
175+
datum_test(0 == strcmp(res, "def.gh"));
176+
datum_test(datum_stratum_mod_username(s, buf, 8, 0, modname, 2) == buf);
177+
datum_test(buf[8] == 0x0e);
178+
datum_test(0 == strcmp(res, "def.ghi"));
127179
}
128180

129181
void datum_stratum_tests(void) {

0 commit comments

Comments
 (0)