Code

browser: check if the selection is valid
authorMax Kellermann <max@duempel.org>
Sun, 21 Sep 2008 20:45:04 +0000 (22:45 +0200)
committerMax Kellermann <max@duempel.org>
Sun, 21 Sep 2008 20:45:04 +0000 (22:45 +0200)
Don't call filelist_get() with an invalid index.

src/screen_browser.c
src/screen_file.c

index d2c8aa08ef799d7aec00cc0c1670a4769e9d842b..4c8bc2ed6cccfd5421a36d51af7aff9be09bdc45 100644 (file)
@@ -250,7 +250,8 @@ enqueue_and_play(mpdclient_t *c, filelist_entry_t *entry)
 static struct filelist_entry *
 browser_get_selected(const struct screen_browser *browser)
 {
-       if (browser->filelist == NULL)
+       if (browser->filelist == NULL ||
+           browser->lw->selected >= filelist_length(browser->filelist))
                return NULL;
 
        return filelist_get(browser->filelist, browser->lw->selected);
index 9dd59001cc84ec3ad0bf348fa1e092527397cae6..26b2739720703668506e68491f31307a5bcbe50d 100644 (file)
@@ -62,6 +62,9 @@ handle_save(screen_t *screen, mpdclient_t *c)
        filelist_entry_t *entry;
        char *defaultname = NULL;
 
+       if (browser.lw->selected >= filelist_length(browser.filelist))
+               return -1;
+
        entry = filelist_get(browser.filelist, browser.lw->selected);
        if( entry && entry->entity ) {
                mpd_InfoEntity *entity = entry->entity;
@@ -83,6 +86,9 @@ handle_delete(screen_t *screen, mpdclient_t *c)
        char *str, *buf;
        int key;
 
+       if (browser.lw->selected >= filelist_length(browser.filelist))
+               return -1;
+
        entry = filelist_get(browser.filelist, browser.lw->selected);
        if( entry==NULL || entry->entity==NULL )
                return -1;