]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Allow to limit number of files returned by archive:get_files
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 28 Apr 2020 14:44:18 +0000 (15:44 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 28 Apr 2020 14:44:18 +0000 (15:44 +0100)
src/lua/lua_task.c

index 270d5ec06a3588d8320968760491d0daa086fca3..1ca96ed764f2a077acf44d86586583fc6b4a45e9 100644 (file)
@@ -6609,13 +6609,21 @@ lua_archive_get_files (lua_State *L)
 {
        LUA_TRACE_POINT;
        struct rspamd_archive *arch = lua_check_archive (L);
-       guint i;
+       guint i, max_files = 0;
        struct rspamd_archive_file *f;
 
        if (arch != NULL) {
-               lua_createtable (L, arch->files->len, 0);
+               if (lua_isnumber (L, 2)) {
+                       max_files = lua_tointeger (L, 2);
+                       max_files = MIN (arch->files->len, max_files);
+               }
+               else {
+                       max_files = arch->files->len;
+               }
+
+               lua_createtable (L, max_files, 0);
 
-               for (i = 0; i < arch->files->len; i ++) {
+               for (i = 0; i < max_files; i ++) {
                        f = g_ptr_array_index (arch->files, i);
 
                        lua_pushlstring (L, f->fname->str, f->fname->len);
@@ -6634,13 +6642,21 @@ lua_archive_get_files_full (lua_State *L)
 {
        LUA_TRACE_POINT;
        struct rspamd_archive *arch = lua_check_archive (L);
-       guint i;
+       guint i, max_files = 0;
        struct rspamd_archive_file *f;
 
        if (arch != NULL) {
-               lua_createtable (L, arch->files->len, 0);
+               if (lua_isnumber (L, 2)) {
+                       max_files = lua_tointeger (L, 2);
+                       max_files = MIN (arch->files->len, max_files);
+               }
+               else {
+                       max_files = arch->files->len;
+               }
+
+               lua_createtable (L, max_files, 0);
 
-               for (i = 0; i < arch->files->len; i ++) {
+               for (i = 0; i < max_files; i ++) {
                        f = g_ptr_array_index (arch->files, i);
 
                        lua_createtable (L, 0, 4);