mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	Fix missing 0 prefix of GPG key id (#30245)
Fixes #30235 If the key id "front" byte has a single digit, `%X` is missing the 0 prefix. ` 38D1A3EADDBEA9C` instead of `038D1A3EADDBEA9C` When using the `IssuerFingerprint` slice `%X` is enough but I changed it to `%016X` too to be consistent.
This commit is contained in:
		@@ -139,13 +139,7 @@ func ParseCommitWithSignature(ctx context.Context, c *git.Commit) *CommitVerific
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	keyID := ""
 | 
			
		||||
	if sig.IssuerKeyId != nil && (*sig.IssuerKeyId) != 0 {
 | 
			
		||||
		keyID = fmt.Sprintf("%X", *sig.IssuerKeyId)
 | 
			
		||||
	}
 | 
			
		||||
	if keyID == "" && sig.IssuerFingerprint != nil && len(sig.IssuerFingerprint) > 0 {
 | 
			
		||||
		keyID = fmt.Sprintf("%X", sig.IssuerFingerprint[12:20])
 | 
			
		||||
	}
 | 
			
		||||
	keyID := tryGetKeyIDFromSignature(sig)
 | 
			
		||||
	defaultReason := NoKeyFound
 | 
			
		||||
 | 
			
		||||
	// First check if the sig has a keyID and if so just look at that
 | 
			
		||||
 
 | 
			
		||||
@@ -134,3 +134,13 @@ func extractSignature(s string) (*packet.Signature, error) {
 | 
			
		||||
	}
 | 
			
		||||
	return sig, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func tryGetKeyIDFromSignature(sig *packet.Signature) string {
 | 
			
		||||
	if sig.IssuerKeyId != nil && (*sig.IssuerKeyId) != 0 {
 | 
			
		||||
		return fmt.Sprintf("%016X", *sig.IssuerKeyId)
 | 
			
		||||
	}
 | 
			
		||||
	if sig.IssuerFingerprint != nil && len(sig.IssuerFingerprint) > 0 {
 | 
			
		||||
		return fmt.Sprintf("%016X", sig.IssuerFingerprint[12:20])
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,9 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/models/unittest"
 | 
			
		||||
	user_model "code.gitea.io/gitea/models/user"
 | 
			
		||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
 | 
			
		||||
	"github.com/keybase/go-crypto/openpgp/packet"
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -391,3 +393,13 @@ epiDVQ==
 | 
			
		||||
		assert.Equal(t, time.Unix(1586105389, 0), expire)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestTryGetKeyIDFromSignature(t *testing.T) {
 | 
			
		||||
	assert.Empty(t, tryGetKeyIDFromSignature(&packet.Signature{}))
 | 
			
		||||
	assert.Equal(t, "038D1A3EADDBEA9C", tryGetKeyIDFromSignature(&packet.Signature{
 | 
			
		||||
		IssuerKeyId: util.ToPointer(uint64(0x38D1A3EADDBEA9C)),
 | 
			
		||||
	}))
 | 
			
		||||
	assert.Equal(t, "038D1A3EADDBEA9C", tryGetKeyIDFromSignature(&packet.Signature{
 | 
			
		||||
		IssuerFingerprint: []uint8{0xb, 0x23, 0x24, 0xc7, 0xe6, 0xfe, 0x4f, 0x3a, 0x6, 0x26, 0xc1, 0x21, 0x3, 0x8d, 0x1a, 0x3e, 0xad, 0xdb, 0xea, 0x9c},
 | 
			
		||||
	}))
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user