From b25282e61844334c70def2d678c19c6105646ab3 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Mon, 1 Apr 2024 15:28:31 -0400 Subject: [PATCH] [ruby/prism] Replace . with decimal point for strtod https://github.com/ruby/prism/commit/578a4f983e --- prism/prism.c | 9 +++++++++ prism/prism.h | 1 + 2 files changed, 10 insertions(+) diff --git a/prism/prism.c b/prism/prism.c index 6631ef71ae75f7..d03a11583f7a4d 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -3424,6 +3424,15 @@ pm_double_parse(pm_parser_t *parser, const pm_token_t *token) { char *buffer = xmalloc(sizeof(char) * (length + 1)); memcpy((void *) buffer, token->start, length); + // Next, determine if we need to replace the decimal point because of + // locale-specific options, and then normalize them if we have to. + char decimal_point = *localeconv()->decimal_point; + if (decimal_point != '.') { + for (size_t index = 0; index < length; index++) { + if (buffer[index] == '.') buffer[index] = decimal_point; + } + } + // Next, handle underscores by removing them from the buffer. for (size_t index = 0; index < length; index++) { if (buffer[index] == '_') { diff --git a/prism/prism.h b/prism/prism.h index 70e1e9df4960a7..59067c3021a70a 100644 --- a/prism/prism.h +++ b/prism/prism.h @@ -26,6 +26,7 @@ #include #include +#include #include #include #include