(t *testing.T)
| 211 | } |
| 212 | |
| 213 | func TestExtractTarGz(t *testing.T) { |
| 214 | t.Run("extracts files correctly", func(t *testing.T) { |
| 215 | content := []byte("hello world") |
| 216 | archive := createTarGzBuffer(t, map[string][]byte{ |
| 217 | "copilot": content, |
| 218 | }) |
| 219 | |
| 220 | destDir := t.TempDir() |
| 221 | |
| 222 | err := extractTarGz(bytes.NewReader(archive), destDir) |
| 223 | require.NoError(t, err, "extractTarGz() error") |
| 224 | |
| 225 | extracted, err := os.ReadFile(filepath.Join(destDir, "copilot")) |
| 226 | require.NoError(t, err, "failed to read extracted file") |
| 227 | require.Equal(t, content, extracted, "extracted content mismatch") |
| 228 | }) |
| 229 | |
| 230 | t.Run("extracts nested files", func(t *testing.T) { |
| 231 | content := []byte("nested content") |
| 232 | archive := createTarGzBuffer(t, map[string][]byte{ |
| 233 | "subdir/file.txt": content, |
| 234 | }) |
| 235 | |
| 236 | destDir := t.TempDir() |
| 237 | |
| 238 | err := extractTarGz(bytes.NewReader(archive), destDir) |
| 239 | require.NoError(t, err, "extractTarGz() error") |
| 240 | |
| 241 | extracted, err := os.ReadFile(filepath.Join(destDir, "subdir", "file.txt")) |
| 242 | require.NoError(t, err, "failed to read extracted file") |
| 243 | require.Equal(t, content, extracted, "extracted content mismatch") |
| 244 | }) |
| 245 | |
| 246 | t.Run("rejects path traversal", func(t *testing.T) { |
| 247 | // Manually create a malicious tar.gz with path traversal |
| 248 | var buf bytes.Buffer |
| 249 | gw := gzip.NewWriter(&buf) |
| 250 | tw := tar.NewWriter(gw) |
| 251 | |
| 252 | hdr := &tar.Header{ |
| 253 | Name: "../evil.txt", |
| 254 | Mode: 0755, |
| 255 | Size: 4, |
| 256 | } |
| 257 | _ = tw.WriteHeader(hdr) |
| 258 | _, _ = tw.Write([]byte("evil")) |
| 259 | _ = tw.Close() |
| 260 | _ = gw.Close() |
| 261 | |
| 262 | destDir := t.TempDir() |
| 263 | |
| 264 | err := extractTarGz(bytes.NewReader(buf.Bytes()), destDir) |
| 265 | require.Error(t, err, "expected error for path traversal, got nil") |
| 266 | }) |
| 267 | |
| 268 | t.Run("handles invalid gzip", func(t *testing.T) { |
| 269 | destDir := t.TempDir() |
| 270 |
nothing calls this directly
no test coverage detected