mirror of
				https://github.com/NotAShelf/hexxy.git
				synced 2025-10-31 11:22:42 +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 | ||||
| 
 | ||||
| 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) { | ||||
| 	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 -2 on two consecutive spaces | ||||
| // returns 0 on success | ||||
| func hexDecode(dst, src []byte) int { | ||||
| 	_, _ = src[2], dst[0] | ||||
| 
 | ||||
| 	if isSpace(src[0]) { | ||||
| 		if isSpace(src[1]) { | ||||
| 			return -2 | ||||
| func hexDecode(dst, src []byte) (int, error) { | ||||
| 	i, j := 0, 1 | ||||
| 	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 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 | ||||
| 		if b > 0x0f { | ||||
| 			return i, InvalidByteError(q) | ||||
| 		} | ||||
| 		b, ok := fromHexChar(src[i*2+1]) | ||||
| 		if !ok { | ||||
| 			return -1 | ||||
| 		} | ||||
| 
 | ||||
| 		dst[0] = (a << 4) | b | ||||
| 		dst[i] = (a << 4) | b | ||||
| 		i++ | ||||
| 	} | ||||
| 	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 | ||||
|  |  | |||
|  | @ -37,9 +37,11 @@ func XXDReverse(r io.Reader, w io.Writer) error { | |||
| 		octs = cols | ||||
| 	} | ||||
| 
 | ||||
| 	// character count | ||||
| 	c := int64(0) | ||||
| 	rd := bufio.NewReader(r) | ||||
| 	for { | ||||
| 		// TODO this is causing issues with plain | ||||
| 		line, err := rd.ReadBytes('\n') | ||||
| 		n := len(line) | ||||
| 		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 { | ||||
| 			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) | ||||
| 					i += 2 | ||||
| 					n -= 2 | ||||
|  | @ -81,7 +83,7 @@ func XXDReverse(r io.Reader, w io.Writer) error { | |||
| 			} | ||||
| 		} else if dumpType == dumpPlain { | ||||
| 			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) | ||||
| 					c++ | ||||
| 				} | ||||
|  | @ -89,7 +91,7 @@ func XXDReverse(r io.Reader, w io.Writer) error { | |||
| 			} | ||||
| 		} else if dumpType == dumpCformat { | ||||
| 			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) | ||||
| 					i += 4 | ||||
| 					n -= 4 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 mizi
				mizi