[fix] tokenized_string_t should copy its source string
This commit is contained in:
@@ -6,7 +6,6 @@ tokenized_string_t *tokenized_string_new(void) {
|
|||||||
self->str = NULL;
|
self->str = NULL;
|
||||||
self->strings = cstring_array_new();
|
self->strings = cstring_array_new();
|
||||||
self->tokens = token_array_new();
|
self->tokens = token_array_new();
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,7 +20,7 @@ tokenized_string_t *tokenized_string_new_size(size_t len, size_t num_tokens) {
|
|||||||
|
|
||||||
inline tokenized_string_t *tokenized_string_new_from_str_size(char *src, size_t len, size_t num_tokens) {
|
inline tokenized_string_t *tokenized_string_new_from_str_size(char *src, size_t len, size_t num_tokens) {
|
||||||
tokenized_string_t *self = tokenized_string_new_size(len, num_tokens);
|
tokenized_string_t *self = tokenized_string_new_size(len, num_tokens);
|
||||||
self->str = src;
|
self->str = strndup(src);
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +37,7 @@ void tokenized_string_add_token(tokenized_string_t *self, const char *src, size_
|
|||||||
|
|
||||||
tokenized_string_t *tokenized_string_from_tokens(char *src, token_array *tokens, bool copy_tokens) {
|
tokenized_string_t *tokenized_string_from_tokens(char *src, token_array *tokens, bool copy_tokens) {
|
||||||
tokenized_string_t *self = malloc(sizeof(tokenized_string_t));
|
tokenized_string_t *self = malloc(sizeof(tokenized_string_t));
|
||||||
self->str = src;
|
self->str = stdup(src);
|
||||||
self->strings = cstring_array_new_size(strlen(src) + tokens->n);
|
self->strings = cstring_array_new_size(strlen(src) + tokens->n);
|
||||||
if (copy_tokens) {
|
if (copy_tokens) {
|
||||||
self->tokens = token_array_new_copy(tokens, tokens->n);
|
self->tokens = token_array_new_copy(tokens, tokens->n);
|
||||||
@@ -48,7 +47,7 @@ tokenized_string_t *tokenized_string_from_tokens(char *src, token_array *tokens,
|
|||||||
|
|
||||||
token_t token;
|
token_t token;
|
||||||
|
|
||||||
for (int i = 0; i < tokens->n; i++) {
|
for (size_t i = 0; i < tokens->n; i++) {
|
||||||
token = tokens->a[i];
|
token = tokens->a[i];
|
||||||
cstring_array_add_string_len(self->strings, src + token.offset, token.len);
|
cstring_array_add_string_len(self->strings, src + token.offset, token.len);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user