summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--asxparser.c7
-rw-r--r--playtree.c7
-rw-r--r--playtreeparser.c12
3 files changed, 19 insertions, 7 deletions
diff --git a/asxparser.c b/asxparser.c
index 3ace8e3e37..7d46e34feb 100644
--- a/asxparser.c
+++ b/asxparser.c
@@ -264,7 +264,12 @@ asx_get_element(ASX_Parser_t* parser,char** _buffer,
if( i < parser->ret_stack_size)
memmove(parser->ret_stack,parser->ret_stack+i, (parser->ret_stack_size - i)*sizeof(ASX_LineSave_t));
parser->ret_stack_size -= i;
- parser->ret_stack = (ASX_LineSave_t*)realloc(parser->ret_stack,parser->ret_stack_size*sizeof(ASX_LineSave_t));
+ if(parser->ret_stack_size > 0)
+ parser->ret_stack = (ASX_LineSave_t*)realloc(parser->ret_stack,parser->ret_stack_size*sizeof(ASX_LineSave_t));
+ else {
+ free(parser->ret_stack);
+ parser->ret_stack = NULL;
+ }
}
}
diff --git a/playtree.c b/playtree.c
index 7662ce0439..e4f6fb2771 100644
--- a/playtree.c
+++ b/playtree.c
@@ -605,7 +605,12 @@ play_tree_iter_up_step(play_tree_iter_t* iter, int d,int with_nodes) {
iter->stack_size--;
iter->loop = iter->status_stack[iter->stack_size];
- iter->status_stack = (int*)realloc(iter->status_stack,iter->stack_size*sizeof(int));
+ if(iter->stack_size > 0)
+ iter->status_stack = (int*)realloc(iter->status_stack,iter->stack_size*sizeof(int));
+ else {
+ free(iter->status_stack);
+ iter->status_stack = NULL;
+ }
if(iter->stack_size > 0 && iter->status_stack == NULL) {
mp_msg(MSGT_PLAYTREE,MSGL_ERR,"Can't allocate %d bytes of memory\n",iter->stack_size*sizeof(char*));
return PLAY_TREE_ITER_ERROR;
diff --git a/playtreeparser.c b/playtreeparser.c
index 847a93bd23..489308f8aa 100644
--- a/playtreeparser.c
+++ b/playtreeparser.c
@@ -49,7 +49,7 @@ play_tree_parser_get_line(play_tree_parser_t* p) {
p->iter = p->buffer;
}
- if(p->stream->eof && p->buffer_end == 0)
+ if(p->stream->eof && (p->buffer_end == 0 || p->iter[0] == '\0'))
return NULL;
while(1) {
@@ -83,12 +83,14 @@ play_tree_parser_get_line(play_tree_parser_t* p) {
}
line_end = ((*(end-1)) == '\r') ? end-1 : end;
- p->line = (char*)realloc(p->line,line_end - p->iter+1);
- if(!p->line)
+ if(line_end - p->iter >= 0)
+ p->line = (char*)realloc(p->line,line_end - p->iter+1);
+ else
return NULL;
- strncpy(p->line,p->iter,line_end - p->iter);
+ if(line_end - p->iter > 0)
+ strncpy(p->line,p->iter,line_end - p->iter);
p->line[line_end - p->iter] = '\0';
- if(end != '\0')
+ if(end[0] != '\0')
end++;
if(!p->keep) {