你正在使用的Go版本是什么( go version
)?
$ go version 1.15
这个问题在最新版本中是否重现?
是的
你正在使用什么操作系统和处理器架构( go env
)?
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/candeemis/Library/Caches/go-build"
GOENV="/Users/candeemis/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/candeemis/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/candeemis/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/candeemis/play-ground/go-mime-parser/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/z9/3q3874k11pd_h45kz05lngr40000gn/T/go-build706623001=/tmp/go-build -gno-record-gcc-switches -fno-common"
你做了什么?
经过几个小时的调试,我发现 mime/mediatype.go
模块中的 ParseMediaType
函数在解析内容类型作为 application/pdf; x-unix-mode=0644; name=RG Mellowmessage 4.12.20.pdf
的内容类型时,从媒体类型中抛出以下错误。错误:
Failed to ReadParts: mime: invalid media parameterParseMediaType
函数内部调用另一个函数 consumeMediaParam
来解析单个媒体类型,例如上面提到的内容类型 x-unix-mode
和 name
(附加文件的名称)是两种不同的类型。如果 consumeMediaParam
包含任何空格,就会错误地解析媒体类型值。例如,上面的内容类型 name
中就包含了空格。因此,它只将 RG
作为 name
键的值分配,并继续尝试解析剩余部分。然而,在剩余部分中,没有用 =
符号分隔的键。这就是为什么它会抛出上述错误的原因。
你期望看到什么?
它应该将 RG Mellowmessage 4.12.20.pdf
作为 name
键的值进行解析。这意味着它应该忽略值中的空格。
你看到了什么?
以下错误:
Failed to ReadParts: mime: invalid media parameter
7条答案
按热度按时间iezvtpos1#
基于RFC 2045第5.1节
这看起来像一个格式错误的头部
vmdwslir2#
但是以下内容并没有排除值中的空格,对吗?🤔
iyfjxgzm3#
它可以包含空格,但在引用字符串中,而不是您展示的裸令牌。
wnvonmuf4#
CC @bradfitz via owners。
z4bn682m5#
@candeemis 你是否同意
mime.ParseMediaType
在输入上报告错误的行为的正确性,即它符合规范?6psbrbz96#
@dmitshur
好的,我可以说当前的实现满足了RFC规范。同时,我仍然认为有改进的空间,可以进行更进一步的不同实现。这不仅会满足规范,还会忽略像在问题中提到的那样的小问题。我正在研究这个概念,但由于时间限制,可能需要一些时间。
dfty9e197#
@candeemis 你是说像观察Postel定律那样吗?