VYPR
High severityNVD Advisory· Published Apr 22, 2026· Updated Apr 29, 2026

CVE-2026-41146

CVE-2026-41146

Description

facil.io is a C micro-framework for web applications. Prior to commit 5128747363055201d3ecf0e29bf0a961703c9fa0, fio_json_parse can enter an infinite loop when it encounters a nested JSON value starting with i or I. The process spins in user space and pegs one CPU core at ~100% instead of returning a parse error. Because iodine vendors the same parser code, the issue also affects iodine when it parses attacker-controlled JSON. The smallest reproducer I found is [i. The quoted-value form that originally exposed the issue, [""i, reaches the same bug because the parser tolerates missing commas and then treats the trailing i as the start of another value. Commit 5128747363055201d3ecf0e29bf0a961703c9fa0 fixes the issue.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
iodineRubyGems
<= 0.7.58

Affected products

1

Patches

1
512874736305

Merge commit from fork

1 file changed · +2 2
  • lib/facil/fiobj/fio_json_parser.h+2 2 modified
    @@ -453,12 +453,12 @@ fio_json_parse(json_parser_s *parser, const char *buffer, size_t length) {
           long long i = fio_atol((char **)&tmp);
           if (tmp > limit)
             goto stop;
    -      if (!tmp || JSON_NUMERAL[*tmp]) {
    +      if (!tmp || tmp == pos || JSON_NUMERAL[*tmp]) {
             tmp = pos;
             double f = fio_atof((char **)&tmp);
             if (tmp > limit)
               goto stop;
    -        if (!tmp || JSON_NUMERAL[*tmp])
    +        if (!tmp || tmp == pos || JSON_NUMERAL[*tmp])
               goto error;
             fio_json_on_float(parser, f);
             pos = tmp;
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

4

News mentions

0

No linked articles in our index yet.