cv2_segfault_repro_1
scito 1 year ago
parent 6c14141374
commit 8fb6f4181e

@ -5,16 +5,13 @@ name: tests
on:
push:
pull_request:
schedule:
- cron: '37 3 * * *'
jobs:
build:
strategy:
matrix:
python-version: ["3.x"]
python-version: ["3.11"]
# platform: [ubuntu-latest, macos-latest, windows-latest]
platform: [macos-latest]
# exclude:
@ -27,18 +24,10 @@ jobs:
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install zbar shared lib for QReader (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get install -y libzbar0
- name: Install zbar shared lib for QReader (macOS)
if: runner.os == 'macOS'
run: |
brew install zbar
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U -r requirements-dev.txt
pip install -U -r pytest
# pip install -U .
- name: Test with pytest cv2 4.6
run: |
@ -47,6 +36,6 @@ jobs:
pytest -vvv -s tests/extract_otp_secrets_test.py::test_cv2_segfault_6_f1
- name: Test with pytest cv2 4.7
run: |
pip install --force-reinstall -v "opencv-contrib-python==4.7.0.68"
pip install --force-reinstall -v "opencv-contrib-python>=4.7.0"
pytest -vvv -s tests/extract_otp_secrets_test.py::test_cv2_segfault_6_f0
pytest -vvv -s tests/extract_otp_secrets_test.py::test_cv2_segfault_6_f1

@ -1,22 +0,0 @@
from typing import Any
import pytest
from extract_otp_secrets import QRMode
def pytest_addoption(parser: pytest.Parser) -> None:
parser.addoption("--relaxed", action='store_true', help="run tests in relaxed mode")
parser.addoption("--fast", action="store_true", help="faster execution, do not run all combinations")
@pytest.fixture
def relaxed(request: pytest.FixtureRequest) -> Any:
return request.config.getoption("--relaxed")
def pytest_generate_tests(metafunc: pytest.Metafunc) -> None:
if "qr_mode" in metafunc.fixturenames:
number = 2 if metafunc.config.getoption("fast") else len(QRMode)
qr_modes = [mode.name for mode in QRMode]
metafunc.parametrize("qr_mode", qr_modes[0:1])

@ -18,280 +18,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
from __future__ import annotations # for compatibility with PYTHON < 3.11
import io
import os
import pathlib
import sys
import colorama
import cv2 # type: ignore
import pyzbar.pyzbar as zbar # type: ignore
import pytest
from pytest_mock import MockerFixture
from utils import (file_exits, quick_and_dirty_workaround_encoding_problem,
read_binary_file_as_stream, read_csv, read_csv_str,
read_file_to_str, read_json, read_json_str,
replace_escaped_octal_utf8_bytes_with_str, count_files_in_dir)
# Quickfix comment
# @pytest.mark.skipif(sys.platform.startswith("win") or not qreader_available or sys.implementation.name == 'pypy' or sys.version_info >= (3, 10), reason="Quickfix")
# def test_cv2_segfault_1(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# print('Done')
# def test_cv2_segfault_2(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2.QRCodeDetector()
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
# def test_cv2_segfault_3(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
# def test_cv2_segfault_4(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# print('_YoloV3QRDetector()')
# _YoloV3QRDetector()
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
# def test_cv2_segfault_5(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# print('_YoloV3QRDetector()')
# _YoloV3QRDetector()
# print('from qreader import QReader')
# from qreader import QReader
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
# def test_cv2_segfault_6(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# print('_YoloV3QRDetector()')
# _YoloV3QRDetector()
# print('from qreader import QReader')
# from qreader import QReader
# print('QReader()')
# qreader = QReader()
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
# def test_cv2_segfault_6_d0(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2_qr =cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# print('_YoloV3QRDetector()')
# yolo = _YoloV3QRDetector()
# print('from qreader import QReader')
# from qreader import QReader
# print('QReader()')
# qreader = QReader()
# print('cv2.dnn.blobFromImage')
# _INPUT_SIZE = (416, 416)
# _CONF_THRESHOLD = 0.5
# blob = cv2.dnn.blobFromImage(img, 1 / 255, _INPUT_SIZE, swapRB=False, crop=False)
# # self.yolo_v3_QR_detector.setInput(blob=blob)
# # output = self.yolo_v3_QR_detector.forward(self.output_layer_name)
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
# def test_cv2_segfault_6_d1(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2_qr =cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# print('_YoloV3QRDetector()')
# yolo = _YoloV3QRDetector()
# print('from qreader import QReader')
# from qreader import QReader
# print('QReader()')
# qreader = QReader()
# print('cv2.dnn.blobFromImage')
# _INPUT_SIZE = (416, 416)
# _CONF_THRESHOLD = 0.5
# blob = cv2.dnn.blobFromImage(img, 1 / 255, _INPUT_SIZE, swapRB=False, crop=False)
# print('yolo.yolo_v3_QR_detector.setInput')
# yolo.yolo_v3_QR_detector.setInput(blob=blob)
# # output = self.yolo_v3_QR_detector.forward(self.output_layer_name)
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
def test_cv2_segfault_6_f0() -> None:
print('cv2.imread')
img = cv2.imread('tests/data/test_googleauth_export.png')
@ -342,273 +69,3 @@ def test_cv2_segfault_6_f1() -> None:
output = yolo_v3_QR_detector.forward(output_layer_name)
print('Done')
# def test_cv2_segfault_6_d2(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2_qr =cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# print('_YoloV3QRDetector()')
# yolo = _YoloV3QRDetector()
# print('from qreader import QReader')
# from qreader import QReader
# print('QReader()')
# qreader = QReader()
# print('cv2.dnn.blobFromImage')
# _INPUT_SIZE = (416, 416)
# _CONF_THRESHOLD = 0.5
# blob = cv2.dnn.blobFromImage(img, 1 / 255, _INPUT_SIZE, swapRB=False, crop=False)
# print('yolo.yolo_v3_QR_detector.setInput')
# yolo.yolo_v3_QR_detector.setInput(blob=blob)
# print('yolo.yolo_v3_QR_detector.forward')
# output = yolo.yolo_v3_QR_detector.forward(yolo.output_layer_name)
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
# def test_cv2_segfault_6_d1(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2_qr =cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# print('_YoloV3QRDetector()')
# yolo = _YoloV3QRDetector()
# print('from qreader import QReader')
# from qreader import QReader
# print('QReader()')
# qreader = QReader()
# print('yolo.detect')
# yolo.detect(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
# def test_cv2_segfault_6_d2(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2_qr =cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# print('_YoloV3QRDetector()')
# yolo = _YoloV3QRDetector()
# print('from qreader import QReader')
# from qreader import QReader
# print('QReader()')
# qreader = QReader()
# print('yolo.detect')
# yolo.detect(img)
# print('yolo.detect')
# cv2_qr.detect(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
# def test_cv2_segfault_6_m(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# print('_YoloV3QRDetector()')
# _YoloV3QRDetector()
# print('from qreader import QReader')
# from qreader import QReader
# print('QReader()')
# qreader = QReader()
# print('qreader.detect(img)')
# found, bbox = qreader.detect(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
# def test_cv2_segfault_6_n(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# print('_YoloV3QRDetector()')
# _YoloV3QRDetector()
# print('from qreader import QReader')
# from qreader import QReader
# print('QReader()')
# qreader = QReader()
# print('qreader.detect(img)')
# found, bbox = qreader.detect(img)
# print('qreader.decode(img, bbox)')
# qreader.decode(img, bbox)
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('Done')
# def test_cv2_segfault_7(qr_mode: str) -> None:
# print(f'QRmode: {qr_mode}')
# print('cv2.imread')
# img = cv2.imread('tests/data/test_googleauth_export.png')
# qr_mode_2 = extract_otp_secrets.QRMode[qr_mode]
# print(f'detect and decode for qr_mode {qr_mode_2}')
# if qr_mode_2 in [extract_otp_secrets.QRMode.QREADER, extract_otp_secrets.QRMode.DEEP_QREADER]:
# print('cv.QRCodeDetector()')
# cv2.QRCodeDetector()
# print('from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector')
# from __yolo_v3_qr_detector.yolov3_qr_detector import _YoloV3QRDetector
# print('_YoloV3QRDetector()')
# _YoloV3QRDetector()
# print('from qreader import QReader')
# from qreader import QReader
# print('QReader()')
# qreader = QReader()
# print('QReader().detect_and_decode')
# qreader.detect_and_decode(img, qr_mode == extract_otp_secrets.QRMode.DEEP_QREADER)
# elif qr_mode_2 == extract_otp_secrets.QRMode.CV2:
# cv2.QRCodeDetector().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.WECHAT:
# cv2.wechat_qrcode.WeChatQRCode().detectAndDecode(img)
# elif qr_mode_2 == extract_otp_secrets.QRMode.ZBAR:
# zbar.decode(img)
# print('extract_otp_secrets.main')
# extract_otp_secrets.main(['--qr', qr_mode, 'tests/data/test_googleauth_export.png'])
# print('Done')
EXPECTED_STDOUT_FROM_EXAMPLE_EXPORT_PNG = '''Name: Test1:test1@example1.com
Secret: JBSWY3DPEHPK3PXP
Issuer: Test1
Type: totp
Name: Test2:test2@example2.com
Secret: JBSWY3DPEHPK3PXQ
Issuer: Test2
Type: totp
Name: Test3:test3@example3.com
Secret: JBSWY3DPEHPK3PXR
Issuer: Test3
Type: totp
'''

Loading…
Cancel
Save