Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

encoding/base64: The current decode implementation is the mixture of RFC2045 and RFC4648 #25702

Closed
spacewander opened this issue Jun 2, 2018 · 5 comments
Labels
FrozenDueToAge NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided.
Milestone

Comments

@spacewander
Copy link
Contributor

What version of Go are you using (go version)?

go version go1.10 linux/amd64

Does this issue reproduce with the latest release?

Yes. The issue could be confirmed with the latest source code.

What operating system and processor architecture are you using (go env)?

linux_amd64

What did you do?

Decode base64 with string contained CR/LF.

What did you expect to see?

RFC 4648 doesn't allow to use CR/LF as line separators, so the decode is expected to fail.
Please correct me if I am wrong.

What did you see instead?

CR/LF is ignored.

It looks like the change is introduced by #2541.
RFC 2045 requires to ignore characters not in decodeMap, so this change is OK for RFC 2045.
But RFC 2045 is different from RFC 4648 and the documentation mentions that it implements RFC 4648.

The differences between RFC 2045 and RFC 4648 could be found here: https://en.wikipedia.org/wiki/Base64#Variants_summary_table.

Since the encoding/base64 is used in mime module, it is reasonable to implement part of RFC 2045 here. But is it better to implement separate MIME base64 methods with full RFC 2045 support (ignore all characters not in decodeMap)? Just like Java's java.util.Base64.

@agnivade agnivade added the NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. label Jun 2, 2018
@agnivade agnivade added this to the Unplanned milestone Jun 2, 2018
@agnivade
Copy link
Contributor

agnivade commented Jun 2, 2018

/cc @rsc , @bradfitz

@plo-
Copy link

plo- commented May 2, 2022

Any news?

@ianlancetaylor
Copy link
Member

There is no news.

I'm not sure what action we should take here. If the concern is that the input can contain characters that should be ignored, then it seems straightforward to use an io.Reader that strips such characters. Perhaps we should not have started ignoring \r and \n, but we can't change that now.

@ianlancetaylor ianlancetaylor added the WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided. label May 2, 2022
@gopherbot
Copy link
Contributor

Timed out in state WaitingForInfo. Closing.

(I am just a bot, though. Please speak up if this is a mistake or you have the requested information.)

@phtdacosta
Copy link

I will open this issue again because none of the language maintainers care to take a look at it, so it seems that the community effort will likely try to solve by ourselves.

@golang golang locked and limited conversation to collaborators Sep 11, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided.
Projects
None yet
Development

No branches or pull requests

6 participants