fix coverity (false) warning in codec-list vty

Since there were complaints about this old parsing code during recent
code review in Ifdc9e04bf1d623da65bfb8a2fddea765601f6d9b, and now also
coverity finds something odd in it, just rewrite this.

Related: CID#310912
Change-Id: I96cd5d88ec6808a2915c6bccd0c0140216f328f2
This commit is contained in:
Neels Hofmeyr 2023-03-07 02:00:16 +01:00 committed by neels
parent 2fda8dba70
commit f2768d39c1
2 changed files with 27 additions and 29 deletions

View File

@ -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"

View File

@ -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