trx: Fix coverity BER calculation NULL dereference

Allow output of encoded bit count or error count on BER calculation
without requiring both pointers to exist.

Change-Id: I2c78fa6a92a3b3da4aad8f70353e5a43451b0aa5
Fixes: Coverity CID 137963
Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
This commit is contained in:
Tom Tsou 2016-07-28 11:14:08 -07:00
parent af3443385b
commit d6920df630
1 changed files with 9 additions and 6 deletions

View File

@ -442,30 +442,33 @@ struct gsm0503_mcs_code gsm0503_mcs_dl_codes[EGPRS_NUM_MCS] = {
}, },
}; };
int osmo_conv_decode_ber(const struct osmo_conv_code *code, static int osmo_conv_decode_ber(const struct osmo_conv_code *code,
const sbit_t *input, ubit_t *output, const sbit_t *input, ubit_t *output,
int *n_errors, int *n_bits_total) int *n_errors, int *n_bits_total)
{ {
int res, i; int res, i, coded_len;
ubit_t recoded[EGPRS_DATA_C_MAX]; ubit_t recoded[EGPRS_DATA_C_MAX];
res = osmo_conv_decode(code, input, output); res = osmo_conv_decode(code, input, output);
if (n_bits_total) { if (n_bits_total || n_errors) {
*n_bits_total = osmo_conv_encode(code, output, recoded); coded_len = osmo_conv_encode(code, output, recoded);
OSMO_ASSERT(sizeof(recoded)/sizeof(recoded[0]) >= *n_bits_total); OSMO_ASSERT(sizeof(recoded)/sizeof(recoded[0]) >= coded_len);
} }
/* Count bit errors */ /* Count bit errors */
if (n_errors) { if (n_errors) {
*n_errors = 0; *n_errors = 0;
for (i=0; i< *n_bits_total; i++) { for (i = 0; i < coded_len; i++) {
if (! ((recoded[i] && input[i]<0) || if (! ((recoded[i] && input[i]<0) ||
(!recoded[i] && input[i]>0)) ) (!recoded[i] && input[i]>0)) )
*n_errors += 1; *n_errors += 1;
} }
} }
if (n_bits_total)
*n_bits_total = coded_len;
return res; return res;
} }