Fix string_clear_get_str when stack allocated

If a string_t is stack-allocated, string_clear_get_str would still try
to copy it from the NULL heap pointer, resulting in a failed assertion.
Copy from the stack instead. Also add a test for this.
This commit is contained in:
Tobias Boege committed 2019-09-26 05:39:49 +02:00
1 parent a905f12915
commit 3ea063d1e0
2 files changed
+8

No files matched your search

+1
View File
@@ -189,6 +189,7 @@ string_clear_get_str(string_t v)
char *p = v->ptr;
if (stringi_stack_p(v)) {
// The string was stack allocated.
p = v->u.stack.buffer;
// Need to allocate a heap string to return the copy.
size_t alloc = string_size(v)+1;
char *ptr = M_MEMORY_REALLOC (char, NULL, alloc);
+7
View File
@@ -355,6 +355,13 @@ static void test0(void)
char *s = string_clear_get_str (s1);
assert(strcmp(s, "QWERTYQWERTY") == 0);
free(s);
string_t s3;
string_init(s3);
string_cat_str(s3, "ABC");
s = string_clear_get_str(s3);
assert(strcmp(s, "ABC") == 0);
free(s);
string_init_set_str(s1, "RESTART");
assert (string_equal_str_p(s1, "RESTART"));