From 445ddc833669e8cff7e66b268d4b4b77faa504cc Mon Sep 17 00:00:00 2001 From: Hadriel Kaplan Date: Wed, 31 Dec 2014 15:24:18 -0500 Subject: [PATCH] Lua: FieldInfo '==' check isn't really equality The FieldInfo metamethod for equality (letting you use the '==' operator) doesn't check for equality, but rather if the left-hand side is within the right-hand side. It should be equality instead. Also, all of the FieldInfo operate overloads should push a boolean even if they're false result. Bug: 10820 Change-Id: Ibddaab29713f26d22ddb4d5804b9edb15e93fd79 Reviewed-on: https://code.wireshark.org/review/6186 Petri-Dish: Hadriel Kaplan Tested-by: Petri Dish Buildbot Reviewed-by: Michael Mann --- epan/wslua/wslua_field.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/epan/wslua/wslua_field.c b/epan/wslua/wslua_field.c index 45db3f01e4..bc8c9af560 100644 --- a/epan/wslua/wslua_field.c +++ b/epan/wslua/wslua_field.c @@ -308,17 +308,15 @@ WSLUA_METAMETHOD FieldInfo__eq(lua_State* L) { FieldInfo l = checkFieldInfo(L,1); FieldInfo r = checkFieldInfo(L,2); - if (l->ws_fi->ds_tvb != r->ws_fi->ds_tvb) { - WSLUA_ERROR(FieldInfo__eq,"Data source must be the same for both fields"); - return 0; - } - - if (l->ws_fi->start <= r->ws_fi->start && r->ws_fi->start + r->ws_fi->length <= l->ws_fi->start + l->ws_fi->length) { + /* it is not an error if their ds_tvb are different... they're just not equal */ + if (l->ws_fi->ds_tvb == r->ws_fi->ds_tvb && + l->ws_fi->start == r->ws_fi->start && + r->ws_fi->length == l->ws_fi->length) { lua_pushboolean(L,1); - return 1; } else { - return 0; + lua_pushboolean(L,0); } + return 1; } WSLUA_METAMETHOD FieldInfo__le(lua_State* L) { @@ -331,10 +329,10 @@ WSLUA_METAMETHOD FieldInfo__le(lua_State* L) { if (r->ws_fi->start + r->ws_fi->length <= l->ws_fi->start + l->ws_fi->length) { lua_pushboolean(L,1); - return 1; } else { - return 0; + lua_pushboolean(L,0); } + return 1; } WSLUA_METAMETHOD FieldInfo__lt(lua_State* L) { @@ -349,10 +347,10 @@ WSLUA_METAMETHOD FieldInfo__lt(lua_State* L) { if (r->ws_fi->start + r->ws_fi->length < l->ws_fi->start) { lua_pushboolean(L,1); - return 1; } else { - return 0; + lua_pushboolean(L,0); } + return 1; } /* Gets registered as metamethod automatically by WSLUA_REGISTER_META */