Commit 86b9e3e2 authored by David Symonds's avatar David Symonds

archive/tar: accept binary format when reading numeric header fields.

Fixes #4358.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6840043
parent 761830f4
...@@ -72,6 +72,18 @@ func cString(b []byte) string { ...@@ -72,6 +72,18 @@ func cString(b []byte) string {
} }
func (tr *Reader) octal(b []byte) int64 { func (tr *Reader) octal(b []byte) int64 {
// Check for binary format first.
if len(b) > 0 && b[0]&0x80 != 0 {
var x int64
for i, c := range b {
if i == 0 {
c &= 0x7f // ignore signal bit in first byte
}
x = x<<8 | int64(c)
}
return x
}
// Removing leading spaces. // Removing leading spaces.
for len(b) > 0 && b[0] == ' ' { for len(b) > 0 && b[0] == ' ' {
b = b[1:] b = b[1:]
......
...@@ -65,6 +65,7 @@ func TestRoundTrip(t *testing.T) { ...@@ -65,6 +65,7 @@ func TestRoundTrip(t *testing.T) {
tw := NewWriter(&b) tw := NewWriter(&b)
hdr := &Header{ hdr := &Header{
Name: "file.txt", Name: "file.txt",
Uid: 1 << 21, // too big for 8 octal digits
Size: int64(len(data)), Size: int64(len(data)),
ModTime: time.Now(), ModTime: time.Now(),
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment