-
Notifications
You must be signed in to change notification settings - Fork 8
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
Exclude domain from name length check #9
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,6 +4,7 @@ import ( | |
_ "crypto/sha256" | ||
_ "crypto/sha512" | ||
"encoding/json" | ||
"errors" | ||
"strings" | ||
"testing" | ||
|
||
|
@@ -117,7 +118,7 @@ func TestReferenceParse(t *testing.T) { | |
tag: "Uppercase", | ||
}, | ||
{ | ||
input: strings.Repeat("a/", 128) + "a:tag", | ||
input: "domain/" + strings.Repeat("a", 256) + ":tag", | ||
err: ErrNameTooLong, | ||
}, | ||
{ | ||
|
@@ -266,6 +267,12 @@ func TestReferenceParse(t *testing.T) { | |
input: "[fe80::1%@invalidzone]:5000/repo", | ||
err: ErrReferenceInvalidFormat, | ||
}, | ||
{ | ||
input: "example.com/" + strings.Repeat("a", 255) + ":tag", | ||
domain: "example.com", | ||
repository: "example.com/" + strings.Repeat("a", 255), | ||
tag: "tag", | ||
}, | ||
} | ||
for _, tc := range tests { | ||
tc := tc | ||
|
@@ -337,7 +344,7 @@ func TestWithNameFailure(t *testing.T) { | |
}{ | ||
{ | ||
input: "", | ||
err: ErrNameEmpty, | ||
err: ErrReferenceInvalidFormat, | ||
Comment on lines
-340
to
+347
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hm.. why did this one change? Not sure if that's expected 🤔 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's already returning There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure I got that, you mean it's currently failing on main? I just give this test a run, and it seems to pass, or is it broken in some other way? go test -v -run TestWithNameFailure
=== RUN TestWithNameFailure
=== PAUSE TestWithNameFailure
=== CONT TestWithNameFailure
=== RUN TestWithNameFailure/#00
=== PAUSE TestWithNameFailure/#00
=== RUN TestWithNameFailure/:justtag
=== PAUSE TestWithNameFailure/:justtag
=== RUN TestWithNameFailure/@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
=== PAUSE TestWithNameFailure/@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
=== RUN TestWithNameFailure/validname@invaliddigest:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
=== PAUSE TestWithNameFailure/validname@invaliddigest:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
=== RUN TestWithNameFailure/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a:tag
=== PAUSE TestWithNameFailure/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a:tag
=== RUN TestWithNameFailure/aa/asdf$$^/aa
=== PAUSE TestWithNameFailure/aa/asdf$$^/aa
=== CONT TestWithNameFailure/#00
=== CONT TestWithNameFailure/validname@invaliddigest:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
=== CONT TestWithNameFailure/:justtag
=== CONT TestWithNameFailure/aa/asdf$$^/aa
=== CONT TestWithNameFailure/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a:tag
=== CONT TestWithNameFailure/@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
--- PASS: TestWithNameFailure (0.00s)
--- PASS: TestWithNameFailure/#00 (0.00s)
--- PASS: TestWithNameFailure/:justtag (0.00s)
--- PASS: TestWithNameFailure/aa/asdf$$^/aa (0.00s)
--- PASS: TestWithNameFailure/validname@invaliddigest:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (0.00s)
--- PASS: TestWithNameFailure/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a:tag (0.00s)
--- PASS: TestWithNameFailure/@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (0.00s)
PASS
ok github.com/distribution/reference 0.689s There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sorry for the confusion about making the test pass. The test would pass, but it would return If you change the assertion from:
to:
to check the actual error that is returned is equal to the expectation in the test, the test will fail. So the test is passing because we are not asserting correctly what is expected in the test input |
||
}, | ||
{ | ||
input: ":justtag", | ||
|
@@ -352,7 +359,11 @@ func TestWithNameFailure(t *testing.T) { | |
err: ErrReferenceInvalidFormat, | ||
}, | ||
{ | ||
input: strings.Repeat("a/", 128) + "a:tag", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Wondering if there's still constraints (or if there should be) on maximum length of individual path components ("namespace", "repository-name"). At a quick glance, HTTP itself doesn't seem to define constraints; https://www.rfc-editor.org/rfc/rfc3986#section-3.3. Maybe it's fine to have the "total" alone. (it might be fun though to have a "valid" repository, but not able to use it because there's no space left for the total length 🤔 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Can you please provide an example for this? I didn't completely understand it 😞 |
||
input: "example.com/repo:tag", | ||
err: ErrReferenceInvalidFormat, | ||
}, | ||
{ | ||
input: "example.com/" + strings.Repeat("a", 256), | ||
err: ErrNameTooLong, | ||
}, | ||
{ | ||
|
@@ -365,8 +376,8 @@ func TestWithNameFailure(t *testing.T) { | |
t.Run(tc.input, func(t *testing.T) { | ||
t.Parallel() | ||
_, err := WithName(tc.input) | ||
if err == nil { | ||
t.Errorf("no error parsing name. expected: %s", tc.err) | ||
if !errors.Is(err, tc.err) { | ||
t.Errorf("unexpected error parsing name. expected: %s, got: %s", tc.err, err) | ||
} | ||
}) | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This example may be incorrect here, because the first component is only considered to be a domain if it either contains a period (
.
), a colon (:
) or it's literallylocalhost
reference/reference.go
Lines 8 to 10 in 8507c7f
If we intend to have a domain here, it should probably contain a
.
, and use one of the designated RFC 6761https://www.rfc-editor.org/rfc/rfc6761.html) domains for this (e.g.,example.com
orexample.org
, or<something>.test