Преглед на файлове

Merge pull request #1000 from sanimej/panic

Fix out of bound slice access in etchosts.go/Delete()
Alessandro Boch преди 9 години
родител
ревизия
84c1d626c6
променени са 2 файла, в които са добавени 27 реда и са изтрити 0 реда
  1. 4 0
      libnetwork/etchosts/etchosts.go
  2. 23 0
      libnetwork/etchosts/etchosts_test.go

+ 4 - 0
libnetwork/etchosts/etchosts.go

@@ -159,6 +159,10 @@ func Delete(path string, recs []Record) error {
 loop:
 	for s.Scan() {
 		b := s.Bytes()
+		if len(b) == 0 {
+			continue
+		}
+
 		if b[0] == '#' {
 			buf.Write(b)
 			buf.Write(eol)

+ 23 - 0
libnetwork/etchosts/etchosts_test.go

@@ -331,6 +331,29 @@ func TestDeleteEmpty(t *testing.T) {
 	}
 }
 
+func TestDeleteNewline(t *testing.T) {
+	file, err := ioutil.TempFile("", "")
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer os.Remove(file.Name())
+
+	b := []byte("\n")
+	if _, err := file.Write(b); err != nil {
+		t.Fatal(err)
+	}
+
+	rec := []Record{
+		{
+			Hosts: "prefix",
+			IP:    "2.2.2.2",
+		},
+	}
+	if err := Delete(file.Name(), rec); err != nil {
+		t.Fatal(err)
+	}
+}
+
 func TestDelete(t *testing.T) {
 	file, err := ioutil.TempFile("", "")
 	if err != nil {