aboutsummaryrefslogtreecommitdiff
path: root/object
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-06-06 19:21:52 +0000
committerGravatar Runxi Yu2026-06-06 19:21:52 +0000
commita3cade08a0b0101688e8930916c04866860b2650 (patch)
treede10695bc4342f04bc512b050caaddfecd0a321b /object
parentconfig: Just use sha256 test (diff)
Prepare for refname; use lgo; etc.
Diffstat (limited to 'object')
-rw-r--r--object/commit/append.go14
-rw-r--r--object/signature/append.go33
-rw-r--r--object/signature/parse.go2
3 files changed, 42 insertions, 7 deletions
diff --git a/object/commit/append.go b/object/commit/append.go
index 110d589f..0b28113d 100644
--- a/object/commit/append.go
+++ b/object/commit/append.go
@@ -16,11 +16,21 @@ func (commit *Commit) AppendWithoutHeader(dst []byte) ([]byte, error) {
}
dst = append(dst, []byte("author ")...)
- dst = commit.Author.Append(dst)
+
+ dst, err := commit.Author.Append(dst)
+ if err != nil {
+ return dst, fmt.Errorf("append author: %w", err)
+ }
+
dst = append(dst, byte('\n'))
dst = append(dst, []byte("comitter ")...)
- dst = commit.Committer.Append(dst)
+
+ dst, err = commit.Committer.Append(dst)
+ if err != nil {
+ return dst, fmt.Errorf("append committer: %w", err)
+ }
+
dst = append(dst, byte('\n'))
if commit.ChangeID != "" {
diff --git a/object/signature/append.go b/object/signature/append.go
index 38ed9a32..d92ea76b 100644
--- a/object/signature/append.go
+++ b/object/signature/append.go
@@ -3,10 +3,12 @@ package signature
import (
"slices"
"strconv"
+
+ "lindenii.org/go/lgo/intconv"
)
// Append renders the signature in canonical Git format.
-func (signature Signature) Append(dst []byte) []byte {
+func (signature Signature) Append(dst []byte) ([]byte, error) {
dst = slices.Grow(dst, len(signature.Name)+len(signature.Email)+32)
dst = append(dst, signature.Name...)
dst = append(dst, ' ', '<')
@@ -16,6 +18,9 @@ func (signature Signature) Append(dst []byte) []byte {
dst = append(dst, ' ')
offset := signature.OffsetMinutes
+ if offset < -(23*60+59) || offset > 23*60+59 {
+ return dst, ErrInvalidSignature
+ }
var sign byte = '+'
if offset < 0 {
@@ -26,9 +31,29 @@ func (signature Signature) Append(dst []byte) []byte {
hh := offset / 60
mm := offset % 60
+ hhTens, err := intconv.Int32ToUint8('0' + hh/10)
+ if err != nil {
+ return dst, ErrInvalidSignature
+ }
+
+ hhOnes, err := intconv.Int32ToUint8('0' + hh%10)
+ if err != nil {
+ return dst, ErrInvalidSignature
+ }
+
+ mmTens, err := intconv.Int32ToUint8('0' + mm/10)
+ if err != nil {
+ return dst, ErrInvalidSignature
+ }
+
+ mmOnes, err := intconv.Int32ToUint8('0' + mm%10)
+ if err != nil {
+ return dst, ErrInvalidSignature
+ }
+
dst = append(dst, sign)
- dst = append(dst, byte('0'+hh/10), byte('0'+hh%10))
- dst = append(dst, byte('0'+mm/10), byte('0'+mm%10))
+ dst = append(dst, hhTens, hhOnes)
+ dst = append(dst, mmTens, mmOnes)
- return dst
+ return dst, nil
}
diff --git a/object/signature/parse.go b/object/signature/parse.go
index 9179482c..bb6f18ed 100644
--- a/object/signature/parse.go
+++ b/object/signature/parse.go
@@ -5,7 +5,7 @@ import (
"errors"
"strconv"
- "lindenii.org/go/furgit/internal/intconv"
+ "lindenii.org/go/lgo/intconv"
)
// ErrInvalidSignature indicates an attempt to parse an invalid signature.