diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c index e14aecba5..467301baf 100644 --- a/src/osmo-bsc/bsc_vty.c +++ b/src/osmo-bsc/bsc_vty.c @@ -2712,6 +2712,7 @@ DEFUN_USRATTR(cfg_net_msc_codec_list, { struct bsc_msc_data *data = bsc_msc_data(vty); struct gsm_audio_support tmp[ARRAY_SIZE(data->audio_support)]; + const char *arg = NULL; int i; /* Nr of arguments must fit in the array */ @@ -2724,30 +2725,23 @@ DEFUN_USRATTR(cfg_net_msc_codec_list, /* check all given arguments first */ for (i = 0; i < argc; i++) { int j; + int ver; + arg = argv[i]; - /* check for hrX or frX */ - if (strlen(argv[i]) != 3 - || argv[i][1] != 'r' - || (argv[i][0] != 'h' && argv[i][0] != 'f') - || argv[i][2] < '0' - || argv[i][2] > '9') { - vty_out(vty, "Codec name must be hrX or frX. Was '%s'%s", argv[i], VTY_NEWLINE); - return CMD_WARNING; - } - - /* store in tmp[] first, to not overwrite data->audio_support[] in case of error */ - tmp[i].ver = atoi(argv[i] + 2); - if (strncmp("hr", argv[i], 2) == 0) + if (strncmp("hr", arg, 2) == 0) tmp[i].hr = 1; - else if (strncmp("fr", argv[i], 2) == 0) + else if (strncmp("fr", arg, 2) == 0) tmp[i].hr = 0; + else + goto invalid_arg; - /* forbid invalid versions */ - if (tmp[i].ver < 1 || tmp[i].ver > 7 - || (tmp[i].hr && tmp[i].ver == 2)) { - vty_out(vty, "'%s' is not a valid codec version%s", argv[i], VTY_NEWLINE); - return CMD_WARNING; - } + ver = atoi(arg + 2); + if (ver < 1 || ver > 7) + goto invalid_arg; + tmp[i].ver = ver; + + if (tmp[i].hr == 1 && ver == 2) + goto invalid_arg; /* prevent duplicate entries */ for (j = 0; j < i; j++) { @@ -2762,6 +2756,10 @@ DEFUN_USRATTR(cfg_net_msc_codec_list, data->audio_length = argc; return CMD_SUCCESS; + +invalid_arg: + vty_out(vty, "%s is not a valid codec version%s", osmo_quote_cstr_c(OTC_SELECT, arg, -1), VTY_NEWLINE); + return CMD_WARNING; } #define LEGACY_STR "This command has no effect, it is kept to support legacy config files\n" diff --git a/tests/msc.vty b/tests/msc.vty index d67f2b9fe..08c7f71bf 100644 --- a/tests/msc.vty +++ b/tests/msc.vty @@ -33,16 +33,16 @@ msc 0 ... OsmoBSC(config-msc)# codec-list foo -Codec name must be hrX or frX. Was 'foo' +"foo" is not a valid codec version OsmoBSC(config-msc)# codec-list fr10 -Codec name must be hrX or frX. Was 'fr10' +"fr10" is not a valid codec version OsmoBSC(config-msc)# codec-list hr10 -Codec name must be hrX or frX. Was 'hr10' +"hr10" is not a valid codec version OsmoBSC(config-msc)# codec-list FR1 -Codec name must be hrX or frX. Was 'FR1' +"FR1" is not a valid codec version OsmoBSC(config-msc)# # Ensure the codec-list with wrong args did not change the config OsmoBSC(config-msc)# show running-config @@ -62,7 +62,7 @@ msc 0 ... OsmoBSC(config-msc)# codec-list fr0 fr1 -'fr0' is not a valid codec version +"fr0" is not a valid codec version OsmoBSC(config-msc)# show running-config ... msc 0 @@ -71,7 +71,7 @@ msc 0 ... OsmoBSC(config-msc)# codec-list hr0 hr1 -'hr0' is not a valid codec version +"hr0" is not a valid codec version OsmoBSC(config-msc)# show running-config ... msc 0 @@ -80,7 +80,7 @@ msc 0 ... OsmoBSC(config-msc)# codec-list fr8 fr9 -'fr8' is not a valid codec version +"fr8" is not a valid codec version OsmoBSC(config-msc)# show running-config ... msc 0 @@ -89,7 +89,7 @@ msc 0 ... OsmoBSC(config-msc)# codec-list hr8 hr9 -'hr8' is not a valid codec version +"hr8" is not a valid codec version OsmoBSC(config-msc)# show running-config ... msc 0 @@ -98,7 +98,7 @@ msc 0 ... OsmoBSC(config-msc)# codec-list fr2 hr2 -'hr2' is not a valid codec version +"hr2" is not a valid codec version OsmoBSC(config-msc)# show running-config ... msc 0