aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2019-11-24 14:45:11 -0500
committerAlexander Pickering <alexandermpickering@gmail.com>2019-11-24 14:45:11 -0500
commitb78c973a94702f26d2ed3e6ddfe7061e62783b6f (patch)
tree490e6390997906c4ad82d8d947fbf5f3d197ab73 /src
parentff7e486b9d7084973124e9805e302377bf2f4415 (diff)
parent51aa0fd15c327c0ef20242b00b02bda169af4744 (diff)
downloadlibctemplates-b78c973a94702f26d2ed3e6ddfe7061e62783b6f.tar.gz
libctemplates-b78c973a94702f26d2ed3e6ddfe7061e62783b6f.tar.bz2
libctemplates-b78c973a94702f26d2ed3e6ddfe7061e62783b6f.zip
Merge branch 'master' of ssh://cogarr.net:43/home/git/libctemplates
Diffstat (limited to 'src')
-rw-r--r--src/ctemplates.c19
-rw-r--r--src/kmp.c3
2 files changed, 18 insertions, 4 deletions
diff --git a/src/ctemplates.c b/src/ctemplates.c
index 74d6098..ae2ed2a 100644
--- a/src/ctemplates.c
+++ b/src/ctemplates.c
@@ -46,6 +46,7 @@ void print_ast_helper(
);
void print_ast(struct TMPL_templates* root);
struct TMPL_token* TMPL_tokenize(const char* tmplstr, size_t strlen);
+void TMPL_free_tokens(struct TMPL_token *tokens);
struct TMPL_tagnode* alloc_tagnode(void);
size_t get_quoted_string(const char* start, size_t len);
int is_whitespace(char c);
@@ -315,6 +316,14 @@ TMPL_tokenize(const char* tmplstr, size_t m_strlen){
}
return first;
}
+void
+TMPL_free_tokens(struct TMPL_token *tokens){
+ while(tokens != NULL){
+ struct TMPL_token *tmp = tokens;
+ tokens = tokens->next;
+ free(tmp);
+ }
+}
struct TMPL_tagnode*
alloc_tagnode(){
@@ -413,7 +422,7 @@ parse_elseif(struct TMPL_token* head, struct TMPL_buf* errbuf){
start_of_name++;
start_of_name++;//consume "
size_t name_length = get_quoted_string(start_of_name,head->length);
- char* name = (char*)malloc(sizeof(char)*name_length);
+ char* name = (char*)malloc(sizeof(char)*(name_length + 1));
memcpy(name,start_of_name,name_length);
name[name_length] = '\0';
t->TMPL_tag.ifelse.varname = name;
@@ -436,7 +445,7 @@ parse_elseif(struct TMPL_token* head, struct TMPL_buf* errbuf){
start_of_value++;
start_of_value++;//consume "
size_t value_length = get_quoted_string(start_of_value,head->length);
- char* value = (char*)malloc(sizeof(char)*value_length);
+ char* value = (char*)malloc(sizeof(char)*(value_length + 1));
memcpy(value,start_of_value,value_length);
value[value_length] = '\0';
t->TMPL_tag.ifelse.testval = value;
@@ -499,7 +508,7 @@ parse_if(struct TMPL_token* head, struct TMPL_buf* errbuf){
start_of_name++;
start_of_name++;//consume "
size_t name_length = get_quoted_string(start_of_name,head->length);
- char* name = (char*)malloc(sizeof(char)*name_length);
+ char* name = (char*)malloc(sizeof(char)*(name_length + 1));
memcpy(name,start_of_name,name_length);
name[name_length] = '\0';
t->TMPL_tag.ifelse.varname = name;
@@ -522,7 +531,7 @@ parse_if(struct TMPL_token* head, struct TMPL_buf* errbuf){
start_of_value++;
start_of_value++;//consume "
size_t value_length = get_quoted_string(start_of_value,head->length);
- char* value = (char*)malloc(sizeof(char)*value_length);
+ char* value = (char*)malloc(sizeof(char)*(value_length + 1));
memcpy(value,start_of_value,value_length);
value[value_length] = '\0';
t->TMPL_tag.ifelse.testval = value;
@@ -952,6 +961,7 @@ compile(const char* tmplstr){
ret->jumping = 0;
struct TMPL_token* tokens = TMPL_tokenize(tmplstr,slen);
struct TMPL_tagnode* ast = parse(tokens,ret->errout);
+ TMPL_free_tokens(tokens);
if(ast == NULL){
}else{
ret->roottag = ast;
@@ -1090,6 +1100,7 @@ render_if(struct TMPL_templates* t, struct TMPL_varlist* varlist){
t->jumping = nt->jumping;
}else{
}
+ free(nt);
advance_cursor(t);
return err;
}
diff --git a/src/kmp.c b/src/kmp.c
index f74dcf0..d27523c 100644
--- a/src/kmp.c
+++ b/src/kmp.c
@@ -26,6 +26,8 @@ int kmp(const char* t,size_t tlen, const char* p,size_t plen) {
while (i < n) {
if (t[i] == p[j]) {
if (j == m - 1) {
+
+ free(f);
return i - j;
}
else {
@@ -43,6 +45,7 @@ int kmp(const char* t,size_t tlen, const char* p,size_t plen) {
}
}
+ free(f);
return -1;
}