Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • A ArduinoJson
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 24
    • Issues 24
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Benoît Blanchon
  • ArduinoJson
  • Issues
  • #1414
Closed
Open
Issue created Oct 22, 2020 by Administrator@rootContributor

bug: segmentation fault: adding a few members after a big array (~4000) member

Created by: ah-terr

amd64, gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)

#include <iostream>
#include <string>

#include "ArduinoJson.h"

using namespace ArduinoJson;

struct arrElement
{
    uint8_t type;
    uint32_t number;
    int64_t time;
    uint16_t measures;
    uint32_t max;
    uint32_t min;
    std::string descr;
    bool ok;
};

int main()
{
    const int max = 4100;
    const auto memSize = JSON_ARRAY_SIZE(max) + JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(6) + max * JSON_OBJECT_SIZE(7);
    DynamicJsonDocument doc(memSize * 2);
    auto data = doc.to<JsonObject>().getOrAddMember("data");
    auto array = data.getOrAddMember("array").to<JsonArray>();
    for (int i = 0; i < max; ++i)
    {
        arrElement el{1, 5, 1603393921, 11, 19, 1, "description", true};

        auto nested = array.createNestedObject();
        nested["type"] = el.type;
        nested["num"] = el.number;
        nested["time"] = el.time;
        nested["measures"] = el.measures;
        nested["min"] = el.min;
        nested["max"] = el.max;
        nested["ok"] = el.ok;
    }
    
    data.getOrAddMember("quantity").set(max);
    data.getOrAddMember("day").set(15u);
    data.getOrAddMember("people").set(11);
    data.getOrAddMember("tools").set(7);
    data.getOrAddMember("time").set(1603394921);

    std::string che;
    serializeJson(doc, che);
    
    std::cout << che << '\n';

    return 0;
}

output:

Segmentation fault (core dumped)

Producing array after an other members makes the program good.

Assignee
Assign to
Time tracking