ui/ncurses: Prevent creation of empty boot entry
authorSamuel Mendoza-Jonas <sam.mj@au1.ibm.com>
Mon, 2 Feb 2015 05:50:13 +0000 (16:50 +1100)
committerSamuel Mendoza-Jonas <sam.mj@au1.ibm.com>
Mon, 16 Feb 2015 03:21:36 +0000 (14:21 +1100)
A boot option requires an image path at minimum. If an option is
created without an image, trying to edit the resulting user item causes
a segfault. Prevent the user from creating a boot option without at
least an image path.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
ui/ncurses/nc-boot-editor.c

index 409e638e21eafd39e55aa183b5213d7eeff7373f..f78da5611e5838ea3c75050fb5121853fb2f0513 100644 (file)
@@ -173,6 +173,10 @@ static struct pb_boot_data *boot_editor_prepare_data(
 
        s = widget_textbox_get_value(boot_editor->widgets.image_f);
        bd->image = conditional_prefix(bd, prefix, s);
 
        s = widget_textbox_get_value(boot_editor->widgets.image_f);
        bd->image = conditional_prefix(bd, prefix, s);
+       if (!bd->image) {
+               talloc_free(bd);
+               return NULL;
+       }
 
        s = widget_textbox_get_value(boot_editor->widgets.initrd_f);
        bd->initrd = conditional_prefix(bd, prefix, s);
 
        s = widget_textbox_get_value(boot_editor->widgets.initrd_f);
        bd->initrd = conditional_prefix(bd, prefix, s);
@@ -216,6 +220,11 @@ static void boot_editor_process_key(struct nc_scr *scr, int key)
        case STATE_SAVE:
                item = boot_editor->item;
                bd = boot_editor_prepare_data(boot_editor);
        case STATE_SAVE:
                item = boot_editor->item;
                bd = boot_editor_prepare_data(boot_editor);
+               if (!bd) {
+                       /* Incomplete entry */
+                       boot_editor->state = STATE_EDIT;
+                       break;
+               }
                /* fall through */
        case STATE_CANCEL:
                boot_editor->on_exit(boot_editor->cui, item, bd);
                /* fall through */
        case STATE_CANCEL:
                boot_editor->on_exit(boot_editor->cui, item, bd);