Skip to content

fix(internal/snippetmetadata): disable HTML escaping in JSON output - #6777

Merged
codyoss merged 6 commits into
googleapis:mainfrom
codyoss:snippet-metadata-fix
Jul 13, 2026
Merged

fix(internal/snippetmetadata): disable HTML escaping in JSON output#6777
codyoss merged 6 commits into
googleapis:mainfrom
codyoss:snippet-metadata-fix

Conversation

@codyoss

@codyoss codyoss commented Jul 13, 2026

Copy link
Copy Markdown
Member

Snippet metadata files are written using Go's json encoder, which by defaultescapes HTML characters like >, <, and &. This causes these characters to be serialized as unicode sequences (e.g., \u003e), which is unnecessary for these metadata files and causes issues with other tools that expect raw characters.

We now use a custom json.Encoder with SetEscapeHTML(false) to prevent this escaping. We also continue to trim the trailing newline added by the encoder to maintain format consistency with the generator.

Fixes #6776

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request updates the writeMetadata function to use a json.NewEncoder with HTML escaping disabled, ensuring that HTML characters in snippet metadata are not escaped. A new test suite, TestHTMLCharsNoEscape, is added to verify this behavior. The reviewer suggested inlining the test cases slice directly into the for range loop header in the table-driven test to align with the project's style guide.

Comment thread internal/snippetmetadata/snippetmetadata_test.go Outdated
Snippet metadata files are written using Go's json encoder, which by
defaultescapes HTML characters like >, <, and &. This causes these
characters to be serialized as unicode sequences (e.g., \u003e), which
is unnecessary for these metadata files and causes issues with other
tools that expect raw characters.

We now use a custom json.Encoder with SetEscapeHTML(false) to prevent
this escaping. We also continue to trim the trailing newline added by
the encoder to maintain format consistency with the generator.

Fixes googleapis#6776
@codyoss
codyoss force-pushed the snippet-metadata-fix branch from a01d16a to 3305ced Compare July 13, 2026 15:20
@codyoss
codyoss marked this pull request as ready for review July 13, 2026 15:55
@codyoss
codyoss requested a review from a team as a code owner July 13, 2026 15:55
@codyoss
codyoss enabled auto-merge (squash) July 13, 2026 15:55
Comment thread internal/snippetmetadata/snippetmetadata.go
Comment thread internal/snippetmetadata/snippetmetadata_test.go Outdated
@JoeWang1127
JoeWang1127 disabled auto-merge July 13, 2026 19:08
Comment thread internal/snippetmetadata/snippetmetadata_test.go Outdated
codyoss and others added 2 commits July 13, 2026 14:13
Co-authored-by: Joe Wang <106995533+JoeWang1127@users.noreply.github.com>
Signed-off-by: Cody Oss <6331106+codyoss@users.noreply.github.com>
@codyoss
codyoss merged commit 4da5e28 into googleapis:main Jul 13, 2026
32 checks passed
noahdietz pushed a commit that referenced this pull request Jul 13, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.26.0](v0.25.0...v0.26.0)
(2026-07-13)


### Features

