Commit c70ace95 authored by vaclav's avatar vaclav
Browse files

fix Issue 211: make ISM metadata file reader robust against invalid files;...

fix Issue 211: make ISM metadata file reader robust against invalid files; under FIX_ISM_METADAT_READER
parent 3a19ac02
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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,
+1 −0
Original line number Diff line number Diff line
@@ -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 */
+4 −0
Original line number Diff line number Diff line
@@ -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:
+37 −0
Original line number Diff line number Diff line
@@ -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   */
)