From 5e284b58a49c32f20322576ac300367c35105f92 Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 18 Apr 2017 11:41:09 +0800 Subject: [PATCH] Fix #848, crash at HTTP fast buffer grow 2.0.239 --- README.md | 2 ++ trunk/src/core/srs_core.hpp | 2 +- trunk/src/protocol/srs_protocol_buffer.cpp | 5 +++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ccf38a4a7..05acc9d17 100755 --- a/README.md +++ b/README.md @@ -336,6 +336,7 @@ Remark: ## History +* v2.0, 2017-04-18, Fix [#848][bug #848], crash at HTTP fast buffer grow 2.0.239 * v2.0, 2017-04-15, Fix [#844][bug #844], support Haivision encoder. 2.0.238 * v2.0, 2017-04-15, Merge [#846][bug #846], fix fd leak for FLV stream caster. 2.0.237 * v2.0, 2017-04-15, Merge [#841][bug #841], avoid the duplicated sps/pps in ts. 2.0.236 @@ -1287,6 +1288,7 @@ Winlin [bug #841]: https://github.com/ossrs/srs/issues/841 [bug #846]: https://github.com/ossrs/srs/issues/846 [bug #844]: https://github.com/ossrs/srs/issues/844 +[bug #848]: https://github.com/ossrs/srs/issues/848 [bug #xxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxx [exo #828]: https://github.com/google/ExoPlayer/pull/828 diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index ddd41e59d..7eff59bc9 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 2 #define VERSION_MINOR 0 -#define VERSION_REVISION 238 +#define VERSION_REVISION 239 // generated by configure, only macros. #include diff --git a/trunk/src/protocol/srs_protocol_buffer.cpp b/trunk/src/protocol/srs_protocol_buffer.cpp index 7361e67a9..8b644fa62 100755 --- a/trunk/src/protocol/srs_protocol_buffer.cpp +++ b/trunk/src/protocol/srs_protocol_buffer.cpp @@ -160,9 +160,10 @@ int SrsFastBuffer::grow(ISrsBufferReader* reader, int required_size) // reset when buffer is empty. p = end = buffer; srs_verbose("all consumed, reset fast buffer"); - } else { + } else if (nb_exists_bytes < nb_buffer && p > buffer) { // move the left bytes to start of buffer. - srs_assert(nb_exists_bytes < nb_buffer); + // @remark Only move memory when space is enough, or failed at next check. + // @see https://github.com/ossrs/srs/issues/848 buffer = (char*)memmove(buffer, p, nb_exists_bytes); p = buffer; end = p + nb_exists_bytes;