mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 10:47:18 +00:00 
			
		
		
		
	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: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@144484 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user