Fix bug in bytecode resizing.
Fix bug in bytecode resizing.
1.1 --- a/src/BytecodeEmitter.cpp Sat Sep 01 17:11:06 2012 -0700
1.2 +++ b/src/BytecodeEmitter.cpp Sun Sep 02 13:06:09 2012 -0700
1.3 @@ -17,6 +17,7 @@
1.4 * JITCraft. If not, see http://www.gnu.org/licenses/.
1.5 */
1.6 #include <stdlib.h>
1.7 +#include <string.h>
1.8 #include "BytecodeEmitter.h"
1.9 #include "Utility.h"
1.10 #include "Types.h"
1.11 @@ -56,7 +57,7 @@
1.12
1.13 bytecode *newBuffer;
1.14 if (buffer_ == inline_buffer_)
1.15 - newBuffer = (bytecode *)malloc(nbytes);
1.16 + newBuffer = (bytecode *)malloc(newSize);
1.17 else
1.18 newBuffer = (bytecode *)realloc(buffer_, newSize);
1.19
1.20 @@ -69,9 +70,14 @@
1.21 return false;
1.22 }
1.23
1.24 + if (buffer_ == inline_buffer_)
1.25 + memcpy(newBuffer, inline_buffer_, (buffer_pos_ - inline_buffer_));
1.26 +
1.27 buffer_pos_ = newBuffer + size_t(buffer_pos_ - buffer_);
1.28 buffer_ = newBuffer;
1.29 buffer_end_ = buffer_ + newSize;
1.30 + assert(buffer_pos_ + nbytes < buffer_end_);
1.31 +
1.32 return true;
1.33 }
1.34