Visitar URL original
fix(security): clear the Meterian findings - Guava CVE pin, JSZip and pdfmake out of Studio, e2e harnesses out of scope by lvca · Pull Request #11237 · ArcadeData/arcadedb · GitHub
Skip to content

fix(security): clear the Meterian findings - Guava CVE pin, JSZip and pdfmake out of Studio, e2e harnesses out of scope - #11237

Merged
lvca merged 1 commit into
mainfrom
fix/meterian-findings
Nov 3, 2026
Merged

lvca merged 1 commit into
mainfrom
fix/meterian-findings

Conversation

@lvca

@lvca lvca commented Nov 3, 2026 •

Copy link
Copy Markdown
Member

What

Clears the security findings of the Meterian report on main (security score 0: 2 high, 1 medium, 8 low).

Guava CVE-2026-102554 (high, CVSS 8)

com.google.guava:guava:33.6.0-android reaches the build only through grpc-netty-shaded (grpc, grpc-client, grpcw). The latest gRPC, 1.85.1, still pulls 33.6.0-android, so a gRPC bump does not fix it. Guava is now pinned to 33.7.2-android in the root dependencyManagement, keeping the -android flavor every module already resolves. dependency:tree confirms 33.7.2-android everywhere. Drop the pin once gRPC ships a fixed Guava.

JSZip replaced (setimmediate high, lie medium, 3 low)

JSZip was used only by the result table's Excel button. js/studio-zip.js implements the part of the JSZip API that DataTables Buttons calls (new, folder(), file(), generateAsync()). It deflates with the browser's CompressionStream and stores entries uncompressed where that is missing or an entry would not shrink. It is registered through DataTable.Buttons.jszip(). JSZip, pako, readable-stream, lie, immediate, setimmediate and their helpers leave the lock file.

PDF export dropped (fast-deep-equal, tiny-inflate low)

Both come from fontkit, pdfmake's font engine, which depends on them directly in every release, so no upgrade or override removes them. The PDF button is removed, and so are pdfmake and its fonts, which were about 2 MB of the Studio jar. Print still offers the browser's "Save as PDF". The sax and png-js attribution rows and the license test's png-js exception go with it.

Meterian scope (ieee754, xtend low, 3 Python suggestions)

These come only from the e2e-js and e2e-python test harnesses, which ship in no distribution. They are added to --exclude-folders next to e2e-go. e2e-js keeps the blocking runtime npm audit of e2e-dependency-audit.yml, and both stay under Dependabot. I did not move the e2e-js drivers to devDependencies, because that would turn that audit gate into a no-op.

Tests

  • studio/test/excel-export-zip.test.js: reads the archive back with an independent reader built on node:zlib and checks offsets, sizes, CRCs, UTF-8 names and text, the uncompressed fallback, the DataTables registration and the index.html wiring. Passes on Node 26 and on the Node 20.20 that Maven pins.
  • studio/test/table-export-buttons.test.js: checks the button set is copy, Excel, CSV and print, and that pdfmake, fontkit, fast-deep-equal and tiny-inflate are not shipped.
  • Full Studio suite: 547/547 passing. npm run build compiles.
  • Excel export checked by hand in Chrome: DataTables' own excelHtml5 action on 300 rows produced an .xlsx that passes unzip -t and opens in openpyxl with every value intact, including accented and CJK text and <, &, ".
  • gRPC modules (grpc, grpc-client, grpcw with -am) build and their unit tests pass with the Guava pin.

Summary by CodeRabbit

  • Changes
    • Result-table exports now offer Copy, Excel, CSV, and Print. PDF export is no longer available.
    • Excel, CSV, and print options remain available alongside Copy. Other result-table export options are unchanged.

… pdfmake out of Studio, e2e harnesses out of scope

- Pin com.google.guava:guava to 33.7.2-android in dependencyManagement: grpc-netty-shaded 1.84.0 (and 1.85.1)
  still pulls 33.6.0-android, affected by CVE-2026-102554 / GHSA-xxph-c9ww-hj94
- Studio's Excel export zips with js/studio-zip.js, a JSZip-compatible writer on the browser's CompressionStream,
  instead of JSZip and its unmaintained setimmediate, lie, immediate and readable-stream helpers
- Drop the result table's PDF button and pdfmake: fontkit pulls fast-deep-equal and tiny-inflate with no maintained
  release, and pdfmake plus fonts were ~2 MB of the Studio jar; Print still offers the browser's Save as PDF
- Exclude e2e-js and e2e-python from the Meterian scan as e2e-go already is: test harnesses that ship in no
  distribution, whose client drivers Meterian scored as production code
@mergify

mergify Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

This pull request does not currently match the merge queue conditions, so it cannot be queued from here. The box comes back if it matches again.

@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 complexity

Metric Results
Complexity 0

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Caution

Review failed

The pull request is closed.

Walkthrough

Studio removes PDF export and replaces JSZip with a local ZIP writer for Excel export. The changes also update related tests, dependency records, and attribution entries. The parent POM manages a newer Guava version, and the Meterian workflow excludes additional end-to-end dependency folders.

Changes: Studio export changes

Layer / File(s) Summary
ZIP writer and export wiring
studio/src/main/resources/static/js/studio-zip.js, studio/src/main/resources/static/js/studio-table.js, studio/src/main/resources/static/index.html, studio/package.json, studio/webpack.config.js
Studio adds a ZIP writer registered with DataTables Buttons and removes the PDF button. It removes JSZip and PDFMake dependencies and related runtime assets.
Export checks and dependency records
studio/test/excel-export-zip.test.js, studio/test/table-export-buttons.test.js, e2e-studio/tests/*, ATTRIBUTIONS.md, studio/test/dependency-licenses.test.js
Tests cover ZIP output and the remaining export buttons. End-to-end checks, attribution entries, and the licence exception map reflect the dependency and export changes.

Guava dependency management

Layer / File(s) Summary
Managed Guava version
pom.xml, ATTRIBUTIONS.md
The parent POM manages Guava at version 33.7.2-android, and the attribution entry records that version.

Meterian scan exclusions

Layer / File(s) Summary
Scanner folder exclusions
.github/workflows/meterian.yml
The Meterian workflow excludes e2e-js and e2e-python in addition to e2e-go.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Other

Sequence Diagram(s)

sequenceDiagram
  participant Buttons as DataTables Buttons
  participant Writer as StudioZip
  participant Compression as CompressionStream
  Buttons->>Writer: Generate ZIP for Excel export
  Writer->>Compression: Request raw DEFLATE when available
  Compression-->>Writer: Return compressed entry data
  Writer-->>Buttons: Return ZIP Blob
Loading

Possibly related PRs

  • ArcadeData/arcadedb#10627: Adds the Studio dependency licence gate and reviewed exceptions, which this change also updates.

Suggested labels: security, studio

Suggested reviewers: robfrank

Merge Risk: Low · up to 605a6

Excel export is not covered end to end by an automated test. Adding a download check would reduce regression risk, but the coverage gap alone does not establish that export is broken.

- [ ] Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.

@claude

claude Bot commented Nov 3, 2026

Copy link
Copy Markdown

Review

Overall this looks good. It's a focused security cleanup.

studio-zip.js: I checked the ZIP layout by hand against the spec. Local header, central directory and EOCD offsets and field sizes are all correct. UTF-8 flag, raw deflate, stored fallback when deflate doesn't shrink, and the size/entry-count guards are all fine. A unit test exists (studio/test/excel-export-zip.test.js).

Minor suggestions (non-blocking):

  • generateAsync ignores the compression option unless it is exactly "DEFLATE". That matches what Buttons passes, but a comment saying so would help.
  • DataTable.Buttons.jszip(...) is skipped silently if DataTables loads later than this script. The current script order is fine, but a guard or a note in the load-order docs would help.
  • The Excel export is the only consumer, so a quick e2e check that the produced .xlsx opens in Excel/LibreOffice would be a good manual verification.
  • The CRC loop and new Uint8Array(f.content) are fine for table-sized exports.

Guava pin (33.7.2-android in dependencyManagement) is reasonable, and the comment about dropping it later is useful.

PDF removal: this is a user-visible feature loss. It is justified and documented, and Print still offers Save as PDF. It may be worth a release-note mention.

Security: no hazards found. It removes vulnerable dependencies, adds no new ones, has no inline script (CSP-compatible), and the new ZIP code only handles locally generated strings.

🤖 Generated with Claude Code

@lvca
lvca merged commit 569f0d4 into main Nov 3, 2026
23 of 24 checks passed
@lvca
lvca deleted the fix/meterian-findings branch November 3, 2026 19:47
@lvca lvca self-assigned this Nov 3, 2026
@lvca lvca added this to the 26.11.1 milestone Nov 3, 2026
@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

📜 License Compliance Check

✅ License check passed. See artifacts for full report.

License Summary (first 50 lines)

Lists of 416 third-party dependencies.
     (CC0 1.0 Universal) AOP alliance (aopalliance:aopalliance:1.0 - http://aopalliance.sourceforge.net)
     (Apache License 2.0) LZ4 Java Compression (at.yawk.lz4:lz4-java:1.12.1 - https://github.com/yawkat/lz4-java)
     (EPL-2.0) (LGPL-2.1-only) Logback Classic Module (ch.qos.logback:logback-classic:1.6.6 - http://logback.qos.ch/logback-classic)
     (EPL-2.0) (LGPL-2.1-only) Logback Core Module (ch.qos.logback:logback-core:1.6.6 - http://logback.qos.ch/logback-core)
     (Apache 2) ArcadeDB BOLT Protocol (com.arcadedb:arcadedb-bolt:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-bolt/)
     (Apache 2) ArcadeDB Console (com.arcadedb:arcadedb-console:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-console/)
     (Apache 2) ArcadeDB Engine (com.arcadedb:arcadedb-engine:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-engine/)
     (Apache 2) ArcadeDB GraphQL (com.arcadedb:arcadedb-graphql:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-graphql/)
     (Apache 2) ArcadeDB Gremlin (com.arcadedb:arcadedb-gremlin:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-gremlin/)
     (Apache 2) ArcadeDB gRPC Stubs (com.arcadedb:arcadedb-grpc:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpc/)
     (Apache 2) ArcadeDB gRPC Client (com.arcadedb:arcadedb-grpc-client:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpc-client/)
     (Apache 2) ArcadeDB gRpcW (com.arcadedb:arcadedb-grpcw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpcw/)
     (Apache 2) ArcadeDB HA Raft (com.arcadedb:arcadedb-ha-raft:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-ha-raft/)
     (Apache 2) ArcadeDB Integration (com.arcadedb:arcadedb-integration:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-integration/)
     (Apache 2) ArcadeDB load tests (com.arcadedb:arcadedb-load-tests:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-load-tests/)
     (Apache 2) ArcadeDB MCP Server (com.arcadedb:arcadedb-mcp:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-mcp/)
     (Apache 2) ArcadeDB Metrics (com.arcadedb:arcadedb-metrics:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-metrics/)
     (Apache 2) ArcadeDB MongoDB Wire Protocol (com.arcadedb:arcadedb-mongodbw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-mongodbw/)
     (Apache 2) ArcadeDB Network (com.arcadedb:arcadedb-network:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-network/)
     (Apache 2) ArcadeDB PostgresW (com.arcadedb:arcadedb-postgresw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-postgresw/)
     (Apache 2) ArcadeDB RedisW (com.arcadedb:arcadedb-redisw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-redisw/)
     (Apache 2) ArcadeDB Server (com.arcadedb:arcadedb-server:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-server/)
     (Apache 2) ArcadeDB Studio (com.arcadedb:arcadedb-studio:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-studio/)
     (Apache 2) ArcadeDB Tracing (com.arcadedb:arcadedb-tracing:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-tracing/)
     (Apache License 2.0) HPPC Collections (com.carrotsearch:hppc:0.7.1 - http://labs.carrotsearch.com/hppc.html/hppc)
     (Apache License 2.0) Metrics Core (com.codahale.metrics:metrics-core:3.0.2 - http://metrics.codahale.com/metrics-core/)
     (The Apache License, Version 2.0) com.conversantmedia:disruptor (com.conversantmedia:disruptor:1.2.21 - https://github.com/conversant/disruptor)
     (Apache License 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.22 - https://github.com/FasterXML/jackson)
     (Apache License 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.22.4 - https://github.com/FasterXML/jackson-core)
     (Apache License 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.22.4 - https://github.com/FasterXML/jackson)
     (Apache License 2.0) Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.22.4 - https://github.com/FasterXML/jackson-dataformats-text)
     (Apache License 2.0) Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.22.4 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
     (Apache License 2.0) Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.22.4 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
     (Apache License 2.0) Caffeine cache (com.github.ben-manes.caffeine:caffeine:2.3.1 - https://github.com/ben-manes/caffeine)
     (Apache License 2.0) docker-java-api (com.github.docker-java:docker-java-api:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache License 2.0) docker-java-transport (com.github.docker-java:docker-java-transport:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache License 2.0) docker-java-transport-zerodep (com.github.docker-java:docker-java-transport-zerodep:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) btf (com.github.java-json-tools:btf:1.3 - https://github.com/java-json-tools/btf)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) jackson-coreutils (com.github.java-json-tools:jackson-coreutils:2.0 - https://github.com/java-json-tools/jackson-coreutils)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) jackson-coreutils-equivalence (com.github.java-json-tools:jackson-coreutils-equivalence:1.0 - https://github.com/java-json-tools/jackson-coreutils)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-patch (com.github.java-json-tools:json-patch:1.13 - https://github.com/java-json-tools/json-patch)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-schema-core (com.github.java-json-tools:json-schema-core:1.2.14 - https://github.com/java-json-tools/json-schema-core)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-schema-validator (com.github.java-json-tools:json-schema-validator:2.2.14 - https://github.com/java-json-tools/json-schema-validator)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) msg-simple (com.github.java-json-tools:msg-simple:1.2 - https://github.com/java-json-tools/msg-simple)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) uri-template (com.github.java-json-tools:uri-template:0.10 - https://github.com/java-json-tools/uri-template)
     (Apache License 2.0) JCIP Annotations under Apache License (com.github.stephenc.jcip:jcip-annotations:1.0-1 - http://stephenc.github.com/jcip-annotations)
     (Apache License 2.0) Google Android Annotations Library (com.google.android:annotations:4.1.1.4 - http://source.android.com/)
     (BSD 3-Clause) API Common (com.google.api:api-common:2.53.0 - https://github.com/googleapis/sdk-platform-java)

lvca added a commit that referenced this pull request Nov 3, 2026
… stability (#11243)

PR #11237 took the security score from 0 to 98, so the continue-on-error that hid a score no PR could move is removed. --min-stability=0 keeps version drift out of the gate, and --fail-gracefully keeps a Meterian-side analysis failure from turning the check red.
robfrank pushed a commit that referenced this pull request Nov 5, 2026
… pdfmake out of Studio, e2e harnesses out of scope (#11237)

- Pin com.google.guava:guava to 33.7.2-android in dependencyManagement: grpc-netty-shaded 1.84.0 (and 1.85.1)
  still pulls 33.6.0-android, affected by CVE-2026-102554 / GHSA-xxph-c9ww-hj94
- Studio's Excel export zips with js/studio-zip.js, a JSZip-compatible writer on the browser's CompressionStream,
  instead of JSZip and its unmaintained setimmediate, lie, immediate and readable-stream helpers
- Drop the result table's PDF button and pdfmake: fontkit pulls fast-deep-equal and tiny-inflate with no maintained
  release, and pdfmake plus fonts were ~2 MB of the Studio jar; Print still offers the browser's Save as PDF
- Exclude e2e-js and e2e-python from the Meterian scan as e2e-go already is: test harnesses that ship in no
  distribution, whose client drivers Meterian scored as production code

(cherry picked from commit 569f0d4)
robfrank pushed a commit that referenced this pull request Nov 5, 2026
… stability (#11243)

PR #11237 took the security score from 0 to 98, so the continue-on-error that hid a score no PR could move is removed. --min-stability=0 keeps version drift out of the gate, and --fail-gracefully keeps a Meterian-side analysis failure from turning the check red.

(cherry picked from commit cec6e57)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant