Forbid leading, duplicated and trailing dots in field names

In order to simplify the display filter scanner, try to restrict the use
of dots ('.') in field names. Forbid leading dots, does not affect
current dissectors. Fix '..' typo in fpp dissector and forbid it. Forbid
trailing dots after fixing dissectors: some of them just have an excess
dot, others are missing a name after the dot.

Change-Id: I6e58a04ef0306ee8c16fbf6a3cabb076d7fc69c9
Reviewed-on: https://code.wireshark.org/review/26967
Petri-Dish: Peter Wu <peter@lekensteyn.nl>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Peter Wu 2018-04-16 15:36:41 +02:00 committed by Anders Broman
parent f9ed58759f
commit ccff21854d
17 changed files with 91 additions and 89 deletions

View File

@ -2070,7 +2070,7 @@ void proto_register_ldap(void) {
TFS(&tfs_ads_rodc), 0x00000800, "Is this an read only dc?", HFILL }},
{ &hf_mscldap_netlogon_flags_wdc,
{ "WDC", "mscldap.netlogon.flags.writabledc.", FT_BOOLEAN, 32,
{ "WDC", "mscldap.netlogon.flags.writabledc", FT_BOOLEAN, 32,
TFS(&tfs_ads_wdc), 0x00001000, "Is this an writable dc (Windows 2008)?", HFILL }},
{ &hf_mscldap_netlogon_flags_dns,

View File

@ -8589,7 +8589,7 @@ proto_register_bootp(void)
"Option 120: SIP Server Address", HFILL }},
{ &hf_bootp_option_classless_static_route,
{ "Subnet/MaskWidth-Router", "bootp.option.classless_static_route.",
{ "Subnet/MaskWidth-Router", "bootp.option.classless_static_route",
FT_BYTES, BASE_NONE, NULL, 0x0,
"Option 121: Subnet/MaskWidth-Router", HFILL }},

View File

@ -12941,27 +12941,27 @@ proto_register_btatt(void)
NULL, HFILL}
},
{&hf_btatt_glucose_measurement_context_flags_medication_id_and_medication,
{"Medication ID And Medication", "btatt.glucose_measurement_context.flags.",
{"Medication ID And Medication", "btatt.glucose_measurement_context.flags.medication_id_and_medication",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL}
},
{&hf_btatt_glucose_measurement_context_flags_exercise_duration_and_exercise_intensity,
{"Exercise Duration And Exercise Intensity", "btatt.glucose_measurement_context.flags.",
{"Exercise Duration And Exercise Intensity", "btatt.glucose_measurement_context.flags.exercise_duration_and_exercise_intensity",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL}
},
{&hf_btatt_glucose_measurement_context_flags_tester_health,
{"Tester Health", "btatt.glucose_measurement_context.flags.",
{"Tester Health", "btatt.glucose_measurement_context.flags.tester_health",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL}
},
{&hf_btatt_glucose_measurement_context_flags_meal,
{"Meal", "btatt.glucose_measurement_context.flags.",
{"Meal", "btatt.glucose_measurement_context.flags.meal",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL}
},
{&hf_btatt_glucose_measurement_context_flags_carbohydrate_id_and_carbohydrate,
{"Carbohydrate ID And Carbohydrate", "btatt.glucose_measurement_context.flags.",
{"Carbohydrate ID And Carbohydrate", "btatt.glucose_measurement_context.flags.carbohydrate_id_and_carbohydrate",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL}
},
@ -14658,7 +14658,7 @@ proto_register_btatt(void)
NULL, HFILL}
},
{&hf_btatt_cgm_e2e_crc,
{"E2E-CRC", "btatt.cgm.e2e_crc.",
{"E2E-CRC", "btatt.cgm.e2e_crc",
FT_UINT16, BASE_HEX, NULL, 0x0,
NULL, HFILL}
},

View File

@ -1255,7 +1255,7 @@ proto_register_bthci_vendor_broadcom(void)
NULL, HFILL }
},
{ &hf_broadcom_sco_pcm_interface_clock_mode,
{ "SCO PCM Interface Clock Mode", "bthci_vendor.broadcom.sco.interface.",
{ "SCO PCM Interface Clock Mode", "bthci_vendor.broadcom.sco.interface.clock_mode",
FT_UINT8, BASE_HEX, VALS(broadcom_mode_slave_master_vals), 0x0,
NULL, HFILL }
},

View File

@ -641,7 +641,7 @@ proto_register_fpp(void)
"Bad mCRC checksum", EXPFILL }
},
{ &ei_fpp_crc32,
{ "fpp..crc32_bad", PI_CHECKSUM, PI_ERROR,
{ "fpp.crc32_bad", PI_CHECKSUM, PI_ERROR,
"Bad CRC checksum", EXPFILL }
},
};
@ -678,9 +678,9 @@ proto_reg_handoff_fpp(void)
* Local variables:
* c-basic-offset: 4
* tab-width: 8
* indent-tabs-mode: nil
* indent-tabs-mode: t
* End:
*
* vi: set shiftwidth=4 tabstop=8 expandtab:
* :indentSize=4:tabSize=8:noTabs=true:
* vi: set shiftwidth=4 tabstop=8 noexpandtab:
* :indentSize=4:tabSize=8:noTabs=false:
*/

View File

@ -7933,12 +7933,12 @@ void proto_register_gtpv2(void)
"SGSN", HFILL}
},
{ &hf_gtpv2_tra_info_sgsn_mbms,
{"MBMS Context", "gtpv2.tra_into_sgsn_mbms",
{"MBMS Context", "gtpv2.tra_info_sgsn_mbms",
FT_UINT8, BASE_DEC, NULL, 0x08,
"SGSN", HFILL}
},
{ &hf_gtpv2_tra_info_sgsn_reserved,
{"Reserved", "gtpv2.",
{"Reserved", "gtpv2.tra_info_sgsn_reserved",
FT_UINT8, BASE_DEC, NULL, 0x0,
"SGSN", HFILL}
},

View File

@ -1494,12 +1494,12 @@ void proto_register_idrp(void)
HFILL}},
{&hf_idrp_update_nlri_addr_length,
{"NLRI Address Length",
"idrp.update.nlri.addr-length.", FT_UINT16, BASE_DEC,
"idrp.update.nlri.addr-length", FT_UINT16, BASE_DEC,
NULL, 0, NULL ,
HFILL}},
{&hf_idrp_update_nlri_addr_info_nb_bits,
{"NLRI Address Info Bits",
"idrp.update.nlri.addr-info-bits.", FT_UINT8, BASE_DEC,
"idrp.update.nlri.addr-info-bits", FT_UINT8, BASE_DEC,
NULL, 0, NULL ,
HFILL}},
{&hf_idrp_update_nlri_addr_info,

View File

@ -4988,7 +4988,7 @@ void proto_register_ldap(void) {
TFS(&tfs_ads_rodc), 0x00000800, "Is this an read only dc?", HFILL }},
{ &hf_mscldap_netlogon_flags_wdc,
{ "WDC", "mscldap.netlogon.flags.writabledc.", FT_BOOLEAN, 32,
{ "WDC", "mscldap.netlogon.flags.writabledc", FT_BOOLEAN, 32,
TFS(&tfs_ads_wdc), 0x00001000, "Is this an writable dc (Windows 2008)?", HFILL }},
{ &hf_mscldap_netlogon_flags_dns,

View File

@ -9111,7 +9111,7 @@ void proto_register_nfapi(void)
"The number of cell specific transmit antenna ports within the DRS occasions", HFILL }
},
{ &hf_nfapi_transmission_power_for_drs,
{ "Transmission power for DRS", "nfapi.transmission.power.for.drs.",
{ "Transmission power for DRS", "nfapi.transmission.power.for.drs",
FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
"Offset of cell specific Reference signals power within DRS occasions to the reference signal power", HFILL }
},
@ -10205,7 +10205,7 @@ void proto_register_nfapi(void)
"Valid for DCI format 6-2", HFILL }
},
{ &hf_nfapi_number_of_tx_antenna_ports,
{ "Number of TX Antenna ports", "nfapi.num.of.tx.antenna.ports.",
{ "Number of TX Antenna ports", "nfapi.num.of.tx.antenna.ports",
FT_UINT8, BASE_DEC, NULL, 0x0,
"Number of TX physical antenna ports", HFILL }
},
@ -11135,7 +11135,7 @@ void proto_register_nfapi(void)
"Indicates HARQ results", HFILL }
},
{ &hf_nfapi_harq_tb_1,
{ "HARQ TB1", "nfapi.harq.tb.",
{ "HARQ TB1", "nfapi.harq.tb.1",
FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
"HARQ feedback of 1st TB.", HFILL }
},

View File

@ -3580,7 +3580,7 @@ proto_register_obex(void)
NULL, HFILL}
},
{ &hf_ctn_application_parameter_data_parameter_mask_alarm_status,
{ "Alarm Status", "obex.parameter.ctn.parameter_mask.",
{ "Alarm Status", "obex.parameter.ctn.parameter_mask.alarm_status",
FT_UINT32, BASE_HEX, NULL, 0x00000080,
NULL, HFILL}
},

View File

@ -4761,7 +4761,7 @@ proto_register_reload(void)
}
},
{ &hf_reload_signature_value,
{ "signature_value", "reload.signature.value.", FT_NONE,
{ "signature_value", "reload.signature.value", FT_NONE,
BASE_NONE, NULL, 0x0, NULL, HFILL
}
},
@ -5171,7 +5171,7 @@ proto_register_reload(void)
},
{ &hf_reload_configupdatereq,
{ "ConfigUpdateReq", "reload.configupdatereq.", FT_NONE,
{ "ConfigUpdateReq", "reload.configupdatereq", FT_NONE,
BASE_NONE, NULL, 0x0, NULL, HFILL
}
},

View File

@ -1332,7 +1332,7 @@ proto_register_ses(void)
&hf_session_exception_report,
{
"Session exception report",
"ses.exception_report.",
"ses.exception_report",
FT_BOOLEAN, 16,
NULL,
SES_EXCEPTION_REPORT,

View File

@ -1473,7 +1473,7 @@ proto_register_srvloc(void)
},
{ &hf_srvloc_flags_v1_overflow,
{ "Overflow", "srvloc.flags_v1.overflow.", FT_BOOLEAN, 8,
{ "Overflow", "srvloc.flags_v1.overflow", FT_BOOLEAN, 8,
TFS(&tfs_srvloc_flags_overflow), FLAG_O, "Can whole packet fit into a datagram?", HFILL }},
{ &hf_srvloc_flags_v1_monolingual,

View File

@ -6751,11 +6751,11 @@ void proto_register_fp(void)
};
static ei_register_info ei[] = {
{ &ei_fp_bad_header_checksum, { "fp.header.bad_checksum.", PI_CHECKSUM, PI_WARN, "Bad header checksum.", EXPFILL }},
{ &ei_fp_bad_header_checksum, { "fp.header.bad_checksum", PI_CHECKSUM, PI_WARN, "Bad header checksum.", EXPFILL }},
{ &ei_fp_crci_no_subdissector, { "fp.crci.no_subdissector", PI_UNDECODED, PI_NOTE, "Not sent to subdissectors as CRCI is set", EXPFILL }},
{ &ei_fp_crci_error_bit_set_for_tb, { "fp.crci.error_bit_set_for_tb", PI_CHECKSUM, PI_WARN, "CRCI error bit set for TB", EXPFILL }},
{ &ei_fp_spare_extension, { "fp.spare-extension.expert", PI_UNDECODED, PI_WARN, "Spare Extension present (%u bytes)", EXPFILL }},
{ &ei_fp_bad_payload_checksum, { "fp.payload-crc.bad.", PI_CHECKSUM, PI_WARN, "Bad payload checksum.", EXPFILL }},
{ &ei_fp_bad_payload_checksum, { "fp.payload-crc.bad", PI_CHECKSUM, PI_WARN, "Bad payload checksum.", EXPFILL }},
{ &ei_fp_stop_hsdpa_transmission, { "fp.stop_hsdpa_transmission", PI_RESPONSE_CODE, PI_NOTE, "Stop HSDPA transmission", EXPFILL }},
{ &ei_fp_timing_adjustmentment_reported, { "fp.timing_adjustmentment_reported", PI_SEQUENCE, PI_WARN, "Timing adjustmentment reported (%f ms)", EXPFILL }},
{ &ei_fp_expecting_tdd, { "fp.expecting_tdd", PI_MALFORMED, PI_NOTE, "Error: expecting TDD-384 or TDD-768", EXPFILL }},

View File

@ -6506,11 +6506,11 @@ proto_register_zbee_zcl_analog_output_basic(void)
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_analog_output_basic_priority_array,
{ "Priority Array", "zbee_zcl_general.analog_output_basic.priority_array.", FT_NONE, BASE_NONE, NULL,
{ "Priority Array", "zbee_zcl_general.analog_output_basic.priority_array", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_analog_output_basic_structure,
{ "Structure", "zbee_zcl_general.analog_output_basic.structure.", FT_NONE, BASE_NONE, NULL,
{ "Structure", "zbee_zcl_general.analog_output_basic.structure", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } }
};
@ -6789,11 +6789,11 @@ proto_register_zbee_zcl_analog_value_basic(void)
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_analog_value_basic_priority_array,
{ "Priority Array", "zbee_zcl_general.analog_value_basic.priority_array.", FT_NONE, BASE_NONE, NULL,
{ "Priority Array", "zbee_zcl_general.analog_value_basic.priority_array", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_analog_value_basic_structure,
{ "Structure", "zbee_zcl_general.analog_value_basic.structure.", FT_NONE, BASE_NONE, NULL,
{ "Structure", "zbee_zcl_general.analog_value_basic.structure", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } }
};
@ -7350,11 +7350,11 @@ proto_register_zbee_zcl_binary_output_basic(void)
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_binary_output_basic_priority_array,
{ "Priority Array", "zbee_zcl_general.binary_output_basic.priority_array.", FT_NONE, BASE_NONE, NULL,
{ "Priority Array", "zbee_zcl_general.binary_output_basic.priority_array", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_binary_output_basic_structure,
{ "Structure", "zbee_zcl_general.binary_output_basic.structure.", FT_NONE, BASE_NONE, NULL,
{ "Structure", "zbee_zcl_general.binary_output_basic.structure", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } }
};
@ -7639,11 +7639,11 @@ proto_register_zbee_zcl_binary_value_basic(void)
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_binary_value_basic_priority_array,
{ "Priority Array", "zbee_zcl_general.binary_value_basic.priority_array.", FT_NONE, BASE_NONE, NULL,
{ "Priority Array", "zbee_zcl_general.binary_value_basic.priority_array", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_binary_value_basic_structure,
{ "Structure", "zbee_zcl_general.binary_value_basic.structure.", FT_NONE, BASE_NONE, NULL,
{ "Structure", "zbee_zcl_general.binary_value_basic.structure", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } }
};
@ -8162,11 +8162,11 @@ proto_register_zbee_zcl_multistate_output_basic(void)
0x00, NULL, HFILL } } ,
{ &hf_zbee_zcl_multistate_output_basic_priority_array,
{ "Priority Array", "zbee_zcl_general.multistate_output_basic.priority_array.", FT_NONE, BASE_NONE, NULL,
{ "Priority Array", "zbee_zcl_general.multistate_output_basic.priority_array", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_multistate_output_basic_structure,
{ "Structure", "zbee_zcl_general.multistate_output_basic.structure.", FT_NONE, BASE_NONE, NULL,
{ "Structure", "zbee_zcl_general.multistate_output_basic.structure", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } }
};
@ -8452,11 +8452,11 @@ proto_register_zbee_zcl_multistate_value_basic(void)
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_multistate_value_basic_priority_array,
{ "Priority Array", "zbee_zcl_general.multistate_value_basic.priority_array.", FT_NONE, BASE_NONE, NULL,
{ "Priority Array", "zbee_zcl_general.multistate_value_basic.priority_array", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } },
{ &hf_zbee_zcl_multistate_value_basic_structure,
{ "Structure", "zbee_zcl_general.multistate_value_basic.structure.", FT_NONE, BASE_NONE, NULL,
{ "Structure", "zbee_zcl_general.multistate_value_basic.structure", FT_NONE, BASE_NONE, NULL,
0x00, NULL, HFILL } }
};
@ -15317,7 +15317,7 @@ proto_register_zbee_zcl_gp(void)
/* GP Sink Commissioning Mode command */
{ &hf_zbee_zcl_gp_cmd_sink_comm_mode_options,
{ "Options", "zbee_zcl_general.gp.sink_comm_mode.", FT_UINT8, BASE_HEX,
{ "Options", "zbee_zcl_general.gp.sink_comm_mode.options", FT_UINT8, BASE_HEX,
NULL, 0, NULL, HFILL }},
{ &hf_zbee_zcl_gp_cmd_sink_comm_mode_options_fld_action,
@ -15575,7 +15575,7 @@ proto_register_zbee_zcl_gp(void)
{ "Translation Table", "zbee_zcl_general.gp.attr.gps_func.translation_table", FT_BOOLEAN, 24,
NULL, ZBEE_ZCL_GP_ATTR_GPS_FUNC_FLD_TRANSLATION_TABLE, NULL, HFILL }},
{ &hf_zbee_zcl_gp_attr_gps_func_fld_gpd_ieee_address,
{ "GPD IEEE address", "zbee_zcl_general.gp.attr.gps_func.", FT_BOOLEAN, 24,
{ "GPD IEEE address", "zbee_zcl_general.gp.attr.gps_func.gpd_ieee_address", FT_BOOLEAN, 24,
NULL, ZBEE_ZCL_GP_ATTR_GPS_FUNC_FLD_GPD_IEEE_ADDRESS, NULL, HFILL }},
/* gpsActiveFunctionality attribute */

View File

@ -409,18 +409,6 @@ proto_compare_name(gconstpointer p1_arg, gconstpointer p2_arg)
return g_ascii_strcasecmp(p1->short_name, p2->short_name);
}
static inline guchar
check_charset(const guint8 table[256], const char *str)
{
const char *p = str;
guchar c;
do {
c = *(p++);
} while (table[c]);
return c;
}
#ifdef HAVE_PLUGINS
static GSList *dissector_plugins = NULL;
@ -6442,15 +6430,34 @@ proto_tree_set_appendix(proto_tree *tree, tvbuff_t *tvb, gint start,
fi->appendix_length = length;
}
static void
check_valid_filter_name_or_fail(const char *filter_name)
{
gboolean found_invalid = proto_check_field_name(filter_name);
/* Additionally forbid upper case characters. */
if (!found_invalid) {
for (guint i = 0; filter_name[i]; i++) {
if (g_ascii_isupper(filter_name[i])) {
found_invalid = TRUE;
break;
}
}
}
if (found_invalid) {
g_error("Protocol filter name \"%s\" has one or more invalid characters."
" Allowed are lower characters, digits, '-', '_' and non-repeating '.'."
" This might be caused by an inappropriate plugin or a development error.", filter_name);
}
}
int
proto_register_protocol(const char *name, const char *short_name,
const char *filter_name)
{
protocol_t *protocol;
header_field_info *hfinfo;
guint i;
gchar c;
gboolean found_invalid;
/*
* Make sure there's not already a protocol with any of those
@ -6471,18 +6478,7 @@ proto_register_protocol(const char *name, const char *short_name,
" This might be caused by an inappropriate plugin or a development error.", short_name);
}
found_invalid = FALSE;
for (i = 0; filter_name[i]; i++) {
c = filter_name[i];
if (!(g_ascii_islower(c) || g_ascii_isdigit(c) || c == '-' || c == '_' || c == '.')) {
found_invalid = TRUE;
}
}
if (found_invalid) {
g_error("Protocol filter name \"%s\" has one or more invalid characters."
" Allowed are lower characters, digits, '-', '_' and '.'."
" This might be caused by an inappropriate plugin or a development error.", filter_name);
}
check_valid_filter_name_or_fail(filter_name);
if (g_hash_table_lookup(proto_filter_names, filter_name)) {
g_error("Duplicate protocol filter_name \"%s\"!"
@ -6531,9 +6527,6 @@ proto_register_protocol_in_name_only(const char *name, const char *short_name, c
{
protocol_t *protocol;
header_field_info *hfinfo;
guint i;
gchar c;
gboolean found_invalid = FALSE;
/*
* Helper protocols don't need the strict rules as a "regular" protocol
@ -6548,17 +6541,7 @@ proto_register_protocol_in_name_only(const char *name, const char *short_name, c
" This might be caused by an inappropriate plugin or a development error.", name);
}
for (i = 0; filter_name[i]; i++) {
c = filter_name[i];
if (!(g_ascii_islower(c) || g_ascii_isdigit(c) || c == '-' || c == '_' || c == '.')) {
found_invalid = TRUE;
}
}
if (found_invalid) {
g_error("Protocol filter name \"%s\" has one or more invalid characters."
" Allowed are lower characters, digits, '-', '_' and '.'."
" This might be caused by an inappropriate plugin or a development error.", filter_name);
}
check_valid_filter_name_or_fail(filter_name);
/* Add this protocol to the list of helper protocols (just so it can be properly freed) */
protocol = g_new(protocol_t, 1);
@ -7242,7 +7225,7 @@ proto_free_deregistered_fields (void)
deregistered_data = g_ptr_array_new();
}
/* chars allowed in field abbrev */
/* chars allowed in field abbrev: alphanumerics, '-', "_", and ".". */
static
const guint8 fld_abbrev_chars[256] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00-0x0F */
@ -7883,12 +7866,15 @@ proto_register_field_init(header_field_info *hfinfo, const int parent)
/* Check that the filter name (abbreviation) is legal;
* it must contain only alphanumerics, '-', "_", and ".". */
c = check_charset(fld_abbrev_chars, hfinfo->abbrev);
c = proto_check_field_name(hfinfo->abbrev);
if (c) {
if (g_ascii_isprint(c))
if (c == '.') {
fprintf(stderr, "Invalid leading, duplicated or trailing '.' found in filter name '%s'\n", hfinfo->abbrev);
} else if (g_ascii_isprint(c)) {
fprintf(stderr, "Invalid character '%c' in filter name '%s'\n", c, hfinfo->abbrev);
else
} else {
fprintf(stderr, "Invalid byte \\%03o in filter name '%s'\n", c, hfinfo->abbrev);
}
DISSECTOR_ASSERT_NOT_REACHED();
}
@ -11834,7 +11820,23 @@ proto_tree_add_checksum(proto_tree *tree, tvbuff_t *tvb, const guint offset,
guchar
proto_check_field_name(const gchar *field_name)
{
return check_charset(fld_abbrev_chars, field_name);
const char *p = field_name;
guchar c = '.', lastc;
do {
lastc = c;
c = *(p++);
/* Leading '.' or substring ".." are disallowed. */
if (c == '.' && lastc == '.') {
break;
}
} while (fld_abbrev_chars[c]);
/* Trailing '.' is disallowed. */
if (lastc == '.') {
return '.';
}
return c;
}
gboolean

View File

@ -5243,7 +5243,7 @@ proto_register_wimaxmacphy(void)
&hf_wimaxmacphy_ul_sub_burst_sounding_power_boost,
{
"Power boost",
"wimaxmacphy.",
"wimaxmacphy.sub_burst_sounding_power_boost",
FT_UINT8,
BASE_DEC,
VALS(wimaxmacphy_ul_sub_burst_sounding_power_boost_vals),