Skip to content

Commit aa47ce8

Browse files
committed
read_json_model.c: use setlocale to ensure parsing model properly
1 parent b9ac69e commit aa47ce8

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

libvmaf/src/read_json_model.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <errno.h>
2525
#include <stdlib.h>
2626
#include <string.h>
27+
#include <locale.h>
2728

2829
#define MAX_FEATURE_COUNT 64 //FIXME
2930
#define MAX_KNOT_COUNT 10 //FIXME
@@ -432,6 +433,7 @@ static int model_parse(json_stream *s, VmafModel *model,
432433
static int vmaf_read_json_model(VmafModel **model, VmafModelConfig *cfg,
433434
json_stream *s)
434435
{
436+
int err = -EINVAL;
435437
VmafModel *const m = *model = malloc(sizeof(*m));
436438
if (!m) return -ENOMEM;
437439
memset(m, 0, sizeof(*m));
@@ -449,7 +451,18 @@ static int vmaf_read_json_model(VmafModel **model, VmafModelConfig *cfg,
449451
if (!m->score_transform.knots.list) return -ENOMEM;
450452
memset(m->score_transform.knots.list, 0, knots_sz);
451453

452-
return model_parse(s, m, cfg->flags);
454+
char *old_locale = setlocale(LC_NUMERIC, NULL);
455+
if (old_locale) {
456+
old_locale = strdup(old_locale);
457+
}
458+
setlocale(LC_NUMERIC, "C");
459+
460+
err = model_parse(s, m, cfg->flags);
461+
462+
setlocale(LC_NUMERIC, old_locale);
463+
free(old_locale);
464+
465+
return err;
453466
}
454467

455468
int vmaf_read_json_model_from_buffer(VmafModel **model, VmafModelConfig *cfg,

0 commit comments

Comments
 (0)