aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/wslua/wslua.h1
-rw-r--r--epan/wslua/wslua_field.c14
-rw-r--r--epan/wslua/wslua_tvb.c27
3 files changed, 17 insertions, 25 deletions
diff --git a/epan/wslua/wslua.h b/epan/wslua/wslua.h
index c75c3e0143..6a3c0bc8e5 100644
--- a/epan/wslua/wslua.h
+++ b/epan/wslua/wslua.h
@@ -443,6 +443,7 @@ extern void lua_prime_all_fields(proto_tree* tree);
extern int Proto_commit(lua_State* L);
extern Tvb* push_Tvb(lua_State* L, tvbuff_t* tvb);
+extern gboolean push_TvbRange(lua_State* L, tvbuff_t* tvb, int offset, int len);
extern void clear_outstanding_Tvb(void);
extern void clear_outstanding_TvbRange(void);
diff --git a/epan/wslua/wslua_field.c b/epan/wslua/wslua_field.c
index 5eceff255c..e7b706212c 100644
--- a/epan/wslua/wslua_field.c
+++ b/epan/wslua/wslua_field.c
@@ -229,17 +229,11 @@ static int FieldInfo_display(lua_State* L) {
static int FieldInfo_get_range(lua_State* L) {
/* The TvbRange covering this field */
FieldInfo fi = checkFieldInfo(L,1);
- TvbRange r = ep_new(struct _wslua_tvbrange);
- r->tvb = ep_new(struct _wslua_tvb);
-
- r->tvb->ws_tvb = fi->ds_tvb;
- r->tvb->expired = FALSE;
- r->tvb->need_free = FALSE;
- r->offset = fi->start;
- r->len = fi->length;
+ if (push_TvbRange (L, fi->ds_tvb, fi->start, fi->length)) {
+ return 1;
+ }
- pushTvbRange(L,r);
- return 1;
+ return 0;
}
static int FieldInfo_get_generated(lua_State* L) {
diff --git a/epan/wslua/wslua_tvb.c b/epan/wslua/wslua_tvb.c
index 040e242d82..3b7eaf0395 100644
--- a/epan/wslua/wslua_tvb.c
+++ b/epan/wslua/wslua_tvb.c
@@ -599,24 +599,23 @@ WSLUA_CLASS_DEFINE(TvbRange,FAIL_ON_NULL("expired tvbrange"),NOP);
Tvb's range the creation will cause a runtime error.
*/
-static TvbRange new_TvbRange(lua_State* L, tvbuff_t* ws_tvb, int offset, int len) {
+gboolean push_TvbRange(lua_State* L, tvbuff_t* ws_tvb, int offset, int len) {
TvbRange tvbr;
-
if (!ws_tvb) {
luaL_error(L,"expired tvb");
- return 0;
+ return FALSE;
}
if (len == -1) {
len = tvb_length_remaining(ws_tvb,offset);
if (len < 0) {
luaL_error(L,"out of bounds");
- return 0;
+ return FALSE;
}
} else if ( (guint)(len + offset) > tvb_length(ws_tvb)) {
luaL_error(L,"Range is out of bounds");
- return NULL;
+ return FALSE;
}
tvbr = (TvbRange)g_malloc(sizeof(struct _wslua_tvbrange));
@@ -627,7 +626,9 @@ static TvbRange new_TvbRange(lua_State* L, tvbuff_t* ws_tvb, int offset, int len
tvbr->offset = offset;
tvbr->len = len;
- return tvbr;
+ PUSH_TVBRANGE(L,tvbr);
+
+ return TRUE;
}
@@ -639,7 +640,6 @@ WSLUA_METHOD Tvb_range(lua_State* L) {
Tvb tvb = checkTvb(L,1);
int offset = luaL_optint(L,WSLUA_OPTARG_Tvb_range_OFFSET,0);
int len = luaL_optint(L,WSLUA_OPTARG_Tvb_range_LENGTH,-1);
- TvbRange tvbr;
if (!tvb) return 0;
if (tvb->expired) {
@@ -647,8 +647,7 @@ WSLUA_METHOD Tvb_range(lua_State* L) {
return 0;
}
- if ((tvbr = new_TvbRange(L,tvb->ws_tvb,offset,len))) {
- PUSH_TVBRANGE(L,tvbr);
+ if (push_TvbRange(L,tvb->ws_tvb,offset,len)) {
WSLUA_RETURN(1); /* The TvbRange */
}
@@ -1318,8 +1317,7 @@ WSLUA_METHOD TvbRange_range(lua_State* L) {
return 0;
}
- if ((tvbr = new_TvbRange(L,tvbr->tvb->ws_tvb,tvbr->offset+offset,len))) {
- PUSH_TVBRANGE(L,tvbr);
+ if (push_TvbRange(L,tvbr->tvb->ws_tvb,tvbr->offset+offset,len)) {
WSLUA_RETURN(1); /* The TvbRange */
}
@@ -1328,9 +1326,9 @@ WSLUA_METHOD TvbRange_range(lua_State* L) {
static int TvbRange_uncompress(lua_State* L) {
/* Obtain a uncompressed TvbRange from a TvbRange */
-#define WSLUA_ARG_TvbRange_tvb_NAME 2 /* The name to be given to the new data-source. */
+#define WSLUA_ARG_TvbRange_uncompress_NAME 2 /* The name to be given to the new data-source. */
TvbRange tvbr = checkTvbRange(L,1);
- const gchar* name = luaL_optstring(L,WSLUA_ARG_TvbRange_tvb_NAME,"Uncompressed");
+ const gchar* name = luaL_optstring(L,WSLUA_ARG_TvbRange_uncompress_NAME,"Uncompressed");
tvbuff_t *uncompr_tvb;
if (!(tvbr && tvbr->tvb)) return 0;
@@ -1344,8 +1342,7 @@ static int TvbRange_uncompress(lua_State* L) {
uncompr_tvb = tvb_child_uncompress(tvbr->tvb->ws_tvb, tvbr->tvb->ws_tvb, tvbr->offset, tvbr->len);
if (uncompr_tvb) {
add_new_data_source (lua_pinfo, uncompr_tvb, name);
- if ((tvbr = new_TvbRange(L,uncompr_tvb,0,tvb_length(uncompr_tvb)))) {
- PUSH_TVBRANGE(L,tvbr);
+ if (push_TvbRange(L,uncompr_tvb,0,tvb_length(uncompr_tvb))) {
WSLUA_RETURN(1); /* The TvbRange */
}
}