[cover] Fix divide by zero

This commit is contained in:
Nick Terrell
2017-08-21 11:12:11 -07:00
parent 4912fc2acc
commit f306d400c0
+8 -3
View File
@@ -479,11 +479,16 @@ static COVER_segment_t COVER_selectSegment(const COVER_ctx_t *ctx, U32 *freqs,
* Check the validity of the parameters. * Check the validity of the parameters.
* Returns non-zero if the parameters are valid and 0 otherwise. * Returns non-zero if the parameters are valid and 0 otherwise.
*/ */
static int COVER_checkParameters(ZDICT_cover_params_t parameters) { static int COVER_checkParameters(ZDICT_cover_params_t parameters,
size_t maxDictSize) {
/* k and d are required parameters */ /* k and d are required parameters */
if (parameters.d == 0 || parameters.k == 0) { if (parameters.d == 0 || parameters.k == 0) {
return 0; return 0;
} }
/* k <= maxDictSize */
if (parameters.k > maxDictSize) {
return 0;
}
/* d <= k */ /* d <= k */
if (parameters.d > parameters.k) { if (parameters.d > parameters.k) {
return 0; return 0;
@@ -648,7 +653,7 @@ ZDICTLIB_API size_t ZDICT_trainFromBuffer_cover(
COVER_ctx_t ctx; COVER_ctx_t ctx;
COVER_map_t activeDmers; COVER_map_t activeDmers;
/* Checks */ /* Checks */
if (!COVER_checkParameters(parameters)) { if (!COVER_checkParameters(parameters, dictBufferCapacity)) {
DISPLAYLEVEL(1, "Cover parameters incorrect\n"); DISPLAYLEVEL(1, "Cover parameters incorrect\n");
return ERROR(GENERIC); return ERROR(GENERIC);
} }
@@ -995,7 +1000,7 @@ ZDICTLIB_API size_t ZDICT_optimizeTrainFromBuffer_cover(
data->parameters.d = d; data->parameters.d = d;
data->parameters.steps = kSteps; data->parameters.steps = kSteps;
/* Check the parameters */ /* Check the parameters */
if (!COVER_checkParameters(data->parameters)) { if (!COVER_checkParameters(data->parameters, dictBufferCapacity)) {
DISPLAYLEVEL(1, "Cover parameters incorrect\n"); DISPLAYLEVEL(1, "Cover parameters incorrect\n");
free(data); free(data);
continue; continue;