The Jerusalem PostHouthis reiterate warning against airlines, travelers using Saudi airports after attack kills 12InquirerCandon City gives diesel subsidy to rice farmers amid El Niño threatESPNReal or not: Fury to KO Joshua? Dubois-Wardley 2 a classic? Garcia-Haney 2 next?Inquirer EntertainmentSarah Lahbati says Barbie doll ‘ganda lang,’ Annabelle scarierPunchEPL: Man City brace for hostile Liverpool crowd after guilty verdictCNN TürkSüper Lig'in en iyisi İrfan Can Kahveci oldu한겨레라이칭더 “평화 소중하지만 자유 포기 안 해”…미-중 대화엔 “환영”Capital FMOluga Challenges JOOTRH Staff to Improve Patient Care Amid Public ComplaintsUOLAtaque de houthis interrompe operações no maior aeroporto da Arábia Saudita durante congresso mundialSky TG24Elio al Next generation fest: "Essere perfetti è antipatico"ZDF heuteAktuelle Pressemitteilungen des ZDFGhaflaPresident Ruto Directs Agriculture Ministry To Import High-Yielding Dairy Camels And Buffaloes
The Daily Newsstand · Free, Always
Sunday, October 11, 2026

Чему нас научил взаимный перенос тестов между Pii-Mask и его форком

Translate

Автор форка SuperB1aze/pii-mask-enhanced нашел и исправил несколько пропусков обработки Word и Excel в Pii-Mask. Вместе с исправлениями он добавил тесты. Я запустил их на нашей версии и получил 13 провалов. Так чужая работа дала нам список сценариев для разбора и помогла увидеть ошибки, которых не обнаруживали прежние проверки.

Хотелось перенести эти исправления и сохранить улучшения, появившиеся у нас после разделения веток. Поэтому сравнение сделал в обе стороны: Office-тесты автора форка запустил на нашей версии, а выбранные наши тесты - на форке.

Ниже покажу один найденный у нас пропуск, результаты сравнения и порядок проверки. Это разбор зафиксированных версий, на момент аудита перенос исправлений еще не был выполнен.

Фамилия после вложенной надписи

Один из тестов автора форка собирает минимальный искусственный OOXML-пакет с такой структурой. Здесь показан тестовый случай вложенности, без полной разметки настоящей надписи Word. ФИО искусственное:

<w:p>
  <w:r><w:t>Договор. </w:t></w:r>
  <w:r><w:pict><w:txbxContent>
    <w:p><w:r><w:t>Приложение</w:t></w:r></w:p>
  </w:txbxContent></w:pict></w:r>
  <w:r><w:t>Директор Соколова Анна Владимировна</w:t></w:r>
</w:p>

Это фрагмент XML, не самостоятельный DOCX. В тесте он помещается в архив с остальными необходимыми частями документа.

Во внешнем абзаце есть надпись со своим вложенным абзацем. После нее идет ФИО. На проверенной нашей версии тест test_text_after_textbox_is_masked падает: фамилия остается в выходном XML. В форке он проходит.

Этот тест проверяет конкретное место в структуре файла. Обычный абзац с тем же ФИО мог маскироваться правильно. Причина искать дополнительные проверки здесь - вложенность документа, которую простой текстовый пример не воспроизводит.

В Office-исправлении форка есть и другие случаи: удаленный текст рецензирования, коды полей, адреса ссылок и авторы комментариев. Для Excel добавлены печатные колонтитулы и новые комментарии. Это полезные дополнения к нашему покрытию.

Как проверяли совместимость улучшений

Я зафиксировал коммиты и работал во временных копиях. В перенесенных тестах менял только импорты: пакет форка называется pii_mask_enhanced, наш - pii_mask. Утверждения и входные данные оставил прежними.

Проверка

Результат

Собственный полный набор форка

372 passed, 1 skipped

Тесты DOCX/XLSX форка на нашей версии

32 passed, 13 failed

Наши тесты имен латиницей и технических терминов на нашей версии

63 passed

Те же 63 проверки на форке

32 passed, 31 failed

Числа относятся к разным наборам: 372, 45 и 63 проверки. Складывать их в общий процент качества нельзя. Полный собственный набор нашей версии в этом сравнении не запускался.

Тринадцать провалов указали на сценарии Office для отдельного разбора. В наборе есть проверки скрытия данных, сохранности остальных полей и отказа от неподдерживаемой обработки. Число провалов не равно числу утечек. Для разбора каждого случая уже есть тест автора форка.

В обратном направлении проверяли совместимость с нашими последующими изменениями. В проверенный форк не входили восемь коммитов, добавленных в нашем репозитории после разделения веток, в том числе исправления для имен латиницей и технических терминов в резюме. Поэтому 31 провал описывает различие версий. Причину каждого нужно проверять по истории изменений; приписывать эти результаты рефакторингу автора оснований нет.

Как повторить сравнение

Использованы наш репозиторий и форк. Проверены:

  • Наш Pii-Mask: c2a03fc841be638898ae12b96b219f8b3aebe0ac.

  • Форк: bf4deafd437263f32041eb8f99bde2e76751f94d.

Порядок воспроизведения:

  1. Клонировать оба репозитория в соседние каталоги pii-mask и pii-mask-enhanced, выполнить в каждом git checkout с соответствующим SHA. Для сравнения использован Python 3.12. В каждом каталоге создать отдельное окружение через python3.12 -m venv .venv и установить зависимости: .venv/bin/python -m pip install -e ".[dev]".

  2. Из каталога форка запустить .venv/bin/python -m pytest -q tests.

  3. Скопировать его tests/test_docx.py и tests/test_xlsx.py в отдельный каталог проверок нашей копии. Заменить from pii_mask_enhanced.formats import docx / xlsx на from pii_mask import docx / xlsx, а from pii_mask_enhanced.engine.core import Masker - на from pii_mask.core import Masker. Импорты внутри тестовых функций тоже учитываются.

  4. Для отдельного каталога fork_checks внутри нашей копии команда такая: .venv/bin/python -m pytest -q fork_checks. Эти два файла используют собственные вспомогательные функции, stdlib и pytest; дополнительных conftest.py для них не требуется.

  5. Скопировать наши tests/test_latin_names.py и tests/test_tech_terms.py в отдельный каталог проверок форка. Заменить импорт на from pii_mask_enhanced.engine.core import Masker и запустить из каталога форка .venv/bin/python -m pytest -q upstream_checks, если копии тестов лежат в upstream_checks. Для контрольного прогона в нашем репозитории: .venv/bin/python -m pytest -q tests/test_latin_names.py tests/test_tech_terms.py.

Перед запуском полезно проверить module.__file__ у импортируемых модулей: он должен указывать на выбранную копию. Иначе установленный пакет из другого каталога может незаметно подменить участника сравнения.

Что изменилось в нашем плане работы

Результатом аудита стал ранбук выборочного переноса Office-исправлений с сохранением наших последующих доработок. На момент сравнения перенос еще не был выполнен; рабочая установка не менялась.

Использовались искусственные примеры. При дополнительной проверке .doc-конвертера на Linux тест настоящего Microsoft Word был пропущен с причиной нет MS Word с pywin32. Прохождение этих тестов также не доказывает отсутствие данных во всех возможных частях Office-файла: изображения, вложенные объекты и другие каналы требуют своего покрытия.

Тесты автора форка дали нам готовые воспроизведения для Office-сценариев, которых не было в нашем наборе, а его исправления - материал для переноса. Сравнение с нашими последующими тестами помогло определить, какое поведение нужно сохранить при этой работе.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.