Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

json base64 parse doesn't do what it is supposed to #1326

Open
JustinPrivitera opened this issue Oct 9, 2024 · 8 comments
Open

json base64 parse doesn't do what it is supposed to #1326

JustinPrivitera opened this issue Oct 9, 2024 · 8 comments
Assignees

Comments

@JustinPrivitera
Copy link
Member

std::string RC_CINEMA_WEB =  R"xyzxyz(

{
  "schema": 
  {
    "index.html": {"dtype":"char8_str","number_of_elements": 1,"offset": 0,"stride": 1,"element_bytes": 1,"endianness": "little"},
    "cvlib": {"dtype":"char8_str","number_of_elements": 1,"offset": 1,"stride": 1,"element_bytes": 1,"endianness": "little"}
  },
  "data": 
  {
    "base64": "ab"
  }
}
)xyzxyz";

conduit::Node res;
res.parse(RC_CINEMA_WEB,"conduit_base64_json");
std::cout << res.to_yaml() << std::endl;

gives you

index.html: "i�"
cvlib: "�"

Both should be a single character long. index.html is picking up the character from cvlib.

@cyrush
Copy link
Member

cyrush commented Oct 9, 2024

thanks for finding this reproducer.

@cyrush
Copy link
Member

cyrush commented Oct 9, 2024

How did you create this example? The string usually should include the null term char.

@JustinPrivitera
Copy link
Member Author

@JustinPrivitera
Copy link
Member Author

Here's a better example:

std::string RC_CINEMA_WEB =  R"xyzxyz(

{
  "schema": 
  {
    "index.html": {"dtype":"char8_str","number_of_elements": 1,"offset": 0,"stride": 1,"element_bytes": 1,"endianness": "little"},
    "cvlib": {"dtype":"char8_str","number_of_elements": 1,"offset": 1,"stride": 1,"element_bytes": 1,"endianness": "little"},
    "cvlib2": {"dtype":"char8_str","number_of_elements": 1,"offset": 2,"stride": 1,"element_bytes": 1,"endianness": "little"}
  },
  "data": 
  {
    "base64": "ab123"
  }
}
)xyzxyz";

conduit::Node res;
res.parse(RC_CINEMA_WEB,"conduit_base64_json");
std::cout << res.to_yaml() << std::endl;
index.html: "i�v"
cvlib: "�v"
cvlib2: "v"

@cyrush
Copy link
Member

cyrush commented Oct 9, 2024

Strings usually should include the null term char.
Can you try creating one with conduit?

@cyrush
Copy link
Member

cyrush commented Oct 9, 2024

When i see number of elements ==1, there maybe an expectation that is a null termed string.

Could be why our other cases are wrong, or it could mean this case is ill posed.

@JustinPrivitera
Copy link
Member Author

How do I put the null term char into base64 representation to test?

@JustinPrivitera
Copy link
Member Author

I would argue that conduit should only read number_of_elements elements instead of reading until it hits a null terminator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants