aboutsummaryrefslogtreecommitdiff
path: root/contrib/libucl
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2025-10-01 09:28:30 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2025-10-01 09:28:56 +0000
commitb5e2bd5ef38181ce4a445ec19f1fa5cb6c8ea692 (patch)
tree867576df8cf48a426a9dc41f2691207836c187fa /contrib/libucl
parent7bc6ec1a255da6678a72330d65a1f320de538727 (diff)
Diffstat (limited to 'contrib/libucl')
-rw-r--r--contrib/libucl/src/ucl_parser.c77
1 files 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)) {