jbeder / yaml-cpp

A YAML parser and emitter in C++
MIT License
4.91k stars 1.77k forks source link

Parsing Binary value in Literal syntax resulting in extra newline character being added. #1292

Open davidzchen opened 2 days ago

davidzchen commented 2 days ago

The following should have the same value:

binary: !!binary AAAAA
binary: !!binary |
  AAAAA

However, when parsed, the latter value has a '\n' appended to the end of it:

#include <cassert>
#include <cstdlib>
#include <string>

#include "yaml-cpp/yaml.h"

int main(int argc, char** argv) {
  YAML::Node n0 = YAML::Load(R"(
    binary: !!binary AAAAA
  )");
  assert(n0["binary"].as<std::string>() == "AAAAA");

  YAML::Node n1 = YAML::Load(R"(
    binary: !!binary |
      AAAAA
  )");
  assert(n1["binary"].as<std::string>() == "AAAAA\n");

  return EXIT_SUCCESS;
}

@jbeder Is this a bug?

jbeder commented 2 days ago

Not sure. Can you take a look at the Literal spec? It's possible it adds a new line in that example.

davidzchen commented 1 day ago

Here is the section of the spec regarding Literal Style: https://yaml.org/spec/1.2.2/#812-literal-style

I am not familiar with the syntax and format of the spec, but it does mention "final line breaks and trailing empty lines are chomped."