From 3a19ac0272c8c6834306bf865ca01e1a07cbd1ac Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 23 Nov 2022 08:59:53 +0100 Subject: [PATCH 1/5] remove unnecessary constant defines --- apps/decoder.c | 1 - lib_com/ivas_cnst.h | 2 -- 2 files changed, 3 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 6f73723af1..7f94e19808 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -79,7 +79,6 @@ static #define NUM_BITS_SID_IVAS_9K3 186 #define NUM_BITS_SID_IVAS_10K2 204 #endif -#define META_LINE_LENGTH 200 #define MAX_FRAME_SIZE ( 48000 / 50 ) #define MAX_NUM_OUTPUT_CHANNELS 16 #define MAX_OUTPUT_PCM_BUFFER_SIZE ( MAX_NUM_OUTPUT_CHANNELS * MAX_FRAME_SIZE ) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 0074be76d2..7306216378 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -303,8 +303,6 @@ typedef enum * ISm Constants *----------------------------------------------------------------------------------*/ -#define META_LINE_LENGTH 200 /* max number of characters at one line of metadata input/output file */ - #define ISM_NB_BITS_METADATA_NOMINAL ( ( SCE_CORE_16k_LOW_LIMIT - ACELP_16k_LOW_LIMIT ) / FRAMES_PER_SEC ) /* nominal number of metadata bits - used for configuration of Core-Coder modules */ #define ISM_METADATA_VAD_FLAG_BITS 1 -- GitLab From c70ace952d70e1961847cbe65e7edcf6158fd18f Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 23 Nov 2022 09:17:52 +0100 Subject: [PATCH 2/5] fix Issue 211: make ISM metadata file reader robust against invalid files; under FIX_ISM_METADAT_READER --- lib_com/ivas_error.h | 3 +++ lib_com/options.h | 1 + lib_enc/lib_enc.c | 4 ++++ lib_util/ism_file_reader.c | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+) diff --git a/lib_com/ivas_error.h b/lib_com/ivas_error.h index fdc7a1502d..84d9191d95 100644 --- a/lib_com/ivas_error.h +++ b/lib_com/ivas_error.h @@ -89,6 +89,9 @@ typedef enum IVAS_ERR_NOT_IMPLEMENTED, IVAS_ERR_FILE_READER_TIMESTAMP_MISMATCH, IVAS_ERR_ISM_FILE_READER_INVALID_METADATA_FORMAT, +#ifdef FIX_ISM_METADAT_READER + IVAS_ERR_ISM_INVALID_METADATA_VALUE, +#endif IVAS_ERR_INVALID_MASA_FORMAT_METADATA_FILE, #ifdef DEBUGGING IVAS_ERR_INVALID_FORCE_MODE, diff --git a/lib_com/options.h b/lib_com/options.h index 29d980db05..4ca2b4a135 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -161,6 +161,7 @@ #define FIX_I218_PARAMISM_NOISY_SPEECH /* Issue 218: Fix noisy speech buffer in ParamISM */ #define FIX_I217_GSC_FLAG_IN_ISM /* Issue 217: fix BER detected in ISM4 due to desynchronized 'GSC_IVAS_mode' parameter */ #define FIX_158_DIRAC_MEM /* Issue 158: Reduce memory consumption in the hDirac_mem handle */ +#define FIX_ISM_METADAT_READER /* Issue 211: make ISM metadata file reader robust against invalid files */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index 68a465a5bc..7929e4518b 100755 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -1397,6 +1397,10 @@ const char *IVAS_ENC_GetErrorMessage( return "mismatched timestamp"; case IVAS_ERR_ISM_FILE_READER_INVALID_METADATA_FORMAT: return "invalid metadata format"; +#ifdef FIX_ISM_METADAT_READER + case IVAS_ERR_ISM_INVALID_METADATA_VALUE: + return "invalid metadata value provided"; +#endif case IVAS_ERR_FAILED_FILE_READ: return "could not read from file"; case IVAS_ERR_NOT_SUPPORTED_OPTION: diff --git a/lib_util/ism_file_reader.c b/lib_util/ism_file_reader.c index d60c3ec8a8..412c0f91e1 100644 --- a/lib_util/ism_file_reader.c +++ b/lib_util/ism_file_reader.c @@ -86,6 +86,7 @@ IsmFileReader *IsmFileReader_open( * * Reads ISM metadata from a previously opened file into the provided struct. *---------------------------------------------------------------------*/ + /*! r: error code */ ivas_error IsmFileReader_readNextFrame( IsmFileReader *self, /* i/o: IsmFileReader handle */ @@ -124,12 +125,47 @@ ivas_error IsmFileReader_readNextFrame( return IVAS_ERR_ISM_FILE_READER_INVALID_METADATA_FORMAT; } +#ifdef FIX_ISM_METADAT_READER + if ( strtok( char_ptr, "\n" ) != NULL ) + { + /* Not enough values provided in one line */ + return IVAS_ERR_ISM_FILE_READER_INVALID_METADATA_FORMAT; + } +#endif + ismMetadata->azimuth = meta_prm[0]; ismMetadata->elevation = meta_prm[1]; ismMetadata->radius = meta_prm[2]; ismMetadata->spread = meta_prm[3]; ismMetadata->gainFactor = meta_prm[4]; +#ifdef FIX_ISM_METADAT_READER + /* verify whether the read metadata values are in an expected range */ + if ( ismMetadata->azimuth > 180 || ismMetadata->azimuth < -180 ) + { + return IVAS_ERR_ISM_INVALID_METADATA_VALUE; + } + + if ( ismMetadata->elevation > 90 || ismMetadata->elevation < -90 ) + { + return IVAS_ERR_ISM_INVALID_METADATA_VALUE; + } + + if ( ismMetadata->radius < 0 ) // Ivas_fmToDo: to be reviewed + { + return IVAS_ERR_ISM_INVALID_METADATA_VALUE; + } + + if ( ismMetadata->spread > 360 || ismMetadata->spread < 0 ) + { + return IVAS_ERR_ISM_INVALID_METADATA_VALUE; + } + + if ( ismMetadata->gainFactor > 1 || ismMetadata->gainFactor < 0 ) + { + return IVAS_ERR_ISM_INVALID_METADATA_VALUE; + } +#endif return IVAS_ERR_OK; } @@ -140,6 +176,7 @@ ivas_error IsmFileReader_readNextFrame( * * De-allocates all underlying memory of an IsmFileReader. *---------------------------------------------------------------------*/ + void IsmFileReader_close( IsmFileReader **selfPtr /* i/o: pointer to IsmFileReader handle */ ) -- GitLab From 9c09c64f8dde8ad2a471e2168ecebb406fb863c9 Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 23 Nov 2022 10:20:36 +0100 Subject: [PATCH 3/5] additional sanity check within FIX_ISM_METADAT_READER --- lib_util/cmdl_tools.c | 24 ++++++++++++++++++++++++ lib_util/cmdl_tools.h | 2 ++ lib_util/ism_file_reader.c | 16 ++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/lib_util/cmdl_tools.c b/lib_util/cmdl_tools.c index aee640a17e..010685f239 100644 --- a/lib_util/cmdl_tools.c +++ b/lib_util/cmdl_tools.c @@ -78,3 +78,27 @@ bool is_digits_only( char *str ) return true; } + + +/*---------------------------------------------------------------------* + * is_number() + * + * Check if a string is a number. + *---------------------------------------------------------------------*/ + +bool is_number( char *str ) +{ + int16_t i; + + i = 0; + while ( str[i] != 0 ) + { + if ( ( str[i] < '0' || str[i] > '9' ) && str[i] != '.' && str[i] != '-' && str[i] != '\n' ) + { + return false; + } + i++; + } + + return true; +} diff --git a/lib_util/cmdl_tools.h b/lib_util/cmdl_tools.h index 3bc9cb81f7..829ec985b0 100644 --- a/lib_util/cmdl_tools.h +++ b/lib_util/cmdl_tools.h @@ -38,6 +38,8 @@ bool is_digits_only( char *str ); +bool is_number( char *str ); + char *to_upper( char *str ); diff --git a/lib_util/ism_file_reader.c b/lib_util/ism_file_reader.c index 412c0f91e1..a3cc081edb 100644 --- a/lib_util/ism_file_reader.c +++ b/lib_util/ism_file_reader.c @@ -31,6 +31,9 @@ *******************************************************************************************************/ #include "ism_file_reader.h" +#ifdef FIX_ISM_METADAT_READER +#include "cmdl_tools.h" +#endif #include #include #include @@ -114,8 +117,21 @@ ivas_error IsmFileReader_readNextFrame( char_ptr = strtok( char_buff, "," ); i = 0; meta_prm[i++] = (float) atof( char_ptr ); +#ifdef FIX_ISM_METADAT_READER + if ( is_number( char_ptr ) == false ) + { + return IVAS_ERR_ISM_INVALID_METADATA_VALUE; + } +#endif while ( ( char_ptr = strtok( NULL, "," ) ) != NULL && i < NUM_ISM_METADATA_PER_LINE ) { +#ifdef FIX_ISM_METADAT_READER + if ( is_number( char_ptr ) == false ) + { + return IVAS_ERR_ISM_INVALID_METADATA_VALUE; + } +#endif + meta_prm[i++] = (float) atof( char_ptr ); } -- GitLab From 3e6ff53e2bbbd133078ed3aa2891f2d44d77f9a6 Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 23 Nov 2022 10:20:56 +0100 Subject: [PATCH 4/5] fix in metadata input file --- scripts/testv/stvISM4.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/testv/stvISM4.csv b/scripts/testv/stvISM4.csv index 9afd15ba07..6318155a25 100644 --- a/scripts/testv/stvISM4.csv +++ b/scripts/testv/stvISM4.csv @@ -17,7 +17,7 @@ -0.00,76.80,1.00,0.00,1.00 -0.00,81.60,1.00,0.00,1.00 -0.00,86.40,1.00,0.00,1.00 --177.60,91.20,1.00,0.00,1.00 +-177.60,89.20,1.00,0.00,1.00 -177.60,86.40,1.00,0.00,1.00 -177.60,81.60,1.00,0.00,1.00 -177.60,76.80,1.00,0.00,1.00 @@ -54,7 +54,7 @@ 177.60,-76.80,1.00,0.00,1.00 177.60,-76.80,1.00,0.00,1.00 177.60,-86.40,1.00,0.00,1.00 -177.60,-91.20,1.00,0.00,1.00 +177.60,-89.20,1.00,0.00,1.00 0.00,-86.40,1.00,0.00,1.00 0.00,-81.60,1.00,0.00,1.00 0.00,-76.80,1.00,0.00,1.00 -- GitLab From 656ca9c073c7c9a5346ced2de63333bbcd947143 Mon Sep 17 00:00:00 2001 From: Kacper Sagnowski Date: Mon, 28 Nov 2022 11:32:06 +0100 Subject: [PATCH 5/5] Simplify error check and correct comment --- lib_util/ism_file_reader.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_util/ism_file_reader.c b/lib_util/ism_file_reader.c index f989ea5f3c..cc93501571 100644 --- a/lib_util/ism_file_reader.c +++ b/lib_util/ism_file_reader.c @@ -142,9 +142,9 @@ ivas_error IsmFileReader_readNextFrame( } #ifdef FIX_ISM_METADATA_READER - if ( strtok( char_ptr, "\n" ) != NULL ) + if ( char_ptr != NULL ) { - /* Not enough values provided in one line */ + /* Too many values provided in one line */ return IVAS_ERR_ISM_FILE_READER_INVALID_METADATA_FORMAT; } #endif -- GitLab