Fix ostream flush:

fix #1853, close #1859, close #1866

After calling the DynamicBuffer commit() function the
buffer returned from prepare() can be invalidated but
the ostream kept using it.
This commit is contained in:
Cristian Morales Vega
2020-02-25 11:37:06 +00:00
committed by Vinnie Falco
parent fc01de736f
commit 75da7a522e
3 changed files with 28 additions and 0 deletions

View File

@ -9,6 +9,7 @@ Version 286:
* Fix ostream warning
* Field digest is endian-independent
* update broken links in README
* Fix ostream flush
API Changes:

View File

@ -100,6 +100,7 @@ public:
b_.commit(
(this->pptr() - this->pbase()) *
sizeof(CharT));
this->setp(nullptr, nullptr);
return 0;
}
};
@ -169,6 +170,7 @@ public:
b_.commit(
(this->pptr() - this->pbase()) *
sizeof(CharT));
this->setp(nullptr, nullptr);
return 0;
}
};

View File

@ -66,6 +66,31 @@ public:
fail("wrong exception", __FILE__, __LINE__);
}
}
// flush
{
// Issue #1853
flat_static_buffer<16> b;
auto half_view = string_view(s.data(), 8);
{
auto os = ostream(b);
os << half_view;
os.flush();
}
BEAST_EXPECT(buffers_to_string(b.data()) == half_view);
}
{
flat_static_buffer<16> b;
{
auto os = ostream(b);
os << string_view(s.data(), 8);
os.flush();
os << string_view(s.data() + 8, 8);
os.flush();
}
BEAST_EXPECT(buffers_to_string(b.data()) == s);
}
}
void