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)