aboutsummaryrefslogtreecommitdiff
path: root/editor.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2014-07-22 18:03:16 +0200
committerMarc André Tanner <mat@brain-dump.org>2014-07-22 18:03:16 +0200
commitd55fb0318ce00cd52510be98ebcf8cf6857c0a96 (patch)
treebb6da635df17799019476987d491420261155c19 /editor.c
parentf06dfaf1478c4599b28e90bd0ab430eb90ed8d20 (diff)
downloadvis-d55fb0318ce00cd52510be98ebcf8cf6857c0a96.tar.gz
vis-d55fb0318ce00cd52510be98ebcf8cf6857c0a96.tar.xz
Perform argument validation
Diffstat (limited to 'editor.c')
-rw-r--r--editor.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/editor.c b/editor.c
index df51954..b7e850a 100644
--- a/editor.c
+++ b/editor.c
@@ -442,6 +442,8 @@ static void change_free(Change *c) {
* \-+ <-- +-----+ <-- +---------------+ <-- +-/
*/
bool editor_insert_raw(Editor *ed, size_t pos, const char *data, size_t len) {
+ if (pos > ed->size)
+ return false;
Location loc = piece_get(ed, pos);
Piece *p = loc.piece;
size_t off = loc.off;
@@ -722,10 +724,9 @@ bool editor_delete(Editor *ed, size_t pos, size_t len) {
}
bool editor_replace_raw(Editor *ed, size_t pos, const char *data, size_t len) {
- // TODO argument validation: pos etc.
- editor_delete(ed, pos, len);
- editor_insert(ed, pos, data);
- return true;
+ if (!editor_delete(ed, pos, len))
+ return false;
+ return editor_insert_raw(ed, pos, data, len);
}
bool editor_replace(Editor *ed, size_t pos, const char *data) {