| https://bugs.gentoo.org/890587 |
| https://github.com/curl/curl/issues/10148 |
| https://github.com/curl/curl/commit/e2aed004302e51cfa5b6ce8c8ab65ef92aa83196 |
| |
| From e2aed004302e51cfa5b6ce8c8ab65ef92aa83196 Mon Sep 17 00:00:00 2001 |
| From: Patrick Monnerat <patrick@monnerat.net> |
| Date: Fri, 23 Dec 2022 15:35:27 +0100 |
| Subject: [PATCH] typecheck: accept expressions for option/info parameters |
| |
| As expressions can have side effects, evaluate only once. |
| |
| To enable deprecation reporting only once, get rid of the __typeof__ |
| use to define the local temporary variable and use the target type |
| (CURLoption/CURLINFO). This also avoids multiple reports on type |
| conflicts (if some) by the curlcheck_* macros. |
| |
| Note that CURLOPT_* and CURLINFO_* symbols may be deprecated, but not |
| their values: a curl_easy_setopt call with an integer constant as option |
| will never report a deprecation. |
| |
| Reported-by: Thomas Klausner |
| Fixes #10148 |
| Closes #10149 |
| --- a/include/curl/typecheck-gcc.h |
| +++ b/include/curl/typecheck-gcc.h |
| @@ -42,9 +42,8 @@ |
| */ |
| #define curl_easy_setopt(handle, option, value) \ |
| __extension__({ \ |
| - CURL_IGNORE_DEPRECATION(__typeof__(option) _curl_opt = option;) \ |
| + CURLoption _curl_opt = (option); \ |
| if(__builtin_constant_p(_curl_opt)) { \ |
| - (void) option; \ |
| CURL_IGNORE_DEPRECATION( \ |
| if(curlcheck_long_option(_curl_opt)) \ |
| if(!curlcheck_long(value)) \ |
| @@ -120,9 +119,8 @@ |
| /* wraps curl_easy_getinfo() with typechecking */ |
| #define curl_easy_getinfo(handle, info, arg) \ |
| __extension__({ \ |
| - CURL_IGNORE_DEPRECATION(__typeof__(info) _curl_info = info;) \ |
| + CURLINFO _curl_info = (info); \ |
| if(__builtin_constant_p(_curl_info)) { \ |
| - (void) info; \ |
| CURL_IGNORE_DEPRECATION( \ |
| if(curlcheck_string_info(_curl_info)) \ |
| if(!curlcheck_arr((arg), char *)) \ |
| |