forked from osmocom/wireshark
Renamed new_TvbRange to push_TvbRange and use this when creating a new
TvbRange from a FieldInfo. This should fix the crash in bug #9483. svn path=/trunk/; revision=54247
This commit is contained in:
parent
891b2372a0
commit
3b73e8b479
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
if (push_TvbRange (L, fi->ds_tvb, fi->start, fi->length)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
r->tvb->ws_tvb = fi->ds_tvb;
|
||||
r->tvb->expired = FALSE;
|
||||
r->tvb->need_free = FALSE;
|
||||
r->offset = fi->start;
|
||||
r->len = fi->length;
|
||||
|
||||
pushTvbRange(L,r);
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int FieldInfo_get_generated(lua_State* L) {
|
||||
|
|
|
@ -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 */
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue