Skip to content

Fix and triage CodeQL/Semgrep code-scanning alerts - #1049

Merged
ekharkunov merged 15 commits into
devfrom
codeql-fixes
Sep 8, 2026
Merged

ekharkunov merged 15 commits into
devfrom
codeql-fixes

Conversation

@ekharkunov

@ekharkunov ekharkunov commented Sep 5, 2026 •

Copy link
Copy Markdown
Contributor

Code fixes

Bugs

Deprecations / cleanup

  • Strings.CS.removeEnd, shared ContextSnapshotFactory, GCP InstancesSettings with explicit background and transport executors, missing @Override, shadowed local, unused parameters and test array.

- Reject whitespace and leading '@' in extension manifest values that are
  rendered unquoted into command templates (emscriptenLinkFlags,
  aaptExtraPackages, excludeLibs, ...), since the rendered command is split
  on whitespace before ProcessBuilder.
- Reject uploaded filenames where a whitespace-delimited token starts with
  '-' or '@'.
- Replace the ambiguous FILENAME_RE alternation with an equivalent regex
  that cannot backtrack exponentially.
- Allow-list platform and sdkVersion path variables in buildEngineAsync.
- Validate baseVariant before it is used as a path component.
- Create the SDK download temp file with owner-only permissions.
- Neutralize line breaks and control characters when logging a template
  that failed to render.
- Use Files.createDirectories where a silently failing mkdir would be
  swallowed later (AsyncBuilder result dir, javac class dirs, R.java dir,
  packages dir, remote upload tmp dir, local disk cache parent dir).
- Drop mkdir/createNewFile calls whose target is created by the following
  copy or write anyway, and the dead META-INF directory.
- Write the R8 main dex list in one call instead of createNewFile plus
  per-line appends.
- Return null from PodSpecParser.getStringListValues for non-string,
  non-array values instead of dereferencing a null list.
- Use Files.setLastModifiedTime in the client test helper so a failure
  cannot silently leave a stale timestamp.
- Remove null guards that sat after an unconditional dereference.
- Strings.CS.removeEnd instead of the deprecated StringUtils.removeEnd.
- Share one ContextSnapshotFactory for the context-propagating executors
  instead of the deprecated ContextSnapshot::captureAll overloads.
- Configure the GCP InstancesClient with setBackgroundExecutorProvider and
  an explicit HTTP/JSON transport executor; setExecutorProvider is
  deprecated but used to set both, so this keeps the thread cap intact.
- Add missing @OverRide annotations in ResolvedPods, rename a shadowing
  local, drop an unused string copy, an unused test array and unused
  parameters.
@github-actions

github-actions Bot commented Sep 5, 2026 •

Copy link
Copy Markdown

Summary - Extender code coverage report

Summary
Generated on: 09/08/2026 - 06:57:50
Coverage date: 09/08/2026 - 06:57:16
Parser: JaCoCo
Assemblies: 16
Classes: 107
Files: 107
Line coverage: 48.7% (4006 of 8220)
Covered lines: 4006
Uncovered lines: 4214
Coverable lines: 8220
Total lines: 16912
Branch coverage: 51.1% (1844 of 3604)
Covered branches: 1844
Total branches: 3604
Method coverage: Feature is only available for sponsors
Tag: 260_34196924551

Coverage

