diff options
author | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-09-25 17:58:02 +0000 |
---|---|---|
committer | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-09-25 17:58:02 +0000 |
commit | 605042493bc7ae95a504ba873af6cc97e4a0c7a9 (patch) | |
tree | 913cbc827ba478bc2d4bbc0297c9245a59f30ba6 /pbx | |
parent | 5f15eb1fe18da2374a5642d1437b7fbb1a3d3af4 (diff) |
Merged revisions 144482 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r144482 | murf | 2008-09-25 11:51:11 -0600 (Thu, 25 Sep 2008) | 14 lines
(closes issue #13558)
Reported by: mnicholson
Considering that the example extensions.lua used nothing but ["12345"] notation,
and that the resulting error message:
[Sep 24 17:01:16] ERROR[12393]: pbx_lua.c:1204 exec: Error executing lua extension: attempt to call a nil value
is not very informative as to the nature of the problem, I think this bug
fix is a big win!
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@144484 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'pbx')
-rw-r--r-- | pbx/pbx_lua.c | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/pbx/pbx_lua.c b/pbx/pbx_lua.c index 689ba1c77..6a98e302a 100644 --- a/pbx/pbx_lua.c +++ b/pbx/pbx_lua.c @@ -1193,22 +1193,25 @@ static int lua_find_extension(lua_State *L, const char *context, const char *ext /* step through the extensions looking for a match */ for (i = 1; i < lua_objlen(L, context_order_table) + 1; i++) { - int e_index, isnumber, match = 0; + int e_index, e_index_copy, match = 0; const char *e; lua_pushinteger(L, i); lua_gettable(L, context_order_table); e_index = lua_gettop(L); - isnumber = lua_isnumber(L, e_index); - if (!(e = lua_tostring(L, e_index))) { - lua_pop(L, 1); + /* copy the key at the top of the stack for use later */ + lua_pushvalue(L, -1); + e_index_copy = lua_gettop(L); + + if (!(e = lua_tostring(L, e_index_copy))) { + lua_pop(L, 2); continue; } /* make sure this is not the 'include' extension */ if (!strcasecmp(e, "include")) { - lua_pop(L, 1); + lua_pop(L, 2); continue; } @@ -1223,34 +1226,28 @@ static int lua_find_extension(lua_State *L, const char *context, const char *ext * match, 2 on earlymatch */ if (!match) { - lua_pop(L, 1); + /* pop the copy and the extension */ + lua_pop(L, 2); continue; /* keep trying */ } if (func == &matchmore && match == 2) { /* We match an extension ending in '!'. The decision in * this case is final and counts as no match. */ - lua_pop(L, 3); + lua_pop(L, 4); return 0; } - /* remove the context table, the context order table, and the - * extension (or replace the extension with the corisponding - * function) */ + /* remove the context table, the context order table, the + * extension, and the extension copy (or replace the extension + * with the corresponding function) */ if (push_func) { - /* here we must convert the exten back to an integer - * because lua_tostring will change the value on the - * stack to a string */ - if (isnumber) { - int e_int = lua_tointeger(L, e_index); - lua_pop(L, 1); /* the exten should be the top of the stack */ - lua_pushinteger(L, e_int); - } + lua_pop(L, 1); /* pop the copy */ lua_gettable(L, context_table); lua_insert(L, -3); lua_pop(L, 2); } else { - lua_pop(L, 3); + lua_pop(L, 4); } return 1; |