MCPcopy Create free account
hub / github.com/cli/cli / TestExtractTarGz

Function TestExtractTarGz

pkg/cmd/copilot/copilot_test.go:213–274  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

211}
212
213func 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

Callers

nothing calls this directly

Calls 8

createTarGzBufferFunction · 0.85
extractTarGzFunction · 0.85
JoinMethod · 0.80
EqualMethod · 0.80
RunMethod · 0.65
WriteMethod · 0.65
CloseMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected