Lập trình Go 22/09/2026 9 phút

Fuzzing native trong Go (1.18+): để máy tự sinh input tìm bug

Test đơn vị chỉ phủ những input lập trình viên nghĩ tới. Fuzzing tự sinh hàng triệu input kỳ quái để tìm panic và ca biên — tích hợp thẳng vào go test từ Go 1.18. Đo thật: một hàm test thường XANH nhưng fuzz tìm ra input '0' làm panic trong dưới 1 giây, tự rút gọn tối giản và lưu làm hồi quy.

Lập trình 22/09/2026 7 phút

Fuzzing với go test -fuzz, đo thật: bốn hàm đọc đầu vào ngoài với bốn lỗi, 8/8 lần fuzz crash trong 0,1 đến 1,6 giây với đầu vào thu nhỏ còn 1 đến 4 byte, file crash tự thành test hồi quy — và chính nó bắt bản sửa lần một của tôi vẫn còn tràn số

Bốn hàm nhận dữ liệu từ bên ngoài, mỗi hàm một lỗi quen thuộc: make với độ dài âm, đọc quá biên khi dấu nháy đứng cuối, tràn int64 thành thời lượng âm, độ dài tiền tố không kiểm so với dữ liệu còn lại. Fuzzing tích hợp của Go tìm ra cả bốn trong 0,1 đến 1,6 giây, với đầu vào thu nhỏ như 7-0, hai dấu nháy, một byte 0. File gây lỗi lưu trong testdata chạy lại như test thường. Bản sửa lần một của ParseDuration chỉ kiểm tràn khi đọc chữ số và bị chính corpus bắt: 8e15 giờ nhân 3600 tràn ở phép nhân đơn vị. Sửa lần hai: 10,6 triệu lượt sạch; tốc độ khoảng 470.000 lượt một giây trên 10 CPU.