Skip to content

bug in JSON ParseHandler.cpp (RFC 7159 should be valid) #3470

@Giancarlo1974

Description

@Giancarlo1974

Hi,
I'm using Poco 1.11.1 JSON module
I have to parse a JSON string and have the following error with JSON files

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Assertion violation: !key.empty() [in file "/home/conan/w/BuildSingleReference/.conan/data/poco/1.11.1//_/build/2348ad58686265cf1ab2cd2d68a60c46f6324290/source_subfolder/JSON/src/ParseHandler.cpp", line 64]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
terminate called after throwing an instance of 'Poco::AssertionViolationException'
what(): Assertion violation

This is the json:

{"actions":{"cordon":"https://rancher.toptierra.it/v3/nodes/c-4ph8q:m-bebc24f513fd?action=cordon","drain":"https://rancher.domain.com/v3/nodes/c-4ph8q:m-bebc24f513fd?action=drain"},"allocatable":{"cpu":"4","ephemeral-storage":"28980648298","hugepages-1Gi":"0","hugepages-2Mi":"0","memory":"7870340Ki","pods":"110"},"annotations":{"csi.volume.kubernetes.io/nodeid":"{\"driver.longhorn.io\":\"trr-its-kd3\"}","flannel.alpha.coreos.com/backend-data":"{\"VtepMAC\":\"b6:e8:0e:ce:ae:d9\"}","flannel.alpha.coreos.com/backend-type":"vxlan","flannel.alpha.coreos.com/kube-subnet-manager":"true","flannel.alpha.coreos.com/public-ip":"192.168.30.58","node.alpha.kubernetes.io/ttl":"0","projectcalico.org/IPv4Address":"192.168.30.58/24","projectcalico.org/IPv4IPIPTunnelAddr":"10.42.0.1","rke.cattle.io/external-ip":"192.168.30.58","rke.cattle.io/internal-ip":"192.168.30.58","volumes.kubernetes.io/controller-managed-attach-detach":"true"},"appliedNodeVersion":0,"baseType":"node","capacity":{"cpu":"4","ephemeral-storage":"30709Mi","hugepages-1Gi":"0","hugepages-2Mi":"0","memory":"7972740Ki","pods":"110"},"clusterId":"c-4ph8q","conditions":[{"status":"True","type":"Initialized"},{"message":"registered with kubernetes","status":"True","type":"Registered"},{"status":"True","type":"Provisioned"},{"lastHeartbeatTime":"2021-12-01T08:48:32Z","lastHeartbeatTimeTS":1638348512000,"lastTransitionTime":"2021-12-01T08:48:32Z","lastTransitionTimeTS":1638348512000,"message":"Flannel is running on this node","reason":"FlannelIsUp","status":"False","type":"NetworkUnavailable"},{"lastHeartbeatTime":"2021-12-07T08:29:10Z","lastHeartbeatTimeTS":1638865750000,"lastTransitionTime":"2021-12-05T08:53:56Z","lastTransitionTimeTS":1638694436000,"message":"kubelet has sufficient memory available","reason":"KubeletHasSufficientMemory","status":"False","type":"MemoryPressure"},{"lastHeartbeatTime":"2021-12-07T08:29:10Z","lastHeartbeatTimeTS":1638865750000,"lastTransitionTime":"2021-12-05T08:53:56Z","lastTransitionTimeTS":1638694436000,"message":"kubelet has no disk pressure","reason":"KubeletHasNoDiskPressure","status":"False","type":"DiskPressure"},{"lastHeartbeatTime":"2021-12-07T08:29:10Z","lastHeartbeatTimeTS":1638865750000,"lastTransitionTime":"2021-12-05T08:53:56Z","lastTransitionTimeTS":1638694436000,"message":"kubelet has sufficient PID available","reason":"KubeletHasSufficientPID","status":"False","type":"PIDPressure"},{"lastHeartbeatTime":"2021-12-07T08:29:10Z","lastHeartbeatTimeTS":1638865750000,"lastTransitionTime":"2021-12-05T08:54:07Z","lastTransitionTimeTS":1638694447000,"message":"kubelet is posting ready status","reason":"KubeletReady","status":"True","type":"Ready"}],"controlPlane":true,"created":"2021-07-22T16:17:15Z","createdTS":1626970635000,"creatorId":null,"customConfig":{"address":"192.168.30.58","type":"/v3/schemas/customConfig"},"dockerInfo":{"debug":false,"experimentalBuild":false,"type":"/v3/schemas/dockerInfo"},"etcd":true,"externalIpAddress":"192.168.30.58","hostname":"trr-its-kd3","id":"c-4ph8q:m-bebc24f513fd","imported":true,"info":{"cpu":{"count":4},"kubernetes":{"kubeProxyVersion":"v1.19.8","kubeletVersion":"v1.19.8"},"memory":{"memTotalKiB":7972740},"os":{"dockerVersion":"19.3.1","kernelVersion":"3.10.0-1160.6.1.el7.x86_64","operatingSystem":"CentOS Linux 7 (Core)"}},"ipAddress":"192.168.30.58","labels":{"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/os":"linux","colour":"red","kubernetes.io/arch":"amd64","kubernetes.io/hostname":"trr-its-kd3","kubernetes.io/os":"linux","node-role.kubernetes.io/controlplane":"true","node-role.kubernetes.io/etcd":"true","node-role.kubernetes.io/worker":"true"},"limits":{"cpu":"1520m","ephemeral-storage":"2Gi","memory":"2164Mi"},"links":{"remove":"https://rancher.domain.com/v3/nodes/c-4ph8q:m-bebc24f513fd","self":"https://rancher.domain.com/v3/nodes/c-4ph8q:m-bebc24f513fd","update":"https://rancher.domain.com/v3/nodes/c-4ph8q:m-bebc24f513fd"},"name":"","namespaceId":null,"nodeName":"trr-its-kd3","nodePlan":{"agentCheckInterval":120,"plan":{"processes":{"share-mnt":{"args":["--","share-root.sh","docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.5.9 --server https://rancher.domain.com --token zwvwgs2tq8t7zdld8rvgk48wthshlf7k98hsmfmm75fkrkwzsqmtdk --no-register --only-write-certs --node-name trr-its-kd3"],"binds":["/var/run:/var/run"],"healthCheck":{"type":"/v3/schemas/healthCheck"},"image":"rancher/rancher-agent:v2.5.9","name":"share-mnt","networkMode":"host","pidMode":"host","privileged":true,"restartPolicy":"always","type":"/v3/schemas/process"}},"type":"/v3/schemas/rkeConfigNodePlan"},"type":"/v3/schemas/nodePlan","version":9},"nodePoolId":"","nodeTemplateId":null,"podCidr":"10.42.0.0/24","podCidrs":["10.42.0.0/24"],"requested":{"cpu":"2686m","ephemeral-storage":"2Gi","memory":"1303Mi","pods":"26"},"requestedHostname":"trr-its-kd3","sshUser":"root","state":"active","transitioning":"no","transitioningMessage":"","type":"node","unschedulable":false,"uuid":"3af26863-7184-47b3-89f5-5fe479fc0b01","volumesAttached":{"":{"name":"kubernetes.io/csi/driver.longhorn.io^pvc-60cc8b97-04df-4a59-9e43-3b063404e81b","type":"/v3/schemas/attachedVolume"}},"volumesInUse":["kubernetes.io/csi/driver.longhorn.io^pvc-0df92abb-96d0-456a-91bc-aee9be768fe2","kubernetes.io/csi/driver.longhorn.io^pvc-60cc8b97-04df-4a59-9e43-3b063404e81b","kubernetes.io/csi/driver.longhorn.io^pvc-f509c32c-29f7-45fb-83db-72cbfb8da097"],"worker":true}

i can validate correctly using

https://jsonformatter.curiousconcept.com/#

This is the procedure to parse

Poco::JSON::Object::Ptr jsonToObj(std::string json)
{
    std::cout << "jsonToObj 1" << std::endl;
    Poco::JSON::Parser parser;
    std::cout << "jsonToObj 2" << std::endl;
    Poco::Dynamic::Var result = parser.parse(json);
    std::cout << "jsonToObj 3" << std::endl;
    parser.reset();
    std::cout << "jsonToObj 4" << std::endl;
    Poco::JSON::Object::Ptr pObject = result.extract<Poco::JSON::Object::Ptr>();
    std::cout << "jsonToObj " << std::endl;

    return pObject;
}

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions