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.