mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Handle base64 decoding correctly to avoid panic (#26483)
Fix the panic if the "base64 secret" is too long.
This commit is contained in:
		@@ -6,6 +6,7 @@ package util
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"crypto/rand"
 | 
			
		||||
	"encoding/base64"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"math/big"
 | 
			
		||||
	"strconv"
 | 
			
		||||
@@ -261,3 +262,13 @@ func ToFloat64(number any) (float64, error) {
 | 
			
		||||
func ToPointer[T any](val T) *T {
 | 
			
		||||
	return &val
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Base64FixedDecode(encoding *base64.Encoding, src []byte, length int) ([]byte, error) {
 | 
			
		||||
	decoded := make([]byte, encoding.DecodedLen(len(src))+3)
 | 
			
		||||
	if n, err := encoding.Decode(decoded, src); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	} else if n != length {
 | 
			
		||||
		return nil, fmt.Errorf("invalid base64 decoded length: %d, expects: %d", n, length)
 | 
			
		||||
	}
 | 
			
		||||
	return decoded[:length], nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user