From nobody Thu Oct 2 08:21:00 2025 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ccl9n1QGyz69KVP; Thu, 02 Oct 2025 08:21:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ccl9m57QMz4NXh; Thu, 02 Oct 2025 08:21:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759393260; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Jq7wMQKpjm/QjV47/pcTeB+aaLxNNBeDCiBn222jCxA=; b=U5TicYbXBRMiXuVaMlnOhvCYc2n1mgZzK6Immjylj0K7YtKxXEm3irXyH6SsLUKbwnvf0f 5wWovA3I/4oGhd5Fyve8wJn2YRHWR80clG1xB8acKezUNf45j7R8wmBFHA2dPlFFSBi819 XfmmflgMW/MeTSnjunFcSrjT6l4VWNO9nVMNsp3DX3FopP8sRDLkeRIKuMQXf6tdp7syjl rPIIQKz1BUNwrcRS6c5P4XwmnMtc329PnJLHsKFBM3uG8kUBPMHjX41YiYYwHtC/VAn2C4 LFvwi1SY9/g2GeqjW2HIdJNtx63SreCLoMOOuxpOXYesH5PyiPKLuuIF8HOFgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759393260; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Jq7wMQKpjm/QjV47/pcTeB+aaLxNNBeDCiBn222jCxA=; b=rDcSAXmxHgQFkvlNqDg1XShAqnpXwcwEctkZOCm9rlDsxLaIA5f1Dqih/+t8+L++i7dUCz jRhTTY/ZO3Deu0Mrf4HU3NwaI3hXVfmB6j42Q1sxmmWclQwtjy8L9nQcQE6z6b/FEjO3VE amBpSvfbMuJkzfOGqcnUzLtFkDbkjn5HMiXeX636j9b2jYsXkrw0z5Qh7D2/j3DdmUBR1B D9H8ADi/eFBazl0dyxbGNueQ6apKtMfa7Tt6BImyDmj/+tBVF94+JA8E3daluygjFMRM2u wmTQHqMgQhCowWDEBdbgWfKi6mQ8LnM70Ng6gjGZr3X7JuhX/Q/l/dzg41sxOg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1759393260; a=rsa-sha256; cv=none; b=lw3Mj6M9wN6QWeBvNRD8KRVrNbSS8a2nNUZB7tAsI6/EKZzouyL9eKMqdDRMeBtEQgfDdy 26PvWozdaZHsKX2RP4z+kGFwUEifWp5iZvRPVuO3sF1/Vd5umt1mvZhlRBFQ/6YYobTYp+ tNjBlHfyLi/diFnQQPx6xnQuTo7Nqb0kK5JpybFmHSp4dirTdqMpXoWqHuJaE59dmEs9x1 49ZFqZAAF5HDo/qtAYc4z+py+eyhAqkbsIqa+UaJPdN2FkCRrkjpk3XXqxnxRFpLVYnL5/ zxJPAbAiOqR4rhWMGrKcADzuEYEeZGW4HiwuiikZ3BNI1VR8x9TbQ/Z0IyaAQQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ccl9m4jfDz10Kq; Thu, 02 Oct 2025 08:21:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 5928L0LC024056; Thu, 2 Oct 2025 08:21:00 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 5928L0vM024053; Thu, 2 Oct 2025 08:21:00 GMT (envelope-from git) Date: Thu, 2 Oct 2025 08:21:00 GMT Message-Id: <202510020821.5928L0vM024053@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dag-Erling =?utf-8?Q?Sm=C3=B8rgrav?= Subject: git: ff997dde8c93 - stable/14 - libucl: Fix bugs in C-style comment parser List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: ff997dde8c93d07dc3f41afc502d96876a36abde Auto-Submitted: auto-generated The branch stable/14 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=ff997dde8c93d07dc3f41afc502d96876a36abde commit ff997dde8c93d07dc3f41afc502d96876a36abde Author: Dag-Erling Smørgrav AuthorDate: 2025-10-01 09:28:30 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2025-10-02 07:28:58 +0000 libucl: Fix bugs in C-style comment parser When an asterisk is encountered inside a C-style comment, we first check if there is at least one more character left in the buffer, and if that character is a slash, which would terminate the comment. If that is not the case, the next two characters are consumed without being inspected. If one of those is a double quote, or the initial asterisk of an asterisk-slash pair, we end up misparsing the comment. MFC after: 3 days Reviewed by: kevans, bofh Differential Revision: https://reviews.freebsd.org/D52808 (cherry picked from commit b5e2bd5ef38181ce4a445ec19f1fa5cb6c8ea692) --- contrib/libucl/src/ucl_parser.c | 77 ++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/contrib/libucl/src/ucl_parser.c b/contrib/libucl/src/ucl_parser.c index 6be16d12169c..728cd6381056 100644 --- a/contrib/libucl/src/ucl_parser.c +++ b/contrib/libucl/src/ucl_parser.c @@ -164,51 +164,50 @@ start: } } } - else if (chunk->remain >= 2 && *p == '/') { - if (p[1] == '*') { - beg = p; - ucl_chunk_skipc (chunk, p); - comments_nested ++; - ucl_chunk_skipc (chunk, p); - - while (p < chunk->end) { - if (*p == '"' && *(p - 1) != '\\') { - quoted = !quoted; - } - - if (!quoted) { - if (*p == '*') { - ucl_chunk_skipc (chunk, p); - if (chunk->remain > 0 && *p == '/') { - comments_nested --; - if (comments_nested == 0) { - if (parser->flags & UCL_PARSER_SAVE_COMMENTS) { - ucl_save_comment (parser, beg, p - beg + 1); - beg = NULL; - } - - ucl_chunk_skipc (chunk, p); - goto start; - } - } - ucl_chunk_skipc (chunk, p); - } - else if (p[0] == '/' && chunk->remain >= 2 && p[1] == '*') { - comments_nested ++; - ucl_chunk_skipc (chunk, p); - ucl_chunk_skipc (chunk, p); - continue; + else if (chunk->remain >= 2 && *p == '/' && p[1] == '*') { + beg = p; + comments_nested ++; + ucl_chunk_skipc (chunk, p); + ucl_chunk_skipc (chunk, p); + while (p < chunk->end) { + if (*p == '"' && *(p - 1) != '\\') { + /* begin or end double-quoted string */ + quoted = !quoted; + ucl_chunk_skipc (chunk, p); + } + else if (quoted) { + /* quoted character */ + ucl_chunk_skipc (chunk, p); + } + else if (chunk->remain >= 2 && *p == '*' && p[1] == '/') { + /* end of comment */ + ucl_chunk_skipc (chunk, p); + ucl_chunk_skipc (chunk, p); + comments_nested --; + if (comments_nested == 0) { + if (parser->flags & UCL_PARSER_SAVE_COMMENTS) { + ucl_save_comment (parser, beg, p - beg + 1); + beg = NULL; } + goto start; } - + } + else if (chunk->remain >= 2 && *p == '/' && p[1] == '*') { + /* start of nested comment */ + comments_nested ++; + ucl_chunk_skipc (chunk, p); ucl_chunk_skipc (chunk, p); } - if (comments_nested != 0) { - ucl_set_err (parser, UCL_ENESTED, - "unfinished multiline comment", &parser->err); - return false; + else { + /* anything else */ + ucl_chunk_skipc (chunk, p); } } + if (comments_nested != 0) { + ucl_set_err (parser, UCL_ENESTED, + "unfinished multiline comment", &parser->err); + return false; + } } if (beg && p > beg && (parser->flags & UCL_PARSER_SAVE_COMMENTS)) {