jsonnet icon indicating copy to clipboard operation
jsonnet copied to clipboard

ERROR: no anchor processing for JSON when using std.parseYaml from python

Open ghost opened this issue 1 year ago • 3 comments

When using the python bindings (jsonnet-0.20.0), an abort is hit when using std.parseYaml with a file containing anchors.

Steps to reproduce: using jsonnet import, simply std.parseYaml on any YAML containing anchors.

Minimal example:

(env) jsonnet-python-yaml]$ python3
Python 3.11.4 (main, Jul 13 2023, 11:22:49) [GCC 8.5.0 20210514 (Red Hat 8.5.0-18.0.2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import _jsonnet as jsonnet
>>> jsonnet.evaluate_snippet('test.yaml', """
...     std.parseYaml(|||
...         foo: &foo bar
...         bar: *foo
...     |||)
... """
... )
ERROR: no anchor processing for JSON
Aborted (core dumped)

I can confirm this same abort when using evaluate_file too

(env)  jsonnet-python-yaml]$ cat test.jsonnet
std.parseYaml(|||
  foo: &foo bar
  bar: *foo
|||)
(env) [benjamin.jackson@stol-core1 jsonnet-python-yaml]$ python3
Python 3.11.4 (main, Jul 13 2023, 11:22:49) [GCC 8.5.0 20210514 (Red Hat 8.5.0-18.0.2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import _jsonnet as jsonnet
>>> jsonnet.evaluate_file('test.jsonnet')
ERROR: no anchor processing for JSON
Aborted (core dumped)

Env:

(env) [ jsonnet-python-yaml]$ pip freeze
jsonnet==0.20.0
(env) [jsonnet-python-yaml]$ uname -a
Linux xx 5.4.17-2011.7.4.el8uek.x86_64 #2 SMP Fri Oct 2 14:39:04 PDT 2020 x86_64 x86_64 x86_64 GNU/Linux
(env) [jsonnet-python-yaml]$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.3 (Ootpa)

ghost avatar Aug 01 '24 16:08 ghost

For the record, the jsonnet cli does not choke on these same inputs:

(env) [jsonnet-python-yaml]$ jsonnet test.jsonnet
{
   "bar": "bar",
   "foo": "bar"
}

ghost avatar Aug 01 '24 16:08 ghost

Actually, this exact issue is present with pure libjsonnet:

#include <iostream>
extern "C" {
#include <libjsonnet.h>
}

int main(int argc, char** argv)
{
    JsonnetVm *vm = jsonnet_make();
    int error{};
    char *result = jsonnet_evaluate_snippet(vm, "test.jsonnet", R"(
        std.parseYaml(|||
            foo: &foo bar
            bar: *foo
        |||)
    )", &error);

    if (error)
    {
        std::cerr << "Error: " << result << std::endl;
    }
    else
    {
        std::cout << result << std::endl;
    }
    jsonnet_realloc(vm, result, 0);
    jsonnet_destroy(vm);
}
(env) [jsonnet-go-c]$ LD_LIBRARY_PATH=/home/benjamin.jackson/repos/github/google/jsonnet/build ./a.out 
/home/benjamin.jackson/repos/github/google/jsonnet/third_party/rapidyaml/ryml_all.hpp:23120:JSON does not have anchors
Aborted (core dumped)

ghost avatar Aug 01 '24 16:08 ghost

Still valid in the new release candidate. Might be awkward to make anchor support work fully, but perhaps it's possible to at least catch the error more gracefully instead of aborting.

johnbartholomew avatar Feb 23 '25 02:02 johnbartholomew