mirror of
				https://github.com/NotAShelf/hexxy.git
				synced 2025-10-31 19:32:37 +00:00 
			
		
		
		
	[hexxy] fixed reverse plain
This commit is contained in:
		
					parent
					
						
							
								c64950b437
							
						
					
				
			
			
				commit
				
					
						30e0aa5549
					
				
			
		
					 2 changed files with 61 additions and 27 deletions
				
			
		
							
								
								
									
										80
									
								
								encode.go
									
										
									
									
									
								
							
							
						
						
									
										80
									
								
								encode.go
									
										
									
									
									
								
							|  | @ -1,6 +1,38 @@ | ||||||
| package main | package main | ||||||
| 
 | 
 | ||||||
| import () | import ( | ||||||
|  | 	"errors" | ||||||
|  | 	"fmt" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | const ( | ||||||
|  | 	reverseHexTable = "" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\x0a\x0b\x0c\x0d\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\x0a\x0b\x0c\x0d\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + | ||||||
|  | 		"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var ErrLength = errors.New("encoding/hex: odd length hex string") | ||||||
|  | 
 | ||||||
|  | // InvalidByteError values describe errors resulting from an invalid byte in a hex string. | ||||||
|  | type InvalidByteError byte | ||||||
|  | 
 | ||||||
|  | func (e InvalidByteError) Error() string { | ||||||
|  | 	return fmt.Sprintf("encoding/hex: invalid byte: %#U", rune(e)) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| func binaryEncode(dst, src []byte) { | func binaryEncode(dst, src []byte) { | ||||||
| 	d := uint(0) | 	d := uint(0) | ||||||
|  | @ -58,33 +90,33 @@ func hexEncode(dst, src []byte, hextable string) { | ||||||
| // returns -1 on bad byte or space (\t \s \n) | // returns -1 on bad byte or space (\t \s \n) | ||||||
| // returns -2 on two consecutive spaces | // returns -2 on two consecutive spaces | ||||||
| // returns 0 on success | // returns 0 on success | ||||||
| func hexDecode(dst, src []byte) int { |  | ||||||
| 	_, _ = src[2], dst[0] |  | ||||||
| 
 | 
 | ||||||
| 	if isSpace(src[0]) { | func hexDecode(dst, src []byte) (int, error) { | ||||||
| 		if isSpace(src[1]) { | 	i, j := 0, 1 | ||||||
| 			return -2 | 	for ; j < len(src); j += 2 { | ||||||
|  | 		p := src[j-1] | ||||||
|  | 		q := src[j] | ||||||
|  | 
 | ||||||
|  | 		a := reverseHexTable[p] | ||||||
|  | 		b := reverseHexTable[q] | ||||||
|  | 		if a > 0x0f { | ||||||
|  | 			return i, InvalidByteError(p) | ||||||
| 		} | 		} | ||||||
| 		return -1 | 		if b > 0x0f { | ||||||
| 	} | 			return i, InvalidByteError(q) | ||||||
| 
 |  | ||||||
| 	if isPrefix(src[0:2]) { |  | ||||||
| 		src = src[2:] |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for i := 0; i < len(src)/2; i++ { |  | ||||||
| 		a, ok := fromHexChar(src[i*2]) |  | ||||||
| 		if !ok { |  | ||||||
| 			return -1 |  | ||||||
| 		} | 		} | ||||||
| 		b, ok := fromHexChar(src[i*2+1]) | 		dst[i] = (a << 4) | b | ||||||
| 		if !ok { | 		i++ | ||||||
| 			return -1 |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		dst[0] = (a << 4) | b |  | ||||||
| 	} | 	} | ||||||
| 	return 0 | 	if len(src)%2 == 1 { | ||||||
|  | 		// Check for invalid char before reporting bad length, | ||||||
|  | 		// since the invalid char (if present) is an earlier problem. | ||||||
|  | 		if reverseHexTable[src[j-1]] > 0x0f { | ||||||
|  | 			return i, InvalidByteError(src[j-1]) | ||||||
|  | 		} | ||||||
|  | 		return i, ErrLength | ||||||
|  | 	} | ||||||
|  | 	return i, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // copied from encoding/hex package | // copied from encoding/hex package | ||||||
|  |  | ||||||
|  | @ -37,9 +37,11 @@ func XXDReverse(r io.Reader, w io.Writer) error { | ||||||
| 		octs = cols | 		octs = cols | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	// character count | ||||||
| 	c := int64(0) | 	c := int64(0) | ||||||
| 	rd := bufio.NewReader(r) | 	rd := bufio.NewReader(r) | ||||||
| 	for { | 	for { | ||||||
|  | 		// TODO this is causing issues with plain | ||||||
| 		line, err := rd.ReadBytes('\n') | 		line, err := rd.ReadBytes('\n') | ||||||
| 		n := len(line) | 		n := len(line) | ||||||
| 		if err != nil && !errors.Is(err, io.EOF) && !errors.Is(err, io.ErrUnexpectedEOF) { | 		if err != nil && !errors.Is(err, io.EOF) && !errors.Is(err, io.ErrUnexpectedEOF) { | ||||||
|  | @ -52,7 +54,7 @@ func XXDReverse(r io.Reader, w io.Writer) error { | ||||||
| 
 | 
 | ||||||
| 		if dumpType == dumpHex { | 		if dumpType == dumpHex { | ||||||
| 			for i := 0; n >= octs; { | 			for i := 0; n >= octs; { | ||||||
| 				if rv := hexDecode(char, line[i:i+octs]); rv == 0 { | 				if rv, _ := hexDecode(char, line[i:i+octs]); rv == 0 { | ||||||
| 					w.Write(char) | 					w.Write(char) | ||||||
| 					i += 2 | 					i += 2 | ||||||
| 					n -= 2 | 					n -= 2 | ||||||
|  | @ -81,7 +83,7 @@ func XXDReverse(r io.Reader, w io.Writer) error { | ||||||
| 			} | 			} | ||||||
| 		} else if dumpType == dumpPlain { | 		} else if dumpType == dumpPlain { | ||||||
| 			for i := 0; n >= octs; i++ { | 			for i := 0; n >= octs; i++ { | ||||||
| 				if hexDecode(char, line[i:i+octs]) == 0 { | 				if rv, _ := hexDecode(char, line[i:i+octs]); rv != 0 { | ||||||
| 					w.Write(char) | 					w.Write(char) | ||||||
| 					c++ | 					c++ | ||||||
| 				} | 				} | ||||||
|  | @ -89,7 +91,7 @@ func XXDReverse(r io.Reader, w io.Writer) error { | ||||||
| 			} | 			} | ||||||
| 		} else if dumpType == dumpCformat { | 		} else if dumpType == dumpCformat { | ||||||
| 			for i := 0; n >= octs; { | 			for i := 0; n >= octs; { | ||||||
| 				if rv := hexDecode(char, line[i:i+octs]); rv == 0 { | 				if rv, _ := hexDecode(char, line[i:i+octs]); rv == 0 { | ||||||
| 					w.Write(char) | 					w.Write(char) | ||||||
| 					i += 4 | 					i += 4 | ||||||
| 					n -= 4 | 					n -= 4 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 mizi
				mizi