Skip to content

Commit 2d2c21a

Browse files
committed
test: do not call alloca() inside the list of arguments
1 parent ce088d6 commit 2d2c21a

File tree

1 file changed

+57
-86
lines changed

1 file changed

+57
-86
lines changed

src/test/test-hexdecoct.c

Lines changed: 57 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -187,94 +187,65 @@ static void test_base32hexmem(void) {
187187
free(b32);
188188
}
189189

190-
static void test_unbase32hexmem(void) {
191-
void *mem;
190+
static void test_unbase32hexmem_one(const char *hex, bool padding, int retval, const char *ans) {
191+
_cleanup_free_ void *mem = NULL;
192192
size_t len;
193193

194-
assert_se(unbase32hexmem("", STRLEN(""), true, &mem, &len) == 0);
195-
assert_se(streq(strndupa(mem, len), ""));
196-
free(mem);
197-
198-
assert_se(unbase32hexmem("CO======", STRLEN("CO======"), true, &mem, &len) == 0);
199-
assert_se(streq(strndupa(mem, len), "f"));
200-
free(mem);
201-
202-
assert_se(unbase32hexmem("CPNG====", STRLEN("CPNG===="), true, &mem, &len) == 0);
203-
assert_se(streq(strndupa(mem, len), "fo"));
204-
free(mem);
205-
206-
assert_se(unbase32hexmem("CPNMU===", STRLEN("CPNMU==="), true, &mem, &len) == 0);
207-
assert_se(streq(strndupa(mem, len), "foo"));
208-
free(mem);
209-
210-
assert_se(unbase32hexmem("CPNMUOG=", STRLEN("CPNMUOG="), true, &mem, &len) == 0);
211-
assert_se(streq(strndupa(mem, len), "foob"));
212-
free(mem);
213-
214-
assert_se(unbase32hexmem("CPNMUOJ1", STRLEN("CPNMUOJ1"), true, &mem, &len) == 0);
215-
assert_se(streq(strndupa(mem, len), "fooba"));
216-
free(mem);
217-
218-
assert_se(unbase32hexmem("CPNMUOJ1E8======", STRLEN("CPNMUOJ1E8======"), true, &mem, &len) == 0);
219-
assert_se(streq(strndupa(mem, len), "foobar"));
220-
free(mem);
221-
222-
assert_se(unbase32hexmem("A", STRLEN("A"), true, &mem, &len) == -EINVAL);
223-
assert_se(unbase32hexmem("A=======", STRLEN("A======="), true, &mem, &len) == -EINVAL);
224-
assert_se(unbase32hexmem("AAA=====", STRLEN("AAA====="), true, &mem, &len) == -EINVAL);
225-
assert_se(unbase32hexmem("AAAAAA==", STRLEN("AAAAAA=="), true, &mem, &len) == -EINVAL);
226-
assert_se(unbase32hexmem("AB======", STRLEN("AB======"), true, &mem, &len) == -EINVAL);
227-
assert_se(unbase32hexmem("AAAB====", STRLEN("AAAB===="), true, &mem, &len) == -EINVAL);
228-
assert_se(unbase32hexmem("AAAAB===", STRLEN("AAAAB==="), true, &mem, &len) == -EINVAL);
229-
assert_se(unbase32hexmem("AAAAAAB=", STRLEN("AAAAAAB="), true, &mem, &len) == -EINVAL);
230-
231-
assert_se(unbase32hexmem("XPNMUOJ1", STRLEN("CPNMUOJ1"), true, &mem, &len) == -EINVAL);
232-
assert_se(unbase32hexmem("CXNMUOJ1", STRLEN("CPNMUOJ1"), true, &mem, &len) == -EINVAL);
233-
assert_se(unbase32hexmem("CPXMUOJ1", STRLEN("CPNMUOJ1"), true, &mem, &len) == -EINVAL);
234-
assert_se(unbase32hexmem("CPNXUOJ1", STRLEN("CPNMUOJ1"), true, &mem, &len) == -EINVAL);
235-
assert_se(unbase32hexmem("CPNMXOJ1", STRLEN("CPNMUOJ1"), true, &mem, &len) == -EINVAL);
236-
assert_se(unbase32hexmem("CPNMUXJ1", STRLEN("CPNMUOJ1"), true, &mem, &len) == -EINVAL);
237-
assert_se(unbase32hexmem("CPNMUOX1", STRLEN("CPNMUOJ1"), true, &mem, &len) == -EINVAL);
238-
assert_se(unbase32hexmem("CPNMUOJX", STRLEN("CPNMUOJ1"), true, &mem, &len) == -EINVAL);
239-
240-
assert_se(unbase32hexmem("", STRLEN(""), false, &mem, &len) == 0);
241-
assert_se(streq(strndupa(mem, len), ""));
242-
free(mem);
243-
244-
assert_se(unbase32hexmem("CO", STRLEN("CO"), false, &mem, &len) == 0);
245-
assert_se(streq(strndupa(mem, len), "f"));
246-
free(mem);
247-
248-
assert_se(unbase32hexmem("CPNG", STRLEN("CPNG"), false, &mem, &len) == 0);
249-
assert_se(streq(strndupa(mem, len), "fo"));
250-
free(mem);
251-
252-
assert_se(unbase32hexmem("CPNMU", STRLEN("CPNMU"), false, &mem, &len) == 0);
253-
assert_se(streq(strndupa(mem, len), "foo"));
254-
free(mem);
255-
256-
assert_se(unbase32hexmem("CPNMUOG", STRLEN("CPNMUOG"), false, &mem, &len) == 0);
257-
assert_se(streq(strndupa(mem, len), "foob"));
258-
free(mem);
259-
260-
assert_se(unbase32hexmem("CPNMUOJ1", STRLEN("CPNMUOJ1"), false, &mem, &len) == 0);
261-
assert_se(streq(strndupa(mem, len), "fooba"));
262-
free(mem);
263-
264-
assert_se(unbase32hexmem("CPNMUOJ1E8", STRLEN("CPNMUOJ1E8"), false, &mem, &len) == 0);
265-
assert_se(streq(strndupa(mem, len), "foobar"));
266-
free(mem);
267-
268-
assert_se(unbase32hexmem("CPNMUOG=", STRLEN("CPNMUOG="), false, &mem, &len) == -EINVAL);
269-
assert_se(unbase32hexmem("CPNMUOJ1E8======", STRLEN("CPNMUOJ1E8======"), false, &mem, &len) == -EINVAL);
270-
assert_se(unbase32hexmem("A", STRLEN("A"), false, &mem, &len) == -EINVAL);
271-
assert_se(unbase32hexmem("A", STRLEN("A"), false, &mem, &len) == -EINVAL);
272-
assert_se(unbase32hexmem("AAA", STRLEN("AAA"), false, &mem, &len) == -EINVAL);
273-
assert_se(unbase32hexmem("AAAAAA", STRLEN("AAAAAA"), false, &mem, &len) == -EINVAL);
274-
assert_se(unbase32hexmem("AB", STRLEN("AB"), false, &mem, &len) == -EINVAL);
275-
assert_se(unbase32hexmem("AAAB", STRLEN("AAAB"), false, &mem, &len) == -EINVAL);
276-
assert_se(unbase32hexmem("AAAAB", STRLEN("AAAAB"), false, &mem, &len) == -EINVAL);
277-
assert_se(unbase32hexmem("AAAAAAB", STRLEN("AAAAAAB"), false, &mem, &len) == -EINVAL);
194+
assert_se(unbase32hexmem(hex, (size_t) -1, padding, &mem, &len) == retval);
195+
if (retval == 0) {
196+
char *str;
197+
198+
str = strndupa(mem, len);
199+
assert_se(streq(str, ans));
200+
}
201+
}
202+
203+
static void test_unbase32hexmem(void) {
204+
test_unbase32hexmem_one("", true, 0, "");
205+
206+
test_unbase32hexmem_one("CO======", true, 0, "f");
207+
test_unbase32hexmem_one("CPNG====", true, 0, "fo");
208+
test_unbase32hexmem_one("CPNMU===", true, 0, "foo");
209+
test_unbase32hexmem_one("CPNMUOG=", true, 0, "foob");
210+
test_unbase32hexmem_one("CPNMUOJ1", true, 0, "fooba");
211+
test_unbase32hexmem_one("CPNMUOJ1E8======", true, 0, "foobar");
212+
213+
test_unbase32hexmem_one("A", true, -EINVAL, NULL);
214+
test_unbase32hexmem_one("A=======", true, -EINVAL, NULL);
215+
test_unbase32hexmem_one("AAA=====", true, -EINVAL, NULL);
216+
test_unbase32hexmem_one("AAAAAA==", true, -EINVAL, NULL);
217+
test_unbase32hexmem_one("AB======", true, -EINVAL, NULL);
218+
test_unbase32hexmem_one("AAAB====", true, -EINVAL, NULL);
219+
test_unbase32hexmem_one("AAAAB===", true, -EINVAL, NULL);
220+
test_unbase32hexmem_one("AAAAAAB=", true, -EINVAL, NULL);
221+
222+
test_unbase32hexmem_one("XPNMUOJ1", true, -EINVAL, NULL);
223+
test_unbase32hexmem_one("CXNMUOJ1", true, -EINVAL, NULL);
224+
test_unbase32hexmem_one("CPXMUOJ1", true, -EINVAL, NULL);
225+
test_unbase32hexmem_one("CPNXUOJ1", true, -EINVAL, NULL);
226+
test_unbase32hexmem_one("CPNMXOJ1", true, -EINVAL, NULL);
227+
test_unbase32hexmem_one("CPNMUXJ1", true, -EINVAL, NULL);
228+
test_unbase32hexmem_one("CPNMUOX1", true, -EINVAL, NULL);
229+
test_unbase32hexmem_one("CPNMUOJX", true, -EINVAL, NULL);
230+
231+
test_unbase32hexmem_one("", false, 0, "");
232+
test_unbase32hexmem_one("CO", false, 0, "f");
233+
test_unbase32hexmem_one("CPNG", false, 0, "fo");
234+
test_unbase32hexmem_one("CPNMU", false, 0, "foo");
235+
test_unbase32hexmem_one("CPNMUOG", false, 0, "foob");
236+
test_unbase32hexmem_one("CPNMUOJ1", false, 0, "fooba");
237+
test_unbase32hexmem_one("CPNMUOJ1E8", false, 0, "foobar");
238+
test_unbase32hexmem_one("CPNMUOG=", false, -EINVAL, NULL);
239+
test_unbase32hexmem_one("CPNMUOJ1E8======", false, -EINVAL, NULL);
240+
241+
test_unbase32hexmem_one("A", false, -EINVAL, NULL);
242+
test_unbase32hexmem_one("A", false, -EINVAL, NULL);
243+
test_unbase32hexmem_one("AAA", false, -EINVAL, NULL);
244+
test_unbase32hexmem_one("AAAAAA", false, -EINVAL, NULL);
245+
test_unbase32hexmem_one("AB", false, -EINVAL, NULL);
246+
test_unbase32hexmem_one("AAAB", false, -EINVAL, NULL);
247+
test_unbase32hexmem_one("AAAAB", false, -EINVAL, NULL);
248+
test_unbase32hexmem_one("AAAAAAB", false, -EINVAL, NULL);
278249
}
279250

280251
/* https://tools.ietf.org/html/rfc4648#section-10 */

0 commit comments

Comments
 (0)