ANNOUNCEMENT: Live Wireshark University & Allegro Packets online APAC Wireshark Training Session
April 17th, 2024 | 14:30-16:00 SGT (UTC+8) | Online

Wireshark-dev: [Wireshark-dev] ep_alloc overused?

From: Jakub Zawadzki <darkjames@xxxxxxxxxxxxxxxx>
Date: Sun, 25 Oct 2009 00:03:37 +0200
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.