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

Function TestExtractTarGz

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

Source from the content-addressed store, hash-verified

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

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