diff options
author | Joel Croteau <jcroteau@gmail.com> | 2014-02-19 00:45:51 -0800 |
---|---|---|
committer | Joel Croteau <jcroteau@gmail.com> | 2014-02-19 01:17:17 -0800 |
commit | c84c6eda17a6ac5e9c56bbc76839c472238a97c4 (patch) | |
tree | 96567bfc014aee477f6fa0cd995cce46d6464233 /src/library.js | |
parent | d1c09ebd46b35ed2b343ebab9afdd1dfc99c63b6 (diff) |
Provide better implementation of localeconv and fix logic error in allocate
This allocates more space to the structure returned by localeconv. This fixes
an error caused by some locale functions (specifically moneypunct_byname::init
trying to access members of the lconv struct beyond the first and dereferencing
invalid pointers. This also fixes a bug in allocate() which occurred when
allocating a single-typed array of data of type size greater than one byte.
The function had been incrementing its index into the array by the byte size,
causing it to skip elements in arrays of larger type sizes. Fixes issue #2134.
Diffstat (limited to 'src/library.js')
-rw-r--r-- | src/library.js | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/library.js b/src/library.js index c1eb2219..698763b6 100644 --- a/src/library.js +++ b/src/library.js @@ -6443,7 +6443,7 @@ LibraryManager.library = { // var indexes = Runtime.calculateStructAlignment({ fields: ['i32', 'i32'] }); var me = _localeconv; if (!me.ret) { - me.ret = allocate([allocate(intArrayFromString('.'), 'i8', ALLOC_NORMAL)], 'i8*', ALLOC_NORMAL); // just decimal point, for now + me.ret = allocate([allocate(intArrayFromString('.'), 'i8', ALLOC_NORMAL),allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL)], 'i8*', ALLOC_NORMAL); // Allocate strings in lconv, still don't allocate chars } return me.ret; }, |