On Thu, Dec 25, 2025 at 08:01:25PM -0800, Mike Castle wrote: > 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
thanks (I can see something to fix) > > ┌────────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 > > -- Thomas E. Dickey <[email protected]> https://invisible-island.net
signature.asc
Description: PGP signature
