Saya merilis pengolah kata yang memformat hard drive setelah setiap penyimpanan 1024

Memberitahu pendongeng pemula tentang bagaimana Anda pernah benar-benar kacau adalah cara yang baik untuk membantu mereka menangani sindrom penipu .

Itu mungkin 1984-1985. Kemudian saya adalah seorang programmer pemula berusia 25 tahun dengan pengalaman lima tahun. Saya dan programmer lain menulis dan mendukung serangkaian aplikasi yang mirip dengan Office saat ini: spreadsheet, pengolah kata, database, plotter, dll. Kami menyiapkan seluruh sistem ini untuk tiga hingga empat pasar vertikal [ klien / spesialis bisnis yang sangat terspesialisasi. perev. ]

Saya menulis sendiri sebagian besar pengolah kata. Saya menulis di Fort, dan untuk berbagai kombinasi OS dan prosesor. Kaum muda tidak terbiasa, tetapi pada masa itu, mikrokomputer baru dengan OS khusus mereka sendiri dan satu dari beberapa pilihan prosesor keluar setiap beberapa bulan.

Fort menggunakan pertukaran data blok dengan disk. Setiap blok memiliki panjang 1 kb, dan untuk menyimpan sesuatu lebih dari 1 kb, perlu untuk bekerja dengan blok master file, di mana offset semua blok dengan data disimpan - pada kenyataannya, itu adalah beberapa daftar blok yang ditempati dan tidak dihuni.

Untuk menginisialisasi blok master ini, harus diisi dengan nol. Ya sudah mulai. Singkatnya, saya mengubah aplikasi sehingga mendukung file dua kali lebih besar dari sebelumnya - dan bukannya 256 elemen di blok master, 1024 muncul.

Setiap entri mengambil - perhatian - satu kata dari 16 bit. Karena itu, jika 512 kata masih masuk ke blok master 1 kb saya, maka 1024 kata sudah mengharuskan penggunaan dua blok.

Oleh karena itu, saya mengubah jumlah blok yang diisi dengan angka nol, tetapi saya tidak mengubah ukuran buffer. Dan ketika Anda bekerja dengan memori yang tidak terlindungi, dan Anda menulis 2048 nol dalam jarak 1024 byte, byte yang tersisa akan menimpa setiap sampah acak yang mereka temukan dalam memori.

Dalam kasus saya, semua sampah acak ternyata merupakan blok master disk OS. Ya ... Dan ketika saya menginisialisasi file baru, yang terjadi setiap 1024 kali ketika menulis file satu blok, saya menimpa master block disk, yang menghapus semua file dari itu.

Dan kami, tentu saja, merilis versi ini, yang bekerja selama 8-9 minggu. Dan Anda dapat membayangkan jumlah panggilan dari pelanggan yang harus kami terima. Pada akhirnya, kami menyarankan semua orang untuk menyimpan cadangan (yang dilakukan, dengan cara, menggunakan kaset video) setiap hari.

Saya menghabiskan banyak minggu hanya meminta maaf melalui telepon sambil menjalankan program saya di debugger lagi dan lagi. Dan saya tidak berhasil. Tidak ada.

Dan kemudian seorang wanita menelepon dan menggambarkannya dengan warna-warni - dan dia bekerja di lalu lintas angkutan, jadi saya sekarang secara aktif menggunakan contoh-contohnya dari bidang senonoh - bahwa dia membuat salinan cadangan, meluncurkan pengolah kata, dan dia segera membersihkan disk-nya. Dia mengunduh cadangan itu lagi, dan prosesor itu segera menghapus disk-nya. Dia sangat marah.

Dan, bayangkan, saya butuh dua jam penuh untuk memahami betapa beruntungnya saya. Saya menceritakan kisah ini kepada rekan saya saat makan malam, dan kemudian saya sadar - berhenti. Berhenti. Sekaligus? Setiap saat?

Saya memanggilnya dan menjanjikan semua berkat duniawi, andai saja dia mau mengemas kaset ini dan mengirimkannya kepada kami. Saya berjanji kepadanya untuk membayar biaya pengiriman dan membatalkan pembayaran bulanan untuk layanan kami (bos saya tidak ragu untuk sesaat: "Ya, sial, kami akan membatalkan pembayarannya").

Dan akhirnya, saya bisa mereproduksi kesalahan ini. Dan dia tidak curang. Cadangan yang dia simpan ternyata berada pada titik kritis: 1023 cadangan pada saat penciptaan. Unduh cadangan, simpan file, dan drive dijamin akan dibersihkan.

Mungkin saya melebih-lebihkan, tetapi, menurut saya, saya menemukan masalah pada pagi yang sama ketika kami mendapatkan film. Sangat mudah ditemukan di debugger.

Saya melihat blok 2 kb yang seharusnya ditulis, dan 1 kb terakhir diisi dengan beberapa jenis sampah. Rasanya aneh bagi saya, dan saya mulai mengerti. Dan, tentu saja, itu bukan sampah - itu adalah 1024 byte dari blok master disk yang disimpan oleh OS di sebelah blok file master saya.

Saya mendapat cadangan "sebelum" kernel - saya tidak memiliki dump inti, tetapi itu memberi saya cara yang terjamin untuk mendapatkan cacat ini. Jika saya tidak beruntung, saya tidak akan menemukannya. Saya hanya tidak akan menebak bahwa saya sedang menulis bukan dalam ingatan saya, tetapi dalam sistem.

Jadi, ya - geek "master" Anda telah merilis pengolah kata yang dalam delapan hingga sembilan minggu telah memformat hard drive klien setelah setiap penyimpanan 1024. Karena, yah, saya pengrajin.

Anda dapat menemukan banyak moralitas dalam cerita ini, tetapi di sini ada dua yang utama untuk junior:

  1. Jangan pernah menulis konstanta numerik kecuali 0, 1, dan -1 dalam kode Anda.
  2. Jangan terlalu keras pada diri sendiri. Semua seniormu yang bijaksana memiliki cerita yang serupa, dan beberapa di antaranya memiliki banyak cerita.

All Articles