Skip to content

fix: preserve equals signs in endpoint label values#6443

Open
immanuwell wants to merge 1 commit into
kubernetes-sigs:masterfrom
immanuwell:fix-label-values-with-equals
Open

fix: preserve equals signs in endpoint label values#6443
immanuwell wants to merge 1 commit into
kubernetes-sigs:masterfrom
immanuwell:fix-label-values-with-equals

Conversation

@immanuwell
Copy link
Copy Markdown

What does it do ?

Preserves = inside endpoint label values when TXT registry labels are parsed.

Before this, heritage=external-dns,external-dns/owner=team=platform parsed without owner. Tiny parser footgun, tbh.

Motivation

--txt-owner-id is a plain string flag, so values like team=platform can get written into TXT ownership records. TXT records can contain =, so this is a real input, not some impossible edge-case.

Repro before the fix:

go test ./endpoint -run TestLabels/TestSerializeDeserializeWithEqualsInValue -count=1

It fails because owner gets dropped after the round trip.

Fixed by splitting labels on the first = only. Existing malformed tokens without = are still skipped, same as before.

Tested:

go test ./endpoint
go test ./endpoint ./registry/txt ./registry/dynamodb ./registry/awssd
go test ./...

More

  • Yes, this PR title follows Conventional Commits
  • Yes, I added unit tests
  • Yes, I updated end user documentation accordingly

@k8s-ci-robot k8s-ci-robot added the cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. label May 17, 2026
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

Welcome @immanuwell!

It looks like this is your first PR to kubernetes-sigs/external-dns 🎉. Please refer to our pull request process documentation to help your PR have a smooth ride to approval.

You will be prompted by a bot to use commands during the review process. Do not be afraid to follow the prompts! It is okay to experiment. Here is the bot commands documentation.

You can also check if kubernetes-sigs/external-dns has its own contribution guidelines.

You may want to refer to our testing guide if you run into trouble with your tests not passing.

If you are having difficulty getting your pull request seen, please follow the recommended escalation practices. Also, for tips and tricks in the contribution process you may want to read the Kubernetes contributor cheat sheet. We want to make sure your contribution gets all the attention it needs!

Thank you, and welcome to Kubernetes. 😃

@k8s-ci-robot k8s-ci-robot added the needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. label May 17, 2026
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

Hi @immanuwell. Thanks for your PR.

I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work.

Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@k8s-ci-robot k8s-ci-robot added the size/S Denotes a PR that changes 10-29 lines, ignoring generated files. label May 17, 2026
@k8s-ci-robot k8s-ci-robot requested review from szuecs and u-kai May 17, 2026 14:01
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign ivankatliarchuk for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@ivankatliarchuk
Copy link
Copy Markdown
Member

Could you share actual reproducible example? Like here #5111 (comment)

What is wrong with owner team=platform ?

Copy link
Copy Markdown
Member

@u-kai u-kai left a comment

Choose a reason for hiding this comment

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

My understanding is that values containing "=" could not be set for owner label until now.

Comment thread endpoint/labels_test.go

serialized := labels.SerializePlain(false)
parsed, err := NewLabelsFromStringPlain(serialized)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Could you add tests for actual label texts?

Comment thread endpoint/labels_test.go
suite.Nil(multipleHeritage, "if error should return nil")
}

func (suite *LabelsSuite) TestSerializeDeserializeWithEqualsInValue() {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

IMO, I would prefer using table-driven tests for this file, but I think that refactor is out of scope for this PR.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It must be table driven test. As we need to make sure other cases of owner still supported.

Do not use suite. Name could be TestParseLabels or of similar semantic. the current
PR's test name (TestSerializeDeserializeWithEqualsInValue) is misleading precisely because it goes through the full round-trip to avoid writing the raw string by hand, masking that the bug is purely in parsing.

Comment thread endpoint/labels_test.go
suite.Nil(multipleHeritage, "if error should return nil")
}

func (suite *LabelsSuite) TestSerializeDeserializeWithEqualsInValue() {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It must be table driven test. As we need to make sure other cases of owner still supported.

Do not use suite. Name could be TestParseLabels or of similar semantic. the current
PR's test name (TestSerializeDeserializeWithEqualsInValue) is misleading precisely because it goes through the full round-trip to avoid writing the raw string by hand, masking that the bug is purely in parsing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. size/S Denotes a PR that changes 10-29 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants