From c2cb666995c6e3607416ac13f7500f7f0e79fdd8 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 12 Sep 2016 18:21:14 +0800 Subject: [PATCH] fix fast stream error bug. 2.0.216 --- README.md | 1 + trunk/src/core/srs_core.hpp | 2 +- trunk/src/protocol/srs_protocol_buffer.cpp | 12 +++++++----- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4c180d863..26f185acf 100755 --- a/README.md +++ b/README.md @@ -341,6 +341,7 @@ Remark: ## History +* v2.0, 2016-09-12, fix fast stream error bug. 2.0.216 * v2.0, 2016-09-09, [2.0 beta1(2.0.215)][r2.0b1] released. 89941 lines. * v2.0, 2016-09-09, refine librtmp comments about NALUs. 2.0.215 * v2.0, 2016-09-05, fix memory leak at source. 2.0.214 diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 246d04d5e..3f633f129 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 215 +#define VERSION_REVISION 216 // 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 b514ceaa7..7361e67a9 100755 --- a/trunk/src/protocol/srs_protocol_buffer.cpp +++ b/trunk/src/protocol/srs_protocol_buffer.cpp @@ -146,11 +146,13 @@ int SrsFastBuffer::grow(ISrsBufferReader* reader, int required_size) // the free space of buffer, // buffer = consumed_bytes + exists_bytes + free_space. int nb_free_space = (int)(buffer + nb_buffer - end); + + // the bytes already in buffer + int nb_exists_bytes = (int)(end - p); + srs_assert(nb_exists_bytes >= 0); + // resize the space when no left space. - if (nb_free_space < required_size) { - // the bytes already in buffer - int nb_exists_bytes = (int)(end - p); - srs_assert(nb_exists_bytes >= 0); + if (nb_free_space < required_size - nb_exists_bytes) { srs_verbose("move fast buffer %d bytes", nb_exists_bytes); // reset or move to get more space. @@ -168,7 +170,7 @@ int SrsFastBuffer::grow(ISrsBufferReader* reader, int required_size) // check whether enough free space in buffer. nb_free_space = (int)(buffer + nb_buffer - end); - if (nb_free_space < required_size) { + if (nb_free_space < required_size - nb_exists_bytes) { ret = ERROR_READER_BUFFER_OVERFLOW; srs_error("buffer overflow, required=%d, max=%d, left=%d, ret=%d", required_size, nb_buffer, nb_free_space, ret);