Blame libarchive/test/test_archive_string.c

Packit Service 1d0348
/*-
Packit Service 1d0348
 * Copyright (c) 2011 Tim Kientzle
Packit Service 1d0348
 * All rights reserved.
Packit Service 1d0348
 *
Packit Service 1d0348
 * Redistribution and use in source and binary forms, with or without
Packit Service 1d0348
 * modification, are permitted provided that the following conditions
Packit Service 1d0348
 * are met:
Packit Service 1d0348
 * 1. Redistributions of source code must retain the above copyright
Packit Service 1d0348
 *    notice, this list of conditions and the following disclaimer.
Packit Service 1d0348
 * 2. Redistributions in binary form must reproduce the above copyright
Packit Service 1d0348
 *    notice, this list of conditions and the following disclaimer in the
Packit Service 1d0348
 *    documentation and/or other materials provided with the distribution.
Packit Service 1d0348
 *
Packit Service 1d0348
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
Packit Service 1d0348
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
Packit Service 1d0348
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
Packit Service 1d0348
 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
Packit Service 1d0348
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
Packit Service 1d0348
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Packit Service 1d0348
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Packit Service 1d0348
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Packit Service 1d0348
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
Packit Service 1d0348
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit Service 1d0348
 */
Packit Service 1d0348
#include "test.h"
Packit Service 1d0348
__FBSDID("$FreeBSD$");
Packit Service 1d0348
Packit Service 1d0348
#define __LIBARCHIVE_TEST
Packit Service 1d0348
#include "archive_string.h"
Packit Service 1d0348
Packit Service 1d0348
#define EXTENT 32
Packit Service 1d0348
Packit Service 1d0348
#define assertStringSizes(strlen, buflen, as) \
Packit Service 1d0348
	assertEqualInt(strlen, (as).length); \
Packit Service 1d0348
	assertEqualInt(buflen, (as).buffer_length);
Packit Service 1d0348
Packit Service 1d0348
#define assertExactString(strlen, buflen, data, as) \
Packit Service 1d0348
	do { \
Packit Service 1d0348
		assertStringSizes(strlen, buflen, as); \
Packit Service 1d0348
		assertEqualString(data, (as).s); \
Packit Service 1d0348
	} while (0)
Packit Service 1d0348
Packit Service 1d0348
#define assertNonNULLString(strlen, buflen, as) \
Packit Service 1d0348
	do { \
Packit Service 1d0348
		assertStringSizes(strlen, buflen, as); \
Packit Service 1d0348
		assert(NULL != (as).s); \
Packit Service 1d0348
	} while (0)
Packit Service 1d0348
Packit Service 1d0348
static void
Packit Service 1d0348
test_archive_string_ensure(void)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_string s;
Packit Service 1d0348
Packit Service 1d0348
	archive_string_init(&s);
Packit Service 1d0348
	assertExactString(0, 0, NULL, s);
Packit Service 1d0348
Packit Service 1d0348
	/* single-extent allocation */
Packit Service 1d0348
	assert(&s == archive_string_ensure(&s, 5));
Packit Service 1d0348
	assertNonNULLString(0, EXTENT, s);
Packit Service 1d0348
Packit Service 1d0348
	/* what happens around extent boundaries? */
Packit Service 1d0348
	assert(&s == archive_string_ensure(&s, EXTENT - 1));
Packit Service 1d0348
	assertNonNULLString(0, EXTENT, s);
Packit Service 1d0348
Packit Service 1d0348
	assert(&s == archive_string_ensure(&s, EXTENT));
Packit Service 1d0348
	assertNonNULLString(0, EXTENT, s);
Packit Service 1d0348
Packit Service 1d0348
	assert(&s == archive_string_ensure(&s, EXTENT + 1));
Packit Service 1d0348
	assertNonNULLString(0, 2 * EXTENT, s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_free(&s);
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
static void
Packit Service 1d0348
test_archive_strcat(void)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_string s;
Packit Service 1d0348
Packit Service 1d0348
	archive_string_init(&s);
Packit Service 1d0348
	assertExactString(0, 0, NULL, s);
Packit Service 1d0348
Packit Service 1d0348
	/* null target, empty source */
Packit Service 1d0348
	assert(&s == archive_strcat(&s, ""));
Packit Service 1d0348
	assertExactString(0, EXTENT, "", s);
Packit Service 1d0348
Packit Service 1d0348
	/* empty target, empty source */
Packit Service 1d0348
	assert(&s == archive_strcat(&s, ""));
Packit Service 1d0348
	assertExactString(0, EXTENT, "", s);
Packit Service 1d0348
Packit Service 1d0348
	/* empty target, non-empty source */
Packit Service 1d0348
	assert(&s == archive_strcat(&s, "fubar"));
Packit Service 1d0348
	assertExactString(5, EXTENT, "fubar", s);
Packit Service 1d0348
Packit Service 1d0348
	/* non-empty target, non-empty source */
Packit Service 1d0348
	assert(&s == archive_strcat(&s, "baz"));
Packit Service 1d0348
	assertExactString(8, EXTENT, "fubarbaz", s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_free(&s);
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
static void
Packit Service 1d0348
test_archive_strappend_char(void)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_string s;
Packit Service 1d0348
Packit Service 1d0348
	archive_string_init(&s);
Packit Service 1d0348
	assertExactString(0, 0, NULL, s);
Packit Service 1d0348
Packit Service 1d0348
	/* null target */
Packit Service 1d0348
	archive_strappend_char(&s, 'X');
Packit Service 1d0348
	assertExactString(1, EXTENT, "X", s);
Packit Service 1d0348
Packit Service 1d0348
	/* non-empty target */
Packit Service 1d0348
	archive_strappend_char(&s, 'Y');
Packit Service 1d0348
	assertExactString(2, EXTENT, "XY", s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_free(&s);
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
/* archive_strnXXX() tests focus on length handling.
Packit Service 1d0348
 * other behaviors are tested by proxy through archive_strXXX()
Packit Service 1d0348
 */
Packit Service 1d0348
Packit Service 1d0348
static void
Packit Service 1d0348
test_archive_strncat(void)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_string s;
Packit Service 1d0348
Packit Service 1d0348
	archive_string_init(&s);
Packit Service 1d0348
	assertExactString(0, 0, NULL, s);
Packit Service 1d0348
Packit Service 1d0348
	/* perfect length */
Packit Service 1d0348
	assert(&s == archive_strncat(&s, "snafu", 5));
Packit Service 1d0348
	assertExactString(5, EXTENT, "snafu", s);
Packit Service 1d0348
Packit Service 1d0348
	/* short read */
Packit Service 1d0348
	assert(&s == archive_strncat(&s, "barbazqux", 3));
Packit Service 1d0348
	assertExactString(8, EXTENT, "snafubar", s);
Packit Service 1d0348
Packit Service 1d0348
	/* long read is ok too! */
Packit Service 1d0348
	assert(&s == archive_strncat(&s, "snafu", 8));
Packit Service 1d0348
	assertExactString(13, EXTENT, "snafubarsnafu", s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_free(&s);
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
static void
Packit Service 1d0348
test_archive_strncpy(void)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_string s;
Packit Service 1d0348
Packit Service 1d0348
	archive_string_init(&s);
Packit Service 1d0348
	assertExactString(0, 0, NULL, s);
Packit Service 1d0348
Packit Service 1d0348
	/* perfect length */
Packit Service 1d0348
	assert(&s == archive_strncpy(&s, "fubar", 5));
Packit Service 1d0348
	assertExactString(5, EXTENT, "fubar", s);
Packit Service 1d0348
Packit Service 1d0348
	/* short read */
Packit Service 1d0348
	assert(&s == archive_strncpy(&s, "snafubar", 5));
Packit Service 1d0348
	assertExactString(5, EXTENT, "snafu", s);
Packit Service 1d0348
Packit Service 1d0348
	/* long read is ok too! */
Packit Service 1d0348
	assert(&s == archive_strncpy(&s, "snafu", 8));
Packit Service 1d0348
	assertExactString(5, EXTENT, "snafu", s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_free(&s);
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
static void
Packit Service 1d0348
test_archive_strcpy(void)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_string s;
Packit Service 1d0348
Packit Service 1d0348
	archive_string_init(&s);
Packit Service 1d0348
	assertExactString(0, 0, NULL, s);
Packit Service 1d0348
Packit Service 1d0348
	/* null target */
Packit Service 1d0348
	assert(&s == archive_strcpy(&s, "snafu"));
Packit Service 1d0348
	assertExactString(5, EXTENT, "snafu", s);
Packit Service 1d0348
Packit Service 1d0348
	/* dirty target */
Packit Service 1d0348
	assert(&s == archive_strcpy(&s, "foo"));
Packit Service 1d0348
	assertExactString(3, EXTENT, "foo", s);
Packit Service 1d0348
Packit Service 1d0348
	/* dirty target, empty source */
Packit Service 1d0348
	assert(&s == archive_strcpy(&s, ""));
Packit Service 1d0348
	assertExactString(0, EXTENT, "", s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_free(&s);
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
static void
Packit Service 1d0348
test_archive_string_concat(void)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_string s, t, u, v;
Packit Service 1d0348
Packit Service 1d0348
	archive_string_init(&s);
Packit Service 1d0348
	assertExactString(0, 0, NULL, s);
Packit Service 1d0348
	archive_string_init(&t);
Packit Service 1d0348
	assertExactString(0, 0, NULL, t);
Packit Service 1d0348
	archive_string_init(&u);
Packit Service 1d0348
	assertExactString(0, 0, NULL, u);
Packit Service 1d0348
	archive_string_init(&v);
Packit Service 1d0348
	assertExactString(0, 0, NULL, v);
Packit Service 1d0348
Packit Service 1d0348
	/* null target, null source */
Packit Service 1d0348
	archive_string_concat(&t, &s);
Packit Service 1d0348
	assertExactString(0, 0, NULL, s);
Packit Service 1d0348
	assertExactString(0, EXTENT, "", t);
Packit Service 1d0348
Packit Service 1d0348
	/* null target, empty source */
Packit Service 1d0348
	assert(&s == archive_strcpy(&s, ""));
Packit Service 1d0348
	archive_string_concat(&u, &s);
Packit Service 1d0348
	assertExactString(0, EXTENT, "", s);
Packit Service 1d0348
	assertExactString(0, EXTENT, "", u);
Packit Service 1d0348
Packit Service 1d0348
	/* null target, non-empty source */
Packit Service 1d0348
	assert(&s == archive_strcpy(&s, "foo"));
Packit Service 1d0348
	archive_string_concat(&v, &s);
Packit Service 1d0348
	assertExactString(3, EXTENT, "foo", s);
Packit Service 1d0348
	assertExactString(3, EXTENT, "foo", v);
Packit Service 1d0348
Packit Service 1d0348
	/* empty target, empty source */
Packit Service 1d0348
	assert(&s == archive_strcpy(&s, ""));
Packit Service 1d0348
	assert(&t == archive_strcpy(&t, ""));
Packit Service 1d0348
	archive_string_concat(&t, &s);
Packit Service 1d0348
	assertExactString(0, EXTENT, "", s);
Packit Service 1d0348
	assertExactString(0, EXTENT, "", t);
Packit Service 1d0348
Packit Service 1d0348
	/* empty target, non-empty source */
Packit Service 1d0348
	assert(&s == archive_strcpy(&s, "snafu"));
Packit Service 1d0348
	assert(&t == archive_strcpy(&t, ""));
Packit Service 1d0348
	archive_string_concat(&t, &s);
Packit Service 1d0348
	assertExactString(5, EXTENT, "snafu", s);
Packit Service 1d0348
	assertExactString(5, EXTENT, "snafu", t);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_free(&v);
Packit Service 1d0348
	archive_string_free(&u);
Packit Service 1d0348
	archive_string_free(&t);
Packit Service 1d0348
	archive_string_free(&s);
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
static void
Packit Service 1d0348
test_archive_string_copy(void)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_string s, t, u, v;
Packit Service 1d0348
Packit Service 1d0348
	archive_string_init(&s);
Packit Service 1d0348
	assertExactString(0, 0, NULL, s);
Packit Service 1d0348
	archive_string_init(&t);
Packit Service 1d0348
	assertExactString(0, 0, NULL, t);
Packit Service 1d0348
	archive_string_init(&u);
Packit Service 1d0348
	assertExactString(0, 0, NULL, u);
Packit Service 1d0348
	archive_string_init(&v);
Packit Service 1d0348
	assertExactString(0, 0, NULL, v);
Packit Service 1d0348
Packit Service 1d0348
	/* null target, null source */
Packit Service 1d0348
	archive_string_copy(&t, &s);
Packit Service 1d0348
	assertExactString(0, 0, NULL, s);
Packit Service 1d0348
	assertExactString(0, EXTENT, "", t);
Packit Service 1d0348
Packit Service 1d0348
	/* null target, empty source */
Packit Service 1d0348
	archive_string_copy(&u, &t);
Packit Service 1d0348
	assertExactString(0, EXTENT, "", t);
Packit Service 1d0348
	assertExactString(0, EXTENT, "", u);
Packit Service 1d0348
Packit Service 1d0348
	/* empty target, empty source */
Packit Service 1d0348
	archive_string_copy(&u, &t);
Packit Service 1d0348
	assertExactString(0, EXTENT, "", t);
Packit Service 1d0348
	assertExactString(0, EXTENT, "", u);
Packit Service 1d0348
Packit Service 1d0348
	/* null target, non-empty source */
Packit Service 1d0348
	assert(NULL != archive_strcpy(&s, "snafubar"));
Packit Service 1d0348
	assertExactString(8, EXTENT, "snafubar", s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_copy(&v, &s);
Packit Service 1d0348
	assertExactString(8, EXTENT, "snafubar", s);
Packit Service 1d0348
	assertExactString(8, EXTENT, "snafubar", v);
Packit Service 1d0348
Packit Service 1d0348
	/* empty target, non-empty source */
Packit Service 1d0348
	assertExactString(0, EXTENT, "", t);
Packit Service 1d0348
	archive_string_copy(&t, &s);
Packit Service 1d0348
	assertExactString(8, EXTENT, "snafubar", s);
Packit Service 1d0348
	assertExactString(8, EXTENT, "snafubar", t);
Packit Service 1d0348
Packit Service 1d0348
	/* non-empty target, non-empty source */
Packit Service 1d0348
	assert(NULL != archive_strcpy(&s, "fubar"));
Packit Service 1d0348
	assertExactString(5, EXTENT, "fubar", s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_copy(&t, &s);
Packit Service 1d0348
	assertExactString(5, EXTENT, "fubar", s);
Packit Service 1d0348
	assertExactString(5, EXTENT, "fubar", t);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_free(&v);
Packit Service 1d0348
	archive_string_free(&u);
Packit Service 1d0348
	archive_string_free(&t);
Packit Service 1d0348
	archive_string_free(&s);
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
static void
Packit Service 1d0348
test_archive_string_sprintf(void)
Packit Service 1d0348
{
Packit Service 1d0348
	struct archive_string s;
Packit Service 1d0348
#define S16 "0123456789abcdef"
Packit Service 1d0348
#define S32 S16 S16
Packit Service 1d0348
#define S64 S32 S32
Packit Service 1d0348
#define S128 S64 S64
Packit Service 1d0348
	const char *s32 = S32;
Packit Service 1d0348
	const char *s33 = S32 "0";
Packit Service 1d0348
	const char *s64 = S64;
Packit Service 1d0348
	const char *s65 = S64 "0";
Packit Service 1d0348
	const char *s128 = S128;
Packit Service 1d0348
	const char *s129 = S128 "0";
Packit Service 1d0348
#undef S16
Packit Service 1d0348
#undef S32
Packit Service 1d0348
#undef S64
Packit Service 1d0348
#undef S128
Packit Service 1d0348
Packit Service 1d0348
	archive_string_init(&s);
Packit Service 1d0348
	assertExactString(0, 0, NULL, s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_sprintf(&s, "%s", "");
Packit Service 1d0348
	assertExactString(0, 2 * EXTENT, "", s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_empty(&s);
Packit Service 1d0348
	archive_string_sprintf(&s, "%s", s32);
Packit Service 1d0348
	assertExactString(32, 2 * EXTENT, s32, s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_empty(&s);
Packit Service 1d0348
	archive_string_sprintf(&s, "%s", s33);
Packit Service 1d0348
	assertExactString(33, 2 * EXTENT, s33, s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_empty(&s);
Packit Service 1d0348
	archive_string_sprintf(&s, "%s", s64);
Packit Service 1d0348
	assertExactString(64, 4 * EXTENT, s64, s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_empty(&s);
Packit Service 1d0348
	archive_string_sprintf(&s, "%s", s65);
Packit Service 1d0348
	assertExactString(65, 4 * EXTENT, s65, s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_empty(&s);
Packit Service 1d0348
	archive_string_sprintf(&s, "%s", s128);
Packit Service 1d0348
	assertExactString(128, 8 * EXTENT, s128, s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_empty(&s);
Packit Service 1d0348
	archive_string_sprintf(&s, "%s", s129);
Packit Service 1d0348
	assertExactString(129, 8 * EXTENT, s129, s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_empty(&s);
Packit Service 1d0348
	archive_string_sprintf(&s, "%d", 1234567890);
Packit Service 1d0348
	assertExactString(10, 8 * EXTENT, "1234567890", s);
Packit Service 1d0348
Packit Service 1d0348
	archive_string_free(&s);
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
DEFINE_TEST(test_archive_string)
Packit Service 1d0348
{
Packit Service 1d0348
	test_archive_string_ensure();
Packit Service 1d0348
	test_archive_strcat();
Packit Service 1d0348
	test_archive_strappend_char();
Packit Service 1d0348
	test_archive_strncat();
Packit Service 1d0348
	test_archive_strncpy();
Packit Service 1d0348
	test_archive_strcpy();
Packit Service 1d0348
	test_archive_string_concat();
Packit Service 1d0348
	test_archive_string_copy();
Packit Service 1d0348
	test_archive_string_sprintf();
Packit Service 1d0348
}
Packit Service 1d0348
Packit Service 1d0348
static const char *strings[] =
Packit Service 1d0348
{
Packit Service 1d0348
  "dir/path",
Packit Service 1d0348
  "dir/path2",
Packit Service 1d0348
  "dir/path3",
Packit Service 1d0348
  "dir/path4",
Packit Service 1d0348
  "dir/path5",
Packit Service 1d0348
  "dir/path6",
Packit Service 1d0348
  "dir/path7",
Packit Service 1d0348
  "dir/path8",
Packit Service 1d0348
  "dir/path9",
Packit Service 1d0348
  "dir/subdir/path",
Packit Service 1d0348
  "dir/subdir/path2",
Packit Service 1d0348
  "dir/subdir/path3",
Packit Service 1d0348
  "dir/subdir/path4",
Packit Service 1d0348
  "dir/subdir/path5",
Packit Service 1d0348
  "dir/subdir/path6",
Packit Service 1d0348
  "dir/subdir/path7",
Packit Service 1d0348
  "dir/subdir/path8",
Packit Service 1d0348
  "dir/subdir/path9",
Packit Service 1d0348
  "dir2/path",
Packit Service 1d0348
  "dir2/path2",
Packit Service 1d0348
  "dir2/path3",
Packit Service 1d0348
  "dir2/path4",
Packit Service 1d0348
  "dir2/path5",
Packit Service 1d0348
  "dir2/path6",
Packit Service 1d0348
  "dir2/path7",
Packit Service 1d0348
  "dir2/path8",
Packit Service 1d0348
  "dir2/path9",
Packit Service 1d0348
  NULL
Packit Service 1d0348
};
Packit Service 1d0348
Packit Service 1d0348
DEFINE_TEST(test_archive_string_sort)
Packit Service 1d0348
{
Packit Service 1d0348
  unsigned int i, j, size;
Packit Service 1d0348
  char **test_strings, *tmp;
Packit Service 1d0348
Packit Service 1d0348
  srand((unsigned int)time(NULL));
Packit Service 1d0348
  size = sizeof(strings) / sizeof(char *);
Packit Service 1d0348
  assert((test_strings = (char **)calloc(1, sizeof(strings))) != NULL);
Packit Service 1d0348
  for (i = 0; i < (size - 1); i++)
Packit Service 1d0348
    assert((test_strings[i] = strdup(strings[i])) != NULL);
Packit Service 1d0348
Packit Service 1d0348
  /* Shuffle the test strings */
Packit Service 1d0348
  for (i = 0; i < (size - 1); i++)
Packit Service 1d0348
  {
Packit Service 1d0348
    j = rand() % ((size - 1) - i);
Packit Service 1d0348
    j += i;
Packit Service 1d0348
    tmp = test_strings[i];
Packit Service 1d0348
    test_strings[i] = test_strings[j];
Packit Service 1d0348
    test_strings[j] = tmp;
Packit Service 1d0348
  }
Packit Service 1d0348
Packit Service 1d0348
  /* Sort and test */
Packit Service 1d0348
  assertEqualInt(ARCHIVE_OK, archive_utility_string_sort(test_strings));
Packit Service 1d0348
  for (i = 0; i < (size - 1); i++)
Packit Service 1d0348
    assertEqualString(test_strings[i], strings[i]);
Packit Service 1d0348
Packit Service 1d0348
  for (i = 0; i < (size - 1); i++)
Packit Service 1d0348
    free(test_strings[i]);
Packit Service 1d0348
  free(test_strings);
Packit Service 1d0348
}