commit 01cf03d: [Minor] Slightly improve numeric checks (not finished)

Vsevolod Stakhov vsevolod at highsecure.ru
Tue Jan 28 20:56:07 UTC 2020


Author: Vsevolod Stakhov
Date: 2020-01-28 20:12:59 +0000
URL: https://github.com/rspamd/rspamd/commit/01cf03d4c97df081bb4cf9d0f385f7f6fb17d796

[Minor] Slightly improve numeric checks (not finished)

---
 contrib/libucl/lua_ucl.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/contrib/libucl/lua_ucl.c b/contrib/libucl/lua_ucl.c
index d240d12e0..8edea5868 100644
--- a/contrib/libucl/lua_ucl.c
+++ b/contrib/libucl/lua_ucl.c
@@ -343,24 +343,30 @@ ucl_object_lua_fromtable (lua_State *L, int idx, ucl_string_flags_t flags)
 	}
 
 	if (!found_mt) {
-		/* Check for array */
+		/* Check for array (it is all inefficient) */
 		lua_pushnil (L);
+
 		while (lua_next (L, idx) != 0) {
-			if (lua_type (L, -2) == LUA_TNUMBER) {
-				double num = lua_tonumber (L, -2);
+			lua_pushvalue (L, -2);
+
+			if (lua_type (L, -1) == LUA_TNUMBER) {
+				double num = lua_tonumber (L, -1);
 				if (num == (int) num) {
 					if (num > max) {
 						max = num;
 					}
-				} else {
+				}
+				else {
 					/* Keys are not integer */
 					is_array = false;
 				}
-			} else {
+			}
+			else {
 				/* Keys are not numeric */
 				is_array = false;
 			}
-			lua_pop (L, 1);
+
+			lua_pop (L, 2);
 			nelts ++;
 		}
 	}


More information about the Commits mailing list