From patchwork Mon Jul 20 14:59:29 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 27403 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id ADC6CC3301 for ; Mon, 20 Jul 2026 15:00:00 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 426C767E7A; Mon, 20 Jul 2026 17:00:00 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="cL2KVdYI"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 723F867E59 for ; Mon, 20 Jul 2026 16:59:47 +0200 (CEST) Received: from [192.168.1.106] (mob-5-90-63-152.net.vodafone.it [5.90.63.152]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8C4BA1CE4; Mon, 20 Jul 2026 16:58:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1784559528; bh=iym+xPwKbdXJhKWKBEgCczMlRqIVu/lwQ9sWa5xwMiM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=cL2KVdYIt30MwF0jOEgPhbi7x7dsYAW1Dz6uGTE0rxTepJ9XG+gdsi0w25vxc4O6p Wtpda0W7yeVcqSx8lqDkBlwZ25T4myBZOYlXHKFwnCI/i6/ZhG+RweAqbqB5MzAhj+ IpPVEZFzP3rI/GwMwa0JkZs8FZODwqluq793OzcA= From: Jacopo Mondi Date: Mon, 20 Jul 2026 16:59:29 +0200 Subject: [PATCH v6 11/31] ipa: libipa: lsc_polynomial: Fix polynomial parsing error MIME-Version: 1.0 Message-Id: <20260720-libipa-algorithms-v6-11-ececb73f97cb@ideasonboard.com> References: <20260720-libipa-algorithms-v6-0-ececb73f97cb@ideasonboard.com> In-Reply-To: <20260720-libipa-algorithms-v6-0-ececb73f97cb@ideasonboard.com> To: libcamera-devel@lists.libcamera.org, Stefan Klug , Milan Zamazal Cc: Jacopo Mondi , Kieran Bingham X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1449; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=iym+xPwKbdXJhKWKBEgCczMlRqIVu/lwQ9sWa5xwMiM=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBqXjfVuoMw8MRDh/cnraXJOFEmNhkcJcRwMRPsk CBp7O1J3taJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCal431QAKCRByNAaPFqFW PEy/D/4/AIUX6KFle4czQIDfm0NkpWcaMEwb3dYYERR+JPf6t8MlqWLwgO7U9zLNU3wVEO+V5Yv xkUPzV+Fo5xqmS/dC/NSjbut47I1UopGPIVmEk2tmEI8LBY7RgoWOUbh5Jf0O//UUpbrjxNXzRS Sy5p0ZvvYp+wYnCb4b1Ss59rG9GQSih/NCQR+znbEmimAqVypIJTlM3goAGgBOHdFHo2/PWLC+0 6EGyCtXPQezdBiJB3r0Nx8RIm3f60+j7OjL6KHK7Kdsyvk/BPLN3fW85l1JaDIUamwX4NJp5x+s UynqejYe9Hm4JmKumwhxUd/r32Kn/dAic17yOy2+0YVps5Z/1EWpLkaoCrffc1YRdizJoTwXis+ mURYwShrtNwL/HML82dhJkGCtC82GE/VCS83KT/SkmkLzU79Au68UeilQLAEyDYfAIQl/GrArtQ iPNK5xhnZa7TuEynjacaBmUAAwacncsEbTKUTUoiei8YD4q05K9uMvB8AU41ur+lNGQ2R4MDU3Y lixiz5KCMMbJX8PeoEVw9UD5ualni5nkWEgA69nL+FiY00bCvNhR8Go5zo+OsJLrp945VLrExij r2sz7gg1C6kilfRcjXL7mwM3zFbqSTs/S3Xwq+SNxZmgQArfWb6pt4dzXte/zrtJgFFsteM2hom AgV8pjcGXkMHnlw== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" If any of the polynomial component is missing in the tuning file the ValueNode::Accessor specialization emits an error message but continues and dereferences a potentially invalid object. Fix it by returning std::nullopt if a polynomial component is missing. The caller already checks if the returned value is valid or not, causing the algorithm initialization to fail if the tuning file is invalid. Suggested-by: Milan Zamazal Signed-off-by: Jacopo Mondi Reviewed-by: Kieran Bingham Reviewed-by: Stefan Klug --- src/ipa/libipa/lsc_polynomial.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ipa/libipa/lsc_polynomial.h b/src/ipa/libipa/lsc_polynomial.h index d7d9ae42e360..a0d27c4b21d6 100644 --- a/src/ipa/libipa/lsc_polynomial.h +++ b/src/ipa/libipa/lsc_polynomial.h @@ -94,9 +94,11 @@ struct ValueNode::Accessor { std::optional k3 = obj["k3"].get(); std::optional k4 = obj["k4"].get(); - if (!(cx && cy && k0 && k1 && k2 && k3 && k4)) + if (!(cx && cy && k0 && k1 && k2 && k3 && k4)) { LOG(LscPolynomial, Error) << "Polynomial is missing a parameter"; + return std::nullopt; + } return ipa::LscPolynomial(*cx, *cy, *k0, *k1, *k2, *k3, *k4); }