Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oNGIT-0000Yz-Ty for pgsql-hackers@arkaria.postgresql.org; Sun, 14 Aug 2022 16:17:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oNGIS-0002kN-EH for pgsql-hackers@arkaria.postgresql.org; Sun, 14 Aug 2022 16:17:04 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oNGIR-0002kD-7b for pgsql-hackers@lists.postgresql.org; Sun, 14 Aug 2022 16:17:04 +0000 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oNGIL-0002Xy-6J for pgsql-hackers@lists.postgresql.org; Sun, 14 Aug 2022 16:17:02 +0000 Received: by mail-wm1-x32e.google.com with SMTP id j26so634152wms.0 for ; Sun, 14 Aug 2022 09:16:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:from:to:cc; bh=LbiBVJCVOYDybwbeiEkuWbRNaO7fLFn8OhI2SJzzS40=; b=OZ64/P/S6CpWTsJvrtW/+6KAd3C/F8z52omWWkxjXjNGPDlmwN3PmNLr5aA8Roq8kE YpobChnfqzTQZ6bvxpomgFQ5Z5/gHI47Ok65t4GbbgclcD5w8D4Qc8J1SfDQO+4SUfNr fh9c6LLY43h0FZpjB6PndLuih6pTsW/nk0pepjOpOSooOHKOk0U2v7f4H7ldvHOIUr3B AdJ0hShgmw8a/nK1eHAXcAVKj8rXdFzvwmjEjPMvoZGxgRsKmrpiZvGy6TmazS8Y4nx2 hUNSZjZ3h3Wp7AD/V9L2Nl/TkTsTbYZSlCzkpcNpEi1o+ywGNy/rCbozj2iLiph2i4OU rIdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc; bh=LbiBVJCVOYDybwbeiEkuWbRNaO7fLFn8OhI2SJzzS40=; b=7xeO4SliwK2mse7OgAct4KYR/Ym1ayw6JikwuV6lTOdetvvWSpFh+aE+CbloHsmip5 7+GDkOKvYJT+bmgZ18vvP0ZIhTYiMhVFppiTKaiUETczIrN0PduMDuTDp8GNkR0PwecM /w6CKDuGC34A5OAqV5EqLRYF/uaPqf7R2lIs69Kn8RjOoU+bzGLXtC9FHmpgPv1bCWr2 lXGKSsFV8VAxuNdvIlItM6fTOyg2gEYSW55JfaWhrBENpqZfk2nBQnOGLr/EFpb5B7Sc CEtDh9HW8vfOx//vpMth/s3TKU3Eo9rnBuBPDz7UPffdxF2VvkZBzEHjEf4ZPU1Gxhao +vpQ== X-Gm-Message-State: ACgBeo0OW4GnFGcTsUz5TN6CufhMAiJAjZSJ4ihFPRo2M/IDs4W7lXWC p/d+QgDU+wlLl3tLGS/mKUn3BKlNXRNrYE3ONXIk7lNbnLl4jjt5aB3s3k1YrVZlUuf4nO09Xr/ 3hre+JVCZu23aXKtllHiqsg+yypg6YeqmDeMItRHEHLN0ycc1lDLVQPjt24/vldn39pM0zYJNpe k980RourS1t0BnDRfdcN6hLfTjXsz3cTP1RQoll7tlcwj/Fq7QEHnmrQ7SVSwLvgHmkNlIVBgfx 8i5f0prunq20PA+0tGQ5LhkkKFGcMd7VEprrZUZhOdQo1p05gw2Ww== X-Google-Smtp-Source: AA6agR4qRrZXyrJlvMQCW4UhleR1kT3UIxXsU8priJiGb1NDXXXnqufFJVxtsPVEmIxoXy7VsryeSw== X-Received: by 2002:a05:600c:1e29:b0:3a5:ba55:608a with SMTP id ay41-20020a05600c1e2900b003a5ba55608amr11289197wmb.187.1660493815002; Sun, 14 Aug 2022 09:16:55 -0700 (PDT) Received: from [10.137.0.17] (ip-86-49-229-52.bb.vodafone.cz. [86.49.229.52]) by smtp.gmail.com with ESMTPSA id q65-20020a1c4344000000b003a327b98c0asm6851571wma.22.2022.08.14.09.16.54 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 14 Aug 2022 09:16:54 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------LGtEM0oH00NJq6s0mYAWUOFS" Message-ID: Date: Sun, 14 Aug 2022 18:16:53 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Content-Language: en-US To: PostgreSQL Hackers From: Tomas Vondra Subject: bogus assert in logicalmsg_desc X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 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. --------------LGtEM0oH00NJq6s0mYAWUOFS Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, while experimenting with logical messages, I ran into this assert in logicalmsg_desc: Assert(prefix[xlrec->prefix_size] != '\0'); This seems to be incorrect, because LogLogicalMessage does this: xlrec.prefix_size = strlen(prefix) + 1; So prefix_size includes the null byte, so the assert points out at the first payload byte. And of course, the check should be "==" because we expect the byte to be \0, not the other way around. It's pretty simple to make this crash by writing a logical message where the first payload byte is \0, e.g. like this: select pg_logical_emit_message(true, 'a'::text, '\x00'::bytea); and then running pg_waldump on the WAL segment. Attached is a patch addressing this. This was added in 14, so we should backpatch to that version. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------LGtEM0oH00NJq6s0mYAWUOFS Content-Type: text/x-patch; charset=UTF-8; name="logicalmsgdesc-fix.patch" Content-Disposition: attachment; filename="logicalmsgdesc-fix.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsbXNnZGVz Yy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxtc2dkZXNjLmMKaW5k ZXggMDk5ZTExYTg0ZTcuLjA4ZTAzYWEzMGQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvbG9naWNhbG1zZ2Rlc2MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MvbG9naWNhbG1zZ2Rlc2MuYwpAQCAtMjgsNyArMjgsNyBAQCBsb2dpY2Fs bXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQlj aGFyCSAgICptZXNzYWdlID0geGxyZWMtPm1lc3NhZ2UgKyB4bHJlYy0+cHJlZml4X3NpemU7 CiAJCWNoYXIJICAgKnNlcCA9ICIiOwogCi0JCUFzc2VydChwcmVmaXhbeGxyZWMtPnByZWZp eF9zaXplXSAhPSAnXDAnKTsKKwkJQXNzZXJ0KHByZWZpeFt4bHJlYy0+cHJlZml4X3NpemUg LSAxXSA9PSAnXDAnKTsKIAogCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLCBwcmVmaXgg XCIlc1wiOyBwYXlsb2FkICglenUgYnl0ZXMpOiAiLAogCQkJCQkJIHhscmVjLT50cmFuc2Fj dGlvbmFsID8gInRyYW5zYWN0aW9uYWwiIDogIm5vbi10cmFuc2FjdGlvbmFsIiwK --------------LGtEM0oH00NJq6s0mYAWUOFS--