The underlying cause is that value_string_from_table()'s use of the
lua stack is not balanced, if a table is iterated, it pops one more
time than it should.
The user-visible effect is that code such as:
ProtoField.uint8( "wihart.addrspec.dst64", "dst64", base.HEX,
{[0x40]="yes", [0x0]="no"}, 0x40)
will always set the mask to 0, because the the mask is popped when the
value/string table is processed.
I did a (very) quick grep, and didn't see this bug in the other places
lua_next() is called, but it might be worth reviewing further.
Index: epan/wslua/wslua_proto.c
===================================================================
--- epan/wslua/wslua_proto.c (revision 28617)
+++ epan/wslua/wslua_proto.c (working copy)
@@ -516,7 +516,7 @@
lua_pop(L, 1);
}
- lua_pop(L, 1);
+/* lua_pop(L, 1); */
ret = (value_string*)vs->data;