pkg/osx/file.go:21defer dstFile.Close() không kiểm tra lỗi. Khi ghi file, lỗi flush/có thể xảy ra ở Close() bị bỏ qua → file có thể bị cắt xén mà hàm vẫn báo thành công.
dstFile,err:=os.Create(to)...deferdstFile.Close()// ❌ không check..._,err=io.CopyBuffer(dstFile,srcFile,buf)...returnnil// ❌ không sync/close-err
Fix đề xuất
dstFile,err:=os.Create(to)iferr!=nil{returnerr}deferdstFile.Close()..._,err=io.CopyBuffer(dstFile,srcFile,buf)iferr!=nil{returnerr}// quan trọng: kiểm tra lỗi close (flush)iferr:=dstFile.Close();err!=nil{returnerr}returnnil
(Đổi defer close cho cleanup path, và close tường minh kiểm tra lỗi ở happy path — hoặc dùng defer với named return.)
## Vấn đề
`pkg/osx/file.go:21` `defer dstFile.Close()` không kiểm tra lỗi. Khi ghi file, lỗi flush/có thể xảy ra ở `Close()` bị bỏ qua → file có thể bị cắt xén mà hàm vẫn báo thành công.
```go
dstFile, err := os.Create(to)
...
defer dstFile.Close() // ❌ không check
...
_, err = io.CopyBuffer(dstFile, srcFile, buf)
...
return nil // ❌ không sync/close-err
```
## Fix đề xuất
```go
dstFile, err := os.Create(to)
if err != nil { return err }
defer dstFile.Close()
...
_, err = io.CopyBuffer(dstFile, srcFile, buf)
if err != nil { return err }
// quan trọng: kiểm tra lỗi close (flush)
if err := dstFile.Close(); err != nil { return err }
return nil
```
(Đổi `defer` close cho cleanup path, và close tường minh kiểm tra lỗi ở happy path — hoặc dùng `defer` với named return.)
claudecode
added the bug label 2026-07-22 11:23:41 +07:00
pkg/osx/file.go: Copy kiểm tra lỗi Close() của dst — Close() có thể flush write buffer, nên lỗi close phải được surface (không phải return nil khi file đích chưa hoàn chỉnh). Dùng defer chỉ ghi đè giá trị trả về khi bản thân copy thành công.
Cùng commit: dọn temp file khi copy/open fail (internal/data/ipdb.go).
Verify: go build / go vet PASS.
Đã sửa trong PR #22 (merge commit `361eb40`).
- `pkg/osx/file.go`: `Copy` kiểm tra lỗi `Close()` của dst — `Close()` có thể flush write buffer, nên lỗi close phải được surface (không phải return nil khi file đích chưa hoàn chỉnh). Dùng defer chỉ ghi đè giá trị trả về khi bản thân copy thành công.
- Cùng commit: dọn temp file khi copy/open fail (`internal/data/ipdb.go`).
Verify: `go build` / `go vet` PASS.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Vấn đề
pkg/osx/file.go:21defer dstFile.Close()không kiểm tra lỗi. Khi ghi file, lỗi flush/có thể xảy ra ởClose()bị bỏ qua → file có thể bị cắt xén mà hàm vẫn báo thành công.Fix đề xuất
(Đổi
deferclose cho cleanup path, và close tường minh kiểm tra lỗi ở happy path — hoặc dùngdefervới named return.)Đã sửa trong PR #22 (merge commit
361eb40).pkg/osx/file.go:Copykiểm tra lỗiClose()của dst —Close()có thể flush write buffer, nên lỗi close phải được surface (không phải return nil khi file đích chưa hoàn chỉnh). Dùng defer chỉ ghi đè giá trị trả về khi bản thân copy thành công.internal/data/ipdb.go).Verify:
go build/go vetPASS.