Browse code

Fix out of bound slice access in Delete()

Signed-off-by: Santhosh Manohar <santhosh@docker.com>

Santhosh Manohar authored on 2016/03/07 03:03:03
Showing 2 changed files
... ...
@@ -159,6 +159,10 @@ func Delete(path string, recs []Record) error {
159 159
 loop:
160 160
 	for s.Scan() {
161 161
 		b := s.Bytes()
162
+		if len(b) == 0 {
163
+			continue
164
+		}
165
+
162 166
 		if b[0] == '#' {
163 167
 			buf.Write(b)
164 168
 			buf.Write(eol)
... ...
@@ -331,6 +331,29 @@ func TestDeleteEmpty(t *testing.T) {
331 331
 	}
332 332
 }
333 333
 
334
+func TestDeleteNewline(t *testing.T) {
335
+	file, err := ioutil.TempFile("", "")
336
+	if err != nil {
337
+		t.Fatal(err)
338
+	}
339
+	defer os.Remove(file.Name())
340
+
341
+	b := []byte("\n")
342
+	if _, err := file.Write(b); err != nil {
343
+		t.Fatal(err)
344
+	}
345
+
346
+	rec := []Record{
347
+		{
348
+			Hosts: "prefix",
349
+			IP:    "2.2.2.2",
350
+		},
351
+	}
352
+	if err := Delete(file.Name(), rec); err != nil {
353
+		t.Fatal(err)
354
+	}
355
+}
356
+
334 357
 func TestDelete(t *testing.T) {
335 358
 	file, err := ioutil.TempFile("", "")
336 359
 	if err != nil {