* **internal/gem:** add gem package to install Ruby gem tools
([#6724](#6724))
([40ba6df](40ba6df))
* **internal/librarian/java:** add ApplyMoveActionsToLibrary helper and
unit tests
([#6731](#6731))
([f25bd33](f25bd33))
* **internal/librarian/java:** add RestructureToLibrary helper and unit
tests ([#6757](#6757))
([b2ff68c](b2ff68c)),
closes [#6516](#6516)
* **internal/librarian/java:** add ToKeepSet helper and unit tests
([#6730](#6730))
([df99304](df99304)),
closes [#6516](#6516)
* **internal/librarian/java:** integrate native Go postprocessor into
Java generator
([#6768](#6768))
([074059d](074059d)),
closes [#6516](#6516)
* **internal/librarian/java:** mark legacy postprocessing for
deprecation
([#6716](#6716))
([78a4ab6](78a4ab6)),
closes [#6516](#6516)
* **internal/librarian/nodejs:** use cache and bin directories for
nodejs install
([#6680](#6680))
([7f88869](7f88869))
* **internal/librarian/php:** add inital PHP client library generator
([#6703](#6703))
([9a45ab1](9a45ab1))
* **internal/librarian/php:** add tool installation directory helpers
([#6717](#6717))
([9cdf0b5](9cdf0b5)),
closes [#6630](#6630)
* **internal/librarian/ruby:** support installing Ruby gem dependencies
([#6751](#6751))
([bbce2c4](bbce2c4)),
closes [#6634](#6634)
* **internal/librarian:** add ruby tools directory to env output
([#6781](#6781))
([c220d71](c220d71))
* **internal/postprocessing:** add Apply pipeline runner and tests
([#6714](#6714))
([5cb8f66](5cb8f66)),
closes [#6516](#6516)
* **internal/postprocessing:** add ApplyMethodOperations batch runner
and tests ([#6698](#6698))
([8377d53](8377d53)),
closes [#6516](#6516)
* **internal/postprocessing:** add applyToFiles and RemoveFiles
([#6673](#6673))
([2f4b437](2f4b437)),
closes [#6516](#6516)
* **internal/postprocessing:** add CopyFiles batch runner and tests
([#6686](#6686))
([20c3a1a](20c3a1a))
* **internal/postprocessing:** add ReplaceAll and ReplaceRegexAll batch
runners and tests
([#6688](#6688))
([bb18f06](bb18f06))
* **internal/protoc:** add protoc installation and use installed
`protoc` in Java generation
([#6622](#6622))
([00ee24d](00ee24d))
* **internal/protoc:** add Run function
([#6699](#6699))
([cd8a1d4](cd8a1d4)),
closes [#6558](#6558)
* **internal/serviceconfig:** allowlist API paths for php
([#6789](#6789))
([7907686](7907686)),
closes [#6629](#6629)
* **internal/tool/gem:** verify input directories and tools before
installation
([#6778](#6778))
([3086d63](3086d63))
* **java:** append versions.txt on add
([#6653](#6653))
([9e9e645](9e9e645))
* **librarian/internal/config:** add php config
([#6701](#6701))
([939ae6f](939ae6f))
* **migrate:** discover and list PHP libraries during migration
([#6728](#6728))
([e552b89](e552b89))
* **sidekick/parser:** correct LRO poller service
([#6704](#6704))
([1d4b2d1](1d4b2d1))
* **sidekick/rust:** remove unstable gate for LRO tracing
([#6459](#6459))
([8266ce3](8266ce3))
* **sidekick/swift:** discovery LROs
([#6738](#6738))
([c294d15](c294d15))
* **sidekick/swift:** generate deprecation attributes
([#6750](#6750))
([145e8ae](145e8ae))
* **sidekick/swift:** traits with dependencies
([#6709](#6709))
([e8389f2](e8389f2))
* **swift:** add protobuf generation support
([#6697](#6697))
([3bebf26](3bebf26))
* **tool/cmd/migrate/php:** scaffold composer tools for php
([#6736](#6736))
([f23b451](f23b451))
* **tool/cmd/migrate:** add support to php
([#6726](#6726))
([586bac0](586bac0)),
closes [#6723](#6723)
* **tool/cmd/migrate:** support union versions in PHP OwlBot configs
([#6782](#6782))
([7690206](7690206)),
closes [#6779](#6779)


### Bug Fixes

* **internal/librarian/java:** remove excluded_poms from repometadata
([#6676](#6676))
([5e0f7f2](5e0f7f2))
* **internal/librarian/php:** enforce explicit API paths and add default
output path
([#6740](#6740))
([347bbd6](347bbd6))
* **internal/librarian:** preserve gem tools during tidy
([#6783](#6783))
([0150007](0150007))
* **internal/librarian:** preserve maven and protoc configuration during
tidy ([#6702](#6702))
([b439528](b439528)),
closes [#6558](#6558)
* **internal/snippetmetadata:** disable HTML escaping in JSON output
([#6777](#6777))
([4da5e28](4da5e28)),
closes [#6776](#6776)
* **librarian/rust:** detect inconsistent repos
([#6766](#6766))
([82ce5a9](82ce5a9))
* **sidekick/swift:** missing enum value docs
([#6727](#6727))
([e9020d2](e9020d2))
* **tool/cmd/migrate:** populate API paths from .OwlBot.yaml during
migrate for php
([#6739](#6739))
([6a15260](6a15260))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
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.

improper escaping when editing json files

2 participants