Skip to content

Conversation

edsiper
Copy link
Member

@edsiper edsiper commented Aug 20, 2025

Short story: 2.81x performance improvement when parsing JSON

bin/flb-bench-pack_json -f ../benchmarks/utf8_surrogate_bench_10k.ndjson -i 100
jsmn records count: 10000
Comparing encoders output: ok

Benchmarking JSON packing to msgpack
-------------------------------------------

Iterations   : 100
JSON size    : 2477936 bytes
-------------------------------------------

-------------------------------------------
old encoder  : 1677442356 ns  | 140.88 MiB/s
new encoder  : 597692481 ns  | 395.38 MiB/s
-------------------------------------------
Speedup      : 2.81x  (time -64.37%)

List of things in this PR:

  • new YYJSON library (faster JSON library)
  • YYJSON patch to support bad unicode replacement with U+FFFD (WIP here: Add Unicode replacement and surrogate tolerance flags ibireme/yyjson#227)
  • New flb_pack_json.c interface, provides a wrapper to choose the backend: jsmn or yyson
  • new benchmarks/ directory with a tool to test both JSON parser implementations (note: we are not deprecating jsmn which is a tokenizer)

what is pending ?

  • do a full replacement or migrate components by part, e.g:
    • flb_mp.c
    • flb_pack_json.c

Fluent Bit is licensed under Apache 2.0, by submitting this pull request I understand that this code will be released under the terms of that license.

Summary by CodeRabbit

  • New Features

    • Added an alternative high-performance JSON packing backend (YYJSON) and a selectable packing API.
    • Added a benchmark tool to compare JSON packing backends and report throughput.
  • Documentation

    • Bundled comprehensive API and HTML documentation for the integrated JSON library and build/test guidance.
  • Chores

    • Vendored the YYJSON library and its CI/docs assets.
    • Added a build toggle to enable/disable benchmarks (enabled automatically for development builds).

Copy link

coderabbitai bot commented Aug 20, 2025

Walkthrough

Adds vendored yyjson 0.12.0 (sources, CMake, docs, CI), integrates it into the build, and introduces a new JSON packing extension with a YYJSON backend option. Adds a FLB_BENCHMARKS build option and a benchmarks subproject with a new flb-bench-pack_json executable comparing JSMN and YYJSON packing.

Changes

Cohort / File(s) Change summary
Top-level build & config
CMakeLists.txt, cmake/libraries.cmake, cmake/headers.cmake
Adds FLB_BENCHMARKS option (default No; enabled in FLB_DEV), declares FLB_PATH_LIB_YYJSON, adds yyjson include dir, includes yyjson subdirectory, and guards benchmarks with if(FLB_BENCHMARKS).
Benchmarks
benchmarks/CMakeLists.txt, benchmarks/pack_json.c
Adds flb-bench-pack_json target built from pack_json.c; links to fluent-bit-static and thread libs. New benchmark reads JSON file, verifies encoder outputs, times JSMN vs YYJSON via flb_pack_json_ext, and reports throughput.
Public headers / API
include/fluent-bit/flb_pack.h, include/fluent-bit/flb_pack_json.h
Adds YYJSON-based packing prototypes and an extensible flb_pack_json_ext API with flb_pack_opts allowing backend selection (FLB_PACK_JSON_BACKEND_JSMN, FLB_PACK_JSON_BACKEND_YYJSON) and optional state. Includes <yyjson.h> where appropriate.
Vendored yyjson release
lib/yyjson-0.12.0/...
Adds yyjson v0.12.0 vendored tree: source, CMake build (library, tests, fuzzers, docs), license, README, CHANGELOG, SwiftPM manifest, CI workflows, Doxygen-generated HTML/CSS/JS docs, and ancillary files (.gitignore, .gitattributes, issue templates).
Docs and doc tooling
lib/yyjson-0.12.0/doc/..., lib/yyjson-0.12.0/doc/doxygen/html/...
Large set of generated Doxygen files (HTML, JS, CSS) and doc sources (API.md, BuildAndTest.md, DataStructure.md, Performance.md) added as part of the vendored package.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant Bench as flb-bench-pack_json
  participant FB as flb_pack_json_ext
  participant JSMN as Encoder:JSMN
  participant YYJ as Encoder:YYJSON

  User->>Bench: invoke -f <json> [-i N]
  Bench->>FB: flb_pack_json_ext(json,len, opts.backend=JSMN)
  FB-->>JSMN: dispatch to JSMN backend
  JSMN-->>FB: out_buf,size,root_type
  FB-->>Bench: result1

  Bench->>FB: flb_pack_json_ext(json,len, opts.backend=YYJSON)
  FB-->>YYJ: dispatch to YYJSON backend
  YYJ-->>FB: out_buf,size,root_type
  FB-->>Bench: result2

  Bench->>Bench: compare outputs
  alt match
    Bench->>Bench: loop N iterations: time JSMN and YYJSON encodes
    Bench->>Bench: compute MiB/s, ratios, report
  else mismatch/error
    Bench-->>User: report error and exit
  end
Loading
sequenceDiagram
  autonumber
  participant Caller
  participant API as flb_pack_json_ext
  participant J as JSMN
  participant Y as YYJSON

  Caller->>API: json,len,out*,opts{backend,state}
  alt opts.backend == JSMN
    API->>J: pack json
    J-->>API: out_buf,out_size,root_type,consumed
  else opts.backend == YYJSON
    API->>Y: pack json
    Y-->>API: out_buf,out_size,root_type,consumed
  end
  API-->>Caller: rc, outputs
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~30 minutes

Suggested reviewers

  • koleini
  • fujimotos

Poem

A rabbit taps keys with a benchmarking grin,
New yyjson burrows, let the timings begin! ⏱️
JSMN hops left, YYJSON darts right—
Pack, compare, sprint through the byte-night.
Carrots for speedups, builds snug and fun. 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title is concise and accurately reflects the primary change: a significant performance improvement in the JSON packing/parsing ("pack") path (~2.8x) and is scoped to the relevant subsystem. It maps directly to the PR contents (YYJSON backend, flb_pack_json wrapper, and benchmark results) and is specific enough for a reviewer scanning history.
✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch pack-json-yyjson

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@edsiper edsiper added this to the Fluent Bit v4.1 milestone Aug 20, 2025
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 22

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
lib/yyjson-0.12.0/doc/DataStructure.md (1)

90-96: Fix grammar and duplication in memory management section

Two issues:

  • “When a document it is no longer needed” → “When a document is no longer needed”.
  • “document and and cannot be freed” → “document and cannot be freed”.
-A JSON document (`yyjson_doc`, `yyjson_mut_doc`) is responsible for managing the memory of all its JSON values and strings. When a document it is no longer needed, it is important for the user to call `yyjson_doc_free()` or `yyjson_mut_doc_free()` to free the memory associated with it.
+A JSON document (`yyjson_doc`, `yyjson_mut_doc`) manages the memory of all its JSON values and strings. When a document is no longer needed, the user should call `yyjson_doc_free()` or `yyjson_mut_doc_free()` to free the associated memory.
@@
-A JSON value (`yyjson_val`, `yyjson_mut_val`) has the same lifetime as its document. The memory is managed by its
- document and and cannot be freed independently.
+A JSON value (`yyjson_val`, `yyjson_mut_val`) has the same lifetime as its document. The memory is managed by its
+ document and cannot be freed independently.
lib/yyjson-0.12.0/doc/doxygen/html/doxygen-awesome.css (1)

30-2682: Exclude Doxygen‐generated CSS/JS and markdown from linters

To avoid false‐positives on the vendored documentation files under lib/yyjson-0.12.0/doc, please add ignore patterns for Biome, ESLint, and MarkdownLint at the repo root:

• Create or update .biome.json:

{
  "$schema": "https://biomejs.dev/schemas/1.7.0/schema.json",
  "files": {
    "ignore": [
      "lib/yyjson-0.12.0/doc/doxygen/html/**/*.css",
      "lib/yyjson-0.12.0/doc/doxygen/html/**/*.js"
    ]
  }
}

• Create or update .eslintignore:

# Ignore Doxygen-generated HTML/CSS/JS
lib/yyjson-0.12.0/doc/doxygen/html/**

• Create or update .markdownlintignore:

# Ignore vendored markdown in yyjson docs
lib/yyjson-0.12.0/doc/**/*.md

These globs match the two doxygen-awesome.css files you discovered (…/html/doxygen-awesome.css and …/theme/doxygen-awesome.css) and will prevent linter errors on all other .css, .js, and .md files in that path.
Re-run your CI suite to confirm that these patterns correctly exclude the vendor docs.

lib/yyjson-0.12.0/doc/doxygen/DoxyLayout.xml (1)

1-270: Remove duplicate visible attributes in DoxyLayout.xml

The heuristic check confirms duplicate visible="yes" attributes on two lines. Please apply the following edits and then run Doxygen locally to ensure no layout warnings remain:

Locations to fix:

  • lib/yyjson-0.12.0/doc/doxygen/DoxyLayout.xml: line 123
  • lib/yyjson-0.12.0/doc/doxygen/DoxyLayout.xml: line 171

Proposed diff:

--- a/lib/yyjson-0.12.0/doc/doxygen/DoxyLayout.xml
+++ b/lib/yyjson-0.12.0/doc/doxygen/DoxyLayout.xml
@@ -120,7 +120,7 @@
       <membergroups visible="yes"/>
@@ -168,7 +168,7 @@
       <membergroups visible="yes"/>

After applying, run your Doxygen configuration to verify no “duplicate attribute” warnings appear.

♻️ Duplicate comments (8)
lib/yyjson-0.12.0/doc/doxygen/html/dir_e68e8157741866f444e17edd764ebbae.html (1)

1-125: Same note as other Doxygen HTML: exclude from repo/install; mark as generated

This is another generated doc page. Please apply the repo hygiene/exclusion guidance from the earlier comment on lib/yyjson-0.12.0/doc/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html.

lib/yyjson-0.12.0/doc/doxygen/html/search/all_0.js (1)

1-41: OK to vendor as documentation asset; ensure it’s excluded from packaging

This is a generated search index JS for the docs. No runtime impact. Please ensure it’s excluded from source tarballs and install targets per prior comment.

lib/yyjson-0.12.0/doc/doxygen/html/search/all_1f.js (1)

1-16: Generated doc search index; apply the same exclusion policy

No runtime effect. Please keep excluded from install/packaging, as suggested earlier.

lib/yyjson-0.12.0/doc/doxygen/html/search/all_14.js (1)

1-29: Same packaging guidance applies to all Doxygen searchData files under lib/yyjson-0.12.0/doc/.

Please see my earlier comment in all_1.js about excluding generated docs from build/install and release artifacts.

lib/yyjson-0.12.0/doc/doxygen/html/search/functions_0.js (1)

1-327: Same packaging guidance applies here; this is a large payload.

This file enumerates the full public API (including deprecated aliases) for search. It’s sizeable; excluding from builds and releases will reduce repo noise and packaging size.

lib/yyjson-0.12.0/doc/doxygen/html/search/all_19.js (1)

1-21: Same packaging guidance applies to this index file.

Covers build/test and performance sections; still generated and non-executable. Exclude from build/install and releases as suggested earlier.

lib/yyjson-0.12.0/doc/doxygen/html/globals_defs.html (1)

1-185: Same note as other Doxygen HTML: exclude vendor docs from checks and distributions

Apply the same ignore/export guidance as suggested for globals_type.html to keep CI clean and the repository slimmer.

lib/yyjson-0.12.0/doc/doxygen/html/globals_vars.html (1)

1-187: Same note as other Doxygen HTML: exclude vendor docs from checks and distributions

Apply the same ignore/export guidance here. This helps avoid recurring noise in reviews and pipelines.

Comment on lines +1 to +9
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

#include <fluent-bit.h>
#include <fluent-bit/flb_pack_json.h>

#define ITERATIONS 100000
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Include missing headers for memcmp and fixed-width ints; drop unused macro

  • memcmp requires <string.h>.
  • Use <stdint.h> (and <inttypes.h> if printing 64-bit ints).
  • ITERATIONS is unused.
 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
 #include <unistd.h>
+#include <string.h>
+#include <stdint.h>
+#include <inttypes.h>
 
-#include <fluent-bit.h>
+#include <fluent-bit.h>
 #include <fluent-bit/flb_pack_json.h>
 
-#define ITERATIONS 100000
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <fluent-bit.h>
#include <fluent-bit/flb_pack_json.h>
#define ITERATIONS 100000
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
#include <stdint.h>
#include <inttypes.h>
#include <fluent-bit.h>
#include <fluent-bit/flb_pack_json.h>
🤖 Prompt for AI Agents
In benchmarks/pack_json.c around lines 1 to 9, the file is missing headers
required for memcmp and fixed-width integer types and defines an unused
ITERATIONS macro; add #include <string.h> for memcmp and #include <stdint.h>
(and #include <inttypes.h> if the code prints int64_t/uint64_t values) and
remove the unused #define ITERATIONS 100000 (or use it where intended).

Comment on lines +29 to +35
struct flb_pack_opts {
/* which backend to use (default, jsmn, yyjson) */
int backend;

/* optional: required only for JSMN in streaming mode */
struct flb_pack_state *state;
};
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Define an explicit DEFAULT backend to match the comment and avoid API footguns

The comment says “(default, jsmn, yyjson)” but there’s no DEFAULT constant. If a caller sets opts->backend = 0 expecting default, flb_pack_json_ext() (current impl) returns -1. Define FLB_PACK_JSON_BACKEND_DEFAULT = 0 and document that it resolves to YYJSON (or build-time default).

 #define FLB_PACK_JSON_BACKEND_JSMN    1
 #define FLB_PACK_JSON_BACKEND_YYJSON  2
+/* default selects the preferred backend; currently YYJSON */
+#define FLB_PACK_JSON_BACKEND_DEFAULT 0
 
 struct flb_pack_opts {
-    /* which backend to use (default, jsmn, yyjson) */
+    /* which backend to use (default=prefer YYJSON, jsmn, yyjson) */
     int backend;
 
     /* optional: required only for JSMN in streaming mode */
     struct flb_pack_state *state;
 };

Follow-up in src (for maintainers to update alongside this header):

/* src/flb_pack_json.c: treat DEFAULT as YYJSON */
if (!opts || opts->backend == FLB_PACK_JSON_BACKEND_DEFAULT) {
    backend = FLB_PACK_JSON_BACKEND_YYJSON;
} else {
    backend = opts->backend;
    state = opts->state;
}
🤖 Prompt for AI Agents
In include/fluent-bit/flb_pack_json.h around lines 29 to 35, the struct comment
lists a default backend but no DEFAULT constant exists, causing callers who set
backend=0 to be treated as invalid; add a new constant
FLB_PACK_JSON_BACKEND_DEFAULT = 0 and document that it maps to the
build-time/default implementation (resolve to YYJSON in code), update the
comment to reference the constant, and ensure callers and src/flb_pack_json.c
treat DEFAULT as meaning “use YYJSON (or configured default)” when opts is null
or backend equals FLB_PACK_JSON_BACKEND_DEFAULT.

#include <fluent-bit/flb_config.h>

#include <msgpack.h>
#include <yyjson.h>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Don’t expose yyjson in a public header; gate backend-specific prototypes to avoid downstream build breaks

Including <yyjson.h> in a public header leaks a third‑party dependency to all Fluent Bit SDK consumers. Many will compile out-of-tree plugins/apps against installed headers without yyjson in their include path. Also, the two *_yyjson symbols are backend-specific and should be guarded so they’re only visible when the feature is built.

Action:

  • Remove the unconditional include of <yyjson.h> (the prototypes don’t require yyjson types).
  • Wrap the *_yyjson prototypes with a feature macro (e.g., FLB_HAVE_YYJSON), consistent with how other optional deps are handled.

Proposed patch:

 #include <msgpack.h>
-#include <yyjson.h>
 
@@
-int flb_pack_json_yyjson(const char *js, size_t len, char **buffer, size_t *size,
-                         int *root_type, size_t *consumed);
-int flb_pack_json_recs_yyjson(const char *js, size_t len, char **buffer,
-                              size_t *size, int *root_type, int *out_records,
-                              size_t *consumed);
+#ifdef FLB_HAVE_YYJSON
+int flb_pack_json_yyjson(const char *js, size_t len, char **buffer, size_t *size,
+                         int *root_type, size_t *consumed);
+int flb_pack_json_recs_yyjson(const char *js, size_t len, char **buffer,
+                              size_t *size, int *root_type, int *out_records,
+                              size_t *consumed);
+#endif /* FLB_HAVE_YYJSON */

Why this matters:

  • Prevents accidental breaking changes for SDK users who don’t vendor or install yyjson headers.
  • Keeps third‑party dependencies out of the public surface unless explicitly enabled.

It’s also worth considering making the yyjson backend entry points private (internal header) and funneling external usage through the new flb_pack_json_ext API to avoid expanding the public surface with backend-specific names.

Run to check for any other public headers leaking yyjson.h, and to see if *_yyjson symbols are referenced outside benchmarks/tests:

Also applies to: 84-88


🏁 Script executed:

#!/bin/bash
# From repo root

echo "Public headers that include yyjson.h:"
rg -n -C0 --type=c -g 'include/**' -P '\<#\s*include\s*<yyjson\.h>'

echo
echo "Call sites of backend-specific APIs (should be limited to src/ and benchmarks/tests):"
rg -n -C2 -P 'flb_pack_json_yyjson\b|flb_pack_json_recs_yyjson\b' -g '!lib/yyjson-0.12.0/**'

Length of output: 6194


Gate yyjson prototypes behind FLB_HAVE_YYJSON

  • The unconditional #include <yyjson.h> has been removed from all public headers—no other include/** file pulls in yyjson.
  • In include/fluent-bit/flb_pack.h (lines 84–88), the declarations for flb_pack_json_yyjson and flb_pack_json_recs_yyjson remain unguarded. These must be wrapped in
    #ifdef FLB_HAVE_YYJSONprototypes#endif /* FLB_HAVE_YYJSON */
    to prevent build failures for SDK consumers without yyjson.
  • All definitions and call sites of these functions live in src/ and tests/, so gating only the public declarations is sufficient.

Proposed diff for include/fluent-bit/flb_pack.h:

--- a/include/fluent-bit/flb_pack.h
+++ b/include/fluent-bit/flb_pack.h
@@ -81,7 +81,8 @@ int flb_pack_json(const char *js, size_t len, char **buffer, size_t *size,
                        int *root_type, int *out_records, size_t *consumed);

- int flb_pack_json_yyjson(const char *js, size_t len, char **buffer, size_t *size,
-                          int *root_type, size_t *consumed);
- int flb_pack_json_recs_yyjson(const char *js, size_t len, char **buffer,
-                               size_t *size, int *root_type, int *out_records,
-                               size_t *consumed);
+ #ifdef FLB_HAVE_YYJSON
+ int flb_pack_json_yyjson(const char *js, size_t len, char **buffer, size_t *size,
+                          int *root_type, size_t *consumed);
+ int flb_pack_json_recs_yyjson(const char *js, size_t len, char **buffer,
+                               size_t *size, int *root_type, int *out_records,
+                               size_t *consumed);
+ #endif /* FLB_HAVE_YYJSON */

Optional: move backend-specific prototypes into an internal header and expose only the generic flb_pack_json_ext in the public API.

🤖 Prompt for AI Agents
In include/fluent-bit/flb_pack.h around lines 84–88, the prototypes for
flb_pack_json_yyjson and flb_pack_json_recs_yyjson are unguarded and will break
builds when yyjson is not available; wrap those prototype declarations with
#ifdef FLB_HAVE_YYJSON ... #endif /* FLB_HAVE_YYJSON */ so they are only exposed
when yyjson is present, preserving the existing signatures and comments, and
keep the rest of the public API unchanged (optionally move backend-specific
prototypes to an internal header and expose a generic flb_pack_json_ext if
desired).

Comment on lines +281 to +299
- name: Prepare
shell: bash
run: |
sudo apt-get update
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/g++-4.8_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libstdc++-4.8-dev_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8-base_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libgcc-4.8-dev_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/cpp-4.8_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libasan0_4.8.5-4ubuntu8_amd64.deb
sudo apt install ./gcc-4.8_4.8.5-4ubuntu8_amd64.deb \
./gcc-4.8-base_4.8.5-4ubuntu8_amd64.deb \
./libstdc++-4.8-dev_4.8.5-4ubuntu8_amd64.deb \
./cpp-4.8_4.8.5-4ubuntu8_amd64.deb \
./libgcc-4.8-dev_4.8.5-4ubuntu8_amd64.deb \
./libasan0_4.8.5-4ubuntu8_amd64.deb \
./g++-4.8_4.8.5-4ubuntu8_amd64.deb
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Use HTTPS for package downloads and add basic hardening

HTTP URLs are susceptible to MITM. Switch to HTTPS and add strict mode.

Apply this diff:

-      run: |
-        sudo apt-get update
-        wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/g++-4.8_4.8.5-4ubuntu8_amd64.deb
-        wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libstdc++-4.8-dev_4.8.5-4ubuntu8_amd64.deb
-        wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8-base_4.8.5-4ubuntu8_amd64.deb
-        wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8_4.8.5-4ubuntu8_amd64.deb
-        wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libgcc-4.8-dev_4.8.5-4ubuntu8_amd64.deb
-        wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/cpp-4.8_4.8.5-4ubuntu8_amd64.deb
+      run: |
+        set -euo pipefail
+        sudo apt-get update
+        wget -q https://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/g++-4.8_4.8.5-4ubuntu8_amd64.deb
+        wget -q https://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libstdc++-4.8-dev_4.8.5-4ubuntu8_amd64.deb
+        wget -q https://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8-base_4.8.5-4ubuntu8_amd64.deb
+        wget -q https://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8_4.8.5-4ubuntu8_amd64.deb
+        wget -q https://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libgcc-4.8-dev_4.8.5-4ubuntu8_amd64.deb
+        wget -q https://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/cpp-4.8_4.8.5-4ubuntu8_amd64.deb
         sudo apt install ./gcc-4.8_4.8.5-4ubuntu8_amd64.deb \
                          ./gcc-4.8-base_4.8.5-4ubuntu8_amd64.deb \
                          ./libstdc++-4.8-dev_4.8.5-4ubuntu8_amd64.deb \
                          ./cpp-4.8_4.8.5-4ubuntu8_amd64.deb \
                          ./libgcc-4.8-dev_4.8.5-4ubuntu8_amd64.deb \
                          ./libasan0_4.8.5-4ubuntu8_amd64.deb \
                          ./g++-4.8_4.8.5-4ubuntu8_amd64.deb

If you keep direct .deb downloads, consider checksum verification for each file.

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In lib/yyjson-0.12.0/.github/workflows/cmake.yml around lines 281 to 299, the
workflow downloads .deb packages over plain HTTP and runs them without strict
shell error handling; switch all wget URLs to use HTTPS, enable strict shell
mode (set -euo pipefail) at the top of the run block, and add checksum
verification for each downloaded .deb (e.g., provide expected SHA256 hashes and
verify with sha256sum -c before apt install); ensure wget uses --https-only or
--no-check-certificate is NOT used and fail the job if any verification step
fails.

Comment on lines +28 to +31
- Add `YYJSON_WRITE_FP_TO_FLOAT` flag to write real numbers using single-precison.
- Add `YYJSON_WRITE_FP_TO_FIXED(prec)` flag to write real numbers using fix-point notation.
- Add `set_fp_to_float()` and `set_fp_to_fixed()` functions to control the output format of a specific number.
- Add `set_str_noesc()` function to skip escaping for a specific string during writing.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Typos and terminology in changelog (only if we decide to diverge from upstream text)

There are minor issues: “single-precison” → “single-precision”, “fix-point” → “fixed-point”, “incurrect” → “incorrect”, and “JSON Merge-Path” should be “JSON Merge Patch (RFC 7386)”. If we choose to correct in-tree (not recommended for vendored code), apply:

- Add `YYJSON_WRITE_FP_TO_FLOAT` flag to write real numbers using single-precison.
- Add `YYJSON_WRITE_FP_TO_FIXED(prec)` flag to write real numbers using fix-point notation.
+ Add `YYJSON_WRITE_FP_TO_FLOAT` flag to write real numbers using single-precision.
+ Add `YYJSON_WRITE_FP_TO_FIXED(prec)` flag to write real numbers using fixed-point notation.
...
- Fix incurrect output number format, remove unnecessary digits (e.g. 2.0e34 -> 2e34).
+ Fix incorrect output number format, remove unnecessary digits (e.g. 2.0e34 -> 2e34).
...
- Add `yyjson_merge_patch()` function for JSON Merge-Path API (RFC 7386).
+ Add `yyjson_merge_patch()` function for JSON Merge Patch API (RFC 7386).

Also applies to: 121-125, 153-155

🧰 Tools
🪛 LanguageTool

[grammar] ~29-~29: There might be a mistake here.
Context: ...e real numbers using fix-point notation. - Add set_fp_to_float() and `set_fp_to_f...

(QB_NEW_EN)


[style] ~30-~30: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...eal numbers using fix-point notation. - Add set_fp_to_float() and `set_fp_to_fixe...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~31-~31: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...e output format of a specific number. - Add set_str_noesc() function to skip esca...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~31-~31: There might be a mistake here.
Context: ...ng for a specific string during writing. - Add yyjson_incr_read(), `yyjson_incr_n...

(QB_NEW_EN)

🤖 Prompt for AI Agents
lib/yyjson-0.12.0/CHANGELOG.md lines 28-31: fix typos and terminology—change
“single-precison” to “single-precision”, “fix-point” to “fixed-point”, and
ensure elsewhere “incurrect” is corrected to “incorrect”; also update references
to “JSON Merge-Path” to read “JSON Merge Patch (RFC 7386)”; apply the same
corrections in the other occurrences noted at lines 121-125 and 153-155 so the
changelog uses correct spelling and the proper RFC phrase consistently.

Comment on lines +205 to +216
a.onclick = function() {
storeLink(link);
aPPar = $(a).parent().parent();
if (!aPPar.hasClass('selected')) {
$('.item').removeClass('selected');
$('.item').removeAttr('id');
aPPar.addClass('selected');
aPPar.attr('id','selected');
}
const anchor = $(aname);
gotoAnchor(anchor,aname);
};
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Fix accidental global variable leak (aPPar) in click handler.

Undeclared assignment creates a global; make it block-scoped.

-          storeLink(link);
-          aPPar = $(a).parent().parent();
+          storeLink(link);
+          const aPPar = $(a).parent().parent();
🤖 Prompt for AI Agents
In lib/yyjson-0.12.0/doc/doxygen/html/navtree.js around lines 205 to 216 there
is an accidental global variable leak: aPPar is assigned without declaration
inside the click handler. Fix by declaring it as a local block-scoped variable
(prefer const if not reassigned, otherwise let) when assigning
$(a).parent().parent(); so the variable is not created on the global object and
remains scoped to the handler.

Comment on lines +394 to +399
getScript(relpath+'navtreeindex'+i,function() {
navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash,relpath);
}
});
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Eliminate eval() when loading NAVTREEINDEXi (fixes lint/security/noGlobalEval).

Directly resolve the global by key instead of evaluating a string.

-      getScript(relpath+'navtreeindex'+i,function() {
-        navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
-        if (navTreeSubIndices[i]) {
-          gotoNode(o,i,root,hash,relpath);
-        }
-      });
+      getScript(relpath+'navtreeindex'+i,function() {
+        const key = 'NAVTREEINDEX'+i;
+        navTreeSubIndices[i] = (typeof window !== 'undefined') ? window[key] : undefined;
+        if (navTreeSubIndices[i]) {
+          gotoNode(o,i,root,hash,relpath);
+        }
+      });
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
getScript(relpath+'navtreeindex'+i,function() {
navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash,relpath);
}
});
getScript(relpath+'navtreeindex'+i, function() {
const key = 'NAVTREEINDEX' + i;
navTreeSubIndices[i] = (typeof window !== 'undefined') ? window[key] : undefined;
if (navTreeSubIndices[i]) {
gotoNode(o, i, root, hash, relpath);
}
});
🧰 Tools
🪛 Biome (2.1.2)

[error] 395-395: eval() exposes to security risks and performance issues.

See the MDN web docs for more details.
Refactor the code so that it doesn't need to call eval().

(lint/security/noGlobalEval)

🤖 Prompt for AI Agents
In lib/yyjson-0.12.0/doc/doxygen/html/navtree.js around lines 394 to 399, the
code uses eval('NAVTREEINDEX'+i) to obtain the loaded NAVTREEINDEX variable;
replace the eval with a direct global lookup (e.g., use
globalThis['NAVTREEINDEX' + i] or window['NAVTREEINDEX' + i] with a safe
fallback) to retrieve the variable by key, assign that result to
navTreeSubIndices[i], and keep the existing null/undefined check and gotoNode
call; ensure you reference a cross-platform global (globalThis) and avoid
introducing new globals or exceptions.

Comment on lines +1 to +5
var searchData=
[
['7_200_202023_2005_2025_0',['0.7.0 (2023-05-25)',['../md__c_h_a_n_g_e_l_o_g.html#autotoc_md070-2023-05-25',1,'']]],
['7r32_20gcc_209_203_1',['AWS EC2 (AMD EPYC 7R32, gcc 9.3)',['../index.html#aws-ec2-amd-epyc-7r32-gcc-93',1,'']]]
];
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Guard against accidental license drift

Ensure the upstream yyjson LICENSE and NOTICE are included alongside the vendored directory and that any local patches are documented. No changes needed here; just a reminder since docs are included.

If not already present, verify license files exist under lib/yyjson-0.12.0/:


🏁 Script executed:

#!/bin/bash
set -euo pipefail
fd -HI 'LICENSE*|NOTICE*' lib/yyjson-0.12.0 -x ls -lah {}

Length of output: 156


Add missing NOTICE file for yyjson upstream

The vendored lib/yyjson-0.12.0/ directory includes the upstream LICENSE but is missing the corresponding NOTICE file. To prevent accidental license drift, please:

  • Include the original NOTICE file from yyjson v0.12.0 alongside lib/yyjson-0.12.0/LICENSE.
  • Document any local patches applied to the vendored code (e.g. in a PATCHES.md or within the NOTICE).
🤖 Prompt for AI Agents
In lib/yyjson-0.12.0/doc/doxygen/html/search/all_7.js lines 1-5: the vendored
yyjson 0.12.0 copy includes LICENSE but is missing the upstream NOTICE and lacks
documentation of local patches; add the original NOTICE file from yyjson v0.12.0
into lib/yyjson-0.12.0 alongside the existing LICENSE, and add a short
PATCHES.md (or append to NOTICE) listing any local modifications/patches applied
to the vendored code, with dates and authorship, so the repo retains upstream
attribution and documents changes.

Comment on lines +1 to +7
var searchData=
[
['better_20performance_20yyjson_20prefers_3a_0',['For better performance, yyjson prefers:',['../index.html#for-better-performance-yyjson-prefers',1,'']]],
['build_20the_20library_1',['Use CMake to build the library',['../building-and-testing.html#use-cmake-to-build-the-library',1,'']]],
['building_20and_20testing_2',['Building and testing',['../building-and-testing.html',1,'']]],
['built_20with_20yyjson_3',['Built With yyjson',['../index.html#built-with-yyjson',1,'']]]
];
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Verify size impact and third-party license presence.

Before merging, quantify the doc footprint and confirm yyjson license files are present and included in NOTICE aggregation.


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Doc directory size:"
du -sh lib/yyjson-0.12.0/doc 2>/dev/null || echo "No docs dir found."

echo
echo "Doc file count:"
fd -HI -t f lib/yyjson-0.12.0/doc 2>/dev/null | wc -l || true

echo
echo "Top largest doc files (up to 20):"
fd -HI -t f lib/yyjson-0.12.0/doc 2>/dev/null | xargs -r -I{} du -h "{}" | sort -h | tail -20 || true

echo
echo "License/notice files under vendored yyjson:"
rg -nP 'LICENSE|COPYING|NOTICE' -S -g '!**/node_modules/**' -C0 lib/yyjson-0.12.0 2>/dev/null || echo "No license/notice files detected under lib/yyjson-0.12.0"

echo
echo "Confirm docs are excluded by packaging (check .gitattributes export-ignore):"
rg -n '^lib/yyjson-0\.12\.0/doc\s+export-ignore$' .gitattributes -n || echo "Consider adding 'lib/yyjson-0.12.0/doc export-ignore' to .gitattributes"

Length of output: 3053


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "File count under doc (using find):"
find lib/yyjson-0.12.0/doc -type f | wc -l

echo
echo "LICENSE files under lib/yyjson-0.12.0 root:"
find lib/yyjson-0.12.0 -maxdepth 1 -type f -iname 'license*' || echo "No LICENSE file found at root"

Length of output: 341


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Checking for NOTICE file at repository root:"
find . -maxdepth 1 -type f -iname 'NOTICE*' || echo "No NOTICE files at repository root"

echo
echo "Searching for .gitattributes in the repository:"
find . -type f -name ".gitattributes" -maxdepth 2 || echo "No .gitattributes file found"

Length of output: 327


Vendor docs footprint & licensing compliance
The vendored yyjson docs total ~3.2 MB across 193 files, and while the yyjson LICENSE is present at lib/yyjson-0.12.0/LICENSE, there is no NOTICE file to aggregate third-party licenses and no .gitattributes to exclude docs from published packages.

Please address the following before merging:

  • Add a repository-level NOTICE (or extend your existing NOTICE) that includes a reference to lib/yyjson-0.12.0/LICENSE.

  • Create or update a .gitattributes at the repo root to exclude the docs directory from source distributions:

    lib/yyjson-0.12.0/doc export-ignore
  • Consider removing or packaging the HTML docs separately (e.g. an optional -doc artifact) to avoid inflating downstream installs.

🤖 Prompt for AI Agents
In lib/yyjson-0.12.0/doc/doxygen/html/search/all_c.js lines 1-7: the vendored
yyjson docs are included without a repository-level NOTICE pointing to
lib/yyjson-0.12.0/LICENSE and without a .gitattributes rule to exclude the docs
from source exports; add or update the repo-level NOTICE to reference
lib/yyjson-0.12.0/LICENSE (or extend existing NOTICE), and create/update
.gitattributes at the repository root with an entry to export-ignore the docs
directory (e.g. lib/yyjson-0.12.0/doc export-ignore); optionally remove the HTML
docs from the repo or move/package them as a separate -doc artifact to keep
downstream installs small.

Comment on lines +1 to +22
var searchData=
[
['yyjson_5falc_0',['yyjson_alc',['../yyjson_8h.html#structyyjson__alc',1,'']]],
['yyjson_5farr_5fiter_1',['yyjson_arr_iter',['../yyjson_8h.html#structyyjson__arr__iter',1,'']]],
['yyjson_5fdoc_2',['yyjson_doc',['../yyjson_8h.html#structyyjson__doc',1,'']]],
['yyjson_5fmut_5farr_5fiter_3',['yyjson_mut_arr_iter',['../yyjson_8h.html#structyyjson__mut__arr__iter',1,'']]],
['yyjson_5fmut_5fdoc_4',['yyjson_mut_doc',['../yyjson_8h.html#structyyjson__mut__doc',1,'']]],
['yyjson_5fmut_5fobj_5fiter_5',['yyjson_mut_obj_iter',['../yyjson_8h.html#structyyjson__mut__obj__iter',1,'']]],
['yyjson_5fmut_5fval_6',['yyjson_mut_val',['../yyjson_8h.html#structyyjson__mut__val',1,'']]],
['yyjson_5fobj_5fiter_7',['yyjson_obj_iter',['../yyjson_8h.html#structyyjson__obj__iter',1,'']]],
['yyjson_5fpatch_5ferr_8',['yyjson_patch_err',['../yyjson_8h.html#structyyjson__patch__err',1,'']]],
['yyjson_5fptr_5fctx_9',['yyjson_ptr_ctx',['../yyjson_8h.html#structyyjson__ptr__ctx',1,'']]],
['yyjson_5fptr_5ferr_10',['yyjson_ptr_err',['../yyjson_8h.html#structyyjson__ptr__err',1,'']]],
['yyjson_5fread_5ferr_11',['yyjson_read_err',['../yyjson_8h.html#structyyjson__read__err',1,'']]],
['yyjson_5fstr_5fchunk_12',['yyjson_str_chunk',['../yyjson_8h.html#structyyjson__str__chunk',1,'']]],
['yyjson_5fstr_5fpool_13',['yyjson_str_pool',['../yyjson_8h.html#structyyjson__str__pool',1,'']]],
['yyjson_5fval_14',['yyjson_val',['../yyjson_8h.html#structyyjson__val',1,'']]],
['yyjson_5fval_5fchunk_15',['yyjson_val_chunk',['../yyjson_8h.html#structyyjson__val__chunk',1,'']]],
['yyjson_5fval_5fpool_16',['yyjson_val_pool',['../yyjson_8h.html#structyyjson__val__pool',1,'']]],
['yyjson_5fval_5funi_17',['yyjson_val_uni',['../yyjson_8h.html#unionyyjson__val__uni',1,'']]],
['yyjson_5fwrite_5ferr_18',['yyjson_write_err',['../yyjson_8h.html#structyyjson__write__err',1,'']]]
];
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Verify third‑party license presence and ensure doc assets are self-contained (no external calls).

Since yyjson is vendored (including docs), ensure its LICENSE is present and that HTML/JS don’t reference external CDNs.

Run this script from repo root:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Check yyjson license files =="
fd -H -t f -g 'LICENSE*' lib/yyjson-0.12.0 || {
  echo "Missing LICENSE in lib/yyjson-0.12.0"; exit 1;
}

echo "== Spot-check license mentions =="
rg -n "MIT|yyjson" lib/yyjson-0.12.0 | head -n 20 || true

echo "== Ensure docs are offline (no external http/https refs) =="
# Ignore common binary assets
rg -nPI '(https?:)?//[a-zA-Z0-9]' lib/yyjson-0.12.0/doc/doxygen/html \
  -g '!**/*.png' -g '!**/*.jpg' -g '!**/*.gif' -g '!**/*.svg' || {
  echo "OK: no external URLs found in doc HTML/JS/CSS";
}

Length of output: 28489


Third-party license present; docs contain external URLs that must be vendored

The MIT license file is in place at lib/yyjson-0.12.0/LICENSE, but the pre-generated Doxygen HTML/JS under lib/yyjson-0.12.0/doc/doxygen/html still references numerous external resources. These must be replaced with offline or vendored copies to ensure the docs are fully self-contained:

• License
– ✅ Found at lib/yyjson-0.12.0/LICENSE.

• External DTD/namespace URLs (in every HTML file)
<!DOCTYPE html PUBLIC … "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">

• Footer badges and links
– GitHub repo: https://github.com/ibireme/yyjson
– Doxygen site: https://www.doxygen.org/index.html
– Shields.io, Codecov, Repology images/links

• Third-party scripts and styles
– jqueryui.com, smartmenus.org, jquery-powertip, fonts.google.com/icons
– Apache license link: https://www.apache.org/licenses/LICENSE-2.0.html

• Standards and spec references
– RFCs on datatracker.ietf.org, json5.org, tools.ietf.org, unicode.org, en.wikipedia.org

Recommendations:

  1. Regenerate or post-process the Doxygen output to rewrite or remove external URLs.
  2. Vendor all required CSS/JS and image assets locally.
  3. Replace public DTD declaration with a local or minimal HTML5 doctype if possible.
🤖 Prompt for AI Agents
In lib/yyjson-0.12.0/doc/doxygen/html (lines 1-22 of classes_0.js referenced),
the pre-generated docs reference external URLs and third-party assets; remove or
vendor them so the docs are self-contained. Replace the external
DOCTYPE/namespace declarations with a local/minimal HTML5 doctype where
feasible, download and serve copies of all external JS/CSS/fonts/images (jquery,
jqueryui, smartmenus, powertip, Google icons, Shields/Codecov/Repology badges,
etc.) from the doc tree, update all HTML/JS references to point to those local
files, replace external license/spec links with local copies or plain text
summaries (including Apache license copy), and strip or rewrite any remaining
external RFC/spec links; finally regenerate or post-process the Doxygen output
and verify no external URLs remain (e.g., grep for "http://" and "https://")
before committing.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (12)
lib/yyjson-0.12.0/doc/doxygen/html/search/classes_0.js (1)

1-22: Duplicate: ensure the entire Doxygen doc tree is self‑contained (no external URLs)

Previous review flagged external URLs across the doc HTML. This file is fine, but please vendor/remove external links project‑wide or exclude docs from release artifacts.

Run from repo root:

#!/bin/bash
set -euo pipefail
# Fail if any external http/https or protocol-relative URL remains in doc HTML/JS/CSS.
rg -nPI '(?<![A-Za-z])https?://|(?<![A-Za-z])//' lib/yyjson-0.12.0/doc/doxygen/html \
  -g '!**/*.png' -g '!**/*.jpg' -g '!**/*.gif' -g '!**/*.svg' && {
  echo "Found external URLs above — please vendor/remove them." ; exit 1; } || {
  echo "OK: no external URLs detected in doc HTML/JS/CSS."; }
lib/yyjson-0.12.0/doc/doxygen/html/navtree.js (3)

205-216: Fix accidental global (aPPar).

Declare the variable to avoid leaking to global scope.

-          storeLink(link);
-          aPPar = $(a).parent().parent();
+          storeLink(link);
+          const aPPar = $(a).parent().parent();

32-36: Replace eval() with safe global lookup.

Avoids security/lint issues while preserving behavior.

Apply:

-    return eval(n.replace(/-/g,'_'));
+    const key = n.replace(/-/g,'_');
+    return (typeof globalThis !== 'undefined') ? globalThis[key] : undefined;

394-399: Remove eval() when loading NAVTREEINDEXi.

Use a keyed global lookup instead of evaluating a string.

-      getScript(relpath+'navtreeindex'+i,function() {
-        navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
+      getScript(relpath+'navtreeindex'+i,function() {
+        const key = 'NAVTREEINDEX'+i;
+        navTreeSubIndices[i] = (typeof globalThis !== 'undefined') ? globalThis[key] : undefined;
lib/yyjson-0.12.0/doc/doxygen/html/navtree.css (1)

86-94: Invalid CSS placeholder $width; replace with valid value/custom property.

Current rule won’t parse; also trips linters.

 #side-nav {
   padding:0 6px 0 0;
   margin: 0px;
   display:block;
   position: absolute;
   left: 0px;
-  width: $width;
+  width: var(--side-nav-width, 300px);
   overflow : hidden;
 }

After change, run:

rg -n 'width:\s*\$width' lib/yyjson-0.12.0/doc/doxygen/html/navtree.css
benchmarks/pack_json.c (1)

1-5: Add required headers and remove unused macro

Missing headers for memcmp and fixed-width integer types. The ITERATIONS macro is also unused.

 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
 #include <unistd.h>
+#include <string.h>
+#include <stdint.h>

 #include <fluent-bit.h>
 #include <fluent-bit/flb_pack_json.h>
-
-#define ITERATIONS 100000
lib/yyjson-0.12.0/doc/API.md (2)

1175-1177: Fix incorrect array declaration in example

The sample declares char strs[3] which creates an array of 3 single characters, not an array of string pointers.

-const char strs[3] = {"Jan", "Feb", "Mar"};
+const char *strs[3] = {"Jan", "Feb", "Mar"};
 yyjson_mut_val *arr = yyjson_mut_arr_with_str(doc, strs, 3);

1694-1711: Fix incorrect API function names in custom allocator examples

The API functions yyjson_doc_read_opts and yyjson_doc_write don't exist in the vendored library.

 // Read with custom allocator
-yyjson_doc *doc = yyjson_doc_read_opts(dat, len, 0, &PRIV_ALC, NULL);
+yyjson_doc *doc = yyjson_read_opts(dat, len, 0, &PRIV_ALC, NULL);
 ...
 yyjson_doc_free(doc);

 // Write with custom allocator
 yyjson_alc *alc = &PRIV_ALC;
-char *json = yyjson_doc_write(doc, 0, alc, NULL, NULL);
+char *json = yyjson_write_opts(doc, 0, alc, NULL, NULL);
 ...
 alc->free(alc->ctx, json);
lib/yyjson-0.12.0/CMakeLists.txt (2)

33-34: Prevent vendored library from polluting parent project installs

When included as a subproject, the library shouldn't install by default to avoid conflicts.

-option(YYJSON_INSTALL "Generate installation target" ON)
+# Default OFF when included as a subproject
+set(_YYJSON_INSTALL_DEFAULT ON)
+if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+    set(_YYJSON_INSTALL_DEFAULT OFF)
+endif()
+option(YYJSON_INSTALL "Generate installation target" ${_YYJSON_INSTALL_DEFAULT})

139-142: Preserve existing toolchain flags when adding -m32

Setting CMAKE_C_FLAGS overwrites existing toolchain flags. Should append instead.

 if(YYJSON_FORCE_32_BIT)
-    set(CMAKE_C_FLAGS -m32)
-    set(CMAKE_CXX_FLAGS -m32)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
 endif()
lib/yyjson-0.12.0/CHANGELOG.md (1)

28-31: Typos need correction in vendored changelog.

As noted in the previous review, there are several typos present: "single-precison" should be "single-precision", "fix-point" should be "fixed-point", "incurrect" should be "incorrect", and "JSON Merge-Path" should be "JSON Merge Patch (RFC 7386)". However, since this is vendored code from upstream yyjson, these corrections should ideally be made upstream rather than in our local copy to maintain consistency with the original project.

Consider opening an issue or PR with the upstream yyjson project to fix these typos in their changelog, then updating our vendored version once the fixes are merged upstream.

Also applies to: 121-125, 153-155

lib/yyjson-0.12.0/doc/doxygen/html/doxygen-awesome-sidebar-only.css (1)

30-35: Align sidebar width with Doxygen TREEVIEW_WIDTH to avoid layout drift.

Current CSS sets 335px; ensure Doxyfile’s TREEVIEW_WIDTH matches or adjust CSS.

Option A (match Doxyfile=250):

 html {
-    --side-nav-fixed-width: 335px;
+    --side-nav-fixed-width: 250px;
 }

Option B (keep 335px): update Doxyfile TREEVIEW_WIDTH to 335 and regenerate docs.

🧹 Nitpick comments (19)
lib/yyjson-0.12.0/doc/doxygen/html/search/all_13.js (1)

1-14: Exclude vendored yyjson docs from source archives/installs; mark as generated

lib/yyjson-0.12.0/doc/doxygen/html is 2.9M; .gitattributes has no matching rules and lib/yyjson-0.12.0/CMakeLists.txt defines a Doxygen target (yyjson_doc ALL). Add the following.

+# Treat vendored yyjson docs as generated and exclude from git-archive
+lib/yyjson-0.12.0/doc/** export-ignore
+lib/yyjson-0.12.0/doc/** linguist-generated=true
+option(FLB_INSTALL_YYJSON_DOCS "Install vendored yyjson docs" OFF)
+if(FLB_INSTALL_YYJSON_DOCS)
+  install(DIRECTORY lib/yyjson-0.12.0/doc/doxygen/html
+          DESTINATION share/doc/fluent-bit/yyjson)
+endif()
lib/yyjson-0.12.0/doc/doxygen/html/navtreeindex0.js (1)

1-4: Vendored, generated docs: consider excluding from JS lint.

Since this file is auto‑generated by Doxygen, prefer ignoring it in Biome to avoid churn.

Add (or extend) Biome config:

+{
+  "files": { "ignore": ["lib/yyjson-0.12.0/doc/doxygen/html/**"] }
+}
lib/yyjson-0.12.0/doc/doxygen/html/navtree.js (2)

233-241: Avoid deprecated arguments.callee.

Use a named local function for retry.

-    (function() { // retry until we can scroll to the selected item
-      try {
-        const navtree=$('#nav-tree');
-        navtree.scrollTo('#selected',100,{offset:-windowHeight/2});
-      } catch (err) {
-        setTimeout(arguments.callee, 0);
-      }
-    })();
+    const retry = function retry() { // retry until we can scroll to the selected item
+      try {
+        const navtree = $('#nav-tree');
+        navtree.scrollTo('#selected',100,{offset:-windowHeight/2});
+      } catch (err) {
+        setTimeout(retry, 0);
+      }
+    };
+    retry();

96-106: Drop javascript:void(0) anchors.

Use href="#" and preventDefault for accessibility and CSP friendliness.

-      node.expandToggle.href = "javascript:void(0)";
-      node.expandToggle.onclick = function() {
+      node.expandToggle.href = "#";
+      node.expandToggle.onclick = function(e) {
+        e.preventDefault();
         if (node.expanded) {
           $(node.getChildrenUL()).slideUp("fast");
-      a.href = "javascript:void(0)";
-      a.onclick = node.expandToggle.onclick;
+      a.href = "#";
+      a.onclick = function(e){ e.preventDefault(); node.expandToggle.onclick(e); };

Also applies to: 221-225

lib/yyjson-0.12.0/doc/doxygen/html/resize.js (1)

120-131: Minor: avoid UA sniffing for touch.

Consider feature detection (e.g., 'ontouchstart' in window) instead of regex UA matching.

-    const device = navigator.userAgent.toLowerCase();
-    const touch_device = device.match(/(iphone|ipod|ipad|android)/);
+    const touch_device = ('ontouchstart' in window) || navigator.maxTouchPoints > 0;
lib/yyjson-0.12.0/doc/doxygen/html/menu.js (1)

30-43: Prefer array iteration over for..in on arrays.

for..in may traverse inherited props; use for..of or index loop.

-      for (let i in data.children) {
-        let url;
-        const link = data.children[i].url;
+      for (const child of data.children) {
+        let url;
+        const link = child.url;
         if (link.substring(0,1)=='^') {
           url = link.substring(1);
         } else {
           url = relPath+link;
         }
-        result+='<li><a href="'+url+'">'+
-                                data.children[i].text+'</a>'+
-                                makeTree(data.children[i],relPath)+'</li>';
+        result+='<li><a href="'+url+'">'+ child.text +'</a>'+ makeTree(child,relPath)+'</li>';
       }
lib/yyjson-0.12.0/doc/DataStructure.md (1)

92-93: Fix grammar error in memory management section.

There's a duplicate word that affects readability.

-A JSON value (`yyjson_val`, `yyjson_mut_val`) has the same lifetime as its document. The memory is managed by its
- document and and cannot be freed independently.
+A JSON value (`yyjson_val`, `yyjson_mut_val`) has the same lifetime as its document. The memory is managed by its
+ document and cannot be freed independently.
lib/yyjson-0.12.0/doc/doxygen/html/doxygen.css (2)

377-380: Remove duplicate white-space declarations.

Line 379 duplicates the white-space property definition, which can lead to unexpected behavior.

 	text-indent: -53px;
 	padding-left: 53px;
 	padding-bottom: 0px;
 	margin: 0px;
 	-webkit-transition-property: background-color, box-shadow;
 	-webkit-transition-duration: 0.5s;
 	-moz-transition-property: background-color, box-shadow;
 	-moz-transition-duration: 0.5s;
 	-ms-transition-property: background-color, box-shadow;
 	-ms-transition-duration: 0.5s;
 	-o-transition-property: background-color, box-shadow;
 	-o-transition-duration: 0.5s;
 	transition-property: background-color, box-shadow;
 	transition-duration: 0.5s;
 }
 	text-wrap: unrestricted;
-	white-space: -moz-pre-wrap; /* Moz */
-	white-space: -pre-wrap;     /* Opera 4-6 */
-	white-space: -o-pre-wrap;   /* Opera 7 */
 	white-space: pre-wrap;      /* CSS3  */
 	word-wrap: break-word;      /* IE 5.5+ */

442-447: Replace vendor-specific user-select properties with standard property.

Multiple vendor-prefixed user-select properties are outdated for modern browsers. The standard property provides better compatibility.

 .lineno {
-	-webkit-touch-callout: none;
-	-webkit-user-select: none;
-	-khtml-user-select: none;
-	-moz-user-select: none;
-	-ms-user-select: none;
 	user-select: none;
 }
lib/yyjson-0.12.0/doc/doxygen/html/doxygen-awesome.css (5)

875-877: Remove duplicate font-weight declaration.

Line 876 duplicates the font-weight property, which can cause unexpected behavior.

 #nav-tree .selected a {
 	color: var(--primary-color) !important;
-	font-weight: bolder;
 	font-weight: 600;
 }

1025-1027: Remove duplicate overflow declarations.

Lines 1025 and 1026 both set the overflow property, which is redundant.

 blockquote {
 	margin: 0 var(--spacing-medium) 0 var(--spacing-medium);
 	padding: var(--spacing-small) var(--spacing-large);
 	background: var(--blockquote-background);
 	color: var(--blockquote-foreground);
 	border-left: 0;
-	overflow: visible;
 	border-radius: var(--border-radius-medium);
 	overflow: visible;
 	position: relative;
 }

2164-2169: Fix shorthand property override and duplicate border-bottom.

The background shorthand property overrides the previously set background-image, and there are duplicate border-bottom declarations.

 #nav-path ul {
-	background-image: none;
 	background: var(--page-background-color);
 	border: none;
 	border-top: 1px solid var(--separator-color);
-	border-bottom: 1px solid var(--separator-color);
-	border-bottom: 0;
+	border-bottom: 0;
 	box-shadow: 0 0.75px 0 var(--separator-color);
 	font-size: var(--navigation-font-size);
 }

2314-2322: Remove duplicate overflow declarations.

There are multiple duplicate overflow property declarations that can lead to confusion.

 #nav-tree,
 div.fragment,
 pre.fragment,
 div.memproto,
 .contents center,
 .contents .center,
 .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody,
 div.contents .toc {
-	overflow-x: auto;
 	overflow-x: overlay;
 }
 
 #nav-tree {
-	overflow-x: auto;
-	overflow-y: auto;
 	overflow-y: overlay;
 }

2357-2359: Remove duplicate display declaration.

Line 2358 duplicates the display property set on line 2346.

 doxygen-awesome-dark-mode-toggle {
 	display: inline-block;
 	margin: 0 0 0 var(--spacing-small);
 	padding: 0;
 	width: var(--searchbar-height);
 	height: var(--searchbar-height);
 	background: none;
 	border: none;
 	border-radius: var(--searchbar-height);
 	vertical-align: middle;
 	text-align: center;
 	line-height: var(--searchbar-height);
 	font-size: 22px;
-	display: flex;
+	display: flex;
 	align-items: center;
 	justify-content: center;
 	user-select: none;
 	cursor: pointer;
 }
lib/yyjson-0.12.0/doc/doxygen/Doxyfile.in (1)

21-21: Fix inconsistent CHANGELOG path reference

The CHANGELOG.md is referenced with the wrong path. Based on the repository structure, it should be:

-                         @CMAKE_CURRENT_SOURCE_DIR@/CHANGELOG.md
+                         @CMAKE_CURRENT_SOURCE_DIR@/doc/CHANGELOG.md
benchmarks/pack_json.c (1)

117-117: Inconsistent memory deallocation

The json buffer allocated by flb_utils_read_file should use flb_free() for consistency with the Fluent Bit memory management conventions.

-    free(json);
+    flb_free(json);
lib/yyjson-0.12.0/.github/codecov.yml (1)

1-2: Add trailing newline to satisfy YAMLLint (new-line-at-end-of-file).

Prevents avoidable CI noise.

Apply:

 ignore:
   - test
+ 
lib/yyjson-0.12.0/README.md (1)

2-9: Vendor docs: exclude from markdownlint/CI to keep upstream files pristine.

Suppresses many markdownlint warnings without forking upstream text.

Add ignore:

# .markdownlintignore
lib/yyjson-0.12.0/**
lib/yyjson-0.12.0/doc/BuildAndTest.md (1)

1-4: Same: ignore vendor docs for markdownlint.

Avoids numerous heading/bullet lint findings without editing upstream docs.

Use either:

# .markdownlintignore
lib/yyjson-0.12.0/**

or in markdownlint-cli2 config:

# .markdownlint-cli2.yaml
globs:
  - "**/*.md"
ignores:
  - "lib/yyjson-0.12.0/**"
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ceba6dd and de14084.

⛔ Files ignored due to path filters (51)
  • lib/yyjson-0.12.0/doc/doxygen/html/bc_s.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/bc_sd.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/closed.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/doc.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/docd.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/doxygen.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/folderclosed.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/folderclosedd.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/folderopen.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/folderopend.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/minus.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/minusd.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/nav_f.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/nav_fd.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/nav_g.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/nav_h.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/nav_hd.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/open.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/perf_reader_a14.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/perf_reader_ec2.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/plus.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/plusd.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/search/close.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/search/mag.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/search/mag_d.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/search/mag_sel.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/search/mag_seld.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/splitbar.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/splitbard.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/struct_idoc1.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/struct_idoc2.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/struct_ival.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/struct_mdoc.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/struct_mval.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/doxygen/html/sync_off.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/sync_on.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/tab_a.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/tab_ad.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/tab_b.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/tab_bd.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/tab_h.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/tab_hd.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/tab_s.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/doxygen/html/tab_sd.png is excluded by !**/*.png
  • lib/yyjson-0.12.0/doc/images/perf_reader_a14.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/images/perf_reader_ec2.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/images/struct_idoc1.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/images/struct_idoc2.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/images/struct_ival.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/images/struct_mdoc.svg is excluded by !**/*.svg
  • lib/yyjson-0.12.0/doc/images/struct_mval.svg is excluded by !**/*.svg
📒 Files selected for processing (107)
  • CMakeLists.txt (4 hunks)
  • benchmarks/CMakeLists.txt (1 hunks)
  • benchmarks/pack_json.c (1 hunks)
  • cmake/headers.cmake (1 hunks)
  • cmake/libraries.cmake (1 hunks)
  • lib/yyjson-0.12.0/.gitattributes (1 hunks)
  • lib/yyjson-0.12.0/.github/ISSUE_TEMPLATE/bug_report.md (1 hunks)
  • lib/yyjson-0.12.0/.github/ISSUE_TEMPLATE/discussion.md (1 hunks)
  • lib/yyjson-0.12.0/.github/ISSUE_TEMPLATE/feature_request.md (1 hunks)
  • lib/yyjson-0.12.0/.github/codecov.yml (1 hunks)
  • lib/yyjson-0.12.0/.github/workflows/cmake.yml (1 hunks)
  • lib/yyjson-0.12.0/.gitignore (1 hunks)
  • lib/yyjson-0.12.0/CHANGELOG.md (1 hunks)
  • lib/yyjson-0.12.0/CMakeLists.txt (1 hunks)
  • lib/yyjson-0.12.0/LICENSE (1 hunks)
  • lib/yyjson-0.12.0/Package.swift (1 hunks)
  • lib/yyjson-0.12.0/README.md (1 hunks)
  • lib/yyjson-0.12.0/cmake/XcodeProperty.cmake (1 hunks)
  • lib/yyjson-0.12.0/doc/API.md (1 hunks)
  • lib/yyjson-0.12.0/doc/BuildAndTest.md (1 hunks)
  • lib/yyjson-0.12.0/doc/DataStructure.md (1 hunks)
  • lib/yyjson-0.12.0/doc/Performance.md (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/DoxyLayout.xml (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/Doxyfile.in (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/annotated.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/annotated_dup.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/building-and-testing.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/classes.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/clipboard.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/cookie.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/data-structures.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/deprecated.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/dir_e68e8157741866f444e17edd764ebbae.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/doxygen-awesome-darkmode-toggle.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/doxygen-awesome-sidebar-only-darkmode-toggle.css (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/doxygen-awesome-sidebar-only.css (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/doxygen-awesome.css (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/doxygen.css (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/doxygen_crawl.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/dynsections.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/files.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/files_dup.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/functions.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/functions_vars.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/globals.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_defs.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_dup.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_func.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_func.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_type.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_vars.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_y.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/index.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/index.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/md__c_h_a_n_g_e_l_o_g.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/menu.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/menudata.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/navtree.css (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/navtree.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/navtreedata.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/navtreeindex0.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/navtreeindex1.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/navtreeindex2.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/pages.html (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/resize.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_0.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_10.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_11.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_12.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_13.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_14.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_15.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_16.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_17.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_18.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_19.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1a.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1b.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1c.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1d.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1e.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1f.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_2.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_20.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_3.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_4.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_5.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_6.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_7.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_8.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_9.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_a.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_b.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_c.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_d.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_e.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_f.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/classes_0.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/defines_0.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/defines_1.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/files_0.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/functions_0.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/pages_0.js (1 hunks)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/pages_1.js (1 hunks)
⛔ Files not processed due to max files limit (15)
  • lib/yyjson-0.12.0/doc/doxygen/html/search/pages_2.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/pages_3.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/pages_4.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/pages_5.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/pages_6.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/pages_7.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/search.css
  • lib/yyjson-0.12.0/doc/doxygen/html/search/search.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/searchdata.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/typedefs_0.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/variables_0.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/variables_1.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/variables_2.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/variables_3.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/variables_4.js
✅ Files skipped from review due to trivial changes (29)
  • lib/yyjson-0.12.0/doc/doxygen/html/globals.html
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_19.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/pages_1.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1c.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/pages_0.js
  • lib/yyjson-0.12.0/doc/doxygen/html/files_dup.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1f.js
  • lib/yyjson-0.12.0/doc/doxygen/html/pages.html
  • lib/yyjson-0.12.0/doc/doxygen/html/index.html
  • lib/yyjson-0.12.0/doc/doxygen/html/deprecated.html
  • lib/yyjson-0.12.0/doc/doxygen/html/search/files_0.js
  • lib/yyjson-0.12.0/doc/doxygen/html/building-and-testing.html
  • lib/yyjson-0.12.0/doc/doxygen/html/navtreeindex2.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1d.js
  • lib/yyjson-0.12.0/doc/doxygen/html/menudata.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1b.js
  • lib/yyjson-0.12.0/doc/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js
  • lib/yyjson-0.12.0/doc/doxygen/html/dir_e68e8157741866f444e17edd764ebbae.html
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_18.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_14.js
  • lib/yyjson-0.12.0/doc/doxygen/html/classes.html
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_d.js
  • lib/yyjson-0.12.0/doc/doxygen/html/files.html
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_defs.html
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_e.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_8.js
  • lib/yyjson-0.12.0/doc/doxygen/html/annotated.html
  • lib/yyjson-0.12.0/doc/doxygen/html/data-structures.html
  • lib/yyjson-0.12.0/doc/doxygen/html/annotated_dup.js
🚧 Files skipped from review as they are similar to previous changes (57)
  • lib/yyjson-0.12.0/doc/doxygen/html/doxygen_crawl.html
  • lib/yyjson-0.12.0/.gitattributes
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_17.js
  • lib/yyjson-0.12.0/.gitignore
  • lib/yyjson-0.12.0/.github/ISSUE_TEMPLATE/feature_request.md
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_c.js
  • benchmarks/CMakeLists.txt
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_b.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_16.js
  • cmake/libraries.cmake
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_vars.html
  • lib/yyjson-0.12.0/LICENSE
  • lib/yyjson-0.12.0/doc/doxygen/html/navtreeindex1.js
  • lib/yyjson-0.12.0/.github/ISSUE_TEMPLATE/discussion.md
  • lib/yyjson-0.12.0/doc/Performance.md
  • lib/yyjson-0.12.0/doc/doxygen/html/search/defines_1.js
  • lib/yyjson-0.12.0/doc/doxygen/html/functions.html
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_func.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_20.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_f.js
  • lib/yyjson-0.12.0/Package.swift
  • lib/yyjson-0.12.0/doc/doxygen/html/md__c_h_a_n_g_e_l_o_g.html
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_11.js
  • lib/yyjson-0.12.0/doc/doxygen/html/cookie.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_a.js
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_dup.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_12.js
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_y.html
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_4.js
  • lib/yyjson-0.12.0/doc/doxygen/html/doxygen-awesome-darkmode-toggle.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_3.js
  • CMakeLists.txt
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_5.js
  • lib/yyjson-0.12.0/doc/doxygen/html/functions_vars.html
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1a.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_6.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1e.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_15.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_2.js
  • lib/yyjson-0.12.0/doc/doxygen/html/dynsections.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_10.js
  • lib/yyjson-0.12.0/.github/ISSUE_TEMPLATE/bug_report.md
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_1.js
  • lib/yyjson-0.12.0/doc/doxygen/html/clipboard.js
  • lib/yyjson-0.12.0/doc/doxygen/html/navtreedata.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/defines_0.js
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_func.html
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_0.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/all_7.js
  • cmake/headers.cmake
  • lib/yyjson-0.12.0/doc/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
  • lib/yyjson-0.12.0/.github/workflows/cmake.yml
  • lib/yyjson-0.12.0/doc/doxygen/html/doxygen-awesome-sidebar-only-darkmode-toggle.css
  • lib/yyjson-0.12.0/doc/doxygen/html/globals_type.html
  • lib/yyjson-0.12.0/doc/doxygen/html/index.js
  • lib/yyjson-0.12.0/doc/doxygen/html/search/functions_0.js
  • lib/yyjson-0.12.0/cmake/XcodeProperty.cmake
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-31T12:46:11.940Z
Learnt from: ThomasDevoogdt
PR: fluent/fluent-bit#9277
File: .github/workflows/pr-compile-check.yaml:147-151
Timestamp: 2025-08-31T12:46:11.940Z
Learning: In fluent-bit CMakeLists.txt, the system library preference flags are defined as FLB_PREFER_SYSTEM_LIB_ZSTD and FLB_PREFER_SYSTEM_LIB_KAFKA with the FLB_ prefix.

Applied to files:

  • lib/yyjson-0.12.0/CMakeLists.txt
🧬 Code graph analysis (1)
benchmarks/pack_json.c (4)
src/flb_pack_json.c (1)
  • flb_pack_json_ext (23-64)
src/flb_mp.c (1)
  • flb_mp_count (43-46)
include/fluent-bit/flb_mem.h (1)
  • flb_free (126-128)
src/flb_utils.c (1)
  • flb_utils_read_file (1547-1550)
🪛 Biome (2.1.2)
lib/yyjson-0.12.0/doc/doxygen/html/navtree.js

[error] 35-35: eval() exposes to security risks and performance issues.

See the MDN web docs for more details.
Refactor the code so that it doesn't need to call eval().

(lint/security/noGlobalEval)


[error] 395-395: eval() exposes to security risks and performance issues.

See the MDN web docs for more details.
Refactor the code so that it doesn't need to call eval().

(lint/security/noGlobalEval)

lib/yyjson-0.12.0/doc/doxygen/html/doxygen-awesome.css

[error] 2164-2164: Unexpected shorthand property background after background-image

(lint/suspicious/noShorthandPropertyOverrides)


[error] 876-876: Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.

font-weight is already defined here.

Remove or rename the duplicate property to ensure consistent styling.

(lint/suspicious/noDuplicateProperties)


[error] 1026-1026: Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.

overflow is already defined here.

Remove or rename the duplicate property to ensure consistent styling.

(lint/suspicious/noDuplicateProperties)


[error] 1155-1155: Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.

position is already defined here.

Remove or rename the duplicate property to ensure consistent styling.

(lint/suspicious/noDuplicateProperties)


[error] 2168-2168: Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.

border-bottom is already defined here.

Remove or rename the duplicate property to ensure consistent styling.

(lint/suspicious/noDuplicateProperties)


[error] 2315-2315: Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.

overflow-x is already defined here.

Remove or rename the duplicate property to ensure consistent styling.

(lint/suspicious/noDuplicateProperties)


[error] 2321-2321: Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.

overflow-y is already defined here.

Remove or rename the duplicate property to ensure consistent styling.

(lint/suspicious/noDuplicateProperties)


[error] 2358-2358: Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.

display is already defined here.

Remove or rename the duplicate property to ensure consistent styling.

(lint/suspicious/noDuplicateProperties)

lib/yyjson-0.12.0/doc/doxygen/html/doxygen.css

[error] 444-444: Unknown property is not allowed.

See CSS Specifications and browser specific properties for more details.
To resolve this issue, replace the unknown property with a valid CSS property.

(lint/correctness/noUnknownProperty)


[error] 943-943: Unknown property is not allowed.

See CSS Specifications and browser specific properties for more details.
To resolve this issue, replace the unknown property with a valid CSS property.

(lint/correctness/noUnknownProperty)


[error] 1013-1013: Unknown property is not allowed.

See CSS Specifications and browser specific properties for more details.
To resolve this issue, replace the unknown property with a valid CSS property.

(lint/correctness/noUnknownProperty)


[error] 1564-1564: Unknown property is not allowed.

See CSS Specifications and browser specific properties for more details.
To resolve this issue, replace the unknown property with a valid CSS property.

(lint/correctness/noUnknownProperty)


[error] 379-379: Duplicate properties can lead to unexpected behavior and may override previous declarations unintentionally.

white-space is already defined here.

Remove or rename the duplicate property to ensure consistent styling.

(lint/suspicious/noDuplicateProperties)

lib/yyjson-0.12.0/doc/doxygen/html/navtree.css

[error] 92-92: unexpected character $

(parse)

lib/yyjson-0.12.0/doc/doxygen/html/navtreeindex0.js

[error] 118-119: This property is later overwritten by an object member with the same name.

Overwritten with this property.

If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property.

(lint/suspicious/noDuplicateObjectKeys)


[error] 121-122: This property is later overwritten by an object member with the same name.

Overwritten with this property.

If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property.

(lint/suspicious/noDuplicateObjectKeys)


[error] 126-127: This property is later overwritten by an object member with the same name.

Overwritten with this property.

If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property.

(lint/suspicious/noDuplicateObjectKeys)

🪛 markdownlint-cli2 (0.17.2)
lib/yyjson-0.12.0/README.md

33-33: Heading levels should only increment by one level at a time
Expected: h2; Actual: h4

(MD001, heading-increment)


73-73: Trailing punctuation in heading
Punctuation: ':'

(MD026, no-trailing-punctuation)


74-74: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


75-75: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


75-75: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


76-76: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


76-76: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


77-77: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


77-77: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


78-78: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


83-83: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


200-200: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


201-201: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


201-201: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


202-202: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


202-202: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


203-203: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


203-203: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


204-204: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


204-204: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


232-232: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


233-233: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


234-234: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


235-235: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


236-236: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


237-237: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


238-238: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


239-239: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


240-240: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


241-241: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)

lib/yyjson-0.12.0/doc/API.md

7-7: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


9-9: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


13-13: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


49-49: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


76-76: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


81-81: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


101-101: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


124-124: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


149-149: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


178-178: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


196-196: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


210-210: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


230-230: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


238-238: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


264-264: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


302-302: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


309-309: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


321-321: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


340-340: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


370-370: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


373-373: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


385-385: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


388-388: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


395-395: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


398-398: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


408-408: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


419-419: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


427-427: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


430-430: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


438-438: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


441-441: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


447-447: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


456-456: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


464-464: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


467-467: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


472-472: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


473-473: Bare URL used

(MD034, no-bare-urls)


494-494: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


498-498: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


541-541: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


568-568: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


596-596: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


643-643: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


647-647: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


655-655: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


658-658: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


662-662: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


670-670: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


678-678: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


687-687: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


695-695: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


702-702: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


706-706: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


712-712: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


721-721: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


723-723: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


745-745: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


863-863: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


887-887: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


941-941: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


967-967: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1024-1024: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1075-1075: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1115-1115: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1142-1142: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1179-1179: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1245-1245: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1275-1275: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1333-1333: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1335-1335: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1464-1464: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1482-1482: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1499-1499: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1501-1501: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1505-1505: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1506-1506: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1507-1507: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1508-1508: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1509-1509: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1519-1519: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1523-1523: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1524-1524: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1525-1525: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1526-1526: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1526-1526: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


1527-1527: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1527-1527: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


1528-1528: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1528-1528: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


1529-1529: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


1544-1544: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1561-1561: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1563-1563: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1577-1577: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1601-1601: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1607-1607: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1653-1653: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1667-1667: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1715-1715: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1725-1725: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1755-1755: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


1762-1762: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

lib/yyjson-0.12.0/doc/BuildAndTest.md

7-7: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


21-21: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


26-26: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


48-48: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


59-59: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


70-70: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


85-85: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


108-108: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


122-122: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


128-128: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


151-151: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


168-168: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


182-182: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


199-199: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)

lib/yyjson-0.12.0/doc/DataStructure.md

18-18: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


40-40: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


55-55: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


76-76: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


88-88: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

🪛 YAMLlint (1.37.1)
lib/yyjson-0.12.0/.github/codecov.yml

[error] 2-2: no new line character at the end of file

(new-line-at-end-of-file)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (26)
  • GitHub Check: pr-windows-build / call-build-windows-package (Windows 64bit (Arm64), amd64_arm64, -DCMAKE_SYSTEM_NAME=Windows -DCMA...
  • GitHub Check: pr-windows-build / call-build-windows-package (Windows 32bit, x86, x86-windows-static, 3.31.6)
  • GitHub Check: pr-windows-build / call-build-windows-package (Windows 64bit, x64, x64-windows-static, 3.31.6)
  • GitHub Check: run-ubuntu-unit-tests (-DSANITIZE_UNDEFINED=On, 3.31.6, clang, clang++)
  • GitHub Check: run-ubuntu-unit-tests (-DSANITIZE_ADDRESS=On, 3.31.6, clang, clang++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_SIMD=Off, 3.31.6, gcc, g++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_SANITIZE_MEMORY=On, 3.31.6, clang, clang++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_SANITIZE_THREAD=On, 3.31.6, clang, clang++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_SIMD=Off, 3.31.6, clang, clang++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_SIMD=On, 3.31.6, clang, clang++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_SANITIZE_MEMORY=On, 3.31.6, gcc, g++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_SIMD=On, 3.31.6, gcc, g++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_ARROW=On, 3.31.6, gcc, g++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_SANITIZE_THREAD=On, 3.31.6, gcc, g++)
  • GitHub Check: run-ubuntu-unit-tests (-DSANITIZE_ADDRESS=On, 3.31.6, gcc, g++)
  • GitHub Check: run-ubuntu-unit-tests (-DSANITIZE_UNDEFINED=On, 3.31.6, gcc, g++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_COVERAGE=On, 3.31.6, gcc, g++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_SMALL=On, 3.31.6, clang, clang++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_SMALL=On, 3.31.6, gcc, g++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_JEMALLOC=Off, 3.31.6, gcc, g++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_JEMALLOC=Off, 3.31.6, clang, clang++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_JEMALLOC=On, 3.31.6, gcc, g++)
  • GitHub Check: run-ubuntu-unit-tests (-DFLB_JEMALLOC=On, 3.31.6, clang, clang++)
  • GitHub Check: PR - fuzzing test
  • GitHub Check: pr-compile-system-libs (-DFLB_PREFER_SYSTEM_LIBS=On, 3.31.6, gcc, g++, ubuntu-24.04, clang-14)
  • GitHub Check: pr-compile-centos-7
🔇 Additional comments (9)
lib/yyjson-0.12.0/doc/doxygen/html/search/classes_0.js (1)

1-22: LGTM: static Doxygen search index; no external refs in this file

This JS looks like stock Doxygen output. Safe to vendor as-is.

lib/yyjson-0.12.0/doc/doxygen/html/search/all_13.js (1)

1-14: LGTM: generated Doxygen asset

This looks like standard Doxygen-generated search index; safe to vendor as-is.

lib/yyjson-0.12.0/doc/doxygen/html/resize.js (1)

26-46: LGTM.

Width persistence and margin updates look correct; cookie name is scoped and barWidth handling is sane.

lib/yyjson-0.12.0/doc/doxygen/html/menu.js (1)

25-133: Docs UI changes look fine.

Menu construction, responsive toggle, and search box placement read correctly.

lib/yyjson-0.12.0/doc/doxygen/DoxyLayout.xml (1)

1-269: Comprehensive layout structure looks good!

The Doxygen layout configuration is well-structured and covers all necessary documentation components for yyjson. The navigation tabs and page templates are appropriately configured for a C library documentation.

lib/yyjson-0.12.0/CMakeLists.txt (1)

5-6: LGTM! Proper CMake version range support

Good use of CMake version range syntax (3.5...3.31) for compatibility with both old and new CMake versions.

lib/yyjson-0.12.0/CHANGELOG.md (1)

1-207: Verified — yyjson v0.12.0 (released 2025-08-18) is the latest release. No action required for this PR.

lib/yyjson-0.12.0/doc/doxygen/html/search/all_9.js (1)

1-6: LGTM on generated doc asset.

No functional impact.

lib/yyjson-0.12.0/README.md (1)

243-246: License compliance check.

README states MIT; ensure lib/yyjson-0.12.0/LICENSE is included and NOTICE/THIRD_PARTY files (if any) reference it.

Comment on lines +32 to +36
ret = flb_pack_json_ext(json, len, &out_buf1, &out_size1, &root_type1, &opts);
if (ret != 0) {
fprintf(stderr, "error jsmn\n");
return -1;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix memory leak when first encoding fails

If the first encoding fails, out_buf1 is not freed before returning, causing a memory leak.

 /* jsmn */
 opts.backend = FLB_PACK_JSON_BACKEND_JSMN;
 ret = flb_pack_json_ext(json, len, &out_buf1, &out_size1, &root_type1, &opts);
 if (ret != 0) {
     fprintf(stderr, "error jsmn\n");
     return -1;
 }

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In benchmarks/pack_json.c around lines 32-36, the error path after
flb_pack_json_ext failing returns without freeing out_buf1 causing a memory
leak; before returning on ret != 0, free(out_buf1) (but only if it’s non-NULL),
and ensure out_buf1 is initialized to NULL prior to the call so the cleanup is
safe.

Comment on lines +118 to +128
"functions_vars.html":[6,2,2,1],
"globals.html":[6,1,0],
"globals.html":[6,1,0,0],
"globals_defs.html":[6,1,4],
"globals_func.html":[6,1,1],
"globals_func.html":[6,1,1,0],
"globals_type.html":[6,1,3],
"globals_vars.html":[6,1,2],
"globals_y.html":[6,1,0,1],
"index.html":[],
"index.html":[0],
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Duplicate keys in NAVTREEINDEX0 break lint and shadow earlier entries.

Keys repeat for:

  • Line 119 vs 120: "globals.html"
  • Line 122 vs 123: "globals_func.html"
  • Line 127 vs 128: "index.html"

Keep the last occurrence of each and remove earlier ones to satisfy noDuplicateObjectKeys.

Apply minimal deletions:

- "globals.html":[6,1,0],
+ /* removed duplicate "globals.html" entry; last occurrence kept */
- "globals_func.html":[6,1,1],
+ /* removed duplicate "globals_func.html" entry; last occurrence kept */
- "index.html":[],
+ /* removed duplicate "index.html" entry; last occurrence kept */
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"functions_vars.html":[6,2,2,1],
"globals.html":[6,1,0],
"globals.html":[6,1,0,0],
"globals_defs.html":[6,1,4],
"globals_func.html":[6,1,1],
"globals_func.html":[6,1,1,0],
"globals_type.html":[6,1,3],
"globals_vars.html":[6,1,2],
"globals_y.html":[6,1,0,1],
"index.html":[],
"index.html":[0],
"functions_vars.html":[6,2,2,1],
/* removed duplicate "globals.html" entry; last occurrence kept */
"globals.html":[6,1,0,0],
"globals_defs.html":[6,1,4],
/* removed duplicate "globals_func.html" entry; last occurrence kept */
"globals_func.html":[6,1,1,0],
"globals_type.html":[6,1,3],
"globals_vars.html":[6,1,2],
"globals_y.html":[6,1,0,1],
/* removed duplicate "index.html" entry; last occurrence kept */
"index.html":[0],
🧰 Tools
🪛 Biome (2.1.2)

[error] 118-119: This property is later overwritten by an object member with the same name.

Overwritten with this property.

If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property.

(lint/suspicious/noDuplicateObjectKeys)


[error] 121-122: This property is later overwritten by an object member with the same name.

Overwritten with this property.

If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property.

(lint/suspicious/noDuplicateObjectKeys)


[error] 126-127: This property is later overwritten by an object member with the same name.

Overwritten with this property.

If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
Unsafe fix: Remove this property.

(lint/suspicious/noDuplicateObjectKeys)

🤖 Prompt for AI Agents
In lib/yyjson-0.12.0/doc/doxygen/html/navtreeindex0.js around lines 118 to 128,
there are duplicate object keys that break linting (duplicate "globals.html" at
line 119 vs 120, duplicate "globals_func.html" at line 122 vs 123, and duplicate
"index.html" at line 127 vs 128); remove the earlier occurrences (lines 119, 122
and 127) so only the last occurrence of each key remains, keeping the minimal
deletions necessary to eliminate duplicate keys.

@edsiper edsiper merged commit fb653d4 into master Sep 19, 2025
52 of 56 checks passed
@edsiper edsiper deleted the pack-json-yyjson branch September 19, 2025 12:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant