Skip to content

Commit 7b6f134

Browse files
committed
Return ErrUnexpectedEOF from Parser.Single
1 parent 75c8e7b commit 7b6f134

File tree

3 files changed

+16
-19
lines changed

3 files changed

+16
-19
lines changed

internal/deb/control.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ func NewParser(r io.Reader) *Parser {
7979
// Single parses a single-paragraph control file, which will then be available
8080
// through the Paragraph method. It returns false if the method is called after
8181
// any call to Next, the parser stops before reading a paragraph, or the parser
82-
// encounters a syntax error.
82+
// encounters a syntax error. If Single returns false, Err() will always return
83+
// an error.
8384
func (p *Parser) Single() bool {
8485
if p.err != nil {
8586
return false
@@ -90,6 +91,9 @@ func (p *Parser) Single() bool {
9091
return false
9192
}
9293
if !p.Next() {
94+
if p.err == nil {
95+
p.err = fmt.Errorf("parse debian control file: %w", io.ErrUnexpectedEOF)
96+
}
9397
return false
9498
}
9599

internal/deb/release.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,20 @@ import (
2828
// https://wiki.debian.org/DebianRepository/Format#A.22Release.22_files
2929
func ParseReleaseIndex(r io.Reader) (Paragraph, error) {
3030
p := NewParser(r)
31-
p.Fields = map[string]FieldType{
32-
"MD5Sum": Multiline,
33-
"SHA1": Multiline,
34-
"SHA256": Multiline,
35-
}
31+
p.Fields = ReleaseFields
3632
if !p.Single() {
37-
err := p.Err()
38-
if err == nil {
39-
err = io.ErrUnexpectedEOF
40-
}
41-
return nil, fmt.Errorf("parse Release: %w", err)
33+
return nil, fmt.Errorf("parse Release: %w", p.Err())
4234
}
4335
return p.Paragraph(), nil
4436
}
4537

38+
// ReleaseFields is the set of fields in the release information file.
39+
var ReleaseFields = map[string]FieldType{
40+
"MD5Sum": Multiline,
41+
"SHA1": Multiline,
42+
"SHA256": Multiline,
43+
}
44+
4645
type IndexSignature struct {
4746
Checksum []byte
4847
Size int64

upload.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,7 @@ func uploadBinaryPackage(ctx context.Context, bucket *blob.Bucket, debPath strin
183183
p := deb.NewParser(bytes.NewReader(control))
184184
p.Fields = deb.ControlFields
185185
if !p.Single() {
186-
if err := p.Err(); err != nil {
187-
return nil, fmt.Errorf("upload binary package %s: control: %w", debName, err)
188-
}
189-
return nil, fmt.Errorf("upload binary package %s: control: empty file", debName)
186+
return nil, fmt.Errorf("upload binary package %s: control: %w", debName, p.Err())
190187
}
191188
pkg := p.Paragraph()
192189
promotePackageField(pkg)
@@ -218,10 +215,7 @@ func uploadSourcePackage(ctx context.Context, bucket *blob.Bucket, dscPath strin
218215
p := deb.NewParser(bytes.NewReader(maybeClearSigned(dsc)))
219216
p.Fields = deb.SourceControlFields
220217
if !p.Single() {
221-
if err := p.Err(); err != nil {
222-
return nil, fmt.Errorf("upload source package %s: %w", packageName, err)
223-
}
224-
return nil, fmt.Errorf("upload source package %s: empty file", packageName)
218+
return nil, fmt.Errorf("upload source package %s: %w", packageName, p.Err())
225219
}
226220
pkg := p.Paragraph()
227221
dir := poolPath(packageName)

0 commit comments

Comments
 (0)