While not documented, if a form-field is given a negative input-lenght
(ilen), dialog will start up.
But, when combined with a "--max-input 5", it will crash after a
while. I suspect it would also crash with the default 2048, but I got
tired of trying to reproduce.
$ dialog --version
Version: 1.3-20250817
$ dialog --no-mouse --trace trace.txt --max-input 5 --title 'Form
title' --form 'Form text' 0 0 0 'Form label:' 1 1 'Item' 2 2 15 -1
'Label 2:' 3 1 'Another item' 4 2 15 -1
┌────────Form title──────────┐
│ Form text │
│ ┌────────────────────────┐ │
│ │Form label: │ │
│ │ iiiiijjjjjjjjSegmentation fault
(core dumped) dialog --no-mouse --trace trace.txt --max-input 5
--title 'Form title' --form 'Form text' 0 0 0 'Form label:' 1 1 'Item'
2 2 15 -1 'Label 2:' 3 1 'Another item' 4 2 15 -1 │
└────────────────────────┘ │
nexus@vradic[19:28]~(629442) j───────────────────────┤
│ < OK > <Cancel> │
└────────────────────────────┘
# I had to use --no-mouse so that, after the crash, the terminal would
let me copy and paste. But the result is the same without it.
$ cat trace.txt
## opened at Thu Dec 25 19:28:02 2025
## dialog 1.3-20250817
## vile: confmode
# Parameters:
# argv[0] = dialog
# argv[1] = --no-mouse
# argv[2] = --trace
# argv[3] = trace.txt
# argv[4] = --max-input
# argv[5] = 5
# argv[6] = --title
# argv[7] = Form title
# argv[8] = --form
# argv[9] = Form text
# argv[10] = 0
# argv[11] = 0
# argv[12] = 0
# argv[13] = Form label:
# argv[14] = 1
# argv[15] = 1
# argv[16] = Item
# argv[17] = 2
# argv[18] = 2
# argv[19] = 15
# argv[20] = -1
# argv[21] = Label 2:
# argv[22] = 3
# argv[23] = 1
# argv[24] = Another item
# argv[25] = 4
# argv[26] = 2
# argv[27] = 15
# argv[28] = -1
# argv[4] = --max-input
# .. set dialog_vars.max-input = 5
# argv[6] = --title
# .. set dialog_vars.title = Form title
# argv[8] = --form
# init_result
# process_common_options, offset 1:29
# argv[1] = --no-mouse
# .. set dialog_state.no-mouse = TRUE
# argv[2] = --trace
# ignore extra --trace option
# Parameters:
# argv[0] = dialog
# argv[1] = --no-mouse
# argv[2] = --trace
# argv[3] = trace.txt
# argv[4] = --max-input
# argv[5] = 5
# argv[6] = --title
# argv[7] = Form title
# argv[8] = --form
# argv[9] = Form text
# argv[10] = 0
# argv[11] = 0
# argv[12] = 0
# argv[13] = Form label:
# argv[14] = 1
# argv[15] = 1
# argv[16] = Item
# argv[17] = 2
# argv[18] = 2
# argv[19] = 15
# argv[20] = -1
# argv[21] = Label 2:
# argv[22] = 3
# argv[23] = 1
# argv[24] = Another item
# argv[25] = 4
# argv[26] = 2
# argv[27] = 15
# argv[28] = -1
# argv[4] = --max-input
# .. set dialog_vars.max-input = 5
# argv[6] = --title
# .. set dialog_vars.title = Form title
# argv[8] = --form
# execute --form
# form args:
# title = Form title
# message = Form text
# height = 0
# width = 0
# lheight = 0
# llength = 2
# current = 0
# dlg_auto_size(0,0) limits 4,26
# ...dlg_auto_size(7,30) also 1,11
# dlg_register_window formbox
# key bindings for formbox widgets
bindkey formbox ^E HELPFILE
bindkey formbox F1 HELPFILE
bindkey formbox HELP HELPFILE
bindkey formbox ^J ENTER
bindkey formbox ^M ENTER
bindkey formbox ENTER ENTER
bindkey formbox ^D LEAVE
bindkey formbox ^I FIELD_NEXT
bindkey formbox BTAB FIELD_PREV
bindkey formbox ^N ITEM_NEXT
bindkey formbox DOWN ITEM_NEXT
bindkey formbox RIGHT ITEM_NEXT
bindkey formbox NEXT ITEM_NEXT
bindkey formbox ^P ITEM_PREV
bindkey formbox PREVIOUS ITEM_PREV
bindkey formbox LEFT ITEM_PREV
bindkey formbox UP ITEM_PREV
bindkey formbox NPAGE PAGE_NEXT
bindkey formbox PPAGE PAGE_PREV
bindkey formbox \s TOGGLE
# ...done dlg_register_window formbox
# dlg_register_window formfield
# key bindings for formfield widgets
bindkey formfield HOME BEGIN
bindkey formfield ^U DELETE_ALL
bindkey formfield ^? DELETE_LEFT
bindkey formfield BACKSPACE DELETE_LEFT
bindkey formfield ^H DELETE_RIGHT
bindkey formfield DC DELETE_RIGHT
bindkey formfield END FINAL
bindkey formfield LEFT GRID_LEFT
bindkey formfield RIGHT GRID_RIGHT
bindkey formfield ^E HELPFILE
bindkey formfield F1 HELPFILE
bindkey formfield HELP HELPFILE
bindkey formfield ^J ENTER
bindkey formfield ^M ENTER
bindkey formfield ENTER ENTER
bindkey formfield ^D LEAVE
bindkey formfield ^I FIELD_NEXT
bindkey formfield BTAB FIELD_PREV
bindkey formfield ^N ITEM_NEXT
bindkey formfield DOWN ITEM_NEXT
bindkey formfield RIGHT ITEM_NEXT # overridden by GRID_RIGHT
bindkey formfield NEXT ITEM_NEXT
bindkey formfield ^P ITEM_PREV
bindkey formfield PREVIOUS ITEM_PREV
bindkey formfield LEFT ITEM_PREV # overridden by GRID_LEFT
bindkey formfield UP ITEM_PREV
bindkey formfield NPAGE PAGE_NEXT
bindkey formfield PPAGE PAGE_PREV
# ...done dlg_register_window formfield
# mouse_mkregion 3,3 4x24 0 (-1279)
# mouse_mkregion 2,7 1x6 0 (339)
# mouse_mkregion 7,7 1x6 0 (338)
# mouse_mkregion 9,4 1x6 0 (0)
# mouse_mkregion 9,14 1x6 0 (1)
window 11x30 at 6,24
0:+--------Form title----------+
1:| Form text |
2:| +------------------------+ |
3:| |Form label: | |
4:| | Item | |
5:| |Label 2: | |
6:| | Another item | |
7:| +------------------------+ |
8:+----------------------------+
9:| < OK > <Cancel> |
10:+----------------------------+
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr a (ch=0x61, fkey=0)
# dlg_result_key(dialog_key=97, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr b (ch=0x62, fkey=0)
# dlg_result_key(dialog_key=98, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr c (ch=0x63, fkey=0)
# dlg_result_key(dialog_key=99, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr d (ch=0x64, fkey=0)
# dlg_result_key(dialog_key=100, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr e (ch=0x65, fkey=0)
# dlg_result_key(dialog_key=101, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr f (ch=0x66, fkey=0)
# dlg_result_key(dialog_key=102, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr g (ch=0x67, fkey=0)
# dlg_result_key(dialog_key=103, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr h (ch=0x68, fkey=0)
# dlg_result_key(dialog_key=104, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr i (ch=0x69, fkey=0)
# dlg_result_key(dialog_key=105, fkey=0)
chr j (ch=0x6a, fkey=0)
# dlg_result_key(dialog_key=106, fkey=0)
chr j (ch=0x6a, fkey=0)
# dlg_result_key(dialog_key=106, fkey=0)
chr j (ch=0x6a, fkey=0)
# dlg_result_key(dialog_key=106, fkey=0)
chr j (ch=0x6a, fkey=0)
# dlg_result_key(dialog_key=106, fkey=0)
chr j (ch=0x6a, fkey=0)
# dlg_result_key(dialog_key=106, fkey=0)
chr j (ch=0x6a, fkey=0)
# dlg_result_key(dialog_key=106, fkey=0)
chr j (ch=0x6a, fkey=0)
# dlg_result_key(dialog_key=106, fkey=0)
chr j (ch=0x6a, fkey=0)
# dlg_result_key(dialog_key=106, fkey=0)
chr j (ch=0x6a, fkey=0)
# dlg_result_key(dialog_key=106, fkey=0)
I was looking for a way to have "unlimited" input length with a form,
like one might see with --inputbox or --inputmenu.
Bonus bug!
Just discovered this while typing this up:
If ilen is set to a value greater than --max-input, a segfault can
also be triggered.
I am guessing that, in both cases, it might make sense to either bail
out on incompatible flags, or at least, when overriding
dialog_vars.max_input, make it the min() of the dialog_vars.max_input
or current->text_ilen.
mrc