mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	better escape char handle
This commit is contained in:
		@@ -30,7 +30,7 @@ type Tree struct {
 | 
			
		||||
 | 
			
		||||
var escapeChar = []byte("\\")
 | 
			
		||||
 | 
			
		||||
func unescapeChars(in []byte) []byte {
 | 
			
		||||
func UnescapeChars(in []byte) []byte {
 | 
			
		||||
	if bytes.Index(in, escapeChar) == -1 {
 | 
			
		||||
		return in
 | 
			
		||||
	}
 | 
			
		||||
@@ -39,12 +39,11 @@ func unescapeChars(in []byte) []byte {
 | 
			
		||||
	isEscape := false
 | 
			
		||||
	out := make([]byte, 0, endIdx+1)
 | 
			
		||||
	for i := range in {
 | 
			
		||||
		if in[i] == '\\' && i != endIdx {
 | 
			
		||||
			isEscape = !isEscape
 | 
			
		||||
			if isEscape {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
		if in[i] == '\\' && !isEscape {
 | 
			
		||||
			isEscape = true
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		isEscape = false
 | 
			
		||||
		out = append(out, in[i])
 | 
			
		||||
	}
 | 
			
		||||
	return out
 | 
			
		||||
@@ -92,11 +91,12 @@ func parseTreeData(tree *Tree, data []byte) ([]*TreeEntry, error) {
 | 
			
		||||
		pos += step + 1 // Skip half of sha1.
 | 
			
		||||
 | 
			
		||||
		step = bytes.IndexByte(data[pos:], '\n')
 | 
			
		||||
		entry.name = string(data[pos : pos+step])
 | 
			
		||||
 | 
			
		||||
		// In case entry name is surrounded by double quotes(it happens only in git-shell).
 | 
			
		||||
		if entry.name[0] == '"' {
 | 
			
		||||
			entry.name = string(unescapeChars(data[pos+1 : pos+step-1]))
 | 
			
		||||
		if data[pos] == '"' {
 | 
			
		||||
			entry.name = string(UnescapeChars(data[pos+1 : pos+step-1]))
 | 
			
		||||
		} else {
 | 
			
		||||
			entry.name = string(data[pos : pos+step])
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		pos += step + 1
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user