diff --git a/src/plugins/relay/relay-http.c b/src/plugins/relay/relay-http.c index 1c948bd05..8dff07f9c 100644 --- a/src/plugins/relay/relay-http.c +++ b/src/plugins/relay/relay-http.c @@ -170,12 +170,12 @@ relay_http_url_decode (const char *url) } /* - * Reads value of an URL parameter as boolean (0 or 1) into *value. + * Reads value of a query string parameter as boolean (0 or 1) into *value. * If the parameter is not in URL, the default value is used. * * Returns: * 1: OK, *value is set - * 0: error (URL parameter has invalid format) + * 0: error (query string parameter has invalid format) */ int @@ -189,6 +189,8 @@ relay_http_get_param_boolean (struct t_relay_http_request *request, return 0; ptr_value = weechat_hashtable_get (request->params, name); + if (ptr_value && !ptr_value[0]) + return 0; *value = (ptr_value) ? weechat_config_string_to_boolean (ptr_value) : default_value; @@ -196,7 +198,7 @@ relay_http_get_param_boolean (struct t_relay_http_request *request, } /* - * Reads value of an URL parameter as long into *value. + * Reads value of a query string parameter as long into *value. * If the parameter is not in URL, the default value is used. * * Returns: @@ -217,6 +219,8 @@ relay_http_get_param_long (struct t_relay_http_request *request, return 0; ptr_value = weechat_hashtable_get (request->params, name); + if (ptr_value && !ptr_value[0]) + return 0; if (ptr_value) { number = strtol (ptr_value, &error, 10); diff --git a/tests/unit/plugins/relay/test-relay-http.cpp b/tests/unit/plugins/relay/test-relay-http.cpp index 2ca2fec3c..3180937df 100644 --- a/tests/unit/plugins/relay/test-relay-http.cpp +++ b/tests/unit/plugins/relay/test-relay-http.cpp @@ -197,9 +197,10 @@ TEST(RelayHttp, GetParamBoolean) request = relay_http_request_alloc (); CHECK(request); - relay_http_parse_method_path (request, "GET /api/test?key1=true&key2=1&key3=off"); + relay_http_parse_method_path (request, "GET /api/test?empty=&key1=true&key2=1&key3=off"); LONGS_EQUAL(0, relay_http_get_param_boolean (request, "key1", 0, NULL)); + LONGS_EQUAL(0, relay_http_get_param_boolean (request, "empty", 0, &value)); LONGS_EQUAL(1, relay_http_get_param_boolean (request, "key1", 0, &value)); LONGS_EQUAL(1, value); @@ -233,9 +234,10 @@ TEST(RelayHttp, GetParamLong) request = relay_http_request_alloc (); CHECK(request); - relay_http_parse_method_path (request, "GET /api/test?key1=123&key2=-4&key3=abc"); + relay_http_parse_method_path (request, "GET /api/test?empty=&key1=123&key2=-4&key3=abc"); LONGS_EQUAL(0, relay_http_get_param_long (request, "key1", 0, NULL)); + LONGS_EQUAL(0, relay_http_get_param_long (request, "empty", 0, &value)); LONGS_EQUAL(0, relay_http_get_param_long (request, "key3", 8, &value)); LONGS_EQUAL(1, relay_http_get_param_long (request, "key1", 8, &value));