com/defold/extender - 43.2%
Name Line Branch
com/defold/extender 43.2% 49.2%
com/defold/extender/AppManifestConfiguration 100%
com/defold/extender/AppManifestPlatformConfig 100%
com/defold/extender/AsyncBuilder 0% 0%
com/defold/extender/BuilderConstants 80%
com/defold/extender/BuildProgressController 93.1% 91.6%
com/defold/extender/Configuration 100%
com/defold/extender/Extender 14.6% 14.5%
com/defold/extender/ExtenderApplication 0%
com/defold/extender/ExtenderBuildState 62.5% 57.1%
com/defold/extender/ExtenderConst 0%
com/defold/extender/ExtenderController 17.4% 19.7%
com/defold/extender/ExtenderException 100%
com/defold/extender/ExtenderUtil 70.7% 62.3%
com/defold/extender/ExtenderYamlSafeConstructor 100%
com/defold/extender/ExtensionManifestValidator 95.4% 89.4%
com/defold/extender/ManifestConfiguration 100%
com/defold/extender/ManifestPlatformConfig 100%
com/defold/extender/PlatformConfig 100%
com/defold/extender/PlatformNotSupportedException 0%
com/defold/extender/R8Builder 87.5% 76.8%
com/defold/extender/R8Configuration 93.5% 50%
com/defold/extender/R8RulePolicy 76% 70.4%
com/defold/extender/RequestErrorAdvice 89.6% 75%
com/defold/extender/SandboxedPath 72.5% 71.4%
com/defold/extender/TemplateExecutor 39.1% 50%
com/defold/extender/Timer 100%
com/defold/extender/TreePrinter 0% 0%
com/defold/extender/Version 0%
com/defold/extender/VersionNotSupportedException 0%
com/defold/extender/WebSecurityConfig 0% 0%
com/defold/extender/WhitelistConfig 100%
com/defold/extender/ZipUtils 80.3% 69.2%
com/defold/extender/builders - 0%
Name Line Branch
com/defold/extender/builders 0% 0%
com/defold/extender/builders/CSharpBuilder 0% 0%
com/defold/extender/cache - 32.8%
Name Line Branch
com/defold/extender/cache 32.8% 15.6%
com/defold/extender/cache/CacheEntry 64.7% 75%
com/defold/extender/cache/CacheKeyGenerator 81.8% 100%
com/defold/extender/cache/DataCache
com/defold/extender/cache/DataCacheFactory 5% 0%
com/defold/extender/cache/DummyDataCache 80%
com/defold/extender/cache/GCPDataCache 0% 0%
com/defold/extender/cache/LocalDiskDataCache 66.6% 0%
com/defold/extender/cache/info - 100%
Name Line Branch
com/defold/extender/cache/info 100% ****
com/defold/extender/cache/info/CacheInfoFileParser 100%
com/defold/extender/cache/info/CacheInfoFileWriter 100%
com/defold/extender/cache/info/CacheInfoWrapper 100%
com/defold/extender/jetty - 82.6%
Name Line Branch
com/defold/extender/jetty 82.6% 52.9%
com/defold/extender/jetty/ExtenderJettyErrorHandler 75.8% 36.3%
com/defold/extender/jetty/JettyRequestEventsHandler 86.6% 83.3%
com/defold/extender/jetty/JettyServerConfiguration 100%
com/defold/extender/log - 40%
Name Line Branch
com/defold/extender/log 40% 60%
com/defold/extender/log/ExtenderLogEnhancer 0% 0%
com/defold/extender/log/ExtenderLogEnhancerConfiguration 0% 0%
com/defold/extender/log/LogSanitizer 100% 100%
com/defold/extender/log/Markers 80%
com/defold/extender/metrics - 37.5%
Name Line Branch
com/defold/extender/metrics 37.5% ****
com/defold/extender/metrics/MetricsWriter 37.5%
com/defold/extender/process - 73.4%
Name Line Branch
com/defold/extender/process 73.4% 77.2%
com/defold/extender/process/CommandLineTokenizer 97.7% 92.6%
com/defold/extender/process/ProcessExecutor 64.3% 61.1%
com/defold/extender/process/ProcessUtils 0% 0%
com/defold/extender/progress - 90.6%
Name Line Branch
com/defold/extender/progress 90.6% 81.6%
com/defold/extender/progress/BuildProgressEvent 100%
com/defold/extender/progress/BuildProgressService 90.2% 80.5%
com/defold/extender/progress/BuildStage 100% 100%
com/defold/extender/progress/ProgressReporter 40%
com/defold/extender/remote - 88.9%
Name Line Branch
com/defold/extender/remote 88.9% 67.2%
com/defold/extender/remote/RemoteBuildException 100%
com/defold/extender/remote/RemoteEngineBuilder 93.2% 71.8%
com/defold/extender/remote/RemoteHostConfiguration 100%
com/defold/extender/remote/RemoteInstanceConfig 100%
com/defold/extender/remote/RemoteProgressRelay 76.7% 60.8%
com/defold/extender/services - 57.7%
Name Line Branch
com/defold/extender/services 57.7% 47.2%
com/defold/extender/services/DataCacheService 79.8% 61.9%
com/defold/extender/services/DefoldSdkService 75.5% 61%
com/defold/extender/services/DefoldSdkServiceConfiguration
com/defold/extender/services/GCPInstanceService 1.1% 0%
com/defold/extender/services/GradleArtifact 100%
com/defold/extender/services/GradleService 0%
com/defold/extender/services/GradleServiceInterface
com/defold/extender/services/HealthReporterService 82.4% 55.2%
com/defold/extender/services/MockGradleService 0%
com/defold/extender/services/RealGradleService 55.9% 40%
com/defold/extender/services/ResolvedNativeDeps 0%
com/defold/extender/services/UserUpdateService 0% 0%
com/defold/extender/services/cocoapods - 52%
Name Line Branch
com/defold/extender/services/cocoapods 52% 57%
com/defold/extender/services/cocoapods/CocoaPodsService 9.4% 20.6%
com/defold/extender/services/cocoapods/CocoaPodsServiceBuildState 16.6% 0%
com/defold/extender/services/cocoapods/CreateBuildSpecArgs 60.7%
com/defold/extender/services/cocoapods/IConfigParser
com/defold/extender/services/cocoapods/LanguageSet 66.6% 50%
com/defold/extender/services/cocoapods/MainPodfile 20%
com/defold/extender/services/cocoapods/PlatformAndLanguageSet 0% 0%
com/defold/extender/services/cocoapods/PlatformSet 0% 0%
com/defold/extender/services/cocoapods/PlistBuddyWrapper 0% 0%
com/defold/extender/services/cocoapods/PodBuildSpec 81.4% 65.4%
com/defold/extender/services/cocoapods/PodfileParser 94.9% 82.2%
com/defold/extender/services/cocoapods/PodfileParsingException 100%
com/defold/extender/services/cocoapods/PodSpec 60.4% 40%
com/defold/extender/services/cocoapods/PodSpecParser 92.2% 82.2%
com/defold/extender/services/cocoapods/PodUtils 63% 51.4%
com/defold/extender/services/cocoapods/ResolvedPods 51.5% 45.6%
com/defold/extender/services/cocoapods/XCConfigParser 94.5% 85.2%
com/defold/extender/services/data - 80.7%
Name Line Branch
com/defold/extender/services/data 80.7% 75%
com/defold/extender/services/data/DefoldSdk 87.5% 75%
com/defold/extender/services/data/GCPInstanceState 0%
com/defold/extender/services/spm - 40.6%
Name Line Branch
com/defold/extender/services/spm 40.6% 47.7%
com/defold/extender/services/spm/ResolvedPackages 0% 0%
com/defold/extender/services/spm/SpmBuildOutputParser 91.3% 81.1%
com/defold/extender/services/spm/SpmManifestParser 87.3% 72.1%
com/defold/extender/services/spm/SpmManifestParsingException 100%
com/defold/extender/services/spm/SpmServiceBuildState 0% 0%
com/defold/extender/services/spm/SpmServiceConfiguration 0%
com/defold/extender/services/spm/SwiftPackageManagerService 0% 0%
com/defold/extender/tracing - 21.2%
Name Line Branch
com/defold/extender/tracing 21.2% 25%
com/defold/extender/tracing/ExtenderExecutor 0% 0%
com/defold/extender/tracing/ExtenderTracerInterceptor 100% 100%
com/defold/extender/tracing/TraceIdInResponseServletFilter 0% 0%
com/defold/extender/utils - 18.1%
Name Line Branch
com/defold/extender/utils 18.1% 32.5%
com/defold/extender/utils/FrameworkUtil 0% 0%
com/defold/extender/utils/PodBuildUtil 0% 0%
com/defold/extender/utils/VersionUtil 69.2% 65%

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 18bd0185aa

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread server/src/main/java/com/defold/extender/ExtensionManifestValidator.java Outdated
Comment thread server/src/main/java/com/defold/extender/ExtenderController.java Fixed
@ekharkunov

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 459b8305ff

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread server/src/main/java/com/defold/extender/AsyncBuilder.java Outdated
CommandLineTokenizer treats a backslash as an escape, so a manifest value
ending in one swallows the separator space the template emits and merges
the next token into it. With the web linkCmd, ["EXPORT_NAME=x\\", "-o/tmp/x.js"]
renders as `-s EXPORT_NAME=x\ -s -o/tmp/x.js`, which tokenizes with the
attacker's -o as a standalone argv element controlling the output path.

Quotes stay allowed: they can only merge tokens, never create one, and the
SDK build.yml uses EXPORTED_RUNTIME_METHODS=["ccall", ...].
paths-ignore has no effect for a compiled language analysed with a traced
build, so the autobuild step kept extracting server/src/test and alerting
on test code. Compile the main source sets explicitly instead; `classes`
covers :server, :client and :manifestmergetool without compileTestJava.

Keeping paths-ignore as-is, annotated, in case the scan ever moves to
buildless analysis.
@ekharkunov

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 04615c1d44

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread server/src/main/java/com/defold/extender/ExtenderController.java Outdated
@ekharkunov

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c67fb7fa47

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread server/src/main/java/com/defold/extender/ExtensionManifestValidator.java Outdated
@ekharkunov

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4c55b1e11f

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread server/src/main/java/com/defold/extender/ExtensionManifestValidator.java Outdated
@ekharkunov

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Already looking forward to the next diff.

Reviewed commit: d7a98a8c23

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@ekharkunov
ekharkunov merged commit dffa684 into dev Sep 8, 2026
5 checks passed
@ekharkunov
ekharkunov deleted the codeql-fixes branch September 28, 2026 10:15
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.

2 participants