Package: src:beautifulsoup4
Version: 4.13.4-1
Severity: serious
Tags: ftbfs trixie sid

Dear maintainer:

During a rebuild of all packages in unstable, your package failed to build:

--------------------------------------------------------------------------------
[...]
 debian/rules clean
dh clean --buildsystem=pybuild
   debian/rules override_dh_auto_clean
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_auto_clean
rm -rf build
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
   dh_autoreconf_clean -O--buildsystem=pybuild
   dh_clean -O--buildsystem=pybuild
 debian/rules binary
dh binary --buildsystem=pybuild
   dh_update_autotools_config -O--buildsystem=pybuild
   dh_autoreconf -O--buildsystem=pybuild
   dh_auto_configure -O--buildsystem=pybuild
   dh_auto_build -O--buildsystem=pybuild
I: pybuild plugin_pyproject:129: Building wheel for python3.13 with "build" 
module
I: pybuild base:311: python3.13 -m build --skip-dependency-check --no-isolation 
--wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_bs4  
* Building wheel...
Successfully built beautifulsoup4-4.13.4-py3-none-any.whl
I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.13 with 
"installer" module
   debian/rules execute_after_dh_auto_build
make[1]: Entering directory '/<<PKGBUILDDIR>>'
python3 -m sphinx -aEN -b html -d build/doctrees doc build/html
Running Sphinx v8.1.3
loading translations [en,ja,ko,ru,pt,zh]... not available for built-in messages
making output directory... done
loading intersphinx inventory 'python' from 
https://docs.python.org/3/objects.inv ...
building [mo]: all of 0 po files
writing output... 
building [html]: all source files
updating environment: [new config] 1 added, 0 changed, 0 removed
reading sources... [100%] index

looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
copying assets... 
copying static files... 
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html/_static/language_data.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html/_static/basic.css
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html/_static/documentation_options.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html/_static/alabaster.css
copying static files: done
copying extra files... 
copying extra files: done
copying assets: done
writing output... [100%] index

/<<PKGBUILDDIR>>/doc/index.rst:55: WARNING: unknown document: 'api/modules' 
[ref.doc]
generating indices... genindex done
writing additional pages... search done
copying images... [100%] 6.1.jpg

dumping search index in English (code: en)... done
dumping object inventory... done
build succeeded, 1 warning.

The HTML pages are in build/html.
python3 -m sphinx -aEN -b html -D language=es_ES -d build/doctrees.es 
doc.es/source build/html.es
Running Sphinx v8.1.3
loading translations [es_ES]... done
making output directory... done
WARNING: html_static_path entry '_static' does not exist
Converting `source_suffix = '.rst'` to `source_suffix = {'.rst': 
'restructuredtext'}`.
building [mo]: all of 0 po files
writing output... 
building [html]: all source files
updating environment: [new config] 1 added, 0 changed, 0 removed
reading sources... [100%] index

looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
copying assets... 
copying static files... 
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.es/_static/language_data.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.es/_static/basic.css
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.es/_static/documentation_options.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.es/_static/sidebar.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.es/_static/classic.css
copying static files: done
copying extra files... 
copying extra files: done
copying assets: done
writing output... [100%] index

generating indices... genindex py-modindex done
writing additional pages... search done
copying images... [100%] 6.1.jpg

dumping search index in Spanish (code: es)... done
dumping object inventory... done
build succeeded, 1 warning.

The HTML pages are in build/html.es.
python3 -m sphinx -aEN -b html -D language=pt_BR -d build/doctrees.ptbr 
doc.ptbr/source build/html.ptbr
Running Sphinx v8.1.3
loading translations [pt_BR]... done
making output directory... done
WARNING: html_static_path entry '_static' does not exist
Converting `source_suffix = '.rst'` to `source_suffix = {'.rst': 
'restructuredtext'}`.
building [mo]: all of 0 po files
writing output... 
building [html]: all source files
updating environment: [new config] 1 added, 0 changed, 0 removed
reading sources... [100%] index

looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
copying assets... 
copying static files... 
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.ptbr/_static/language_data.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.ptbr/_static/basic.css
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.ptbr/_static/documentation_options.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.ptbr/_static/sidebar.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.ptbr/_static/classic.css
copying static files: done
copying extra files... 
copying extra files: done
copying assets: done
writing output... [100%] index

generating indices... genindex done
writing additional pages... search done
copying images... [100%] 6.1.jpg

dumping search index in Portuguese (code: pt)... done
dumping object inventory... done
build succeeded, 1 warning.

The HTML pages are in build/html.ptbr.
python3 -m sphinx -aEN -b html -D language=ru_RU -d build/doctrees.ru 
doc.ru/source build/html.ru
Running Sphinx v8.1.3
loading translations [ru_RU]... done
making output directory... done
WARNING: html_static_path entry '_static' does not exist
Converting `source_suffix = '.rst'` to `source_suffix = {'.rst': 
'restructuredtext'}`.
building [mo]: all of 0 po files
writing output... 
building [html]: all source files
updating environment: [new config] 2 added, 0 changed, 0 removed
reading sources... [ 50%] bs4ru
reading sources... [100%] index

looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
copying assets... 
copying static files... 
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.ru/_static/language_data.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.ru/_static/basic.css
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.ru/_static/documentation_options.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.ru/_static/sidebar.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.ru/_static/classic.css
copying static files: done
copying extra files... 
copying extra files: done
copying assets: done
writing output... [ 50%] bs4ru
writing output... [100%] index

generating indices... genindex done
writing additional pages... search done
copying images... [100%] 6.1.jpg

dumping search index in Russian (code: ru)... done
dumping object inventory... done
build succeeded, 1 warning.

The HTML pages are in build/html.ru.
python3 -m sphinx -aEN -b html -D language=zh_CN -d build/doctrees.zh 
doc.zh/source build/html.zh
Running Sphinx v8.1.3
loading translations [zh_CN]... done
making output directory... done
WARNING: html_static_path entry '_static' does not exist
Converting `source_suffix = '.rst'` to `source_suffix = {'.rst': 
'restructuredtext'}`.
building [mo]: all of 0 po files
writing output... 
building [html]: all source files
updating environment: [new config] 1 added, 0 changed, 0 removed
reading sources... [100%] index

looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
copying assets... 
copying static files... 
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.zh/_static/language_data.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.zh/_static/basic.css
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.zh/_static/documentation_options.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.zh/_static/sidebar.js
Writing evaluated template result to 
/<<PKGBUILDDIR>>/build/html.zh/_static/classic.css
copying static files: done
copying extra files... 
copying extra files: done
copying assets: done
writing output... [100%] index

generating indices... genindex py-modindex done
writing additional pages... search done
dumping search index in Chinese (code: zh)... done
dumping object inventory... done
build succeeded, 1 warning.

The HTML pages are in build/html.zh.
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
   dh_auto_test -O--buildsystem=pybuild
I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_bs4/build; 
python3.13 -m pytest 
============================= test session starts ==============================
platform linux -- Python 3.13.3, pytest-8.3.5, pluggy-1.5.0
rootdir: /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_bs4/build
configfile: pyproject.toml
collected 851 items

bs4/tests/test_builder.py .....                                          [  0%]
bs4/tests/test_builder_registry.py ...........                           [  1%]
bs4/tests/test_css.py .................................................. [  7%]
..........                                                               [  8%]
bs4/tests/test_dammit.py ............................................... [ 14%]
                                                                         [ 14%]
bs4/tests/test_element.py .........                                      [ 15%]
bs4/tests/test_filter.py ............................................... [ 21%]
............................                                             [ 24%]
bs4/tests/test_formatter.py ............................                 [ 27%]
bs4/tests/test_fuzz.py FF.........sssssss                                [ 29%]
bs4/tests/test_html5lib.py ............................................. [ 35%]
.............................................                            [ 40%]
bs4/tests/test_htmlparser.py ........................................... [ 45%]
...........................F.........                                    [ 49%]
bs4/tests/test_lxml.py ................................................. [ 55%]
............................................................             [ 62%]
bs4/tests/test_navigablestring.py .........                              [ 63%]
bs4/tests/test_pageelement.py ......................................     [ 68%]
bs4/tests/test_soup.py ................................................. [ 73%]
..................................                                       [ 77%]
bs4/tests/test_tag.py ........................                           [ 80%]
bs4/tests/test_tree.py ................................................. [ 86%]
........................................................................ [ 94%]
............................................                             [100%]

