aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaurnimator <quae@daurnimator.com>2017-05-09 17:02:31 +1000
committerdaurnimator <quae@daurnimator.com>2017-05-09 17:10:18 +1000
commit3e439ed653093e6e124a4997f64053164f1043b8 (patch)
tree3ed7655d34183464523c4cbd8472970f1df37605
parent3f2f887666b49b81f9e9b5dbebaeca0fc3543a3c (diff)
downloadfengari-3e439ed653093e6e124a4997f64053164f1043b8.tar.gz
fengari-3e439ed653093e6e124a4997f64053164f1043b8.tar.bz2
fengari-3e439ed653093e6e124a4997f64053164f1043b8.zip
src/lapi.js: lobject.luaO_str2num returns false if string is not a number
-rw-r--r--src/lapi.js10
-rw-r--r--tests/lbaselib.js15
2 files changed, 19 insertions, 6 deletions
diff --git a/src/lapi.js b/src/lapi.js
index e035aca..307d4e3 100644
--- a/src/lapi.js
+++ b/src/lapi.js
@@ -731,9 +731,13 @@ const lua_compare = function(L, index1, index2, op) {
};
const lua_stringtonumber = function(L, s) {
- L.stack[L.top++] = lobject.luaO_str2num(s);
- assert(L.top <= L.ci.top, "stack overflow");
- return s.length;
+ let tv = lobject.luaO_str2num(s);
+ if (tv) {
+ L.stack[L.top++] = tv;
+ assert(L.top <= L.ci.top, "stack overflow");
+ return s.length;
+ }
+ return 0;
};
const lua_tointegerx = function(L, idx) {
diff --git a/tests/lbaselib.js b/tests/lbaselib.js
index 0a77e5b..ca83467 100644
--- a/tests/lbaselib.js
+++ b/tests/lbaselib.js
@@ -438,10 +438,14 @@ test('select', function (t) {
test('tonumber', function (t) {
let luaCode = `
- return tonumber('123'), tonumber('12.3'), tonumber('az', 36), tonumber('10', 2)
+ return tonumber('foo'),
+ tonumber('123'),
+ tonumber('12.3'),
+ tonumber('az', 36),
+ tonumber('10', 2)
`, L;
-
- t.plan(5);
+
+ t.plan(6);
t.doesNotThrow(function () {
@@ -457,6 +461,11 @@ test('tonumber', function (t) {
}, "JS Lua program ran without error");
+ t.ok(
+ lua.lua_isnil(L, -5),
+ "Correct element(s) on the stack"
+ );
+
t.strictEqual(
lua.lua_tonumber(L, -4),
123,