From: Alexander Turenko <alexander.turenko@tarantool.org>
To: Roman Khabibov <roman.habibov@tarantool.org>
Cc: tarantool-patches@freelists.org, Kirill Yukhin <kyukhin@tarantool.org>
Subject: [tarantool-patches] Re: [PATCH] httpc: allow only strings for opts.headers values
Date: Tue, 30 Jul 2019 17:03:12 +0300 [thread overview]
Message-ID: <20190730140312.vnedp2v5eedyk6yt@tkn_work_nb> (raw)
In-Reply-To: <20190729130517.61178-1-roman.habibov@tarantool.org>
Updated the branch according to the comments below. Expanded the commit
message with more info (it even does not state that the feature of the
question did not work -- this is the important detail :)).
I'm okay with the patch. Kirill, please, proceed.
WBR, Alexander Turenko.
On Mon, Jul 29, 2019 at 04:05:17PM +0300, Roman Khabibov wrote:
> Remove possibility to pass any tables as the opts.headers values.
It was about table with __tostring in a metatable, not any tables.
>
> Closes (again) #3679
Better write it as 'Closes #3679 (again)' to let github close the issue
automatically:
https://help.github.com/en/articles/closing-issues-using-keywords
> ---
> Branch: https://github.com/tarantool/tarantool/tree/romanhabibov/gh-3679-tostring
> Issue: https://github.com/tarantool/tarantool/issues/3679
>
> src/lua/httpc.c | 15 +++------------
> test/app-tap/http_client.test.lua | 26 ++++++++++----------------
> 2 files changed, 13 insertions(+), 28 deletions(-)
>
> diff --git a/src/lua/httpc.c b/src/lua/httpc.c
> index 4e78688fa..e02adb9fb 100644
> --- a/src/lua/httpc.c
> +++ b/src/lua/httpc.c
> @@ -184,18 +184,9 @@ luaT_httpc_request(lua_State *L)
> while (lua_next(L, -2) != 0) {
> int header_type = lua_type(L, -1);
> if (header_type != LUA_TSTRING) {
> - const char *err_msg =
> - "opts.headers values should be strings "
> - "or tables with \"__tostring\"";
> - if (header_type != LUA_TTABLE) {
> - httpc_request_delete(req);
> - return luaL_error(L, err_msg);
> - } else if (!luaL_getmetafield(L, -1,
> - "__tostring")) {
> - httpc_request_delete(req);
> - return luaL_error(L, err_msg);
> - }
> - lua_pop(L, 1);
> + httpc_request_delete(req);
> + return luaL_error(L, "opts.headers values "
> + "should be strings");
Looks ok.
> }
> if (lua_type(L, -2) != LUA_TSTRING) {
> httpc_request_delete(req);
> diff --git a/test/app-tap/http_client.test.lua b/test/app-tap/http_client.test.lua
> index 25fab89ab..f7243c2fa 100755
> --- a/test/app-tap/http_client.test.lua
> +++ b/test/app-tap/http_client.test.lua
> @@ -273,15 +273,13 @@ local function test_errors(test)
> local r = http:get("http://do_not_exist_8ffad33e0cb01e6a01a03d00089e71e5b2b7e9930dfcba.ru")
> end
>
> --- gh-3679 Check that opts.headers values can be strings or table
> --- convertible to string only.
> +-- gh-3679 Check that opts.headers values can be strings only.
> -- gh-4281 Check that opts.headers can be a table and opts.headers
> -- keys can be strings only.
> local function test_request_headers(test, url, opts)
> local exp_err_bad_opts_headers = 'opts.headers should be a table'
> local exp_err_bad_key = 'opts.headers keys should be strings'
> - local exp_err_bad_value = 'opts.headers values should be strings or ' ..
> - 'tables with "__tostring"'
> + local exp_err_bad_value = 'opts.headers values should be strings'
> local cases = {
> -- Verify opts.headers type checks.
> {
> @@ -326,18 +324,6 @@ local function test_request_headers(test, url, opts)
> opts = {headers = {aaa = 'aaa'}},
> exp_err = nil,
> },
> - {
> - 'header value with __tostring() metamethod',
> - opts = {headers = {aaa = setmetatable({}, {
> - __tostring = function(self)
> - return 'aaa'
> - end})}},
> - exp_err = nil,
> - postrequest_check = function(opts)
> - assert(type(opts.headers.aaa) == 'table',
> - '"aaa" header was modified in http_client')
> - end,
> - },
> {
> 'boolean header value',
> opts = {headers = {aaa = true}},
> @@ -358,6 +344,14 @@ local function test_request_headers(test, url, opts)
> opts = {headers = {aaa = 10ULL}},
> exp_err = exp_err_bad_value,
> },
> + {
> + 'header value with __tostring() metamethod',
> + opts = {headers = {aaa = setmetatable({}, {
> + __tostring = function(self)
> + return 'aaa'
> + end})}},
> + exp_err = exp_err_bad_value,
> + },
I don't see a reason to test tables with metatables anymore.
next parent reply other threads:[~2019-07-30 14:03 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20190729130517.61178-1-roman.habibov@tarantool.org>
2019-07-30 14:03 ` Alexander Turenko [this message]
2019-07-31 10:11 ` Kirill Yukhin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190730140312.vnedp2v5eedyk6yt@tkn_work_nb \
--to=alexander.turenko@tarantool.org \
--cc=kyukhin@tarantool.org \
--cc=roman.habibov@tarantool.org \
--cc=tarantool-patches@freelists.org \
--subject='[tarantool-patches] Re: [PATCH] httpc: allow only strings for opts.headers values' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox