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 1rCt0E-0004M8-Ag for pgsql-bugs@arkaria.postgresql.org; Tue, 12 Dec 2023 03:00:10 +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 1rCt0C-000yOI-Ro for pgsql-bugs@arkaria.postgresql.org; Tue, 12 Dec 2023 03:00:08 +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 1rCt0C-000yNh-IW for pgsql-bugs@lists.postgresql.org; Tue, 12 Dec 2023 03:00:08 +0000 Received: from mail-lf1-x131.google.com ([2a00:1450:4864:20::131]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rCt0A-009y2R-2r for pgsql-bugs@lists.postgresql.org; Tue, 12 Dec 2023 03:00:07 +0000 Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-50bffb64178so6147422e87.2 for ; Mon, 11 Dec 2023 19:00:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702350003; x=1702954803; darn=lists.postgresql.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=qfUxaEq+qLQde2qMFmYp+hQtDy+2h9LZoUERU45LU/A=; b=hFdmZYQDE80duo9JIGI8mWc/Lx8kqNWIt1f45F4ZhukxDYwSNuxm6K1IPYKXuFOouP /C/WaPWy58TUTBQBkwFyyeOfx+4geMHopAv7QRnAg5m9EsmEP+aTmRSB8+Xm0oiQ+RvE NcoVgkGXCTHffC9jsPjv87ttsound1Acs3eVBsN9T5wdVLZNeQbMgdvFfKTmewi5QqQs CEE9eO3urWtCWv1k6g6Zv5wEsm9aONaVt8p2wPMjU6xo6qThSyajRoN8oJG4oLj86/ao qshku5iRXcY5TcXM2W9/iD3CEt5YXVB6WwEX/BxwgJ+zSO88F5SUA/HWKzo6KxRvg3Ms bwHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702350003; x=1702954803; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=qfUxaEq+qLQde2qMFmYp+hQtDy+2h9LZoUERU45LU/A=; b=b6qhm59B7okS/7Sve+67apQmMP8KpaHOdLL8anFDrLfyq19q83UZg1V/AjKTMvM5oh iZfUCCv3eeA47umFGYpga9CEpYoZnL94rsKjpnEZHYERDAd7XkNWH44zhTQaVjca1cGO Uof/CwrDnDs580goOLD24IW3HnVhtcr9m86YMu1i7khPtqTp/26ESF51ShUF+sdlEZ3a Sze2HtUTq70FuDGPooeftpiNn2JuBLAyfupwvuIh2CtiPCHL87UjOJVJdZECDjuIRHDE EfLh5T0xmY09MZtmdFY4P2Mib3/zUNfyZJfatG/UhY8X7evijJ85q1J+78ISfokC7hma V18Q== X-Gm-Message-State: AOJu0YxTQSkGBdO1voNSpAxrMQvEwSf2qQcL9gNnp/w0BsuaOEBCu9gX QjBD4lack1Kcf0JWGpvU8Ww= X-Google-Smtp-Source: AGHT+IGbUtQtaNFjTvkp4XswGRtMsCMc5XxMN/5Gvwnt0rlL+247YLETdFdmW3RuJ+MCkhn2BGcHfA== X-Received: by 2002:a05:6512:b9f:b0:50b:c57e:1418 with SMTP id b31-20020a0565120b9f00b0050bc57e1418mr3408005lfv.16.1702350003070; Mon, 11 Dec 2023 19:00:03 -0800 (PST) Received: from [1.0.0.7] ([178.155.25.25]) by smtp.gmail.com with ESMTPSA id k10-20020a192d0a000000b0050bf03c2104sm1261105lfj.182.2023.12.11.19.00.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 11 Dec 2023 19:00:01 -0800 (PST) Message-ID: Date: Tue, 12 Dec 2023 06:00:00 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: BUG #18240: Undefined behaviour in cash_mul_flt8() and friends Content-Language: en-US To: Tom Lane , Michael Paquier Cc: pgsql-bugs@lists.postgresql.org References: <18240-c5da758d7dc1ecf0@postgresql.org> <2171714.1702307153@sss.pgh.pa.us> From: Alexander Lakhin In-Reply-To: <2171714.1702307153@sss.pgh.pa.us> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hello Michael and Tom, 11.12.2023 18:05, Tom Lane wrote: > Michael Paquier writes: >> On Mon, Dec 11, 2023 at 06:00:02AM +0000, PG Bug reporting form wrote: >>> The following multiplication: >>> SELECT 1_000_000_000::money * 1_000_000_000::float8; >>> gives the incorrect result: >>> -$92,233,720,368,547,758.08 >> Yep, good catch. Reproduced here. > Yeah, approximately none of cash.c pays any attention to the risks > of overflow/underflow. Improving that situation would be a good > finger exercise for some aspiring hacker, perhaps. Although I bet > somebody will ask again why it is that we continue to support the > money type. Thank you for looking at that! I've tried a simple operator-testing query (with already known problematic operators spelled out): SELECT format('SELECT ''2000000000''::%s %s ''2000000000''::%s;',               tl.typname, oprname, tr.typname) FROM pg_operator               INNER JOIN pg_type tl ON tl.oid = oprleft               INNER JOIN pg_type tr ON tr.oid = oprright WHERE ( /* 2000000000 xxx 2000000000 */ NOT(tl.typname = 'money' AND oprname = '*' AND tr.typname = 'float4') AND NOT(tl.typname = 'float4' AND oprname = '*' AND tr.typname = 'money') AND NOT(tl.typname = 'money' AND oprname = '*' AND tr.typname = 'float8') AND NOT(tl.typname = 'float8' AND oprname = '*' AND tr.typname = 'money') AND NOT(tl.typname = 'int4' AND oprname = '<<' AND tr.typname = 'int4') AND NOT(tl.typname = 'int4' AND oprname = '>>' AND tr.typname = 'int4') AND NOT(tl.typname = 'int8' AND oprname = '<<' AND tr.typname = 'int4') AND NOT(tl.typname = 'int8' AND oprname = '>>' AND tr.typname = 'int4') AND /* 2000000000 xxx 0.0000000002 */ NOT(tl.typname = 'money' AND oprname = '/' AND tr.typname = 'float4') AND NOT(tl.typname = 'money' AND oprname = '/' AND tr.typname = 'float8') AND /* 32767 xxx 32767 */ NOT(tl.typname = 'int2' AND oprname = '<<' AND tr.typname = 'int4') AND NOT(tl.typname = 'int2' AND oprname = '>>' AND tr.typname = 'int4') ) \gexec and found no new UBSan-detected anomalies with "extraordinary" numbers. Best regards, Alexander