=================================== FAILURES ===================================
_ 
TestFuzz.test_rejected_markup[clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912]
 _

self = <bs4.tests.test_fuzz.TestFuzz object at 0x7f0bedc87110>
filename = 'clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912'

    @pytest.mark.parametrize(
        "filename",
        [
            "clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912",
            "crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a",
        ],
    )
    def test_rejected_markup(self, filename):
        markup = self.__markup(filename)
>       with pytest.raises(ParserRejectedMarkup):
E       Failed: DID NOT RAISE <class 'bs4.exceptions.ParserRejectedMarkup'>

bs4/tests/test_fuzz.py:81: Failed
_ TestFuzz.test_rejected_markup[crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a] 
_

self = <bs4.tests.test_fuzz.TestFuzz object at 0x7f0bedc86fd0>
filename = 'crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a'

    @pytest.mark.parametrize(
        "filename",
        [
            "clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912",
            "crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a",
        ],
    )
    def test_rejected_markup(self, filename):
        markup = self.__markup(filename)
>       with pytest.raises(ParserRejectedMarkup):
E       Failed: DID NOT RAISE <class 'bs4.exceptions.ParserRejectedMarkup'>

bs4/tests/test_fuzz.py:81: Failed
------------------------------ Captured log call -------------------------------
WARNING  bs4.dammit:dammit.py:825 Some characters could not be decoded, and 
were replaced with REPLACEMENT CHARACTER.
________________ TestHTMLParserTreeBuilder.test_rejected_input _________________

self = <bs4.tests.test_htmlparser.TestHTMLParserTreeBuilder object at 
0x7f0bedc874d0>

    def test_rejected_input(self):
        # Python's html.parser will occasionally reject markup,
        # especially when there is a problem with the initial DOCTYPE
        # declaration. Different versions of Python sound the alarm in
        # different ways, but Beautiful Soup consistently raises
        # errors as ParserRejectedMarkup exceptions.
        bad_markup = [
            # https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=28873
            # 
https://github.com/guidovranken/python-library-fuzzers/blob/master/corp-html/519e5b4269a01185a0d5e76295251921da2f0700
            # https://github.com/python/cpython/issues/81928
            b"\n<![\xff\xfe\xfe\xcd\x00",
            # 
https://github.com/guidovranken/python-library-fuzzers/blob/master/corp-html/de32aa55785be29bbc72a1a8e06b00611fb3d9f8
            # https://github.com/python/cpython/issues/78661
            #
            b"<![n\x00",
            b"<![UNKNOWN[]]>",
        ]
        for markup in bad_markup:
>           with pytest.raises(ParserRejectedMarkup):
E           Failed: DID NOT RAISE <class 'bs4.exceptions.ParserRejectedMarkup'>

bs4/tests/test_htmlparser.py:37: Failed
=========================== short test summary info ============================
FAILED 
bs4/tests/test_fuzz.py::TestFuzz::test_rejected_markup[clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912]
FAILED 
bs4/tests/test_fuzz.py::TestFuzz::test_rejected_markup[crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a]
FAILED 
bs4/tests/test_htmlparser.py::TestHTMLParserTreeBuilder::test_rejected_input
=================== 3 failed, 841 passed, 7 skipped in 1.65s ===================
E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_bs4/build; python3.13 -m pytest 
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 
returned exit code 13
make: *** [debian/rules:6: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------

The above is just how the build ends and not necessarily the most relevant part.
If required, the full build log is available here:

https://people.debian.org/~sanvila/build-logs/202505/

About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.

If you could not reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.

If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:beautifulsoup4, so that this is still
visible in the BTS web page for this package.

Thanks.

Reply via email to