core/vm/sp_vm_basecontext.cpp
changeset 695 6c258b202756
parent 692 2707b5d8b8bb
child 696 d5cc8d0fa899
     1.1 --- a/core/vm/sp_vm_basecontext.cpp	Sat Apr 14 02:24:23 2007 +0000
     1.2 +++ b/core/vm/sp_vm_basecontext.cpp	Sat Apr 14 04:19:58 2007 +0000
     1.3 @@ -693,26 +693,27 @@
     1.4  	return SP_ERROR_NONE;
     1.5  }
     1.6  
     1.7 -int BaseContext::StringToLocal(cell_t local_addr, size_t chars, const char *source)
     1.8 +int BaseContext::StringToLocal(cell_t local_addr, size_t bytes, const char *source)
     1.9  {
    1.10  	char *dest;
    1.11 -	int len;
    1.12 +	size_t len;
    1.13  
    1.14  	if (((local_addr >= ctx->hp) && (local_addr < ctx->sp)) || (local_addr < 0) || ((ucell_t)local_addr >= ctx->mem_size))
    1.15  	{
    1.16  		return SP_ERROR_INVALID_ADDRESS;
    1.17  	}
    1.18  
    1.19 +	if (bytes == 0)
    1.20 +	{
    1.21 +		return SP_ERROR_NONE;
    1.22 +	}
    1.23 +
    1.24  	len = strlen(source);
    1.25  	dest = (char *)(ctx->memory + local_addr);
    1.26  
    1.27 -	if ((size_t)len >= chars)
    1.28 +	if ((size_t)len >= bytes)
    1.29  	{
    1.30 -		len = chars - 1;
    1.31 -	}
    1.32 -	if (len <= 0)
    1.33 -	{
    1.34 -		return SP_ERROR_NONE;
    1.35 +		len = bytes - 1;
    1.36  	}
    1.37  
    1.38  	memcpy(dest, source, len);
    1.39 @@ -762,13 +763,18 @@
    1.40  int BaseContext::StringToLocalUTF8(cell_t local_addr, size_t maxbytes, const char *source, size_t *wrtnbytes)
    1.41  {
    1.42  	char *dest;
    1.43 -	int len;
    1.44 +	size_t len;
    1.45  	bool needtocheck = false;
    1.46  
    1.47  	if (((local_addr >= ctx->hp) && (local_addr < ctx->sp)) || (local_addr < 0) || ((ucell_t)local_addr >= ctx->mem_size))
    1.48  	{
    1.49  		return SP_ERROR_INVALID_ADDRESS;
    1.50  	}
    1.51 +	
    1.52 +	if (maxbytes == 0)
    1.53 +	{
    1.54 +		return SP_ERROR_NONE;
    1.55 +	}
    1.56  
    1.57  	len = strlen(source);
    1.58  	dest = (char *)(ctx->memory + local_addr);
    1.59 @@ -778,10 +784,6 @@
    1.60  		len = maxbytes - 1;
    1.61  		needtocheck = true;
    1.62  	}
    1.63 -	if (len <= 0)
    1.64 -	{
    1.65 -		return SP_ERROR_NONE;
    1.66 -	}
    1.67  
    1.68  	memcpy(dest, source, len);
    1.69  	if ((dest[len-1] & 1<<7) && needtocheck)