aboutsummaryrefslogtreecommitdiff
path: root/src/sc_parse.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2016-08-12 22:55:51 +0200
committerThomas White <taw@bitwiz.org.uk>2016-08-12 22:55:51 +0200
commitf7294afa23b9b2817e741a047ce27e0881915bed (patch)
treeedb91aed8522f25b4bff574c328b32dbfab5e7f2 /src/sc_parse.c
parent2df04c613b0e5f5f47b7f1c1bbeb460802718c21 (diff)
Fix scblock_delete_text()
Diffstat (limited to 'src/sc_parse.c')
-rw-r--r--src/sc_parse.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/sc_parse.c b/src/sc_parse.c
index 8bc6578..659f0a3 100644
--- a/src/sc_parse.c
+++ b/src/sc_parse.c
@@ -633,11 +633,13 @@ void sc_insert_block(SCBlock *b1, int o1, SCBlock *ins)
void scblock_delete_text(SCBlock *b, size_t o1, size_t o2)
{
- if ( o1 >= o2 ) {
- fprintf(stderr, "Backwards delete!\n");
+ size_t len = strlen(b->contents);
+ if ( (o1 >= o2) || (o1 > len) || (o2 > len) ) {
+ fprintf(stderr, "Invalid delete: %i %i %i\n",
+ (int)o1, (int)o2, (int)len);
return;
}
- memmove(b->contents+o1, b->contents+o2, o2-o1);
+ memmove(b->contents+o1, b->contents+o2, len-o2+1);
}