Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tayad-006t1C-3z for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Jan 2025 14:53:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tayac-00GrMm-4j for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Jan 2025 14:53:50 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tayab-00GrMd-M1 for pgsql-hackers@lists.postgresql.org; Thu, 23 Jan 2025 14:53:49 +0000 Received: from skyblue.cherry.relay.mailchannels.net ([23.83.223.167]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tayaY-0016oS-1Q for pgsql-hackers@postgresql.org; Thu, 23 Jan 2025 14:53:48 +0000 X-Sender-Id: hostingeremail|x-authuser|david@pgbackrest.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 361201A2219 for ; Thu, 23 Jan 2025 14:53:45 +0000 (UTC) Received: from fr-int-smtpout10.hostinger.io (100-117-41-232.trex-nlb.outbound.svc.cluster.local [100.117.41.232]) (Authenticated sender: hostingeremail) by relay.mailchannels.net (Postfix) with ESMTPA id 226FC1A32E3 for ; Thu, 23 Jan 2025 14:53:41 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1737644022; a=rsa-sha256; cv=none; b=KR1jJwxi5TEMESvV5EihEPIXrln7JLHM8aLru05/DBawkR60XCq1z8aKL8w9pHh9Zap9pJ QHh6XxT1eY9ZPH4mrkX1ZxYT0Zd7p7hQDB/p0dhb09BZbXw7bUk+veng3AJEZmFKctNVLw Num10Z9gbMjcF4Vo4wO1XFnGhG0ZHulHoMCBtnL882BFAzHzBhAZz0HBgqAlvKzaXlmCM6 gkGBcDQb/FP0pfNviHHAOXNe4Fh81NcfRfwLmBIFZVoCWNpUiql02nIctfrn4Wt0b3tMB0 2KFoe/7JYNOFj3pguNMSs3K7Wxt3SzMp8aazs/rVivkfcoppe6bdD6LhF1pGkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1737644022; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: dkim-signature; bh=FPg6sJI47rM9vSw/yimPaz9O6IeINZduHNieZfKo6QU=; b=aaMnsayy656N9f+USSIeIWxqxLEse+G872z94iBVAUaNpJ9roJcygCn1U9Gst3SrrTiSqr dPN0BqchP2MI1M4ebpSqAu6+JlRmwEaNu9cJK5mG5CqHF+Za0/i2mFBj2WPU5/qX+MYxzW N0KYuXImwDcqOICSGcYqXU/Al8MSwLH3zmznrASf6Qf0DB39BTLkgc0dLQKOnaz+5Ji6tW 2zEx+LdPv8KvKpvXGe4OZnT2WJjwQdPBSokR3zHTXtWpxALtlWN+zYSnn3ruMNMrx5f/W+ wfJ01NocifiscFxgVZbPS0cd6xfbbsk9Yc0Q3lZ++IE0fwqft0CtV81xXT/z/Q== ARC-Authentication-Results: i=1; rspamd-5f4b444555-m42jn; auth=pass smtp.auth=hostingeremail smtp.mailfrom=david@pgbackrest.org X-Sender-Id: hostingeremail|x-authuser|david@pgbackrest.org X-MC-Relay: Neutral X-MailChannels-SenderId: hostingeremail|x-authuser|david@pgbackrest.org X-MailChannels-Auth-Id: hostingeremail X-Suffer-Battle: 3ec38c1e7cbede91_1737644022627_503517292 X-MC-Loop-Signature: 1737644022627:2240494264 X-MC-Ingress-Time: 1737644022626 Received: from fr-int-smtpout10.hostinger.io (fr-int-smtpout10.hostinger.io [89.116.146.211]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.117.41.232 (trex/7.0.2); Thu, 23 Jan 2025 14:53:42 +0000 Content-Type: multipart/mixed; boundary="------------UA8BIV200otwZ206Bn5qfIpx" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgbackrest.org; s=hostingermail1; t=1737644020; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=FPg6sJI47rM9vSw/yimPaz9O6IeINZduHNieZfKo6QU=; b=yWLDmUnggQwru1J2NmBkBkIQrhMAIMuKR4hwwJUVs6R30U3U+87PRzhudqWGalyCuxLwuv 5wt154Ja6HJdJm2x7wBnZnN7Alyw2s74CUqv4+wp7LNOgsu+1J/MitYYZSdus+7u/+akUd BZghVRaApzd4gMdL+033YBbtt5eP4fcfJy0/B73kzVq2dkpYVV+wY1eS8zmPqyS4nvR5OM b+9GLlXaI6Q7vLn69E9L9/pWmn92Y4z/l289lZTZj0bQt1KR12J89Uwq+2FHedTOtYq+G/ mk1B7Quiyjzthm2/I23bQik6jItSN3cf1zck8bIjjEd9kEFNBf9OQuhvr8ETtw== Message-ID: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: Pg Hackers From: David Steele Subject: Improve verification of recovery_target_timeline GUC. Date: Thu, 23 Jan 2025 14:53:39 +0000 (UTC) X-CM-Analysis: v=2.4 cv=BvTPwpX5 c=1 sm=1 tr=0 ts=679257f4 a=A63vRkCvQnPFIg7+6liAYg==:117 a=A63vRkCvQnPFIg7+6liAYg==:17 a=sWKEhP36mHoA:10 a=r77TgQKjGQsHNAKrUKIA:9 a=M843YGZs0cIu-axzo0AA:9 a=QEXdDO2ut3YA:10 a=1wDIiH70AAAA:8 a=yxl6nbTewQ1H08c1hbkA:9 a=B2y7HmGcmWMA:10 a=uCsh6WI2SJRHIg0NT2Eg:22 X-CM-Envelope: MS4xfIl5BEh1VokyZmQigFeP2HTVxgySRHQMGtaSYHS01mYU10IxKmnKXvTpKhs6iHJQCRc3My4u/AsE4B0F9Ww7y86FjjtPwZvzTwA/bwC1UYeT++QJy9MC VVRQCJcR3EDfYqdtAz7ST2tOaxSe+rShhpDbrN3ioF3KGcl40wwjQWWeg0UtudQFMLGZfPUEiQhuZN4vIoR990/cidzXEI6se0U= X-AuthUser: david@pgbackrest.org List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------UA8BIV200otwZ206Bn5qfIpx Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hackers, Currently check_recovery_target_timeline() converts any value that is not current, latest, or a valid integer to 0. So for example: recovery_target_timeline = 'currrent' results in the following error: FATAL: 22023: recovery target timeline 0 does not exist Since there is no range checking for uint32 (but there is a cast from unsigned long) this setting: recovery_target_timeline = '9999999999' results in the following error (on 64-bit): FATAL: 22023: recovery target timeline 1410065407 does not exist Improve by adding endptr checking to catch conversion errors and add range checking to exclude values < 2 and greater than UINT_MAX. I discovered this while testing on Postgres versions < 12 where recovery_target_timeline = 'current' sets the target timeline to 'latest', which is a pretty surprising result. I'm only noting it in case somebody is searching the archives since the versions in question are EOL. But that odd result made me wonder if Postgres >= 12 had a similar problem. While it is not quite so confusing as Postgres < 12 I think it still bears improving. The tests are probably excessive but I needed something to show that the verification works as expected. Regards, -David --------------UA8BIV200otwZ206Bn5qfIpx Content-Type: text/plain; charset=UTF-8; name="timeline-log-v1.patch" Content-Disposition: attachment; filename="timeline-log-v1.patch" Content-Transfer-Encoding: base64 RnJvbSBmMTRlMzBiMThjZGUyMTYxMzFiZDNlMDY5ZWU4ZWNkNWRhMzMwMWIwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBTdGVlbGUgPGRhdmlkQHBnbWFzdGVycy5u ZXQ+CkRhdGU6IEZyaSwgMjAgRGVjIDIwMjQgMTU6MTM6NTkgKzAwMDAKU3ViamVjdDogRml4 IGxvZ2dpbmcgZm9yIGludmFsaWQgcmVjb3ZlcnkgdGltZWxpbmUuCgpJZiB0aGUgcmVxdWVz dGVkIHJlY292ZXJ5IHRpbWVsaW5lIGlzIG5vdCByZWFjaGFibGUgdGhlIGxvZ2dlZCBjaGVj a3BvaW50IGFuZApUTEkgc2hvdWxkIHRvIGJlIHRoZSB2YWx1ZXMgcmVhZCBmcm9tIGJhY2t1 cF9sYWJlbCB3aGVuIGJhY2t1cF9sYWJlbCBpcwpwcmVzZW50LgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIHwgNiArKystLS0KIDEgZmlsZSBjaGFu Z2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCBjNjk5NGI3ODI4Mi4uOTlhZmQw MWJmMzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNv dmVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5j CkBAIC04NDQsMTMgKzg0NCwxMyBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRh ICpDb250cm9sRmlsZSwgYm9vbCAqd2FzU2h1dGRvd25fcHRyLAogCQkgKiB0bGlTd2l0Y2hQ b2ludCB3aWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBjaGVja3BvaW50J3MgdGltZWxpbmUg aXMKIAkJICogbm90IGluIGV4cGVjdGVkVExFcyBhdCBhbGwuCiAJCSAqLwotCQlzd2l0Y2hw b2ludCA9IHRsaVN3aXRjaFBvaW50KENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5UaGlz VGltZUxpbmVJRCwgZXhwZWN0ZWRUTEVzLCBOVUxMKTsKKwkJc3dpdGNocG9pbnQgPSB0bGlT d2l0Y2hQb2ludChDaGVja1BvaW50VExJLCBleHBlY3RlZFRMRXMsIE5VTEwpOwogCQllcmVw b3J0KEZBVEFMLAogCQkJCShlcnJtc2coInJlcXVlc3RlZCB0aW1lbGluZSAldSBpcyBub3Qg YSBjaGlsZCBvZiB0aGlzIHNlcnZlcidzIGhpc3RvcnkiLAogCQkJCQkJcmVjb3ZlcnlUYXJn ZXRUTEkpLAogCQkJCSBlcnJkZXRhaWwoIkxhdGVzdCBjaGVja3BvaW50IGlzIGF0ICVYLyVY IG9uIHRpbWVsaW5lICV1LCBidXQgaW4gdGhlIGhpc3Rvcnkgb2YgdGhlIHJlcXVlc3RlZCB0 aW1lbGluZSwgdGhlIHNlcnZlciBmb3JrZWQgb2ZmIGZyb20gdGhhdCB0aW1lbGluZSBhdCAl WC8lWC4iLAotCQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKENvbnRyb2xGaWxlLT5jaGVja1Bv aW50KSwKLQkJCQkJCSAgIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5UaGlzVGltZUxp bmVJRCwKKwkJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhDaGVja1BvaW50TG9jKSwKKwkJCQkJ CSAgIENoZWNrUG9pbnRUTEksCiAJCQkJCQkgICBMU05fRk9STUFUX0FSR1Moc3dpdGNocG9p bnQpKSkpOwogCX0KIAotLSAKMi4zNC4xCgo= --------------UA8BIV200otwZ206Bn5qfIpx--