From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NOR01-OL1-obe.outbound.protection.outlook.com (mail-ol1nor01on2064.outbound.protection.outlook.com [40.107.224.64]) by sourceware.org (Postfix) with ESMTPS id 6EE893857C49 for ; Wed, 6 Jul 2022 07:17:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6EE893857C49 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GUo59P8+0aoqfLPY/RlOdNbCjwER+IND7r1OoiNrK+F2MSGZkjM7OC11GuLYLKfzPDzP7bgJpKbvCz90o652e81rpDaLrtUptweDp/k/6si0nraULJzbJxHg5+3nTX6qe1dRkkc/pW+W+YNT4ZTLwZf6dip8nhOCdqKSmT2xyYhM/6j4FjHGel430Lp1QISuqByvpFcdCdONvqfunvqrKFJfAUle+5oYBTsmLrDqaZpNQO3KaJDqhvhnSwcpmXIueoGcyKWtOjTccYayQMYvACyjHSaSDv5GZiEtc6E9JzqhFQyW/w3l9BnmP2VZne6Vk7zz+6V0XYBxQcnrDS6WuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=03OCZp0MCpRQEX7lJfx/y3cPYTlLvDqWCD7stbi7SgY=; b=Atb5BlESQDHIqV4hAQZGE8KkNUuzNpSIcqs2yuavIsmDADL3MiEz+p4iq63YzInU9lNqTsa6yqBZZ3qi64kaeWgB53v1sRQpBC1fOehxH4Oz43NSLK4VxvDkDDS+lE0NKkPRaxVvFaOmAyUmTQn1G0/Xw4UY9WGQkF+lD31/Lo+mA5kFE87RAKhT6zDGsop1zMzdX5BXk7/keQYYX1pj7IpuY7WcjV7gwDXpUrsWbHhF5CEAZATo/nqqt6fYs8ubI8ApukALXnjPOFhTXr7kl5FXbYFrCJc36YZU2rYCa/R+m7Wcs3O9ehjNsfAl0+UbJtFXFzJ58PYhiO83cggrUg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=westcontrol.com; dmarc=pass action=none header.from=westcontrol.com; dkim=pass header.d=westcontrol.com; arc=none Received: from SV0P279MB0233.NORP279.PROD.OUTLOOK.COM (2603:10a6:f10:b::13) by SV0P279MB0679.NORP279.PROD.OUTLOOK.COM (2603:10a6:f10:20::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.17; Wed, 6 Jul 2022 07:17:54 +0000 Received: from SV0P279MB0233.NORP279.PROD.OUTLOOK.COM ([fe80::3cc8:39d8:ec09:ce39]) by SV0P279MB0233.NORP279.PROD.OUTLOOK.COM ([fe80::3cc8:39d8:ec09:ce39%3]) with mapi id 15.20.5395.021; Wed, 6 Jul 2022 07:17:54 +0000 Message-ID: <7b581344-5b28-6328-9c1b-310c4d9426c7@westcontrol.com> Date: Wed, 6 Jul 2022 09:17:53 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Subject: Re: Gcc Digest, Vol 29, Issue 7 Content-Language: en-GB To: Yair Lenga , gcc@gcc.gnu.org References: From: David Brown In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: SV0P279CA0045.NORP279.PROD.OUTLOOK.COM (2603:10a6:f10:13::14) To SV0P279MB0233.NORP279.PROD.OUTLOOK.COM (2603:10a6:f10:b::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 15287149-67f4-41e4-dcc8-08da5f1fa4fd X-MS-TrafficTypeDiagnostic: SV0P279MB0679:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nW1ZKzNN1GlgxgACTm4zw+cTniU8zptq4Ihqy5mV8D3CDPxJbi54JqDsH/baM3UJvm8FadkZ2EgRJMjZoUJaSc4fgaHmJHS39DD5JGvfXdVs0stZZriFUQ/hU8ulcpusf5/4WO2YROAlO8vAGJ88NxN/3XkL4rU9NkTP0te9yHT0NwoyuXreiXitGXCTP0+DutiIxcyBzv2Y77kDpxVbwYQgTyxQpLYvMidXp84ZbGAomLM2vkwY9IKJhcBsl/CkNdoGKm7cA3Kg7X2SVa5CBzDr4Y1iOP8U3Wk0VNznjO5CkTqIDgMtwc103kLVWHBTDQL54a9LxK/MK0xNSjiKdzSQn1a7sSjeuN9qC0cs3hPJP7IngASGJXe4iLCzRwrQiGHafE4Ta3LOJhPymVn6IXeTzznS0bwdUPsPUnPpSrg1hWnlWLg70a55m+l8MeXucWaoB8cB3i11QjnKcg5Qnh+ozRyDk5gGPfN4YIjcNJ9b5LgBCO0ozh9tREbvcFAYH/y/gZUumKNjTIAMZJTzddVNHH1s4DIoKWeKgA3dmsdbqS4GPKUC3Tvg6bIBj2T9SZBSDWvCwRx31QIBN7Rd+HWVzIkXst4SKiJb7N+cAGfedjrZOc396vf1SO9KDNMPaHC/e25tOtTYdEndb8sJzHIo+o+hEi1G/GHkrlT/jpgt9A+jhcjKBChYWS+4J3RQIQBJPt29RBtk/6EBoGgmbeGk0ZrgPYm/8kGfPEGVCwcbLLPwvjZuoSuCE93p7cGiFxG/6gInpbQ71zH2Ngrj+U5vgD2qRfRMB5LFYil6Nct8lhIA6EWkJzss1aTTN8GlFbJMGq67YEHGoZBVVh6fhTBjKi5v4PBwoG7Uu4DbpTe48UDAT2MiKPYCnJssQ3oN X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SV0P279MB0233.NORP279.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230016)(4636009)(376002)(136003)(39830400003)(366004)(396003)(346002)(2906002)(5660300002)(186003)(31686004)(36756003)(6486002)(2616005)(31696002)(8936002)(66556008)(66946007)(8676002)(66476007)(38350700002)(316002)(52116002)(53546011)(478600001)(38100700002)(6512007)(26005)(6506007)(83380400001)(86362001)(41300700001)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OTFaWHVXeXhZTStvRTJGb2dqS3JrcUhHUlRMR1NsTDAzeWV4UFJLSmxuR3ZS?= =?utf-8?B?eGN2WkFiS3VDd1FSdlhmSkIxYWthQXNUOGNUOEFNQVVTcUlzSWxmc2tYMTR1?= =?utf-8?B?dlNnL1REem1PRkdNL1lTaEp1SWt6TTM2QjN1RHlCdkkyVkxxTGM0eUpPZy9Z?= =?utf-8?B?cGRRSCt4V1F1eW10UG52a2VCMTFGd1k4QmVoaGdQVittSXYxVGlZKy9YZ25U?= =?utf-8?B?TWNaZTRMMEQ3ZC83YWxZVjJwcVNkd1NIUVRqaTRSQnZ1VlB1Q1hwV3BFMXgv?= =?utf-8?B?RitBMStTbllQazF5ZkJVUUIvSTJNaEFRNTZPUG1EVUhxK0lsOFdhb2VDaHlm?= =?utf-8?B?dmFJRDRSQnBwUjdRSXJjbmswRmRUNVlrTysxUzJBY0VMUkIrM2FWTFQzcDBu?= =?utf-8?B?anZkeHdHYnVrMUZDTFkzNlJ0ZVlwWGNKeW5MenZxamlvaFBYdUg2VVBCM21F?= =?utf-8?B?L3ZQM0g1dDBJaXNxbVFacnI3WEYvOUpleGswQzBnUEhHdWQrVGZzWDFBQW5Z?= =?utf-8?B?ZXJENFpkaFJxRnlmYzFwUUZGQU9wWW92U0g4MXoyOGZQRlFVeEIrMHJyNFlK?= =?utf-8?B?QTlTWWkwV2Q3N1EwRHpEeHB5T3dOTys1UFVtNUdlMGx5Zkx5c1NmNmpTL0Vz?= =?utf-8?B?NTVSZVArQ3FETjVwUzUyNjVPQWc5MmVaSEU0anYvNUdlQVVJRnhyZTNHTjN6?= =?utf-8?B?SUFDTzlERTBOc0NCZ2tmKzA0Vk0yaExmbU1CWTREQnAvQ1RzN2hjN1poeWw0?= =?utf-8?B?Y0RSRlBvOG9PcVgvd3owM2U1eUNrQjJUaDBNU25KZmppa21mZCtMaUdJOW40?= =?utf-8?B?d1pUeE9JYWNPdlNFMTlSMTZ6T25qYmRXaGZHNmorcklYRExRY3BFN1NBeGZS?= =?utf-8?B?eWFpbzhiOElxOVdNWmJMTWxHN2lYMFMrSXNybGRhVDE5dDY2Wm15ZVoyWDlm?= =?utf-8?B?VnU1Umo2NUNJTmNTYWhKZWE2Vk02WGZYcHduZWdIWHNyWW1qR2h1ZSt5eWJx?= =?utf-8?B?M2I3RDYzQmNWd2d3R1FrcHBxZnlIaTA1UGFHTjByckJ3YUJ4ejhTa2FReUpa?= =?utf-8?B?WTVyLzcrVE1LWnEvc0RTdXA4bVVzbjd3Snp1RUgvMVMzV2pFT3ZFTUc4bUpa?= =?utf-8?B?cHBLN01Pc1d2RFNJRWdRLzFra1NaNGtoelpnRFAxc2pUK1hmSXRjY0c1dFVT?= =?utf-8?B?MGppbnQ3Tkg2Ny9qcy9vOW5SdkhjY2d4NGtEbXNMQ0tlTlNkTDJPSjJDSGlq?= =?utf-8?B?L3dMYy8wTWhRWFNFbndCQ0U2ei9pSFJtcThCQTFhaVFBRG5VQVZFaEFKR3VF?= =?utf-8?B?WVRDTG1sL1RIektFZ2ttVUx3c3N0S05sam1TNHF1ditQZmVtZ3VWWEJTbUFH?= =?utf-8?B?SVcwc3FDV2xTb01OK0t4UzVVYUthQW9yT2owb2tJNDNhVDJZRnRJUWg2eWpE?= =?utf-8?B?S2ptNHpYYzh3MzZ5R0w2WndDM0NPNGt2WDBnRFlJVktHM3lIdU41NXdaS014?= =?utf-8?B?Y1NGZmRmcDc3Q0xUN3NGVlRabnRoR2FHVFhoSTlQUGVWeCtTRzFTR0JzYmdI?= =?utf-8?B?azJCM3JuTW9Qald1bjBUSlo4MTQ4ZERTT1VleUtOL0czTmZmbW55Q0FsblR5?= =?utf-8?B?Lzg0Wm1EUkg1bHR4S2RsME9sM2g0VnRHS1VOMG5lQ0lrcmhJT2t6QnU2WFlm?= =?utf-8?B?cGhwWTBQMzYrMmo5azlqNU9FN0V0RlZUTElnSDgxd0RrRmthZU5nVS9aYWxU?= =?utf-8?B?emwvRW1QWExxd3daK1RIMGJOV2lLVWR6cWtLV0JWazFxenNnQ3RzZUFacmRl?= =?utf-8?B?MUQ4aHpXeGdBSUFUaEdKMS9iTk1Ba2FXd0pKUTl6dURwV0p3TjgzRXM3RXhS?= =?utf-8?B?Vys5TEx2TW5ualh0QWxUUjRsQ1NMRTJNMW1sTVpRZGFtRzRxYlk1Z3ZNaG5G?= =?utf-8?B?MDV1S0ZucUx6YllhcFNyQm8wQkFCTVlINGtwK2NtR0tMeWt2aVFDSzcrMjJP?= =?utf-8?B?ZDNUdnRJd1ppOXozSHhFRUhmYVlDRlU0S0pnVkZGaEFRdHZwZlRLQXBYL0Rk?= =?utf-8?B?WDZQdHd4S09oMno0Z1BVb2hOMTB0d3NmM3V6ajFBbXVTUVdDbDEvM0trUHhY?= =?utf-8?Q?sxWw3DklDNxbcyW9pt15EbVQB?= X-OriginatorOrg: westcontrol.com X-MS-Exchange-CrossTenant-Network-Message-Id: 15287149-67f4-41e4-dcc8-08da5f1fa4fd X-MS-Exchange-CrossTenant-AuthSource: SV0P279MB0233.NORP279.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2022 07:17:54.5102 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: c75fbd3c-42ad-4db0-9cff-972faf83ae45 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: xY3FKEiMBLrtGhIPeqdFv8AKwpPaIFXZNebOnle2qK6hLtTVKCIgHdcRXZlyUNIHRShdYPb6vHVvlKk7wqjPvw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SV0P279MB0679 X-Spam-Status: No, score=-3.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_NUMSUBJECT, NICE_REPLY_A, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Jul 2022 07:17:58 -0000 On 05/07/2022 09:19, Yair Lenga via Gcc wrote: > Hi, > > Wanted to get some feedback on an idea that I have - trying to address the > age long issue with type check on VA list function - like 'scanf' and > friends. In my specific case, I'm trying to build code that will parse a > list of values from SELECT statement into list of C variables. The type of > the values is known (by inspecting the result set meta-data). My ideal > solution will be to implement something like: > > int result_set_read(struct result_set *p_result_set, ...); > > Which can be called with > > int int_var ; float float_var ; char c[20] ; > result_set_read(rs1, &int_var, &float_var, c) ; > > The tricky part is to verify argument type - make sure . One possible path > I thought was - why not leverage the ability to describe scanf like > functions ( > result_set_read(rs1, const char *format, ...) __attribute((format (scanf, > 2, 3)) ; > > And then the above call will be > result_set-read(rs1, "%d %f %s", &int_var, &float_var, c) ; > > With the added benefit that GCC will flag as error, if there is mismatch > between the variable and the type. My function parses the scanf format to > decide on conversions (just the basic formatting '%f', '%d', '%*s', ...). > So far big improvement, and the only missing item is the ability to enforce > check on string sizes - to support better checks against buffer overflow > (side note: wish there was ability to force inclusion of the max string > size, similar to the sscanf_s). > > My question: does anyone know how much effort it will be to add a new GCC > built-in (or extension), that will automatically generate a descriptive > format string, consistent with scanf formatting, avoiding the need to > manually enter the formatting string. This can be thought of as "poor man > introspection". Simple macro can then be used to generate it > > #define RESULT_SET_READ(rs, ...) result_set_read(rs, > __builtin_format(__VA_ARGS__), __VA_ARGS__) > > Practically, making the function "safe" (with respect to buffer overflow, > type conversions) for most use cases. > > Any feedback, pointers, ... to how to implement will be appreciated > > Yair > I haven't worked through all the details, but I wonder if this could be turned around a bit. Rather than your function taking a variable number of arguments of different types, which as you know can be a risky business, have it take an array of (type, void*) pairs (where "type" is an enumeration). Use some variadic macro magic to turn the "RESULT_SET_READ" into the creation of a local array that is then passed on to the function.