DedSec Project

Σύγκριση συμπεριφοράς εκδόσεων — DedSec Project

Σύγκριση εκδόσεων: συμπεριφορά, δομή και metadata Μοντέλο και όρια συμπερασμάτων Δύο builds με διαφορετικά hashes δεν έχουν απαραίτητα διαφορετική συμπεριφορά· timestamps, compression και…

Σύγκριση εκδόσεων: συμπεριφορά, δομή και metadata

Μοντέλο και όρια συμπερασμάτων

Δύο builds με διαφορετικά hashes δεν έχουν απαραίτητα διαφορετική συμπεριφορά· timestamps, compression και metadata μπορούν να αλλάζουν bytes. Αντίστροφα, μια μικρή αλλαγή source μπορεί να αλλάξει κρίσιμο branch. Σύγκρινε στο σωστό επίπεδο: hash για ταυτότητα, δομημένο diff για πεδία και regression fixtures για συμπεριφορά.

Αυτοτελές δοκιμαστικό δείγμα

from hashlib import sha256
import difflib
a = "limit=10\nmode=fast\n"
b = "limit=11\nmode=fast\n"
assert sha256(a.encode()).digest() != sha256(b.encode()).digest()
diff = list(difflib.unified_diff(
    a.splitlines(True), b.splitlines(True), fromfile="old", tofile="new"))
assert any("-limit=10" in line for line in diff)
assert any("+limit=11" in line for line in diff)
print("".join(diff))

Βήματα έρευνας και ελέγχου

Πριν από diff, κανονικοποίησε μόνο πεδία που έχεις τεκμηριώσει ότι δεν επηρεάζουν το ερώτημα· μη διαγράφεις άγνωστα στοιχεία. Κατάγραψε αλλαγές αρχείων, γραμμών και dependencies. Για κάθε πιθανή λειτουργική αλλαγή βρες είσοδο που διαφοροποιεί παλιά και νέα έκδοση. Κράτησε και τα δύο πρωτότυπα με hashes.

Πρακτικό εργαστήριο

Φτιάξε δύο ZIP με ίδιο κείμενο αλλά διαφορετικό archive timestamp και δείξε ότι τα ZIP hashes διαφέρουν ενώ τα extracted contents είναι ίδια. Μετά άλλαξε ένα αριθμητικό όριο και γράψε regression test που αποκαλύπτει τη διαφορά στο boundary.

Σύγκρινε σωστό επίπεδο ισοδυναμίας

Φτιάξε δύο ZIP με ίδιο ακριβώς δικό σου κείμενο αλλά διαφορετικό timestamp στο αρχείο. Οι συνολικοί SHA-256 των ZIP μπορεί να διαφέρουν, ενώ το hash του εξαγόμενου κειμένου είναι ίδιο. Κατέγραψε τρία επίπεδα: bytes container, metadata entries και πραγματικό περιεχόμενο. Σε δεύτερο παράδειγμα άλλαξε ένα κατώφλι σε απλή μαθηματική συνάρτηση και γράψε τεστ που αποτυγχάνει ακριβώς στο όριο. Μη θεωρείς όλα τα metadata άχρηστα: δικαιώματα, σειρά, timestamps ή υπογραφές ενδέχεται να έχουν σημασία. Κάθε «κανονικοποιημένο» diff χρειάζεται ρητό κανόνα για το τι αγνοεί.