forked from osmocom/wireshark
Signal error on field values that cannot be safely represented as strings instead of crashing.
This fixes bug 2845. svn path=/trunk/; revision=26749
This commit is contained in:
parent
f9c07203cb
commit
41723a5ef2
|
@ -130,7 +130,7 @@ val_repr_len(fvalue_t *fv, ftrepr_t rtype)
|
|||
{
|
||||
guint length;
|
||||
|
||||
g_assert(rtype == FTREPR_DFILTER);
|
||||
if (rtype != FTREPR_DFILTER) return -1;
|
||||
length = tvb_length(fv->value.tvb);
|
||||
/* 3 bytes for each byte of the byte "NN:" minus 1 byte
|
||||
* as there's no trailing ":". */
|
||||
|
|
|
@ -303,7 +303,13 @@ fvalue_to_string_repr(fvalue_t *fv, ftrepr_t rtype, char *buf)
|
|||
{
|
||||
g_assert(fv->ftype->val_to_string_repr);
|
||||
if (!buf) {
|
||||
buf = g_malloc0(fvalue_string_repr_len(fv, rtype) + 1);
|
||||
int len;
|
||||
if ((len = fvalue_string_repr_len(fv, rtype)) >= 0) {
|
||||
buf = g_malloc0(len + 1);
|
||||
} else {
|
||||
/* the value cannot be represented in the given representation type (rtype) */
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
fv->ftype->val_to_string_repr(fv, rtype, buf);
|
||||
return buf;
|
||||
|
|
|
@ -280,6 +280,9 @@ fvalue_from_string(ftenum_t ftype, char *s, LogFunc logfunc);
|
|||
|
||||
/* Returns the length of the string required to hold the
|
||||
* string representation of the the field value.
|
||||
*
|
||||
* Returns -1 if the string cannot be represented in the given rtype.
|
||||
*
|
||||
* The length DOES NOT include the terminating NUL. */
|
||||
int
|
||||
fvalue_string_repr_len(fvalue_t *fv, ftrepr_t rtype);
|
||||
|
@ -291,7 +294,9 @@ fvalue_string_repr_len(fvalue_t *fv, ftrepr_t rtype);
|
|||
* The pointer to the beginning of the string representation is
|
||||
* returned. If 'buf' was NULL, this points to the newly-allocated
|
||||
* memory. if 'buf' was non-NULL, then the return value will be
|
||||
* 'buf'. */
|
||||
* 'buf'.
|
||||
*
|
||||
* Returns NULL if the string cannot be represented in the given rtype.*/
|
||||
extern char *
|
||||
fvalue_to_string_repr(fvalue_t *fv, ftrepr_t rtype, char *buf);
|
||||
|
||||
|
|
|
@ -125,9 +125,15 @@ WSLUA_METAMETHOD FieldInfo__call(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
case FT_STRING:
|
||||
case FT_STRINGZ:
|
||||
lua_pushstring(L,fvalue_to_string_repr(&fi->value,FTREPR_DISPLAY,NULL));
|
||||
case FT_STRINGZ: {
|
||||
gchar* repr = fvalue_to_string_repr(&fi->value,FTREPR_DISPLAY,NULL);
|
||||
if (repr)
|
||||
lua_pushstring(L,repr);
|
||||
else
|
||||
luaL_error(L,"field cannot be represented as string because it may contain invalid characters");
|
||||
|
||||
return 1;
|
||||
}
|
||||
case FT_BYTES:
|
||||
case FT_UINT_BYTES:
|
||||
case FT_GUID:
|
||||
|
@ -147,9 +153,13 @@ WSLUA_METAMETHOD FieldInfo__tostring(lua_State* L) {
|
|||
/* the string representation of the field */
|
||||
FieldInfo fi = checkFieldInfo(L,1);
|
||||
if (fi) {
|
||||
if (fi->value.ftype->val_to_string_repr)
|
||||
lua_pushstring(L,fvalue_to_string_repr(&fi->value,FTREPR_DISPLAY,NULL));
|
||||
else
|
||||
if (fi->value.ftype->val_to_string_repr) {
|
||||
gchar* repr = fvalue_to_string_repr(&fi->value,FTREPR_DISPLAY,NULL);
|
||||
if (repr)
|
||||
lua_pushstring(L,repr);
|
||||
else
|
||||
luaL_error(L,"field cannot be represented as string because it may contain invalid characters");
|
||||
} else
|
||||
luaL_error(L,"field has no string representation");
|
||||
}
|
||||
return 1;
|
||||
|
|
Loading…
Reference in New Issue