open-source-parsers/jsoncpp

Large floats not accepted anymore

Open

#1349 aperta il 28 ott 2021

Vedi su GitHub
 (3 commenti) (0 reazioni) (0 assegnatari)C++ (2602 fork)batch import
bughelp wanted

Metriche repository

Star
 (7542 star)
Metriche merge PR
 (Merge medio 18h 26m) (10 PR mergiate in 30 g)

Descrizione

Describe the bug Version 1.9.2 no longer accepts 1+e9999 (or 2e+308 and anything above), regardless of allowSpecialFloats setting.

To Reproduce Steps to reproduce the behavior:

#include <iostream>
#include <json/json.h>
#include <sstream>

int main(int argc, const char* argv[])
{
    Json::CharReaderBuilder reader;
    reader["allowSpecialFloats"] = true;  // Makes no difference

    std::string s = "1e+9999";
    Json::Value val;
    std::string errors;
    std::stringstream json(s);
    if (Json::parseFromStream(reader, json, &val, &errors)) {
        std::cout << s << " -> " << val.asDouble() << "\n";
    } else {
        std::cout << errors;
    }
    return 0;
}

Expected behavior

  • 1e+9999 -> inf

Actual behavior:

* Line 1, Column 1
  '1e+9999' is not a number.

Desktop (please complete the following information):

  • OS: Fedora 34
  • Meson version 0.59.1
  • Ninja version 1.10.2

Additional context

  • Version 1.9.1 accepts value 1e+9999 as infinite, regardless of allowSpecialFloats setting.
  • Version 1.9.2 no longer accepts 2e+308 or above, regardless of allowSpecialFloats setting.

Specifically breaking change seems to be commit 645cd0412c "Number fixes (#1053)".

Guida contributor