In OpenSim LSL, the llDialog command takes as a parameter a list of buttons. The list is options. In the case where a user leaves the array blank, the ScriptDialog packet is never sent to the viewer.
In OpenSim, the LLClientView SendDialog function builds a ScriptDialog packet by setting the data fields and setting an array of ScriptDialogPacket.ButtonsBlock, which gets passed to LLUDPServer:SendPacket. This called ToBytesMultiple() with the ScriptDialog packet which returns data of length 0.
In the case of a 0 length Buttons array, ToBytesMultiple should just hand back a data array of length 1 (1 packet to send) and never return 0 if a packet has been passed in.
http://opensimulator.org/mantis/view.php?id=4329