Hello list,
Recently I'm browsing through wireshark sources, and in many dissectors
(this is example from packet-epl_v1.c) there's code like this:
from dissect_epl_v1:
info_str = ep_alloc(200);
info_str[0] = 0;
switch (epl_v1_service){
case EPL_V1_SOC:
g_snprintf(info_str, 200, "SoC dest = %3d src = %3d ", epl_v1_dest, epl_v1_src);
break;
case EPL_V1_EOC:
g_snprintf(info_str, 200, "EoC dest = %3d src = %3d ", epl_v1_dest, epl_v1_src);
break;
case EPL_V1_PREQ:
g_snprintf(info_str, 200, "PReq dest = %3d src = %3d ", epl_v1_dest, epl_v1_src);
break;
/* and so ... */
}
if(check_col(pinfo->cinfo, COL_INFO))
col_add_str(pinfo->cinfo, COL_INFO, info_str);
Code is ok, and works fine... But I've got 3 questions:
1/ There's ep_strdup_printf() function - shouldn't it be used in cases like it?
(IMHO best way)
2/ Why ep memory is used in first place, shouldn't be
gchar info_str[200];
used instead of
gchar *info_str = ep_alloc(200); ?
3/ 200 bytes buffer is overkill - shouldn't g_sprintf() be used?
(if programmer make mistake in buffer size canary check will abort program)
or both 4 ways are ok, and there's no best one? :)
Regards.