diff options
author | George Sedov <radist.morse@gmail.com> | 2015-11-26 11:39:03 +0300 |
---|---|---|
committer | Victor Toso <me@victortoso.com> | 2016-01-30 11:08:52 +0100 |
commit | 66abb77948744d09722c503c029b4c458beb19d0 (patch) | |
tree | 51d1e7e81a3b3c4aa317877abb4838fc99a28c6b | |
parent | 27b5ca64bbcc89f10f43decf88bdc92d31c543c9 (diff) |
lua-factory: remove dependency on GrlSource from plaintext verification
It's part of the work aimed at removing the OperationSpec from the
global scope.
https://bugzilla.gnome.org/show_bug.cgi?id=753141
Acked-by: Victor Toso <me@victortoso.com>
-rw-r--r-- | src/lua-factory/grl-lua-library.c | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/src/lua-factory/grl-lua-library.c b/src/lua-factory/grl-lua-library.c index c391e96..ec53faf 100644 --- a/src/lua-factory/grl-lua-library.c +++ b/src/lua-factory/grl-lua-library.c @@ -38,6 +38,9 @@ #include <totem-pl-parser-mini.h> #endif +#define LUA_SOURCE_TABLE "source" +#define LUA_SOURCE_TAGS "tags" + #define GRL_LOG_DOMAIN_DEFAULT lua_library_log_domain GRL_LOG_DOMAIN_STATIC (lua_library_log_domain); @@ -219,21 +222,35 @@ grl_data_add_lua_string (GrlData *data, } static gboolean -verify_plaintext_fetch (GrlSource *source, - char **urls, +verify_plaintext_fetch (lua_State *L, + gchar **urls, guint num_urls) { - const char **tags; - gboolean has_plaintext_tag; guint i; - tags = grl_source_get_tags (source); - has_plaintext_tag = (tags && g_strv_contains (tags, "net:plaintext")); + lua_getglobal (L, LUA_SOURCE_TABLE); + if (!lua_istable (L, -1)) { + lua_pop (L, 1); + return FALSE; + } + lua_getfield (L, -1, LUA_SOURCE_TAGS); + if (!lua_istable (L, -1)) { + lua_pop (L, 2); + return FALSE; + } + + lua_pushnil (L); + while (lua_next (L, -2) != 0) { + if (g_strcmp0 (lua_tostring (L, -1), "net:plaintext") == 0) { + /* No need to verify the URLs, the source is saying that they do + * plaintext queries, so nothing for us to block */ + lua_pop (L, 4); + return TRUE; + } + lua_pop (L, 1); + } - /* No need to verify the URLs, the source is saying that they do - * plaintext queries, so nothing for us to block */ - if (has_plaintext_tag) - return TRUE; + lua_pop (L, 2); for (i = 0; i < num_urls; i++) { if (g_str_has_prefix (urls[i], "http:")) @@ -1088,7 +1105,7 @@ grl_l_fetch (lua_State *L) } } - if (!verify_plaintext_fetch (os->source, urls, num_urls)) { + if (!verify_plaintext_fetch (L, urls, num_urls)) { GRL_WARNING ("Source '%s' is broken, it makes plaintext network queries but " "does not set the 'net:plaintext' tag", grl_source_get_id (os->source)); g_free (urls); |