diff --git a/src/emitter.cpp b/src/emitter.cpp index 327b1ce32..ba52a38b2 100644 --- a/src/emitter.cpp +++ b/src/emitter.cpp @@ -708,7 +708,7 @@ Emitter& Emitter::Write(const std::string& str) { Utils::ComputeStringFormat(str, m_pState->GetStringFormat(), m_pState->CurGroupFlowType(), stringEscaping == StringEscaping::NonAscii); - if (strFormat == StringFormat::Literal) + if (strFormat == StringFormat::Literal || str.size() > 1024) m_pState->SetMapKeyFormat(YAML::LongKey, FmtScope::Local); PrepareNode(EmitterNodeType::Scalar); diff --git a/test/integration/emitter_test.cpp b/test/integration/emitter_test.cpp index 285d0dee1..e84f57bca 100644 --- a/test/integration/emitter_test.cpp +++ b/test/integration/emitter_test.cpp @@ -266,6 +266,8 @@ TEST_F(EmitterTest, SimpleLongKey) { } TEST_F(EmitterTest, SingleLongKey) { + const std::string shortKey(1024, 'a'); + const std::string longKey(1025, 'a'); out << BeginMap; out << Key << "age"; out << Value << "24"; @@ -273,9 +275,14 @@ TEST_F(EmitterTest, SingleLongKey) { out << Value << "5'9\""; out << Key << "weight"; out << Value << 145; + out << Key << shortKey; + out << Value << "1"; + out << Key << longKey; + out << Value << "1"; out << EndMap; - ExpectEmit("age: 24\n? height\n: 5'9\"\nweight: 145"); + ExpectEmit("age: 24\n? height\n: 5'9\"\nweight: 145\n" + shortKey + + ": 1\n? " + longKey + "\n: 1"); } TEST_F(EmitterTest, ComplexLongKey) {