summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/__init__.py5
-rw-r--r--bitbake/lib/bb/build.py25
-rw-r--r--bitbake/lib/bb/cache.py6
-rw-r--r--bitbake/lib/bb/checksum.py5
-rw-r--r--bitbake/lib/bb/cooker.py25
-rw-r--r--bitbake/lib/bb/fetch2/__init__.py11
-rw-r--r--bitbake/lib/bb/fetch2/clearcase.py6
-rw-r--r--bitbake/lib/bb/fetch2/git.py33
-rw-r--r--bitbake/lib/bb/fetch2/hg.py27
-rw-r--r--bitbake/lib/bb/persist_data.py3
-rw-r--r--bitbake/lib/bb/runqueue.py174
-rw-r--r--bitbake/lib/bb/siggen.py182
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/apple/cups/releases2400
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/debian/pool/main/d/db5.3/index.html509
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/downloads/enchant/1.6.0/index.html15
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v2.8/index.html774
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.0/index.html209
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.1/index.html156
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.10/index.html131
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.11/index.html131
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.12/index.html118
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.13/index.html131
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.14/index.html170
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.15/index.html157
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.16/index.html86
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.2/index.html132
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.3/index.html163
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.4/index.html127
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.5/index.html111
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.6/index.html159
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.7/index.html92
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.8/index.html105
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/files/v3.9/index.html183
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.23/index.html45
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.24/index.html43
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.25/index.html46
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.26/index.html42
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.27/index.html35
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.28/index.html42
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.29/index.html42
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.30/index.html42
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.31/index.html35
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.32/index.html35
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.33/index.html42
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.34/index.html28
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.35/index.html18
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/releases/eglibc/index.html21
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/releases/gnu-config/index.html9
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/releases/individual/xserver/index.html609
-rw-r--r--bitbake/lib/bb/tests/fetch-testdata/software/pulseaudio/releases/index.html383
-rw-r--r--bitbake/lib/bb/tests/fetch.py93
-rw-r--r--bitbake/lib/bb/tests/runqueue.py2
-rw-r--r--bitbake/lib/bb/tests/support/httpserver.py65
-rw-r--r--bitbake/lib/bb/tests/utils.py26
-rw-r--r--bitbake/lib/bb/ui/knotty.py25
-rw-r--r--bitbake/lib/bb/ui/uihelper.py39
-rw-r--r--bitbake/lib/bb/utils.py45
-rw-r--r--bitbake/lib/hashserv/client.py8
-rw-r--r--bitbake/lib/hashserv/server.py36
-rw-r--r--bitbake/lib/prserv/serv.py33
-rw-r--r--bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py6
-rw-r--r--documentation/Makefile5
-rwxr-xr-x[-rw-r--r--]documentation/bsp-guide/bsp-guide.xml22
-rw-r--r--documentation/dev-manual/dev-manual-common-tasks.xml9
-rwxr-xr-x[-rw-r--r--]documentation/dev-manual/dev-manual.xml22
-rwxr-xr-x[-rw-r--r--]documentation/kernel-dev/kernel-dev.xml12
-rwxr-xr-x[-rw-r--r--]documentation/mega-manual/mega-manual.xml34
-rwxr-xr-x[-rw-r--r--]documentation/overview-manual/overview-manual.xml22
-rwxr-xr-x[-rw-r--r--]documentation/poky.ent20
-rwxr-xr-x[-rw-r--r--]documentation/profile-manual/profile-manual.xml12
-rwxr-xr-x[-rw-r--r--]documentation/ref-manual/ref-manual.xml22
-rwxr-xr-x[-rw-r--r--]documentation/sdk-manual/sdk-manual.xml22
-rwxr-xr-x[-rw-r--r--]documentation/toaster-manual/toaster-manual.xml22
-rwxr-xr-x[-rw-r--r--]documentation/tools/mega-manual.sed46
-rw-r--r--meta-poky/conf/distro/poky.conf2
-rw-r--r--meta-selftest/lib/oeqa/runtime/cases/virgl.py5
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test1-1.5.3/backported.patch37
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test1_1.5.3.bb4
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test1_1.5.3.bb.upgraded4
-rw-r--r--meta-selftest/recipes-test/recipeutils/recipeutils-test_1.2.bb2
-rw-r--r--meta/classes/base.bbclass1
-rw-r--r--meta/classes/cross.bbclass1
-rw-r--r--meta/classes/cve-check.bbclass134
-rw-r--r--meta/classes/kernel-fitimage.bbclass6
-rw-r--r--meta/classes/kernel-yocto.bbclass3
-rw-r--r--meta/classes/kernel.bbclass5
-rw-r--r--meta/classes/kernelsrc.bbclass2
-rw-r--r--meta/classes/license.bbclass27
-rw-r--r--meta/classes/linuxloader.bbclass2
-rw-r--r--meta/classes/meson.bbclass3
-rw-r--r--meta/classes/native.bbclass1
-rw-r--r--meta/classes/patch.bbclass7
-rw-r--r--meta/classes/podfix.bbclass35
-rw-r--r--meta/classes/populate_sdk_ext.bbclass2
-rw-r--r--meta/classes/pypi.bbclass4
-rw-r--r--meta/classes/relocatable.bbclass20
-rw-r--r--meta/classes/reproducible_build.bbclass40
-rw-r--r--meta/classes/reproducible_build_simple.bbclass1
-rw-r--r--meta/classes/rm_work.bbclass9
-rw-r--r--meta/classes/sanity.bbclass19
-rw-r--r--meta/classes/sstate.bbclass51
-rw-r--r--meta/classes/toaster.bbclass15
-rw-r--r--meta/conf/distro/include/maintainers.inc1
-rw-r--r--meta/conf/distro/include/no-static-libs.inc4
-rw-r--r--meta/conf/distro/include/security_flags.inc2
-rw-r--r--meta/conf/distro/include/yocto-uninative.inc10
-rw-r--r--meta/conf/documentation.conf1
-rw-r--r--meta/conf/licenses.conf43
-rw-r--r--meta/conf/multilib.conf1
-rw-r--r--meta/files/toolchain-shar-extract.sh13
-rw-r--r--meta/lib/oe/package_manager.py37
-rw-r--r--meta/lib/oe/prservice.py4
-rw-r--r--meta/lib/oe/sstatesig.py30
-rw-r--r--meta/lib/oe/utils.py2
-rw-r--r--meta/lib/oeqa/buildperf/base.py2
-rw-r--r--meta/lib/oeqa/core/utils/concurrencytest.py2
-rw-r--r--meta/lib/oeqa/sdkext/testsdk.py7
-rw-r--r--meta/lib/oeqa/selftest/cases/devtool.py25
-rw-r--r--meta/lib/oeqa/selftest/cases/incompatible_lic.py6
-rw-r--r--meta/lib/oeqa/selftest/cases/reproducible.py29
-rw-r--r--meta/lib/oeqa/selftest/cases/runtime_test.py4
-rw-r--r--meta/lib/oeqa/selftest/cases/signing.py4
-rw-r--r--meta/lib/oeqa/selftest/cases/sstatetests.py52
-rw-r--r--meta/lib/oeqa/selftest/context.py6
-rw-r--r--meta/lib/oeqa/targetcontrol.py7
-rw-r--r--meta/lib/oeqa/utils/qemurunner.py16
-rw-r--r--meta/recipes-bsp/u-boot/u-boot-tools.inc65
-rw-r--r--meta/recipes-bsp/u-boot/u-boot-tools_2019.07.bb67
-rw-r--r--meta/recipes-bsp/u-boot/u-boot.inc2
-rw-r--r--meta/recipes-connectivity/avahi/avahi.inc5
-rw-r--r--meta/recipes-connectivity/bind/bind/0001-configure.in-remove-useless-L-use_openssl-lib.patch18
-rw-r--r--meta/recipes-connectivity/bind/bind/0001-gen.c-extend-DIRNAMESIZE-from-256-to-512.patch22
-rw-r--r--meta/recipes-connectivity/bind/bind/0001-lib-dns-gen.c-fix-too-long-error.patch31
-rw-r--r--meta/recipes-connectivity/bind/bind/CVE-2020-8622.patch60
-rw-r--r--meta/recipes-connectivity/bind/bind/CVE-2020-8623.patch402
-rw-r--r--meta/recipes-connectivity/bind/bind/CVE-2020-8624.patch33
-rw-r--r--meta/recipes-connectivity/bind/bind/bind-ensure-searching-for-json-headers-searches-sysr.patch15
-rw-r--r--meta/recipes-connectivity/bind/bind_9.11.19.bb (renamed from meta/recipes-connectivity/bind/bind_9.11.5-P4.bb)16
-rw-r--r--meta/recipes-connectivity/bluez5/bluez5.inc2
-rw-r--r--meta/recipes-connectivity/bluez5/bluez5/CVE-2020-0556-1.patch35
-rw-r--r--meta/recipes-connectivity/bluez5/bluez5/CVE-2020-0556-2.patch143
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0001-Ensure-context-is-running-prior-to-calling-isc_app_c.patch165
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0002-Added-shutdown-log-statment-to-dhcrelay.patch29
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp/0003-Addressed-review-comment.patch31
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp_4.4.1.bb3
-rw-r--r--meta/recipes-connectivity/inetutils/inetutils_1.9.4.bb6
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Disable-statx-if-using-glibc-emulation.patch34
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/0001-statd-take-user-id-from-var-lib-nfs-sm.patch102
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils_2.4.1.bb2
-rw-r--r--meta/recipes-connectivity/openssh/openssh/0001-upstream-what-bozo-decided-to-use-2020-as-a-future-d.patch46
-rw-r--r--meta/recipes-connectivity/openssh/openssh_8.0p1.bb1
-rw-r--r--meta/recipes-connectivity/openssl/openssl/reproducible.patch32
-rw-r--r--meta/recipes-connectivity/openssl/openssl_1.1.1g.bb (renamed from meta/recipes-connectivity/openssl/openssl_1.1.1d.bb)10
-rw-r--r--meta/recipes-connectivity/ppp/ppp/0001-pppd-Fix-bounds-check-in-EAP-code.patch47
-rw-r--r--meta/recipes-connectivity/ppp/ppp_2.4.7.bb1
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch82
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch151
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch62
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch50
-rw-r--r--meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.9.bb10
-rw-r--r--meta/recipes-core/busybox/busybox.inc45
-rw-r--r--meta/recipes-core/busybox/busybox_1.31.0.bb2
-rw-r--r--meta/recipes-core/dbus/dbus-glib_0.110.bb4
-rw-r--r--meta/recipes-core/dbus/dbus/CVE-2020-12049.patch78
-rw-r--r--meta/recipes-core/dbus/dbus_1.12.16.bb5
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/0020-meson.build-do-not-hardcode-linux-as-the-host-system.patch49
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/CVE-2020-6750.patch741
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0_2.60.7.bb5
-rw-r--r--meta/recipes-core/glibc/glibc-testsuite_2.30.bb3
-rw-r--r--meta/recipes-core/glibc/glibc/0005-nativesdk-glibc-Make-relocatable-install-for-locales.patch35
-rw-r--r--meta/recipes-core/glibc/glibc/CVE-2019-19126.patch32
-rw-r--r--meta/recipes-core/glibc/glibc/CVE-2020-10029.patch128
-rw-r--r--meta/recipes-core/glibc/glibc/CVE-2020-1751.patch70
-rw-r--r--meta/recipes-core/glibc/glibc/CVE-2020-1752.patch66
-rw-r--r--meta/recipes-core/glibc/glibc/CVE-2020-6096-1.patch193
-rw-r--r--meta/recipes-core/glibc/glibc/CVE-2020-6096-2.patch111
-rw-r--r--meta/recipes-core/glibc/glibc_2.30.bb6
-rw-r--r--meta/recipes-core/images/build-appliance-image_15.0.0.bb4
-rw-r--r--meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh4
-rw-r--r--meta/recipes-core/kbd/kbd/0001-configure.ac-Fix-logic-of-vlock-configure-switch.patch31
-rw-r--r--meta/recipes-core/kbd/kbd_2.0.4.bb4
-rw-r--r--meta/recipes-core/libxml/libxml2/CVE-2019-20388.patch37
-rw-r--r--meta/recipes-core/libxml/libxml2/CVE-2020-7595.patch36
-rw-r--r--meta/recipes-core/libxml/libxml2/Fix-CVE-2019-19956.patch40
-rw-r--r--meta/recipes-core/libxml/libxml2_2.9.9.bb3
-rw-r--r--meta/recipes-core/meta/buildtools-extended-tarball.bb36
-rw-r--r--meta/recipes-core/meta/buildtools-tarball.bb7
-rw-r--r--meta/recipes-core/meta/cve-update-db-native.bb70
-rw-r--r--meta/recipes-core/meta/dummy-sdk-package.inc3
-rw-r--r--meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb8
-rw-r--r--meta/recipes-core/meta/nativesdk-sdk-provides-dummy.bb5
-rw-r--r--meta/recipes-core/meta/target-sdk-provides-dummy.bb1
-rw-r--r--meta/recipes-core/ncurses/ncurses.inc1
-rw-r--r--meta/recipes-core/ncurses/ncurses_6.1+20190803.bb2
-rw-r--r--meta/recipes-core/systemd/systemd-boot_243.2.bb (renamed from meta/recipes-core/systemd/systemd-boot_243.bb)0
-rw-r--r--meta/recipes-core/systemd/systemd-conf_243.2.bb (renamed from meta/recipes-core/systemd/systemd-conf_243.bb)0
-rwxr-xr-xmeta/recipes-core/systemd/systemd-systemctl/systemctl2
-rw-r--r--meta/recipes-core/systemd/systemd.inc4
-rw-r--r--meta/recipes-core/systemd/systemd/0001-Merge-branch-polkit-ref-count.patch520
-rw-r--r--meta/recipes-core/systemd/systemd/CVE-2020-13776.patch96
-rw-r--r--meta/recipes-core/systemd/systemd_243.2.bb (renamed from meta/recipes-core/systemd/systemd_243.bb)2
-rw-r--r--meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb1
-rw-r--r--meta/recipes-core/udev/eudev_3.2.8.bb2
-rw-r--r--meta/recipes-devtools/apt/files/apt.conf2
-rw-r--r--meta/recipes-devtools/binutils/binutils-2.32.inc2
-rw-r--r--meta/recipes-devtools/binutils/binutils/CVE-2019-17450.patch99
-rw-r--r--meta/recipes-devtools/binutils/binutils/CVE-2019-17451.patch51
-rw-r--r--meta/recipes-devtools/binutils/binutils/nativesdk-relocation.patch80
-rw-r--r--meta/recipes-devtools/binutils/binutils_2.32.bb5
-rw-r--r--meta/recipes-devtools/dosfstools/dosfstools_4.1.bb3
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-e2fsck-don-t-try-to-rehash-a-deleted-directory.patch49
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/CVE-2019-5094.patch217
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/CVE-2019-5188.patch57
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/e2fsck-fix-use-after-free-in-calculate_tree.patch76
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs_1.45.3.bb4
-rw-r--r--meta/recipes-devtools/file/file/CVE-2019-18218.patch55
-rw-r--r--meta/recipes-devtools/file/file_5.37.bb9
-rw-r--r--meta/recipes-devtools/gcc/gcc-9.2.inc1
-rw-r--r--meta/recipes-devtools/gcc/gcc-9.2/re-PR-target-91102-aarch64-ICE-on-Linux-kernel-with-.patch95
-rw-r--r--meta/recipes-devtools/gcc/gcc-cross-canadian.inc4
-rw-r--r--meta/recipes-devtools/gcc/gcc-cross.inc7
-rw-r--r--meta/recipes-devtools/gcc/gcc-runtime.inc4
-rw-r--r--meta/recipes-devtools/gcc/gcc-target.inc8
-rw-r--r--meta/recipes-devtools/gdb/gdb-8.3.1.inc1
-rw-r--r--meta/recipes-devtools/gdb/gdb/CVE-2019-1010180.patch132
-rw-r--r--meta/recipes-devtools/git/git.inc16
-rw-r--r--meta/recipes-devtools/git/git/0001-t-lib-credential-use-test_i18ncmp-to-check-stderr.patch35
-rw-r--r--meta/recipes-devtools/git/git/0002-credential-detect-unrepresentable-values-when-parsin.patch156
-rw-r--r--meta/recipes-devtools/git/git/0003-fsck-detect-gitmodules-URLs-with-embedded-newlines.patch103
-rw-r--r--meta/recipes-devtools/git/git/CVE-2020-11008-1.patch70
-rw-r--r--meta/recipes-devtools/git/git/CVE-2020-11008-2.patch292
-rw-r--r--meta/recipes-devtools/git/git/CVE-2020-11008-3.patch97
-rw-r--r--meta/recipes-devtools/git/git/CVE-2020-11008-4.patch173
-rw-r--r--meta/recipes-devtools/git/git/CVE-2020-11008-5.patch211
-rw-r--r--meta/recipes-devtools/git/git/CVE-2020-11008-6.patch84
-rw-r--r--meta/recipes-devtools/git/git/CVE-2020-11008-7.patch206
-rw-r--r--meta/recipes-devtools/git/git/CVE-2020-11008-8.patch114
-rw-r--r--meta/recipes-devtools/git/git/CVE-2020-11008-9.patch114
-rw-r--r--meta/recipes-devtools/git/git/CVE-2020-5260.patch65
-rw-r--r--meta/recipes-devtools/git/git_2.23.0.bb11
-rw-r--r--meta/recipes-devtools/git/git_2.23.1.bb11
-rw-r--r--meta/recipes-devtools/go/go-1.12.inc5
-rw-r--r--meta/recipes-devtools/go/go-1.12/0001-net-http-cgi-rename-a-test-file-to-be-less-cute.patch28
-rw-r--r--meta/recipes-devtools/go/go-1.12/0010-fix-CVE-2019-17596.patch42
-rw-r--r--meta/recipes-devtools/go/go-1.12/CVE-2020-15586.patch131
-rw-r--r--meta/recipes-devtools/go/go-1.12/CVE-2020-16845.patch110
-rw-r--r--meta/recipes-devtools/go/go-1.12/CVE-2020-24553.patch429
-rw-r--r--meta/recipes-devtools/mtd/mtd-utils/0001-mtd-utils-Fix-return-value-of-ubiformat.patch62
-rw-r--r--meta/recipes-devtools/mtd/mtd-utils_git.bb1
-rw-r--r--meta/recipes-devtools/nasm/nasm/CVE-2019-14248.patch43
-rw-r--r--meta/recipes-devtools/nasm/nasm_2.14.02.bb1
-rw-r--r--meta/recipes-devtools/opkg-utils/opkg-utils/0001-Switch-all-scripts-to-use-Python-3.x.patch113
-rw-r--r--meta/recipes-devtools/opkg-utils/opkg-utils/0001-opkg-build-clamp-mtimes-to-SOURCE_DATE_EPOCH.patch44
-rw-r--r--meta/recipes-devtools/opkg-utils/opkg-utils/fix-reproducibility.patch32
-rw-r--r--meta/recipes-devtools/opkg-utils/opkg-utils_0.4.2.bb (renamed from meta/recipes-devtools/opkg-utils/opkg-utils_0.4.1.bb)14
-rw-r--r--meta/recipes-devtools/opkg/opkg/open_inner.patch46
-rw-r--r--meta/recipes-devtools/opkg/opkg/opkg_archive.patch54
-rw-r--r--meta/recipes-devtools/opkg/opkg_0.4.1.bb4
-rw-r--r--meta/recipes-devtools/patch/patch/0001-Invoke-ed-directly-instead-of-using-the-shell.patch4
-rw-r--r--meta/recipes-devtools/patch/patch_2.7.6.bb3
-rw-r--r--meta/recipes-devtools/patchelf/patchelf/fix-phdrs.patch37
-rw-r--r--meta/recipes-devtools/patchelf/patchelf_0.10.bb3
-rw-r--r--meta/recipes-devtools/perl/files/0001-tests-adjust-to-correctly-exclude-unbuilt-extensions.patch27
-rw-r--r--meta/recipes-devtools/perl/files/CVE-2020-10543.patch36
-rw-r--r--meta/recipes-devtools/perl/files/CVE-2020-10878_1.patch152
-rw-r--r--meta/recipes-devtools/perl/files/CVE-2020-10878_2.patch36
-rw-r--r--meta/recipes-devtools/perl/files/determinism.patch81
-rw-r--r--meta/recipes-devtools/perl/files/encodefix.patch20
-rw-r--r--meta/recipes-devtools/perl/files/fix-setgroup.patch49
-rw-r--r--meta/recipes-devtools/perl/files/perl-configpm-switch.patch4
-rw-r--r--meta/recipes-devtools/perl/files/racefix.patch24
-rw-r--r--meta/recipes-devtools/perl/liberror-perl_0.17029.bb (renamed from meta/recipes-devtools/perl/liberror-perl_0.17027.bb)6
-rw-r--r--meta/recipes-devtools/perl/libmodule-build-perl/run-ptest2
-rw-r--r--meta/recipes-devtools/perl/libmodule-build-perl_0.4229.bb3
-rw-r--r--meta/recipes-devtools/perl/perl-ptest.inc3
-rw-r--r--meta/recipes-devtools/perl/perl_5.30.1.bb (renamed from meta/recipes-devtools/perl/perl_5.30.0.bb)40
-rw-r--r--meta/recipes-devtools/pseudo/files/0001-Add-statx.patch106
-rw-r--r--meta/recipes-devtools/pseudo/files/0001-realpath.c-Remove-trailing-slashes.patch57
-rw-r--r--meta/recipes-devtools/pseudo/pseudo.inc19
-rw-r--r--meta/recipes-devtools/pseudo/pseudo_git.bb2
-rw-r--r--meta/recipes-devtools/python-numpy/files/aarch64/_numpyconfig.h32
-rw-r--r--meta/recipes-devtools/python-numpy/files/aarch64/config.h139
-rw-r--r--meta/recipes-devtools/python-numpy/files/arm/config.h21
-rw-r--r--meta/recipes-devtools/python-numpy/files/arm/numpyconfig.h17
-rw-r--r--meta/recipes-devtools/python-numpy/files/armeb/config.h21
-rw-r--r--meta/recipes-devtools/python-numpy/files/armeb/numpyconfig.h17
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarchn32eb/_numpyconfig.h32
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarchn32eb/config.h139
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarchn32el/_numpyconfig.h31
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarchn32el/config.h138
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarchn64eb/_numpyconfig.h32
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarchn64eb/config.h139
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarchn64el/_numpyconfig.h32
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarchn64el/config.h138
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarcho32eb/_numpyconfig.h32
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarcho32eb/config.h139
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarcho32el/config.h21
-rw-r--r--meta/recipes-devtools/python-numpy/files/mipsarcho32el/numpyconfig.h18
-rw-r--r--meta/recipes-devtools/python-numpy/files/powerpc/_numpyconfig.h32
-rw-r--r--meta/recipes-devtools/python-numpy/files/powerpc/config.h139
-rw-r--r--meta/recipes-devtools/python-numpy/files/powerpc64/_numpyconfig.h32
-rw-r--r--meta/recipes-devtools/python-numpy/files/powerpc64/config.h139
-rw-r--r--meta/recipes-devtools/python-numpy/files/riscv64/_numpyconfig.h32
-rw-r--r--meta/recipes-devtools/python-numpy/files/riscv64/config.h139
-rw-r--r--meta/recipes-devtools/python-numpy/files/x86-64/_numpyconfig.h32
-rw-r--r--meta/recipes-devtools/python-numpy/files/x86-64/config.h139
-rw-r--r--meta/recipes-devtools/python-numpy/files/x86/config.h108
-rw-r--r--meta/recipes-devtools/python-numpy/files/x86/numpyconfig.h24
-rw-r--r--meta/recipes-devtools/python-numpy/python-numpy.inc68
-rw-r--r--meta/recipes-devtools/python/python-native/0001-python-native-fix-one-do_populate_sysroot-warning.patch25
-rw-r--r--meta/recipes-devtools/python/python-native_2.7.18.bb (renamed from meta/recipes-devtools/python/python-native_2.7.16.bb)2
-rw-r--r--meta/recipes-devtools/python/python.inc25
-rw-r--r--meta/recipes-devtools/python/python/0001-2.7-bpo-34155-Dont-parse-domains-containing-GH-13079.patch90
-rw-r--r--meta/recipes-devtools/python/python/0001-python-Resolve-intermediate-staging-issues.patch (renamed from meta/recipes-devtools/python/python/builddir.patch)53
-rw-r--r--meta/recipes-devtools/python/python/CVE-2018-20852.patch123
-rw-r--r--meta/recipes-devtools/python/python/CVE-2019-9740.patch216
-rw-r--r--meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948-fix.patch55
-rw-r--r--meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948.patch55
-rw-r--r--meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636-fix.patch28
-rw-r--r--meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636.patch111
-rw-r--r--meta/recipes-devtools/python/python/bpo-36742-cve-2019-10160.patch81
-rw-r--r--meta/recipes-devtools/python/python/python2-manifest.json1
-rw-r--r--meta/recipes-devtools/python/python3-testtools/no_traceback2.patch23
-rw-r--r--meta/recipes-devtools/python/python3-testtools_2.3.0.bb2
-rw-r--r--meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch2
-rw-r--r--meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch29
-rw-r--r--meta/recipes-devtools/python/python3/0001-bpo-34155-Dont-parse-domains-containing-GH-13079.patch132
-rw-r--r--meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch2
-rw-r--r--meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch31
-rw-r--r--meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch2
-rw-r--r--meta/recipes-devtools/python/python3/CVE-2020-14422.patch79
-rw-r--r--meta/recipes-devtools/python/python3_3.7.8.bb (renamed from meta/recipes-devtools/python/python3_3.7.4.bb)33
-rw-r--r--meta/recipes-devtools/python/python_2.7.18.bb (renamed from meta/recipes-devtools/python/python_2.7.16.bb)2
-rw-r--r--meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb2
-rw-r--r--meta/recipes-devtools/qemu/qemu-helper/tunctl.c16
-rw-r--r--meta/recipes-devtools/qemu/qemu.inc17
-rw-r--r--meta/recipes-devtools/qemu/qemu/0011-linux-user-remove-host-stime-syscall.patch61
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2019-20382.patch1018
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-10702.patch52
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-10756.patch40
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-11869.patch97
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-13765.patch48
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-14364.patch93
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-15863.patch64
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-16092.patch49
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-1711.patch64
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-7039-1.patch44
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-7039-2.patch59
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-7039-3.patch64
-rw-r--r--meta/recipes-devtools/qemu/qemu/CVE-2020-7211.patch46
-rw-r--r--meta/recipes-devtools/rsync/rsync_3.1.3.bb3
-rw-r--r--meta/recipes-devtools/ruby/ruby/fix-CVE-2019-16254.patch106
-rw-r--r--meta/recipes-devtools/ruby/ruby_2.5.5.bb1
-rw-r--r--meta/recipes-devtools/strace/strace/Makefile-ptest.patch2
-rwxr-xr-xmeta/recipes-devtools/strace/strace/run-ptest7
-rw-r--r--meta/recipes-extended/cpio/cpio-2.12/CVE-2019-14866.patch316
-rw-r--r--meta/recipes-extended/cpio/cpio_2.12.bb1
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript/CVE-2019-10216.patch53
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript/CVE-2019-14811-0001.patch1
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript/CVE-2019-14869-0001.patch70
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript_9.27.bb2
-rw-r--r--meta/recipes-extended/iputils/iputils_s20190709.bb7
-rw-r--r--meta/recipes-extended/libarchive/libarchive/0001-RAR5-reader-reject-files-that-declare-invalid-header.patch124
-rw-r--r--meta/recipes-extended/libarchive/libarchive/CVE-2019-19221.patch101
-rw-r--r--meta/recipes-extended/libarchive/libarchive_3.4.0.bb2
-rw-r--r--meta/recipes-extended/libidn/libidn2_2.2.0.bb3
-rw-r--r--meta/recipes-extended/libmnl/libmnl_1.0.4.bb4
-rw-r--r--meta/recipes-extended/libtirpc/libtirpc_1.1.4.bb2
-rw-r--r--meta/recipes-extended/ltp/ltp/0001-overcommit_memory-update-for-mm-fix-false-positive-O.patch57
-rw-r--r--meta/recipes-extended/ltp/ltp_20190517.bb1
-rw-r--r--meta/recipes-extended/man-db/man-db_2.8.7.bb2
-rw-r--r--meta/recipes-extended/mc/files/0001-Add-option-to-control-configure-args.patch99
-rw-r--r--meta/recipes-extended/mc/files/nomandate.patch21
-rw-r--r--meta/recipes-extended/mc/mc_4.8.23.bb7
-rw-r--r--meta/recipes-extended/mdadm/mdadm_4.1.bb5
-rw-r--r--meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb1
-rw-r--r--meta/recipes-extended/pam/libpam/pam.d/common-password5
-rw-r--r--meta/recipes-extended/pam/libpam_1.3.1.bb2
-rw-r--r--meta/recipes-extended/procps/procps_3.3.15.bb9
-rw-r--r--meta/recipes-extended/psmisc/psmisc.inc2
-rw-r--r--meta/recipes-extended/screen/screen/CVE-2020-9366.patch48
-rw-r--r--meta/recipes-extended/screen/screen_4.6.2.bb1
-rw-r--r--meta/recipes-extended/sudo/sudo.inc2
-rw-r--r--meta/recipes-extended/sudo/sudo_1.8.27.bb12
-rw-r--r--meta/recipes-extended/sysstat/sysstat.inc10
-rw-r--r--meta/recipes-extended/sysstat/sysstat/CVE-2019-19725.patch28
-rw-r--r--meta/recipes-extended/sysstat/sysstat/sysstat.service2
-rw-r--r--meta/recipes-extended/sysstat/sysstat_12.1.6.bb1
-rw-r--r--meta/recipes-extended/tar/tar_1.32.bb2
-rw-r--r--meta/recipes-extended/timezone/timezone.inc10
-rw-r--r--meta/recipes-extended/xdg-utils/xdg-utils_1.1.3.bb2
-rw-r--r--meta/recipes-extended/xz/xz_5.2.4.bb4
-rw-r--r--meta/recipes-gnome/gcr/gcr_3.28.1.bb2
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3/sort-resources.patch19
-rw-r--r--meta/recipes-gnome/gtk+/gtk+3_3.24.8.bb1
-rw-r--r--meta/recipes-gnome/hicolor-icon-theme/hicolor-icon-theme_0.17.bb2
-rw-r--r--meta/recipes-graphics/cairo/cairo_1.16.0.bb12
-rw-r--r--meta/recipes-graphics/jpeg/files/0001-rdppm.c-Fix-buf-overrun-caused-by-bad-binary-PPM.patch81
-rw-r--r--meta/recipes-graphics/jpeg/libjpeg-turbo_2.0.3.bb1
-rw-r--r--meta/recipes-graphics/libsdl2/libsdl2/0001-configure-check-for-build-dir-when-building-version-.patch45
-rw-r--r--meta/recipes-graphics/libsdl2/libsdl2_2.0.10.bb2
-rw-r--r--meta/recipes-graphics/mesa/files/0003-Allow-enable-DRI-without-DRI-drivers.patch2
-rw-r--r--meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2019-18390.patch66
-rw-r--r--meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2019-18391.patch51
-rw-r--r--meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2020-8002.patch39
-rw-r--r--meta/recipes-graphics/virglrenderer/virglrenderer_0.8.0.bb3
-rw-r--r--meta/recipes-graphics/waffle/waffle_1.6.0.bb5
-rw-r--r--meta/recipes-graphics/wayland/libinput/determinism.patch21
-rw-r--r--meta/recipes-graphics/wayland/libinput_1.14.1.bb4
-rw-r--r--meta/recipes-graphics/x11-common/xserver-nodm-init/capability.conf2
-rwxr-xr-xmeta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm8
-rw-r--r--meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb7
-rw-r--r--meta/recipes-graphics/xorg-app/xorg-app-common.inc2
-rw-r--r--meta/recipes-graphics/xorg-font/encodings_1.0.5.bb4
-rw-r--r--meta/recipes-graphics/xorg-lib/libxshmfence_1.3.bb2
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2020-14347.patch37
-rw-r--r--meta/recipes-graphics/xorg-xserver/xserver-xorg_1.20.5.bb1
-rw-r--r--meta/recipes-kernel/linux-firmware/linux-firmware_20190815.bb18
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-rt_4.19.bb6
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-rt_5.2.bb6
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-tiny_4.19.bb8
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-tiny_5.2.bb8
-rw-r--r--meta/recipes-kernel/linux/linux-yocto_4.19.bb20
-rw-r--r--meta/recipes-kernel/linux/linux-yocto_5.2.bb22
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules_2.10.14.bb (renamed from meta/recipes-kernel/lttng/lttng-modules_2.10.11.bb)8
-rw-r--r--meta/recipes-kernel/perf/perf.bb8
-rw-r--r--meta/recipes-kernel/powertop/powertop_2.10.bb6
-rw-r--r--meta/recipes-kernel/wireless-regdb/wireless-regdb_2020.04.29.bb (renamed from meta/recipes-kernel/wireless-regdb/wireless-regdb_2019.06.03.bb)3
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib_1.1.9.bb2
-rw-r--r--meta/recipes-multimedia/alsa/alsa-utils_1.1.9.bb2
-rw-r--r--meta/recipes-multimedia/gstreamer/gst-validate_1.16.2.bb (renamed from meta/recipes-multimedia/gstreamer/gst-validate_1.16.0.bb)4
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/gtkdoc-no-tree.patch35
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.0.bb)7
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.0.bb)6
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.0.bb)6
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.0.bb)6
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-scaletempo-Advertise-interleaved-layout-in-caps-temp.patch37
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/headerfix.patch43
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.0.bb)8
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.0.bb)6
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc2
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-python/0001-meson.build-fix-builds-with-python-3.8.patch24
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.16.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.16.0.bb)8
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.16.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.16.0.bb)8
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.16.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.16.0.bb)4
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0_1.16.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0_1.16.0.bb)8
-rw-r--r--meta/recipes-multimedia/libpng/libpng_1.6.37.bb7
-rw-r--r--meta/recipes-multimedia/libsndfile/libsndfile1_1.0.28.bb4
-rw-r--r--meta/recipes-multimedia/libtiff/tiff/CVE-2019-17546.patch103
-rw-r--r--meta/recipes-multimedia/libtiff/tiff/CVE-2019-7663.patch71
-rw-r--r--meta/recipes-multimedia/libtiff/tiff_4.0.10.bb1
-rwxr-xr-xmeta/recipes-sato/webkit/webkitgtk/fix-link-error.patch45
-rw-r--r--meta/recipes-sato/webkit/webkitgtk_2.24.4.bb7
-rw-r--r--meta/recipes-support/aspell/aspell/CVE-2019-20433-0001.patch999
-rw-r--r--meta/recipes-support/aspell/aspell/CVE-2019-20433-0002.patch68
-rw-r--r--meta/recipes-support/aspell/aspell_0.60.7.bb2
-rw-r--r--meta/recipes-support/attr/acl_2.2.52.bb3
-rw-r--r--meta/recipes-support/attr/attr_2.4.47.bb3
-rw-r--r--meta/recipes-support/boost/boost/0001-dont-setup-compiler-flags-m32-m64.patch42
-rw-r--r--meta/recipes-support/boost/boost_1.71.0.bb1
-rw-r--r--meta/recipes-support/curl/curl/CVE-2019-15601.patch46
-rw-r--r--meta/recipes-support/curl/curl_7.66.0.bb1
-rw-r--r--meta/recipes-support/db/db_5.3.28.bb4
-rw-r--r--meta/recipes-support/gnupg/gnupg_2.2.19.bb (renamed from meta/recipes-support/gnupg/gnupg_2.2.17.bb)4
-rw-r--r--meta/recipes-support/gnutls/gnutls/CVE-2020-13777-a.patch90
-rw-r--r--meta/recipes-support/gnutls/gnutls/CVE-2020-13777-b.patch137
-rw-r--r--meta/recipes-support/gnutls/gnutls/CVE-2020-13777-c.patch68
-rw-r--r--meta/recipes-support/gnutls/gnutls/CVE-2020-24659.patch117
-rw-r--r--meta/recipes-support/gnutls/gnutls/posix-shell.patch39
-rw-r--r--meta/recipes-support/gnutls/gnutls_3.6.13.bb (renamed from meta/recipes-support/gnutls/gnutls_3.6.8.bb)9
-rw-r--r--meta/recipes-support/icu/icu/CVE-2020-10531.patch122
-rw-r--r--meta/recipes-support/icu/icu_64.2.bb12
-rw-r--r--meta/recipes-support/iso-codes/iso-codes_4.3.bb2
-rw-r--r--meta/recipes-support/libbsd/libbsd_0.10.0.bb4
-rw-r--r--meta/recipes-support/libevdev/libevdev/determinism.patch34
-rw-r--r--meta/recipes-support/libevdev/libevdev_1.8.0.bb3
-rw-r--r--meta/recipes-support/libexif/libexif/CVE-2020-13114.patch73
-rw-r--r--meta/recipes-support/libexif/libexif_0.6.21.bb4
-rw-r--r--meta/recipes-support/libgcrypt/files/0001-dsa-ecdsa-Fix-use-of-nonce-use-larger-one.patch128
-rw-r--r--meta/recipes-support/libgcrypt/files/0001-ecc-Add-mitigation-against-timing-attack.patch70
-rw-r--r--meta/recipes-support/libgcrypt/files/determinism.patch32
-rw-r--r--meta/recipes-support/libgcrypt/libgcrypt_1.8.4.bb3
-rw-r--r--meta/recipes-support/libpcre/libpcre/CVE-2020-14155.patch41
-rw-r--r--meta/recipes-support/libpcre/libpcre2/CVE-2019-20454.patch19
-rw-r--r--meta/recipes-support/libpcre/libpcre2_10.33.bb1
-rw-r--r--meta/recipes-support/libpcre/libpcre_8.43.bb1
-rw-r--r--meta/recipes-support/libsoup/libsoup-2.4_2.66.4.bb (renamed from meta/recipes-support/libsoup/libsoup-2.4_2.66.2.bb)8
-rw-r--r--meta/recipes-support/libxslt/files/CVE-2019-18197.patch33
-rw-r--r--meta/recipes-support/libxslt/libxslt_1.1.33.bb1
-rw-r--r--meta/recipes-support/libyaml/libyaml_0.2.2.bb4
-rw-r--r--meta/recipes-support/lz4/lz4_1.9.2.bb3
-rw-r--r--meta/recipes-support/mpfr/mpfr_4.0.2.bb4
-rw-r--r--meta/recipes-support/nss/nss/0001-Bug-1493916-Fix-ppc64-inline-assembler-for-clang-r-j.patch35
-rw-r--r--meta/recipes-support/nss/nss/0001-Bug-1631576-Force-a-fixed-length-for-DSA-exponentiat.patch110
-rw-r--r--meta/recipes-support/nss/nss_3.45.bb2
-rw-r--r--meta/recipes-support/sqlite/files/CVE-2020-11655.patch32
-rw-r--r--meta/recipes-support/sqlite/sqlite3/CVE-2019-19244.patch33
-rw-r--r--meta/recipes-support/sqlite/sqlite3/CVE-2019-19923.patch50
-rw-r--r--meta/recipes-support/sqlite/sqlite3/CVE-2019-19924.patch65
-rw-r--r--meta/recipes-support/sqlite/sqlite3/CVE-2019-19925.patch33
-rw-r--r--meta/recipes-support/sqlite/sqlite3/CVE-2019-19926.patch31
-rw-r--r--meta/recipes-support/sqlite/sqlite3/CVE-2019-19959.patch46
-rw-r--r--meta/recipes-support/sqlite/sqlite3/CVE-2019-20218.patch31
-rw-r--r--meta/recipes-support/sqlite/sqlite3_3.29.0.bb11
-rw-r--r--meta/recipes-support/vim/vim_8.1.1518.bb5
-rw-r--r--scripts/lib/devtool/standard.py8
-rw-r--r--scripts/lib/resulttool/resultutils.py5
-rw-r--r--scripts/lib/wic/engine.py5
-rw-r--r--scripts/lib/wic/filemap.py6
-rw-r--r--scripts/lib/wic/help.py3
-rw-r--r--scripts/lib/wic/pluginbase.py11
-rw-r--r--scripts/lib/wic/plugins/imager/direct.py6
-rwxr-xr-xscripts/oe-build-perf-report20
513 files changed, 23906 insertions, 4399 deletions
diff --git a/bitbake/lib/bb/__init__.py b/bitbake/lib/bb/__init__.py
index c144311be4..ce519ba39f 100644
--- a/bitbake/lib/bb/__init__.py
+++ b/bitbake/lib/bb/__init__.py
@@ -43,6 +43,11 @@ class BBLogger(Logger):
Logger.__init__(self, name)
def bbdebug(self, level, msg, *args, **kwargs):
+ if not bb.event.worker_pid:
+ if self.name in bb.msg.loggerDefaultDomains and level > (bb.msg.loggerDefaultDomains[self.name]):
+ return
+ if level > (bb.msg.loggerDefaultDebugLevel):
+ return
return self.log(logging.DEBUG - level + 1, msg, *args, **kwargs)
def plain(self, msg, *args, **kwargs):
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
index 30a2ba236f..3d9cc10c8c 100644
--- a/bitbake/lib/bb/build.py
+++ b/bitbake/lib/bb/build.py
@@ -57,8 +57,9 @@ builtins['os'] = os
class TaskBase(event.Event):
"""Base class for task events"""
- def __init__(self, t, logfile, d):
+ def __init__(self, t, fn, logfile, d):
self._task = t
+ self._fn = fn
self._package = d.getVar("PF")
self._mc = d.getVar("BB_CURRENT_MC")
self.taskfile = d.getVar("FILE")
@@ -81,8 +82,8 @@ class TaskBase(event.Event):
class TaskStarted(TaskBase):
"""Task execution started"""
- def __init__(self, t, logfile, taskflags, d):
- super(TaskStarted, self).__init__(t, logfile, d)
+ def __init__(self, t, fn, logfile, taskflags, d):
+ super(TaskStarted, self).__init__(t, fn, logfile, d)
self.taskflags = taskflags
class TaskSucceeded(TaskBase):
@@ -91,9 +92,9 @@ class TaskSucceeded(TaskBase):
class TaskFailed(TaskBase):
"""Task execution failed"""
- def __init__(self, task, logfile, metadata, errprinted = False):
+ def __init__(self, task, fn, logfile, metadata, errprinted = False):
self.errprinted = errprinted
- super(TaskFailed, self).__init__(task, logfile, metadata)
+ super(TaskFailed, self).__init__(task, fn, logfile, metadata)
class TaskFailedSilent(TaskBase):
"""Task execution failed (silently)"""
@@ -103,8 +104,8 @@ class TaskFailedSilent(TaskBase):
class TaskInvalid(TaskBase):
- def __init__(self, task, metadata):
- super(TaskInvalid, self).__init__(task, None, metadata)
+ def __init__(self, task, fn, metadata):
+ super(TaskInvalid, self).__init__(task, fn, None, metadata)
self._message = "No such task '%s'" % task
class TaskProgress(event.Event):
@@ -572,7 +573,7 @@ def _exec_task(fn, task, d, quieterr):
try:
try:
- event.fire(TaskStarted(task, logfn, flags, localdata), localdata)
+ event.fire(TaskStarted(task, fn, logfn, flags, localdata), localdata)
except (bb.BBHandledException, SystemExit):
return 1
@@ -583,15 +584,15 @@ def _exec_task(fn, task, d, quieterr):
for func in (postfuncs or '').split():
exec_func(func, localdata)
except bb.BBHandledException:
- event.fire(TaskFailed(task, logfn, localdata, True), localdata)
+ event.fire(TaskFailed(task, fn, logfn, localdata, True), localdata)
return 1
except Exception as exc:
if quieterr:
- event.fire(TaskFailedSilent(task, logfn, localdata), localdata)
+ event.fire(TaskFailedSilent(task, fn, logfn, localdata), localdata)
else:
errprinted = errchk.triggered
logger.error(str(exc))
- event.fire(TaskFailed(task, logfn, localdata, errprinted), localdata)
+ event.fire(TaskFailed(task, fn, logfn, localdata, errprinted), localdata)
return 1
finally:
sys.stdout.flush()
@@ -614,7 +615,7 @@ def _exec_task(fn, task, d, quieterr):
logger.debug(2, "Zero size logfn %s, removing", logfn)
bb.utils.remove(logfn)
bb.utils.remove(loglink)
- event.fire(TaskSucceeded(task, logfn, localdata), localdata)
+ event.fire(TaskSucceeded(task, fn, logfn, localdata), localdata)
if not localdata.getVarFlag(task, 'nostamp', False) and not localdata.getVarFlag(task, 'selfstamp', False):
make_stamp(task, localdata)
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py
index b6f7da5920..ead8abc5d8 100644
--- a/bitbake/lib/bb/cache.py
+++ b/bitbake/lib/bb/cache.py
@@ -208,10 +208,10 @@ class CoreRecipeInfo(RecipeInfoCommon):
# Collect files we may need for possible world-dep
# calculations
- if self.not_world:
- logger.debug(1, "EXCLUDE FROM WORLD: %s", fn)
- else:
+ if not self.not_world:
cachedata.possible_world.append(fn)
+ #else:
+ # logger.debug(2, "EXCLUDE FROM WORLD: %s", fn)
# create a collection of all targets for sanity checking
# tasks, such as upstream versions, license, and tools for
diff --git a/bitbake/lib/bb/checksum.py b/bitbake/lib/bb/checksum.py
index 5bc8a8fcb6..677020f497 100644
--- a/bitbake/lib/bb/checksum.py
+++ b/bitbake/lib/bb/checksum.py
@@ -74,7 +74,7 @@ class FileChecksumCache(MultiProcessCache):
else:
dest[0][h] = source[0][h]
- def get_checksums(self, filelist, pn):
+ def get_checksums(self, filelist, pn, localdirsexclude):
"""Get checksums for a list of files"""
def checksum_file(f):
@@ -90,7 +90,8 @@ class FileChecksumCache(MultiProcessCache):
if pth == "/":
bb.fatal("Refusing to checksum /")
dirchecksums = []
- for root, dirs, files in os.walk(pth):
+ for root, dirs, files in os.walk(pth, topdown=True):
+ [dirs.remove(d) for d in list(dirs) if d in localdirsexclude]
for name in files:
fullpth = os.path.join(root, name)
checksum = checksum_file(fullpth)
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 20ef04d3ff..d2d308ae20 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -169,8 +169,8 @@ class BBCooker:
bb.debug(1, "BBCooker pyinotify1 %s" % time.time())
sys.stdout.flush()
- self.configwatcher.bbseen = []
- self.configwatcher.bbwatchedfiles = []
+ self.configwatcher.bbseen = set()
+ self.configwatcher.bbwatchedfiles = set()
self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications)
bb.debug(1, "BBCooker pyinotify2 %s" % time.time())
sys.stdout.flush()
@@ -180,8 +180,8 @@ class BBCooker:
self.watcher = pyinotify.WatchManager()
bb.debug(1, "BBCooker pyinotify3 %s" % time.time())
sys.stdout.flush()
- self.watcher.bbseen = []
- self.watcher.bbwatchedfiles = []
+ self.watcher.bbseen = set()
+ self.watcher.bbwatchedfiles = set()
self.notifier = pyinotify.Notifier(self.watcher, self.notifications)
bb.debug(1, "BBCooker pyinotify complete %s" % time.time())
@@ -278,14 +278,14 @@ class BBCooker:
if not watcher:
watcher = self.watcher
for i in deps:
- watcher.bbwatchedfiles.append(i[0])
+ watcher.bbwatchedfiles.add(i[0])
if dirs:
f = i[0]
else:
f = os.path.dirname(i[0])
if f in watcher.bbseen:
continue
- watcher.bbseen.append(f)
+ watcher.bbseen.add(f)
watchtarget = None
while True:
# We try and add watches for files that don't exist but if they did, would influence
@@ -294,7 +294,7 @@ class BBCooker:
try:
watcher.add_watch(f, self.watchmask, quiet=False)
if watchtarget:
- watcher.bbwatchedfiles.append(watchtarget)
+ watcher.bbwatchedfiles.add(watchtarget)
break
except pyinotify.WatchManagerError as e:
if 'ENOENT' in str(e):
@@ -302,7 +302,7 @@ class BBCooker:
f = os.path.dirname(f)
if f in watcher.bbseen:
break
- watcher.bbseen.append(f)
+ watcher.bbseen.add(f)
continue
if 'ENOSPC' in str(e):
providerlog.error("No space left on device or exceeds fs.inotify.max_user_watches?")
@@ -371,10 +371,6 @@ class BBCooker:
self.data.setVar('BB_CMDLINE', self.ui_cmdline)
- #
- # Copy of the data store which has been expanded.
- # Used for firing events and accessing variables where expansion needs to be accounted for
- #
if CookerFeatures.BASEDATASTORE_TRACKING in self.featureset:
self.disableDataTracking()
@@ -1792,7 +1788,7 @@ class CookerCollectFiles(object):
# When constructing an older style single regex, it's possible for BBMASK
# to end up beginning with '|', which matches and masks _everything_.
if mask.startswith("|"):
- collectlog.warn("BBMASK contains regular expression beginning with '|', fixing: %s" % mask)
+ collectlog.warning("BBMASK contains regular expression beginning with '|', fixing: %s" % mask)
mask = mask[1:]
try:
re.compile(mask)
@@ -1948,7 +1944,8 @@ class Parser(multiprocessing.Process):
except IndexError:
break
result = self.parse(*job)
-
+ # Clear the siggen cache after parsing to control memory usage, its huge
+ bb.parse.siggen.postparsing_clean_cache()
try:
self.results.put(result, timeout=0.25)
except queue.Full:
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
index 1f5f8f1f14..4a781bde24 100644
--- a/bitbake/lib/bb/fetch2/__init__.py
+++ b/bitbake/lib/bb/fetch2/__init__.py
@@ -1197,14 +1197,14 @@ def get_checksum_file_list(d):
return " ".join(filelist)
-def get_file_checksums(filelist, pn):
+def get_file_checksums(filelist, pn, localdirsexclude):
"""Get a list of the checksums for a list of local files
Returns the checksums for a list of local files, caching the results as
it proceeds
"""
- return _checksum_cache.get_checksums(filelist, pn)
+ return _checksum_cache.get_checksums(filelist, pn, localdirsexclude)
class FetchData(object):
@@ -1567,8 +1567,7 @@ class FetchMethod(object):
return True, str(latest_rev)
def generate_revision_key(self, ud, d, name):
- key = self._revision_key(ud, d, name)
- return "%s-%s" % (key, d.getVar("PN") or "")
+ return self._revision_key(ud, d, name)
def latest_versionstring(self, ud, d):
"""
@@ -1593,7 +1592,7 @@ class Fetch(object):
fn = d.getVar('FILE')
mc = d.getVar('__BBMULTICONFIG') or ""
if cache and fn and mc + fn in urldata_cache:
- self.ud = urldata_cache[mc + fn]
+ self.ud = urldata_cache[mc + fn + str(id(d))]
for url in urls:
if url not in self.ud:
@@ -1605,7 +1604,7 @@ class Fetch(object):
pass
if fn and cache:
- urldata_cache[mc + fn] = self.ud
+ urldata_cache[mc + fn + str(id(d))] = self.ud
def localpath(self, url):
if url not in self.urls:
diff --git a/bitbake/lib/bb/fetch2/clearcase.py b/bitbake/lib/bb/fetch2/clearcase.py
index 3dd93ad6b1..e2934ef9fc 100644
--- a/bitbake/lib/bb/fetch2/clearcase.py
+++ b/bitbake/lib/bb/fetch2/clearcase.py
@@ -145,18 +145,18 @@ class ClearCase(FetchMethod):
basecmd = "%s %s" % (ud.basecmd, command)
- if command is 'mkview':
+ if command == 'mkview':
if not "rcleartool" in ud.basecmd:
# Cleartool needs a -snapshot view
options.append("-snapshot")
options.append("-tag %s" % ud.viewname)
options.append(ud.viewdir)
- elif command is 'rmview':
+ elif command == 'rmview':
options.append("-force")
options.append("%s" % ud.viewdir)
- elif command is 'setcs':
+ elif command == 'setcs':
options.append("-overwrite")
options.append(ud.configspecfile)
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
index 2d1d2cabd5..ac996fa166 100644
--- a/bitbake/lib/bb/fetch2/git.py
+++ b/bitbake/lib/bb/fetch2/git.py
@@ -140,6 +140,10 @@ class Git(FetchMethod):
ud.proto = 'file'
else:
ud.proto = "git"
+ if ud.host == "github.com" and ud.proto == "git":
+ # github stopped supporting git protocol
+ # https://github.blog/2021-09-01-improving-git-protocol-security-github/#no-more-unauthenticated-git
+ ud.proto = "https"
if not ud.proto in ('git', 'file', 'ssh', 'http', 'https', 'rsync'):
raise bb.fetch2.ParameterError("Invalid protocol type", ud.url)
@@ -292,11 +296,21 @@ class Git(FetchMethod):
def clonedir_need_update(self, ud, d):
if not os.path.exists(ud.clonedir):
return True
+ if ud.shallow and ud.write_shallow_tarballs and self.clonedir_need_shallow_revs(ud, d):
+ return True
for name in ud.names:
if not self._contains_ref(ud, d, name, ud.clonedir):
return True
return False
+ def clonedir_need_shallow_revs(self, ud, d):
+ for rev in ud.shallow_revs:
+ try:
+ runfetchcmd('%s rev-parse -q --verify %s' % (ud.basecmd, rev), d, quiet=True, workdir=ud.clonedir)
+ except bb.fetch2.FetchError:
+ return rev
+ return None
+
def shallow_tarball_need_update(self, ud):
return ud.shallow and ud.write_shallow_tarballs and not os.path.exists(ud.fullshallow)
@@ -339,19 +353,13 @@ class Git(FetchMethod):
runfetchcmd(clone_cmd, d, log=progresshandler)
# Update the checkout if needed
- needupdate = False
- for name in ud.names:
- if not self._contains_ref(ud, d, name, ud.clonedir):
- needupdate = True
- break
-
- if needupdate:
+ if self.clonedir_need_update(ud, d):
output = runfetchcmd("%s remote" % ud.basecmd, d, quiet=True, workdir=ud.clonedir)
if "origin" in output:
runfetchcmd("%s remote rm origin" % ud.basecmd, d, workdir=ud.clonedir)
runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, repourl), d, workdir=ud.clonedir)
- fetch_cmd = "LANG=C %s fetch -f --prune --progress %s refs/*:refs/*" % (ud.basecmd, repourl)
+ fetch_cmd = "LANG=C %s fetch -f --progress %s refs/*:refs/*" % (ud.basecmd, repourl)
if ud.proto.lower() != 'file':
bb.fetch2.check_network_access(d, fetch_cmd, ud.url)
progresshandler = GitProgressHandler(d)
@@ -369,6 +377,11 @@ class Git(FetchMethod):
if not self._contains_ref(ud, d, name, ud.clonedir):
raise bb.fetch2.FetchError("Unable to find revision %s in branch %s even from upstream" % (ud.revisions[name], ud.branches[name]))
+ if ud.shallow and ud.write_shallow_tarballs:
+ missing_rev = self.clonedir_need_shallow_revs(ud, d)
+ if missing_rev:
+ raise bb.fetch2.FetchError("Unable to find revision %s even from upstream" % missing_rev)
+
def build_mirror_data(self, ud, d):
if ud.shallow and ud.write_shallow_tarballs:
if not os.path.exists(ud.fullshallow):
@@ -585,7 +598,9 @@ class Git(FetchMethod):
"""
Return a unique key for the url
"""
- return "git:" + ud.host + ud.path.replace('/', '.') + ud.unresolvedrev[name]
+ # Collapse adjacent slashes
+ slash_re = re.compile(r"/+")
+ return "git:" + ud.host + slash_re.sub(".", ud.path) + ud.unresolvedrev[name]
def _lsremote(self, ud, d, search):
"""
diff --git a/bitbake/lib/bb/fetch2/hg.py b/bitbake/lib/bb/fetch2/hg.py
index 15d729e7b2..e21115debf 100644
--- a/bitbake/lib/bb/fetch2/hg.py
+++ b/bitbake/lib/bb/fetch2/hg.py
@@ -54,13 +54,6 @@ class Hg(FetchMethod):
else:
ud.proto = "hg"
- ud.setup_revisions(d)
-
- if 'rev' in ud.parm:
- ud.revision = ud.parm['rev']
- elif not ud.revision:
- ud.revision = self.latest_revision(ud, d)
-
# Create paths to mercurial checkouts
hgsrcname = '%s_%s_%s' % (ud.module.replace('/', '.'), \
ud.host, ud.path.replace('/', '.'))
@@ -74,6 +67,13 @@ class Hg(FetchMethod):
ud.localfile = ud.moddir
ud.basecmd = d.getVar("FETCHCMD_hg") or "/usr/bin/env hg"
+ ud.setup_revisions(d)
+
+ if 'rev' in ud.parm:
+ ud.revision = ud.parm['rev']
+ elif not ud.revision:
+ ud.revision = self.latest_revision(ud, d)
+
ud.write_tarballs = d.getVar("BB_GENERATE_MIRROR_TARBALLS")
def need_update(self, ud, d):
@@ -139,7 +139,7 @@ class Hg(FetchMethod):
cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" pull" % (ud.basecmd, ud.user, ud.pswd, proto)
else:
cmd = "%s pull" % (ud.basecmd)
- elif command == "update":
+ elif command == "update" or command == "up":
if ud.user and ud.pswd:
cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" update -C %s" % (ud.basecmd, ud.user, ud.pswd, proto, " ".join(options))
else:
@@ -247,12 +247,19 @@ class Hg(FetchMethod):
scmdata = ud.parm.get("scmdata", "")
if scmdata != "nokeep":
+ proto = ud.parm.get('protocol', 'http')
if not os.access(os.path.join(codir, '.hg'), os.R_OK):
logger.debug(2, "Unpack: creating new hg repository in '" + codir + "'")
runfetchcmd("%s init %s" % (ud.basecmd, codir), d)
logger.debug(2, "Unpack: updating source in '" + codir + "'")
- runfetchcmd("%s pull %s" % (ud.basecmd, ud.moddir), d, workdir=codir)
- runfetchcmd("%s up -C %s" % (ud.basecmd, revflag), d, workdir=codir)
+ if ud.user and ud.pswd:
+ runfetchcmd("%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" pull %s" % (ud.basecmd, ud.user, ud.pswd, proto, ud.moddir), d, workdir=codir)
+ else:
+ runfetchcmd("%s pull %s" % (ud.basecmd, ud.moddir), d, workdir=codir)
+ if ud.user and ud.pswd:
+ runfetchcmd("%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" up -C %s" % (ud.basecmd, ud.user, ud.pswd, proto, revflag), d, workdir=codir)
+ else:
+ runfetchcmd("%s up -C %s" % (ud.basecmd, revflag), d, workdir=codir)
else:
logger.debug(2, "Unpack: extracting source to '" + codir + "'")
runfetchcmd("%s archive -t files %s %s" % (ud.basecmd, revflag, codir), d, workdir=ud.moddir)
diff --git a/bitbake/lib/bb/persist_data.py b/bitbake/lib/bb/persist_data.py
index de8f87a8bf..7357ab2d44 100644
--- a/bitbake/lib/bb/persist_data.py
+++ b/bitbake/lib/bb/persist_data.py
@@ -179,6 +179,9 @@ class SQLTable(collections.MutableMapping):
elif not isinstance(value, str):
raise TypeError('Only string values are supported')
+ # Ensure the entire transaction (including SELECT) executes under write lock
+ cursor.execute("BEGIN EXCLUSIVE")
+
cursor.execute("SELECT * from %s where key=?;" % self.table, [key])
row = cursor.fetchone()
if row is not None:
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 18049436fd..d7186e8516 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -148,8 +148,9 @@ class RunQueueScheduler(object):
"""
Return the id of the first task we find that is buildable
"""
+ # Once tasks are running we don't need to worry about them again
+ self.buildable.difference_update(self.rq.runq_running)
buildable = set(self.buildable)
- buildable.difference_update(self.rq.runq_running)
buildable.difference_update(self.rq.holdoff_tasks)
buildable.intersection_update(self.rq.tasks_covered | self.rq.tasks_notcovered)
if not buildable:
@@ -207,8 +208,6 @@ class RunQueueScheduler(object):
def newbuildable(self, task):
self.buildable.add(task)
- # Once tasks are running we don't need to worry about them again
- self.buildable.difference_update(self.rq.runq_running)
def removebuildable(self, task):
self.buildable.remove(task)
@@ -1125,14 +1124,14 @@ class RunQueueData:
self.init_progress_reporter.next_stage()
# Iterate over the task list looking for tasks with a 'setscene' function
- self.runq_setscene_tids = []
+ self.runq_setscene_tids = set()
if not self.cooker.configuration.nosetscene:
for tid in self.runtaskentries:
(mc, fn, taskname, _) = split_tid_mcfn(tid)
setscenetid = tid + "_setscene"
if setscenetid not in taskData[mc].taskentries:
continue
- self.runq_setscene_tids.append(tid)
+ self.runq_setscene_tids.add(tid)
self.init_progress_reporter.next_stage()
@@ -1182,10 +1181,8 @@ class RunQueueData:
return len(self.runtaskentries)
def prepare_task_hash(self, tid):
- procdep = []
- for dep in self.runtaskentries[tid].depends:
- procdep.append(dep)
- self.runtaskentries[tid].hash = bb.parse.siggen.get_taskhash(tid, procdep, self.dataCaches[mc_from_tid(tid)])
+ bb.parse.siggen.prep_taskhash(tid, self.runtaskentries[tid].depends, self.dataCaches[mc_from_tid(tid)])
+ self.runtaskentries[tid].hash = bb.parse.siggen.get_taskhash(tid, self.runtaskentries[tid].depends, self.dataCaches[mc_from_tid(tid)])
self.runtaskentries[tid].unihash = bb.parse.siggen.get_unihash(tid)
def dump_data(self):
@@ -1397,7 +1394,7 @@ class RunQueue:
cache[tid] = iscurrent
return iscurrent
- def validate_hashes(self, tocheck, data, currentcount=0, siginfo=False):
+ def validate_hashes(self, tocheck, data, currentcount=0, siginfo=False, summary=True):
valid = set()
if self.hashvalidate:
sq_data = {}
@@ -1410,15 +1407,15 @@ class RunQueue:
sq_data['hashfn'][tid] = self.rqdata.dataCaches[mc].hashfn[taskfn]
sq_data['unihash'][tid] = self.rqdata.runtaskentries[tid].unihash
- valid = self.validate_hash(sq_data, data, siginfo, currentcount)
+ valid = self.validate_hash(sq_data, data, siginfo, currentcount, summary)
return valid
- def validate_hash(self, sq_data, d, siginfo, currentcount):
- locs = {"sq_data" : sq_data, "d" : d, "siginfo" : siginfo, "currentcount" : currentcount}
+ def validate_hash(self, sq_data, d, siginfo, currentcount, summary):
+ locs = {"sq_data" : sq_data, "d" : d, "siginfo" : siginfo, "currentcount" : currentcount, "summary" : summary}
# Metadata has **kwargs so args can be added, sq_data can also gain new fields
- call = self.hashvalidate + "(sq_data, d, siginfo=siginfo, currentcount=currentcount)"
+ call = self.hashvalidate + "(sq_data, d, siginfo=siginfo, currentcount=currentcount, summary=summary)"
return bb.utils.better_eval(call, locs)
@@ -1605,7 +1602,7 @@ class RunQueue:
tocheck.add(tid)
- valid_new = self.validate_hashes(tocheck, self.cooker.data, 0, True)
+ valid_new = self.validate_hashes(tocheck, self.cooker.data, 0, True, summary=False)
# Tasks which are both setscene and noexec never care about dependencies
# We therefore find tasks which are setscene and noexec and mark their
@@ -1711,6 +1708,7 @@ class RunQueueExecute:
self.runq_buildable = set()
self.runq_running = set()
self.runq_complete = set()
+ self.runq_tasksrun = set()
self.build_stamps = {}
self.build_stamps2 = []
@@ -1896,6 +1894,7 @@ class RunQueueExecute:
self.stats.taskCompleted()
bb.event.fire(runQueueTaskCompleted(task, self.stats, self.rq), self.cfgData)
self.task_completeoutright(task)
+ self.runq_tasksrun.add(task)
def task_fail(self, task, exitcode):
"""
@@ -1962,12 +1961,17 @@ class RunQueueExecute:
"""
self.rq.read_workers()
- self.process_possible_migrations()
+ if self.updated_taskhash_queue or self.pending_migrations:
+ self.process_possible_migrations()
+
+ if not hasattr(self, "sorted_setscene_tids"):
+ # Don't want to sort this set every execution
+ self.sorted_setscene_tids = sorted(self.rqdata.runq_setscene_tids)
task = None
if not self.sqdone and self.can_start_task():
# Find the next setscene to run
- for nexttask in sorted(self.rqdata.runq_setscene_tids):
+ for nexttask in self.sorted_setscene_tids:
if nexttask in self.sq_buildable and nexttask not in self.sq_running and self.sqdata.stamps[nexttask] not in self.build_stamps.values():
if nexttask not in self.sqdata.unskippable and len(self.sqdata.sq_revdeps[nexttask]) > 0 and self.sqdata.sq_revdeps[nexttask].issubset(self.scenequeue_covered) and self.check_dependencies(nexttask, self.sqdata.sq_revdeps[nexttask]):
if nexttask not in self.rqdata.target_tids:
@@ -1986,7 +1990,7 @@ class RunQueueExecute:
continue
logger.debug(1, "Task %s no longer deferred" % nexttask)
del self.sq_deferred[nexttask]
- valid = self.rq.validate_hashes(set([nexttask]), self.cooker.data, 0, False)
+ valid = self.rq.validate_hashes(set([nexttask]), self.cooker.data, 0, False, summary=False)
if not valid:
logger.debug(1, "%s didn't become valid, skipping setscene" % nexttask)
self.sq_task_failoutright(nexttask)
@@ -2090,6 +2094,7 @@ class RunQueueExecute:
logger.debug(2, "Stamp current task %s", task)
self.task_skip(task, "existing")
+ self.runq_tasksrun.add(task)
return True
taskdep = self.rqdata.dataCaches[mc].task_deps[taskfn]
@@ -2248,6 +2253,7 @@ class RunQueueExecute:
def process_possible_migrations(self):
changed = set()
+ toprocess = set()
for tid, unihash in self.updated_taskhash_queue.copy():
if tid in self.runq_running and tid not in self.runq_complete:
continue
@@ -2258,39 +2264,60 @@ class RunQueueExecute:
logger.info("Task %s unihash changed to %s" % (tid, unihash))
self.rqdata.runtaskentries[tid].unihash = unihash
bb.parse.siggen.set_unihash(tid, unihash)
+ toprocess.add(tid)
- # Work out all tasks which depend on this one
- total = set()
- next = set(self.rqdata.runtaskentries[tid].revdeps)
- while next:
- current = next.copy()
- total = total |next
- next = set()
- for ntid in current:
- next |= self.rqdata.runtaskentries[ntid].revdeps
- next.difference_update(total)
-
- # Now iterate those tasks in dependency order to regenerate their taskhash/unihash
- done = set()
- next = set(self.rqdata.runtaskentries[tid].revdeps)
- while next:
- current = next.copy()
- next = set()
- for tid in current:
- if not self.rqdata.runtaskentries[tid].depends.isdisjoint(total):
- continue
- procdep = []
- for dep in self.rqdata.runtaskentries[tid].depends:
- procdep.append(dep)
- orighash = self.rqdata.runtaskentries[tid].hash
- self.rqdata.runtaskentries[tid].hash = bb.parse.siggen.get_taskhash(tid, procdep, self.rqdata.dataCaches[mc_from_tid(tid)])
- origuni = self.rqdata.runtaskentries[tid].unihash
- self.rqdata.runtaskentries[tid].unihash = bb.parse.siggen.get_unihash(tid)
- logger.debug(1, "Task %s hash changes: %s->%s %s->%s" % (tid, orighash, self.rqdata.runtaskentries[tid].hash, origuni, self.rqdata.runtaskentries[tid].unihash))
- next |= self.rqdata.runtaskentries[tid].revdeps
- changed.add(tid)
- total.remove(tid)
- next.intersection_update(total)
+ # Work out all tasks which depend upon these
+ total = set()
+ next = set()
+ for p in toprocess:
+ next |= self.rqdata.runtaskentries[p].revdeps
+ while next:
+ current = next.copy()
+ total = total | next
+ next = set()
+ for ntid in current:
+ next |= self.rqdata.runtaskentries[ntid].revdeps
+ next.difference_update(total)
+
+ # Now iterate those tasks in dependency order to regenerate their taskhash/unihash
+ next = set()
+ for p in total:
+ if len(self.rqdata.runtaskentries[p].depends) == 0:
+ next.add(p)
+ elif self.rqdata.runtaskentries[p].depends.isdisjoint(total):
+ next.add(p)
+
+ # When an item doesn't have dependencies in total, we can process it. Drop items from total when handled
+ while next:
+ current = next.copy()
+ next = set()
+ for tid in current:
+ if len(self.rqdata.runtaskentries[p].depends) and not self.rqdata.runtaskentries[tid].depends.isdisjoint(total):
+ continue
+ orighash = self.rqdata.runtaskentries[tid].hash
+ newhash = bb.parse.siggen.get_taskhash(tid, self.rqdata.runtaskentries[tid].depends, self.rqdata.dataCaches[mc_from_tid(tid)])
+ origuni = self.rqdata.runtaskentries[tid].unihash
+ newuni = bb.parse.siggen.get_unihash(tid)
+ # FIXME, need to check it can come from sstate at all for determinism?
+ remapped = False
+ if newuni == origuni:
+ # Nothing to do, we match, skip code below
+ remapped = True
+ elif tid in self.scenequeue_covered or tid in self.sq_live:
+ # Already ran this setscene task or it running. Report the new taskhash
+ bb.parse.siggen.report_unihash_equiv(tid, newhash, origuni, newuni, self.rqdata.dataCaches)
+ logger.info("Already covered setscene for %s so ignoring rehash (remap)" % (tid))
+ remapped = True
+
+ if not remapped:
+ #logger.debug(1, "Task %s hash changes: %s->%s %s->%s" % (tid, orighash, newhash, origuni, newuni))
+ self.rqdata.runtaskentries[tid].hash = newhash
+ self.rqdata.runtaskentries[tid].unihash = newuni
+ changed.add(tid)
+
+ next |= self.rqdata.runtaskentries[tid].revdeps
+ total.remove(tid)
+ next.intersection_update(total)
if changed:
for mc in self.rq.worker:
@@ -2303,16 +2330,16 @@ class RunQueueExecute:
for tid in changed:
if tid not in self.rqdata.runq_setscene_tids:
continue
- if tid in self.runq_running:
- continue
- if tid in self.scenequeue_covered:
- # Potentially risky, should we report this hash as a match?
- logger.info("Already covered setscene for %s so ignoring rehash" % (tid))
- continue
if tid not in self.pending_migrations:
self.pending_migrations.add(tid)
+ update_tasks = []
for tid in self.pending_migrations.copy():
+ if tid in self.runq_running or tid in self.sq_live:
+ # Too late, task already running, not much we can do now
+ self.pending_migrations.remove(tid)
+ continue
+
valid = True
# Check no tasks this covers are running
for dep in self.sqdata.sq_covered_tasks[tid]:
@@ -2329,6 +2356,12 @@ class RunQueueExecute:
if tid in self.tasks_scenequeue_done:
self.tasks_scenequeue_done.remove(tid)
for dep in self.sqdata.sq_covered_tasks[tid]:
+ if dep in self.runq_complete and dep not in self.runq_tasksrun:
+ bb.error("Task %s marked as completed but now needing to rerun? Aborting build." % dep)
+ self.failed_tids.append(tid)
+ self.rq.state = runQueueCleanUp
+ return
+
if dep not in self.runq_complete:
if dep in self.tasks_scenequeue_done and dep not in self.sqdata.unskippable:
self.tasks_scenequeue_done.remove(dep)
@@ -2337,7 +2370,12 @@ class RunQueueExecute:
self.sq_buildable.remove(tid)
if tid in self.sq_running:
self.sq_running.remove(tid)
- if self.sqdata.sq_revdeps[tid].issubset(self.scenequeue_covered | self.scenequeue_notcovered):
+ harddepfail = False
+ for t in self.sqdata.sq_harddeps:
+ if tid in self.sqdata.sq_harddeps[t] and t in self.scenequeue_notcovered:
+ harddepfail = True
+ break
+ if not harddepfail and self.sqdata.sq_revdeps[tid].issubset(self.scenequeue_covered | self.scenequeue_notcovered):
if tid not in self.sq_buildable:
self.sq_buildable.add(tid)
if len(self.sqdata.sq_revdeps[tid]) == 0:
@@ -2361,9 +2399,17 @@ class RunQueueExecute:
if tid in self.build_stamps:
del self.build_stamps[tid]
- logger.info("Setscene task %s now valid and being rerun" % tid)
+ update_tasks.append((tid, harddepfail, tid in self.sqdata.valid))
+
+ if update_tasks:
self.sqdone = False
- update_scenequeue_data([tid], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self)
+ update_scenequeue_data([t[0] for t in update_tasks], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=False)
+
+ for (tid, harddepfail, origvalid) in update_tasks:
+ if tid in self.sqdata.valid and not origvalid:
+ logger.info("Setscene task %s became valid" % tid)
+ if harddepfail:
+ self.sq_task_failoutright(tid)
if changed:
self.holdoff_need_update = True
@@ -2500,6 +2546,8 @@ class RunQueueExecute:
msg = 'Task %s.%s attempted to execute unexpectedly and should have been setscened' % (pn, taskname)
else:
msg = 'Task %s.%s attempted to execute unexpectedly' % (pn, taskname)
+ for t in self.scenequeue_notcovered:
+ msg = msg + "\nTask %s, unihash %s, taskhash %s" % (t, self.rqdata.runtaskentries[t].unihash, self.rqdata.runtaskentries[t].hash)
logger.error(msg + '\nThis is usually due to missing setscene tasks. Those missing in this build were: %s' % pprint.pformat(self.scenequeue_notcovered))
return True
return False
@@ -2692,9 +2740,9 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq):
sqdata.stamppresent = set()
sqdata.valid = set()
- update_scenequeue_data(sqdata.sq_revdeps, sqdata, rqdata, rq, cooker, stampcache, sqrq)
+ update_scenequeue_data(sqdata.sq_revdeps, sqdata, rqdata, rq, cooker, stampcache, sqrq, summary=True)
-def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq):
+def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq, summary=True):
tocheck = set()
@@ -2728,7 +2776,7 @@ def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq):
tocheck.add(tid)
- sqdata.valid |= rq.validate_hashes(tocheck, cooker.data, len(sqdata.stamppresent), False)
+ sqdata.valid |= rq.validate_hashes(tocheck, cooker.data, len(sqdata.stamppresent), False, summary=summary)
sqdata.hashes = {}
for mc in sorted(sqdata.multiconfigs):
@@ -2750,7 +2798,7 @@ def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq):
sqdata.hashes[h] = tid
else:
sqrq.sq_deferred[tid] = sqdata.hashes[h]
- bb.warn("Deferring %s after %s" % (tid, sqdata.hashes[h]))
+ bb.note("Deferring %s after %s" % (tid, sqdata.hashes[h]))
class TaskFailure(Exception):
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py
index a4bb1ff7fb..c2d0c736cf 100644
--- a/bitbake/lib/bb/siggen.py
+++ b/bitbake/lib/bb/siggen.py
@@ -40,18 +40,26 @@ class SignatureGenerator(object):
def __init__(self, data):
self.basehash = {}
self.taskhash = {}
+ self.unihash = {}
self.runtaskdeps = {}
self.file_checksum_values = {}
self.taints = {}
self.unitaskhashes = {}
- self.setscenetasks = {}
+ self.tidtopn = {}
+ self.setscenetasks = set()
def finalise(self, fn, d, varient):
return
+ def postparsing_clean_cache(self):
+ return
+
def get_unihash(self, tid):
return self.taskhash[tid]
+ def prep_taskhash(self, tid, deps, dataCache):
+ return
+
def get_taskhash(self, tid, deps, dataCache):
self.taskhash[tid] = hashlib.sha256(tid.encode("utf-8")).hexdigest()
return self.taskhash[tid]
@@ -76,19 +84,19 @@ class SignatureGenerator(object):
return
def get_taskdata(self):
- return (self.runtaskdeps, self.taskhash, self.file_checksum_values, self.taints, self.basehash, self.unitaskhashes, self.setscenetasks)
+ return (self.runtaskdeps, self.taskhash, self.unihash, self.file_checksum_values, self.taints, self.basehash, self.unitaskhashes, self.tidtopn, self.setscenetasks)
def set_taskdata(self, data):
- self.runtaskdeps, self.taskhash, self.file_checksum_values, self.taints, self.basehash, self.unitaskhashes, self.setscenetasks = data
+ self.runtaskdeps, self.taskhash, self.unihash, self.file_checksum_values, self.taints, self.basehash, self.unitaskhashes, self.tidtopn, self.setscenetasks = data
def reset(self, data):
self.__init__(data)
def get_taskhashes(self):
- return self.taskhash, self.unitaskhashes
+ return self.taskhash, self.unihash, self.unitaskhashes, self.tidtopn
def set_taskhashes(self, hashes):
- self.taskhash, self.unitaskhashes = hashes
+ self.taskhash, self.unihash, self.unitaskhashes, self.tidtopn = hashes
def save_unitaskhashes(self):
return
@@ -104,13 +112,14 @@ class SignatureGeneratorBasic(SignatureGenerator):
def __init__(self, data):
self.basehash = {}
self.taskhash = {}
+ self.unihash = {}
self.taskdeps = {}
self.runtaskdeps = {}
self.file_checksum_values = {}
self.taints = {}
self.gendeps = {}
self.lookupcache = {}
- self.setscenetasks = {}
+ self.setscenetasks = set()
self.basewhitelist = set((data.getVar("BB_HASHBASE_WHITELIST") or "").split())
self.taskwhitelist = None
self.init_rundepcheck(data)
@@ -121,8 +130,10 @@ class SignatureGeneratorBasic(SignatureGenerator):
else:
self.checksum_cache = None
- self.unihash_cache = bb.cache.SimpleCache("1")
+ self.unihash_cache = bb.cache.SimpleCache("3")
self.unitaskhashes = self.unihash_cache.init_cache(data, "bb_unihashes.dat", {})
+ self.localdirsexclude = (data.getVar("BB_SIGNATURE_LOCAL_DIRS_EXCLUDE") or "CVS .bzr .git .hg .osc .p4 .repo .svn").split()
+ self.tidtopn = {}
def init_rundepcheck(self, data):
self.taskwhitelist = data.getVar("BB_HASHTASK_WHITELIST") or None
@@ -157,7 +168,7 @@ class SignatureGeneratorBasic(SignatureGenerator):
return taskdeps
def set_setscene_tasks(self, setscene_tasks):
- self.setscenetasks = setscene_tasks
+ self.setscenetasks = set(setscene_tasks)
def finalise(self, fn, d, variant):
@@ -180,6 +191,14 @@ class SignatureGeneratorBasic(SignatureGenerator):
for task in taskdeps:
d.setVar("BB_BASEHASH_task-%s" % task, self.basehash[fn + ":" + task])
+ def postparsing_clean_cache(self):
+ #
+ # After parsing we can remove some things from memory to reduce our memory footprint
+ #
+ self.gendeps = {}
+ self.lookupcache = {}
+ self.taskdeps = {}
+
def rundep_check(self, fn, recipename, task, dep, depname, dataCache):
# Return True if we should keep the dependency, False to drop it
# We only manipulate the dependencies for packages not in the whitelist
@@ -198,15 +217,17 @@ class SignatureGeneratorBasic(SignatureGenerator):
pass
return taint
- def get_taskhash(self, tid, deps, dataCache):
+ def prep_taskhash(self, tid, deps, dataCache):
(mc, _, task, fn) = bb.runqueue.split_tid_mcfn(tid)
- data = dataCache.basetaskhash[tid]
- self.basehash[tid] = data
+ self.basehash[tid] = dataCache.basetaskhash[tid]
self.runtaskdeps[tid] = []
self.file_checksum_values[tid] = []
recipename = dataCache.pkg_fn[fn]
+
+ self.tidtopn[tid] = recipename
+
for dep in sorted(deps, key=clean_basepath):
(depmc, _, deptaskname, depfn) = bb.runqueue.split_tid_mcfn(dep)
if mc != depmc:
@@ -216,33 +237,56 @@ class SignatureGeneratorBasic(SignatureGenerator):
continue
if dep not in self.taskhash:
bb.fatal("%s is not in taskhash, caller isn't calling in dependency order?" % dep)
- data = data + self.get_unihash(dep)
self.runtaskdeps[tid].append(dep)
if task in dataCache.file_checksums[fn]:
if self.checksum_cache:
- checksums = self.checksum_cache.get_checksums(dataCache.file_checksums[fn][task], recipename)
+ checksums = self.checksum_cache.get_checksums(dataCache.file_checksums[fn][task], recipename, self.localdirsexclude)
else:
- checksums = bb.fetch2.get_file_checksums(dataCache.file_checksums[fn][task], recipename)
+ checksums = bb.fetch2.get_file_checksums(dataCache.file_checksums[fn][task], recipename, self.localdirsexclude)
for (f,cs) in checksums:
self.file_checksum_values[tid].append((f,cs))
- if cs:
- data = data + cs
taskdep = dataCache.task_deps[fn]
if 'nostamp' in taskdep and task in taskdep['nostamp']:
# Nostamp tasks need an implicit taint so that they force any dependent tasks to run
- import uuid
- taint = str(uuid.uuid4())
- data = data + taint
- self.taints[tid] = "nostamp:" + taint
+ if tid in self.taints and self.taints[tid].startswith("nostamp:"):
+ # Don't reset taint value upon every call
+ pass
+ else:
+ import uuid
+ taint = str(uuid.uuid4())
+ self.taints[tid] = "nostamp:" + taint
taint = self.read_taint(fn, task, dataCache.stamp[fn])
if taint:
- data = data + taint
self.taints[tid] = taint
logger.warning("%s is tainted from a forced run" % tid)
+ return
+
+ def get_taskhash(self, tid, deps, dataCache):
+
+ data = self.basehash[tid]
+ for dep in self.runtaskdeps[tid]:
+ if dep in self.unihash:
+ if self.unihash[dep] is None:
+ data = data + self.taskhash[dep]
+ else:
+ data = data + self.unihash[dep]
+ else:
+ data = data + self.get_unihash(dep)
+
+ for (f, cs) in self.file_checksum_values[tid]:
+ if cs:
+ data = data + cs
+
+ if tid in self.taints:
+ if self.taints[tid].startswith("nostamp:"):
+ data = data + self.taints[tid][8:]
+ else:
+ data = data + self.taints[tid]
+
h = hashlib.sha256(data.encode("utf-8")).hexdigest()
self.taskhash[tid] = h
#d.setVar("BB_TASKHASH_task-%s" % task, taskhash[task])
@@ -371,50 +415,66 @@ class SignatureGeneratorBasicHash(SignatureGeneratorBasic):
bb.build.write_taint(task, d, fn)
class SignatureGeneratorUniHashMixIn(object):
+ def __init__(self, data):
+ self.extramethod = {}
+ super().__init__(data)
+
def get_taskdata(self):
- return (self.server, self.method) + super().get_taskdata()
+ return (self.server, self.method, self.extramethod) + super().get_taskdata()
def set_taskdata(self, data):
- self.server, self.method = data[:2]
- super().set_taskdata(data[2:])
+ self.server, self.method, self.extramethod = data[:3]
+ super().set_taskdata(data[3:])
def client(self):
if getattr(self, '_client', None) is None:
self._client = hashserv.create_client(self.server)
return self._client
- def __get_task_unihash_key(self, tid):
- # TODO: The key only *needs* to be the taskhash, the tid is just
- # convenient
- return '%s:%s' % (tid.rsplit("/", 1)[1], self.taskhash[tid])
-
def get_stampfile_hash(self, tid):
if tid in self.taskhash:
# If a unique hash is reported, use it as the stampfile hash. This
# ensures that if a task won't be re-run if the taskhash changes,
# but it would result in the same output hash
- unihash = self.unitaskhashes.get(self.__get_task_unihash_key(tid), None)
+ unihash = self._get_unihash(tid)
if unihash is not None:
return unihash
return super().get_stampfile_hash(tid)
def set_unihash(self, tid, unihash):
- self.unitaskhashes[self.__get_task_unihash_key(tid)] = unihash
+ (mc, fn, taskname, taskfn) = bb.runqueue.split_tid_mcfn(tid)
+ key = mc + ":" + self.tidtopn[tid] + ":" + taskname
+ self.unitaskhashes[key] = (self.taskhash[tid], unihash)
+ self.unihash[tid] = unihash
+
+ def _get_unihash(self, tid, checkkey=None):
+ if tid not in self.tidtopn:
+ return None
+ (mc, fn, taskname, taskfn) = bb.runqueue.split_tid_mcfn(tid)
+ key = mc + ":" + self.tidtopn[tid] + ":" + taskname
+ if key not in self.unitaskhashes:
+ return None
+ if not checkkey:
+ checkkey = self.taskhash[tid]
+ (key, unihash) = self.unitaskhashes[key]
+ if key != checkkey:
+ return None
+ return unihash
def get_unihash(self, tid):
taskhash = self.taskhash[tid]
# If its not a setscene task we can return
if self.setscenetasks and tid not in self.setscenetasks:
+ self.unihash[tid] = None
return taskhash
- key = self.__get_task_unihash_key(tid)
-
# TODO: This cache can grow unbounded. It probably only needs to keep
# for each task
- unihash = self.unitaskhashes.get(key, None)
+ unihash = self._get_unihash(tid)
if unihash is not None:
+ self.unihash[tid] = unihash
return unihash
# In the absence of being able to discover a unique hash from the
@@ -433,7 +493,10 @@ class SignatureGeneratorUniHashMixIn(object):
unihash = taskhash
try:
- data = self.client().get_unihash(self.method, self.taskhash[tid])
+ method = self.method
+ if tid in self.extramethod:
+ method = method + self.extramethod[tid]
+ data = self.client().get_unihash(method, self.taskhash[tid])
if data:
unihash = data
# A unique hash equal to the taskhash is not very interesting,
@@ -445,7 +508,8 @@ class SignatureGeneratorUniHashMixIn(object):
except hashserv.client.HashConnectionError as e:
bb.warn('Error contacting Hash Equivalence Server %s: %s' % (self.server, str(e)))
- self.unitaskhashes[key] = unihash
+ self.set_unihash(tid, unihash)
+ self.unihash[tid] = unihash
return unihash
def report_unihash(self, path, task, d):
@@ -457,13 +521,17 @@ class SignatureGeneratorUniHashMixIn(object):
tempdir = d.getVar('T')
fn = d.getVar('BB_FILENAME')
tid = fn + ':do_' + task
- key = tid.rsplit("/", 1)[1] + ':' + taskhash
+ key = tid + ':' + taskhash
if self.setscenetasks and tid not in self.setscenetasks:
return
+ # This can happen if locked sigs are in action. Detect and just abort
+ if taskhash != self.taskhash[tid]:
+ return
+
# Sanity checks
- cache_unihash = self.unitaskhashes.get(key, None)
+ cache_unihash = self._get_unihash(tid, checkkey=taskhash)
if cache_unihash is None:
bb.fatal('%s not in unihash cache. Please report this error' % key)
@@ -502,12 +570,18 @@ class SignatureGeneratorUniHashMixIn(object):
extra_data['task'] = task
extra_data['outhash_siginfo'] = sigfile.read().decode('utf-8')
- data = self.client().report_unihash(taskhash, self.method, outhash, unihash, extra_data)
+ method = self.method
+ if tid in self.extramethod:
+ method = method + self.extramethod[tid]
+
+ data = self.client().report_unihash(taskhash, method, outhash, unihash, extra_data)
new_unihash = data['unihash']
if new_unihash != unihash:
bb.debug(1, 'Task %s unihash changed %s -> %s by server %s' % (taskhash, unihash, new_unihash, self.server))
bb.event.fire(bb.runqueue.taskUniHashUpdate(fn + ':do_' + task, new_unihash), d)
+ self.set_unihash(tid, new_unihash)
+ d.setVar('BB_UNIHASH', new_unihash)
else:
bb.debug(1, 'Reported task %s as unihash %s to %s' % (taskhash, unihash, self.server))
except hashserv.client.HashConnectionError as e:
@@ -524,6 +598,36 @@ class SignatureGeneratorUniHashMixIn(object):
except OSError:
pass
+ def report_unihash_equiv(self, tid, taskhash, wanted_unihash, current_unihash, datacaches):
+ try:
+ extra_data = {}
+ method = self.method
+ if tid in self.extramethod:
+ method = method + self.extramethod[tid]
+
+ data = self.client().report_unihash_equiv(taskhash, method, wanted_unihash, extra_data)
+ bb.note('Reported task %s as unihash %s to %s (%s)' % (tid, wanted_unihash, self.server, str(data)))
+
+ if data is None:
+ bb.warn("Server unable to handle unihash report")
+ return False
+
+ finalunihash = data['unihash']
+
+ if finalunihash == current_unihash:
+ bb.note('Task %s unihash %s unchanged by server' % (tid, finalunihash))
+ elif finalunihash == wanted_unihash:
+ bb.note('Task %s unihash changed %s -> %s as wanted' % (tid, current_unihash, finalunihash))
+ self.set_unihash(tid, finalunihash)
+ return True
+ else:
+ # TODO: What to do here?
+ bb.note('Task %s unihash reported as unwanted hash %s' % (tid, finalunihash))
+
+ except hashserv.client.HashConnectionError as e:
+ bb.warn('Error contacting Hash Equivalence Server %s: %s' % (self.server, str(e)))
+
+ return False
#
# Dummy class used for bitbake-selftest
diff --git a/bitbake/lib/bb/tests/fetch-testdata/apple/cups/releases b/bitbake/lib/bb/tests/fetch-testdata/apple/cups/releases
new file mode 100644
index 0000000000..f8934f56fa
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/apple/cups/releases
@@ -0,0 +1,2400 @@
+
+
+
+
+
+
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <link rel="dns-prefetch" href="https://github.githubassets.com">
+ <link rel="dns-prefetch" href="https://avatars0.githubusercontent.com">
+ <link rel="dns-prefetch" href="https://avatars1.githubusercontent.com">
+ <link rel="dns-prefetch" href="https://avatars2.githubusercontent.com">
+ <link rel="dns-prefetch" href="https://avatars3.githubusercontent.com">
+ <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
+ <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
+
+
+
+ <link crossorigin="anonymous" media="all" integrity="sha512-7mtunHqp/Bw0ND9akjJME8XCh0WPm3HAXOSeX7skL0qGAhpdfzkQvYcujYcwNPTpWKeKMFUGZGtvnEkcczFgwQ==" rel="stylesheet" href="https://github.githubassets.com/assets/frameworks-9b5314213e37056ed87b0418056c4f2c.css" />
+ <link crossorigin="anonymous" media="all" integrity="sha512-CmoegizWCUR1jC94Y2eukVQIFxJ9GxYerz9q7dBwImLlx8ODwYkXAMIhCfTnA45Ep6++rcO/ZtKVLvFBM8dapA==" rel="stylesheet" href="https://github.githubassets.com/assets/site-4e9f27fa33341743f730ae7b0e33eff5.css" />
+ <link crossorigin="anonymous" media="all" integrity="sha512-BvnICKFjIvT69o61dyYllXtaOnGVb7Ifj5c3lk3wj7tkjat2ICuN+XRwyk8tqP3dj7IFhEQzxDdxSHaJ3xj3Mw==" rel="stylesheet" href="https://github.githubassets.com/assets/github-ff986874cf7e28cbcd5d448cdca7245d.css" />
+
+
+
+
+
+
+ <meta name="viewport" content="width=device-width">
+
+ <title>Releases · apple/cups · GitHub</title>
+ <meta name="description" content="Official CUPS Sources. Contribute to apple/cups development by creating an account on GitHub.">
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
+ <meta property="fb:app_id" content="1401488693436528">
+
+ <meta name="twitter:image:src" content="https://avatars2.githubusercontent.com/u/10639145?s=400&amp;v=4" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary" /><meta name="twitter:title" content="apple/cups" /><meta name="twitter:description" content="Official CUPS Sources. Contribute to apple/cups development by creating an account on GitHub." />
+ <meta property="og:image" content="https://avatars2.githubusercontent.com/u/10639145?s=400&amp;v=4" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="apple/cups" /><meta property="og:url" content="https://github.com/apple/cups" /><meta property="og:description" content="Official CUPS Sources. Contribute to apple/cups development by creating an account on GitHub." />
+
+ <link rel="assets" href="https://github.githubassets.com/">
+
+
+
+ <meta name="request-id" content="E0CB:22348:508D9B:74D7B0:5DFA43C4" data-pjax-transient>
+
+
+
+
+
+ <meta name="selected-link" value="repo_releases" data-pjax-transient>
+
+ <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
+ <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
+ <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc">
+
+ <meta name="octolytics-host" content="collector.githubapp.com" /><meta name="octolytics-app-id" content="github" /><meta name="octolytics-event-url" content="https://collector.githubapp.com/github-external/browser_event" /><meta name="octolytics-dimension-request_id" content="E0CB:22348:508D9B:74D7B0:5DFA43C4" /><meta name="octolytics-dimension-region_edge" content="ams" /><meta name="octolytics-dimension-region_render" content="iad" /><meta name="octolytics-dimension-ga_id" content="" class="js-octo-ga-id" /><meta name="octolytics-dimension-visitor_id" content="3868440108365136837" />
+
+<meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/releases/index" data-pjax-transient="true" />
+
+
+
+ <meta name="google-analytics" content="UA-3769691-2">
+
+
+<meta class="js-ga-set" name="dimension1" content="Logged Out">
+
+
+
+
+
+ <meta name="hostname" content="github.com">
+ <meta name="user-login" content="">
+
+ <meta name="expected-hostname" content="github.com">
+
+ <meta name="js-proxy-site-detection-payload" content="NmQ3M2FjYmZiNDJmZTg4YjgzZmRkOWJlNjQzYjU2MGFmNDQ5OTM4ZGVmMjcyMTNmMGZjOGVlODg1NWM0NGJmOHx7InJlbW90ZV9hZGRyZXNzIjoiODcuODEuMjQ0LjE2MSIsInJlcXVlc3RfaWQiOiJFMENCOjIyMzQ4OjUwOEQ5Qjo3NEQ3QjA6NURGQTQzQzQiLCJ0aW1lc3RhbXAiOjE1NzY2ODI0MzcsImhvc3QiOiJnaXRodWIuY29tIn0=">
+
+ <meta name="enabled-features" content="MARKETPLACE_FEATURED_BLOG_POSTS,MARKETPLACE_INVOICED_BILLING,MARKETPLACE_SOCIAL_PROOF_CUSTOMERS,MARKETPLACE_TRENDING_SOCIAL_PROOF,MARKETPLACE_RECOMMENDATIONS,MARKETPLACE_PENDING_INSTALLATIONS">
+
+ <meta name="html-safe-nonce" content="99799050425011fe6bc71791e860bd50b46cc6a7">
+
+ <meta http-equiv="x-pjax-version" content="2d29eb011c4e56b5682393d6f45c86b9">
+
+
+ <link rel="alternate" type="application/atom+xml" title="cups Release Notes" href="https://github.com/apple/cups/releases.atom" />
+ <link rel="alternate" type="application/atom+xml" title="cups Tags" href="https://github.com/apple/cups/tags.atom" />
+ <link href="https://github.com/apple/cups/commits/master.atom" rel="alternate" title="Recent Commits to cups:master" type="application/atom+xml">
+
+ <meta name="go-import" content="github.com/apple/cups git https://github.com/apple/cups.git">
+
+ <meta name="octolytics-dimension-user_id" content="10639145" /><meta name="octolytics-dimension-user_login" content="apple" /><meta name="octolytics-dimension-repository_id" content="44137852" /><meta name="octolytics-dimension-repository_nwo" content="apple/cups" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="44137852" /><meta name="octolytics-dimension-repository_network_root_nwo" content="apple/cups" /><meta name="octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown" content="false" />
+
+
+
+
+ <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
+
+ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
+
+ <link rel="mask-icon" href="https://github.githubassets.com/pinned-octocat.svg" color="#000000">
+ <link rel="icon" type="image/x-icon" class="js-site-favicon" href="https://github.githubassets.com/favicon.ico">
+
+<meta name="theme-color" content="#1e2327">
+
+
+
+
+
+ <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">
+
+ </head>
+
+ <body class="logged-out env-production page-responsive">
+
+
+ <div class="position-relative js-header-wrapper ">
+ <a href="#start-of-content" tabindex="1" class="px-2 py-4 bg-blue text-white show-on-focus js-skip-to-content">Skip to content</a>
+ <span class="Progress progress-pjax-loader position-fixed width-full js-pjax-loader-bar">
+ <span class="progress-pjax-loader-bar top-0 left-0" style="width: 0%;"></span>
+ </span>
+
+
+
+
+
+
+ <header class="Header-old header-logged-out js-details-container Details position-relative f4 py-2" role="banner">
+ <div class="container-lg d-lg-flex flex-items-center p-responsive">
+ <div class="d-flex flex-justify-between flex-items-center">
+ <a class="mr-4" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark">
+ <svg height="32" class="octicon octicon-mark-github text-white" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
+ </a>
+
+ <div class="d-lg-none css-truncate css-truncate-target width-fit p-2">
+
+ <svg class="octicon octicon-repo" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+ <a class="Header-link" href="/apple">apple</a>
+ /
+ <a class="Header-link" href="/apple/cups">cups</a>
+
+
+ </div>
+
+ <div class="d-flex flex-items-center">
+ <a href="/join?source=header-repo"
+ class="d-inline-block d-lg-none f5 text-white no-underline border border-gray-dark rounded-2 px-2 py-1 mr-3 mr-sm-5"
+ data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;client_id&quot;:null,&quot;originating_request_id&quot;:&quot;E0CB:22348:508D9B:74D7B0:5DFA43C4&quot;,&quot;originating_url&quot;:&quot;https://github.com/apple/cups/releases&quot;,&quot;referrer&quot;:null,&quot;user_id&quot;:null}}" data-hydro-click-hmac="2463445c045c6be86a7b48e6c0af96d0ba777892d6d236f27826323b35cef5d7"
+ data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">
+ Sign&nbsp;up
+ </a>
+
+ <button class="btn-link d-lg-none mt-1 js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false">
+ <svg height="24" class="octicon octicon-three-bars text-white" viewBox="0 0 12 16" version="1.1" width="18" aria-hidden="true"><path fill-rule="evenodd" d="M11.41 9H.59C0 9 0 8.59 0 8c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zm0-4H.59C0 5 0 4.59 0 4c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM.59 11H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1H.59C0 13 0 12.59 0 12c0-.59 0-1 .59-1z"/></svg>
+ </button>
+ </div>
+ </div>
+
+ <div class="HeaderMenu HeaderMenu--logged-out position-fixed top-0 right-0 bottom-0 height-fit position-lg-relative d-lg-flex flex-justify-between flex-items-center flex-auto">
+ <div class="d-flex d-lg-none flex-justify-end border-bottom bg-gray-light p-3">
+ <button class="btn-link js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false">
+ <svg height="24" class="octicon octicon-x text-gray" viewBox="0 0 12 16" version="1.1" width="18" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
+ </button>
+ </div>
+
+ <nav class="mt-0 px-3 px-lg-0 mb-5 mb-lg-0" aria-label="Global">
+ <ul class="d-lg-flex list-style-none">
+ <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
+ <details class="HeaderMenu-details details-overlay details-reset width-full">
+ <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
+ Why GitHub?
+ <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
+ <path d="M1,1l6.2,6L13,1"></path>
+ </svg>
+ </summary>
+ <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
+ <a href="/features" class="py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Features">Features <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a>
+ <ul class="list-style-none f5 pb-3">
+ <li class="edge-item-fix"><a href="/features/code-review/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Code review">Code review</a></li>
+ <li class="edge-item-fix"><a href="/features/project-management/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Project management">Project management</a></li>
+ <li class="edge-item-fix"><a href="/features/integrations" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Integrations">Integrations</a></li>
+ <li class="edge-item-fix"><a href="/features/actions" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Actions">Actions</a></li>
+ <li class="edge-item-fix"><a href="/features/packages" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Packages">Packages</a></li>
+ <li class="edge-item-fix"><a href="/features/security" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Security">Security</a></li>
+ <li class="edge-item-fix"><a href="/features#team-management" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Team management">Team management</a></li>
+ <li class="edge-item-fix"><a href="/features#hosting" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Code hosting">Hosting</a></li>
+ </ul>
+
+ <ul class="list-style-none mb-0 border-lg-top pt-lg-3">
+ <li class="edge-item-fix"><a href="/customer-stories" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Customer stories">Customer stories <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
+ <li class="edge-item-fix"><a href="/security" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Security">Security <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
+ </ul>
+ </div>
+ </details>
+ </li>
+ <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3">
+ <a href="/enterprise" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Enterprise">Enterprise</a>
+ </li>
+
+ <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
+ <details class="HeaderMenu-details details-overlay details-reset width-full">
+ <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
+ Explore
+ <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
+ <path d="M1,1l6.2,6L13,1"></path>
+ </svg>
+ </summary>
+
+ <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
+ <ul class="list-style-none mb-3">
+ <li class="edge-item-fix"><a href="/explore" class="py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Explore">Explore GitHub <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
+ </ul>
+
+ <h4 class="text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Learn &amp; contribute</h4>
+ <ul class="list-style-none mb-3">
+ <li class="edge-item-fix"><a href="/topics" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Topics">Topics</a></li>
+ <li class="edge-item-fix"><a href="/collections" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Collections">Collections</a></li>
+ <li class="edge-item-fix"><a href="/trending" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Trending">Trending</a></li>
+ <li class="edge-item-fix"><a href="https://lab.github.com/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Learning lab">Learning Lab</a></li>
+ <li class="edge-item-fix"><a href="https://opensource.guide" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Open source guides">Open source guides</a></li>
+ </ul>
+
+ <h4 class="text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Connect with others</h4>
+ <ul class="list-style-none mb-0">
+ <li class="edge-item-fix"><a href="https://github.com/events" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Events">Events</a></li>
+ <li class="edge-item-fix"><a href="https://github.community" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Community forum">Community forum</a></li>
+ <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 pb-0 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Education">GitHub Education</a></li>
+ </ul>
+ </div>
+ </details>
+ </li>
+
+ <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3">
+ <a href="/marketplace" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Marketplace">Marketplace</a>
+ </li>
+
+ <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
+ <details class="HeaderMenu-details details-overlay details-reset width-full">
+ <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
+ Pricing
+ <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
+ <path d="M1,1l6.2,6L13,1"></path>
+ </svg>
+ </summary>
+
+ <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-4 mt-0 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
+ <a href="/pricing" class="pb-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Pricing">Plans <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a>
+
+ <ul class="list-style-none mb-3">
+ <li class="edge-item-fix"><a href="/pricing#feature-comparison" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Compare plans">Compare plans</a></li>
+ <li class="edge-item-fix"><a href="https://enterprise.github.com/contact" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Contact Sales">Contact Sales</a></li>
+ </ul>
+
+ <ul class="list-style-none mb-0 border-lg-top pt-lg-3">
+ <li class="edge-item-fix"><a href="/nonprofit" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Nonprofits">Nonprofit <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
+ <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 pb-0 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Education">Education <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
+ </ul>
+ </div>
+ </details>
+ </li>
+ </ul>
+ </nav>
+
+ <div class="d-lg-flex flex-items-center px-3 px-lg-0 text-center text-lg-left">
+ <div class="d-lg-flex mb-3 mb-lg-0">
+ <div class="header-search flex-self-stretch flex-lg-self-auto mr-0 mr-lg-3 mb-3 mb-lg-0 scoped-search site-scoped-search js-site-search position-relative js-jump-to"
+ role="combobox"
+ aria-owns="jump-to-results"
+ aria-label="Search or jump to"
+ aria-haspopup="listbox"
+ aria-expanded="false"
+>
+ <div class="position-relative">
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" role="search" aria-label="Site" data-scope-type="Repository" data-scope-id="44137852" data-scoped-search-url="/apple/cups/search" data-unscoped-search-url="/search" action="/apple/cups/search" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="&#x2713;" />
+ <label class="form-control input-sm header-search-wrapper p-0 header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center js-chromeless-input-container">
+ <input type="text"
+ class="form-control input-sm header-search-input jump-to-field js-jump-to-field js-site-search-focus js-site-search-field is-clearable"
+ data-hotkey="s,/"
+ name="q"
+ value=""
+ placeholder="Search"
+ data-unscoped-placeholder="Search GitHub"
+ data-scoped-placeholder="Search"
+ autocapitalize="off"
+ aria-autocomplete="list"
+ aria-controls="jump-to-results"
+ aria-label="Search"
+ data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations#csrf-token=0QmMSuZHm84cPNVGQ7RYAXgPRiUfOcjNOC1vXOhVnyzm2B3JSHz1fcIJBZxMAKWUiBXjlVwLkcHLJPZy2gy+mg=="
+ spellcheck="false"
+ autocomplete="off"
+ >
+ <input type="hidden" class="js-site-search-type-field" name="type" >
+ <img src="https://github.githubassets.com/images/search-key-slash.svg" alt="" class="mr-2 header-search-key-slash">
+
+ <div class="Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container">
+
+<ul class="d-none js-jump-to-suggestions-template-container">
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 12 16" version="1.1" role="img"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+ <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 15 16" version="1.1" role="img"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z"/></svg>
+ <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M15.7 13.3l-3.81-3.83A5.93 5.93 0 0013 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 000-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z"/></svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+</ul>
+
+<ul class="d-none js-jump-to-no-results-template-container">
+ <li class="d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2">
+ <span class="text-gray">No suggested jump to results</span>
+ </li>
+</ul>
+
+<ul id="jump-to-results" role="listbox" class="p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container">
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 12 16" version="1.1" role="img"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+ <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 15 16" version="1.1" role="img"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z"/></svg>
+ <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M15.7 13.3l-3.81-3.83A5.93 5.93 0 0013 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 000-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z"/></svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 12 16" version="1.1" role="img"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+ <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 15 16" version="1.1" role="img"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z"/></svg>
+ <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M15.7 13.3l-3.81-3.83A5.93 5.93 0 0013 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 000-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z"/></svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+
+</ul>
+
+ </div>
+ </label>
+</form> </div>
+</div>
+
+ </div>
+
+ <a href="/login?return_to=%2Fapple%2Fcups%2Freleases"
+ class="HeaderMenu-link no-underline mr-3"
+ data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;client_id&quot;:null,&quot;originating_request_id&quot;:&quot;E0CB:22348:508D9B:74D7B0:5DFA43C4&quot;,&quot;originating_url&quot;:&quot;https://github.com/apple/cups/releases&quot;,&quot;referrer&quot;:null,&quot;user_id&quot;:null}}" data-hydro-click-hmac="e4e34255c8485d6915d1448a86ea9723c3b2e92e9576e71845af735870da8d70"
+ data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">
+ Sign&nbsp;in
+ </a>
+ <a href="/join?source=header-repo&amp;source_repo=apple%2Fcups"
+ class="HeaderMenu-link d-inline-block no-underline border border-gray-dark rounded-1 px-2 py-1"
+ data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;client_id&quot;:null,&quot;originating_request_id&quot;:&quot;E0CB:22348:508D9B:74D7B0:5DFA43C4&quot;,&quot;originating_url&quot;:&quot;https://github.com/apple/cups/releases&quot;,&quot;referrer&quot;:null,&quot;user_id&quot;:null}}" data-hydro-click-hmac="e4e34255c8485d6915d1448a86ea9723c3b2e92e9576e71845af735870da8d70"
+ data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">
+ Sign&nbsp;up
+ </a>
+ </div>
+ </div>
+ </div>
+</header>
+
+ </div>
+
+ <div id="start-of-content" class="show-on-focus"></div>
+
+
+ <div id="js-flash-container">
+
+</div>
+
+
+
+ <div class="application-main " data-commit-hovercards-enabled>
+ <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
+ <main >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class=" pagehead repohead readability-menu experiment-repo-nav pt-0 pt-lg-4 ">
+ <div class="repohead-details-container clearfix container-lg p-responsive d-none d-lg-block">
+
+ <ul class="pagehead-actions">
+
+
+
+
+ <li>
+
+ <a class="tooltipped tooltipped-s btn btn-sm btn-with-count" aria-label="You must be signed in to watch a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;client_id&quot;:null,&quot;originating_request_id&quot;:&quot;E0CB:22348:508D9B:74D7B0:5DFA43C4&quot;,&quot;originating_url&quot;:&quot;https://github.com/apple/cups/releases&quot;,&quot;referrer&quot;:null,&quot;user_id&quot;:null}}" data-hydro-click-hmac="55e61ce807520942724d37d48d3d19c3da4baeecb2ec89bce4f6da0ceb91a62d" href="/login?return_to=%2Fapple%2Fcups">
+ <svg class="octicon octicon-eye v-align-text-bottom" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg>
+ Watch
+</a> <a class="social-count" href="/apple/cups/watchers"
+ aria-label="88 users are watching this repository">
+ 88
+ </a>
+
+ </li>
+
+ <li>
+ <a class="btn btn-sm btn-with-count tooltipped tooltipped-s" aria-label="You must be signed in to star a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:44137852,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;client_id&quot;:null,&quot;originating_request_id&quot;:&quot;E0CB:22348:508D9B:74D7B0:5DFA43C4&quot;,&quot;originating_url&quot;:&quot;https://github.com/apple/cups/releases&quot;,&quot;referrer&quot;:null,&quot;user_id&quot;:null}}" data-hydro-click-hmac="f9704a715be46a567479973573477a583501a1976f99deb0ccdd0b1ed3b74e5b" href="/login?return_to=%2Fapple%2Fcups">
+ <svg aria-label="star" height="16" class="octicon octicon-star v-align-text-bottom" viewBox="0 0 14 16" version="1.1" width="14" role="img"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z"/></svg>
+
+ Star
+</a>
+ <a class="social-count js-social-count" href="/apple/cups/stargazers"
+ aria-label="883 users starred this repository">
+ 883
+ </a>
+
+ </li>
+
+ <li>
+ <a class="btn btn-sm btn-with-count tooltipped tooltipped-s" aria-label="You must be signed in to fork a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:44137852,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;client_id&quot;:null,&quot;originating_request_id&quot;:&quot;E0CB:22348:508D9B:74D7B0:5DFA43C4&quot;,&quot;originating_url&quot;:&quot;https://github.com/apple/cups/releases&quot;,&quot;referrer&quot;:null,&quot;user_id&quot;:null}}" data-hydro-click-hmac="b527b2fea0cd8e94870047972acd87358cf6a735da254b00eb05c15d676f7503" href="/login?return_to=%2Fapple%2Fcups">
+ <svg class="octicon octicon-repo-forked v-align-text-bottom" viewBox="0 0 10 16" version="1.1" width="10" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 00-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 002 1a1.993 1.993 0 00-1 3.72V6.5l3 3v1.78A1.993 1.993 0 005 15a1.993 1.993 0 001-3.72V9.5l3-3V4.72A1.993 1.993 0 008 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
+ Fork
+</a>
+ <a href="/apple/cups/network/members" class="social-count"
+ aria-label="260 users forked this repository">
+ 260
+ </a>
+ </li>
+</ul>
+
+ <h1 class="public ">
+ <svg class="octicon octicon-repo" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+ <span class="author" itemprop="author"><a class="url fn" rel="author" data-hovercard-type="organization" data-hovercard-url="/orgs/apple/hovercard" href="/apple">apple</a></span><!--
+--><span class="path-divider">/</span><!--
+--><strong itemprop="name"><a data-pjax="#js-repo-pjax-container" href="/apple/cups">cups</a></strong>
+
+
+</h1>
+
+ </div>
+
+<nav class="hx_reponav reponav js-repo-nav js-sidenav-container-pjax container-lg p-responsive d-none d-lg-block"
+ itemscope
+ itemtype="http://schema.org/BreadcrumbList"
+ aria-label="Repository"
+ data-pjax="#js-repo-pjax-container">
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a class="js-selected-navigation-item selected reponav-item" itemprop="url" data-hotkey="g c" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /apple/cups" href="/apple/cups">
+ <div class="d-inline"><svg class="octicon octicon-code" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg></div>
+ <span itemprop="name">Code</span>
+ <meta itemprop="position" content="1">
+</a> </span>
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a itemprop="url" data-hotkey="g i" class="js-selected-navigation-item reponav-item" data-selected-links="repo_issues repo_labels repo_milestones /apple/cups/issues" href="/apple/cups/issues">
+ <div class="d-inline"><svg class="octicon octicon-issue-opened" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 011.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/></svg></div>
+ <span itemprop="name">Issues</span>
+ <span class="Counter">10</span>
+ <meta itemprop="position" content="2">
+</a> </span>
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a data-hotkey="g p" data-skip-pjax="true" itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_pulls checks /apple/cups/pulls" href="/apple/cups/pulls">
+ <div class="d-inline"><svg class="octicon octicon-git-pull-request" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0010 15a1.993 1.993 0 001-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 00-1 3.72v6.56A1.993 1.993 0 002 15a1.993 1.993 0 001-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg></div>
+ <span itemprop="name">Pull requests</span>
+ <span class="Counter">6</span>
+ <meta itemprop="position" content="3">
+</a> </span>
+
+
+ <a data-hotkey="g b" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /apple/cups/projects" href="/apple/cups/projects">
+ <div class="d-inline"><svg class="octicon octicon-project" viewBox="0 0 15 16" version="1.1" width="15" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z"/></svg></div>
+ Projects
+ <span class="Counter" >0</span>
+</a>
+
+ <a class="js-selected-navigation-item reponav-item" data-hotkey="g w" data-selected-links="repo_wiki /apple/cups/wiki" href="/apple/cups/wiki">
+ <div class="d-inline"><svg class="octicon octicon-book" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3 5h4v1H3V5zm0 3h4V7H3v1zm0 2h4V9H3v1zm11-5h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm2-6v9c0 .55-.45 1-1 1H9.5l-1 1-1-1H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h5.5l1 1 1-1H15c.55 0 1 .45 1 1zm-8 .5L7.5 3H2v9h6V3.5zm7-.5H9.5l-.5.5V12h6V3z"/></svg></div>
+ Wiki
+</a>
+ <a data-skip-pjax="true" class="js-selected-navigation-item reponav-item" data-selected-links="security alerts policy code_scanning /apple/cups/security/advisories" href="/apple/cups/security/advisories">
+ <div class="d-inline"><svg class="octicon octicon-shield" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 2l7-2 7 2v6.02C14 12.69 8.69 16 7 16c-1.69 0-7-3.31-7-7.98V2zm1 .75L7 1l6 1.75v5.268C13 12.104 8.449 15 7 15c-1.449 0-6-2.896-6-6.982V2.75zm1 .75L7 2v12c-1.207 0-5-2.482-5-5.985V3.5z"/></svg></div>
+ Security
+</a>
+ <a class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors dependency_graph pulse people /apple/cups/pulse" href="/apple/cups/pulse">
+ <div class="d-inline"><svg class="octicon octicon-graph" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"/></svg></div>
+ Insights
+</a>
+
+</nav>
+
+ <div class="reponav-wrapper reponav-small d-lg-none">
+ <nav class="reponav js-reponav text-center no-wrap"
+ itemscope
+ itemtype="http://schema.org/BreadcrumbList">
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a class="js-selected-navigation-item selected reponav-item" itemprop="url" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /apple/cups" href="/apple/cups">
+ <span itemprop="name">Code</span>
+ <meta itemprop="position" content="1">
+</a> </span>
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_issues repo_labels repo_milestones /apple/cups/issues" href="/apple/cups/issues">
+ <span itemprop="name">Issues</span>
+ <span class="Counter">10</span>
+ <meta itemprop="position" content="2">
+</a> </span>
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_pulls checks /apple/cups/pulls" href="/apple/cups/pulls">
+ <span itemprop="name">Pull requests</span>
+ <span class="Counter">6</span>
+ <meta itemprop="position" content="3">
+</a> </span>
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /apple/cups/projects" href="/apple/cups/projects">
+ <span itemprop="name">Projects</span>
+ <span class="Counter">0</span>
+ <meta itemprop="position" content="4">
+</a> </span>
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_wiki /apple/cups/wiki" href="/apple/cups/wiki">
+ <span itemprop="name">Wiki</span>
+ <meta itemprop="position" content="5">
+</a> </span>
+
+ <a itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="security alerts policy code_scanning /apple/cups/security/advisories" href="/apple/cups/security/advisories">
+ <span itemprop="name">Security</span>
+ <meta itemprop="position" content="6">
+</a>
+ <a class="js-selected-navigation-item reponav-item" data-selected-links="pulse /apple/cups/pulse" href="/apple/cups/pulse">
+ Pulse
+</a>
+
+ </nav>
+</div>
+
+
+ </div>
+<div class="container-lg clearfix new-discussion-timeline experiment-repo-nav p-responsive">
+ <div class="repository-content ">
+
+
+
+ <div class="signup-prompt-bg rounded-1 hide-sm">
+ <div class="signup-prompt p-4 text-center mb-4 rounded-1">
+ <div class="position-relative">
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form action="/prompt_dismissals/signup" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="authenticity_token" value="kDaX/sF3AoSg/3mGTg7Nw4EgGoxBCvoq8adl0rdW8QfpUQnmpOeq3ExSYkQYQl6UfiRGGQlay9HzoVVnV9pjaQ==" />
+ <button type="submit" class="position-absolute top-0 right-0 btn-link link-gray" data-ga-click="(Logged out) Sign up prompt, clicked Dismiss, text:dismiss">
+ Dismiss
+ </button>
+</form> <h3 class="pt-2">Be notified of new releases</h3>
+ <p class="col-8 mx-auto">Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 40 million developers.</p>
+ <a class="btn btn-primary" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;releases signup prompt&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;client_id&quot;:null,&quot;originating_request_id&quot;:&quot;E0CB:22348:508D9B:74D7B0:5DFA43C4&quot;,&quot;originating_url&quot;:&quot;https://github.com/apple/cups/releases&quot;,&quot;referrer&quot;:null,&quot;user_id&quot;:null}}" data-hydro-click-hmac="c2a9f870ddf9968cc69782464c68391f9e6ae7646501d13bcfcce68458bf82e5" data-ga-click="(Logged out) Sign up prompt, clicked Sign up, text:sign-up" href="/join?source=prompt-releases">Sign up</a>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="subnav">
+ <div class="d-flex flex-md-row flex-justify-between flex-md-items-center">
+ <div class="subnav-links float-left" role="navigation">
+ <a class="js-selected-navigation-item selected subnav-item" aria-current="page" data-selected-links="repo_releases /apple/cups/releases" href="/apple/cups/releases">Releases</a>
+ <a class="js-selected-navigation-item subnav-item" data-selected-links="repo_tags /apple/cups/tags" href="/apple/cups/tags">Tags</a>
+ </div>
+</div>
+
+
+ </div>
+
+ <div class="position-relative border-top clearfix">
+
+
+
+ <div class="release-entry">
+
+<div class="release pt-2 pt-md-0 pb-3 pb-md-0 clearfix label-latest">
+ <div class="d-none d-md-block flex-wrap flex-items-center col-12 col-md-3 col-lg-2 px-md-3 pb-1 pb-md-4 pt-md-4 float-left text-md-right v-align-top">
+ <div class="flex-auto flex-self-start">
+ <span class="flex-shrink-0 Label Label--outline mb-md-2 mr-2 mr-md-0 Label--outline-green">
+ <a class="border-0 Label--outline-green" href="/apple/cups/releases/latest">Latest release</a>
+ </span>
+
+
+ </div>
+
+ <ul class="d-none d-md-block mt-2 list-style-none">
+ <li class="d-block mb-1">
+ <a href="/apple/cups/tree/v2.3.1" class="muted-link css-truncate" title="v2.3.1">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3.1</span>
+ </a>
+ </li>
+
+ <li class="d-block mb-1">
+ <a href="/apple/cups/commit/ed181c24e4b130d2981785d44488bef8cfda5f6d" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>ed181c2</code>
+ </a>
+ </li>
+
+ </ul>
+
+
+ </div><!-- /.meta -->
+
+ <div class="col-12 col-md-9 col-lg-10 px-md-3 py-md-4 release-main-section commit open float-left">
+ <div class="release-header">
+ <div class="d-flex flex-items-start">
+ <div class="f1 flex-auto min-width-0 text-normal">
+ <a href="/apple/cups/releases/tag/v2.3.1">v2.3.1</a>
+ </div>
+
+ <span class="d-md-none flex-shrink-0 ml-2 mt-2 mt-md-0 Label Label--outline Label--outline-green">
+ <a class="border-0 Label--outline-green" href="/apple/cups/releases/latest">Latest release</a>
+ </span>
+
+ </div>
+ <ul class="d-flex d-md-none flex-items-center mb-1 list-style-none">
+ <li class="d-block mr-2">
+ <a href="/apple/cups/tree/v2.3.1" class="muted-link css-truncate" title="v2.3.1">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3.1</span>
+ </a>
+ </li>
+
+ <li class="d-block mr-2 flex-auto">
+ <a href="/apple/cups/commit/ed181c24e4b130d2981785d44488bef8cfda5f6d" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>ed181c2</code>
+ </a>
+ </li>
+
+
+
+
+ </ul>
+
+<p class="f5 text-gray mt-2 mt-md-1 mb-2 mb-md-4">
+ <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet"><img class="avatar" src="https://avatars3.githubusercontent.com/u/488103?s=40&amp;v=4" width="20" height="20" alt="@michaelrsweet" /></a>
+ <a class="text-bold text-gray" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet">michaelrsweet</a>
+ released this
+ <relative-time datetime="2019-12-13T14:51:11Z" class="no-wrap">Dec 13, 2019</relative-time>
+</p>
+ </div>
+
+
+
+ <div class="markdown-body">
+ <p>CUPS 2.3.1 is a general bug fix release, including a fix for CVE-2019-2228. Changes include:</p>
+<ul>
+<li>Documentation updates (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="504683457" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5661" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5661/hovercard" href="https://github.com/apple/cups/issues/5661">#5661</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="514973853" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5674" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5674/hovercard" href="https://github.com/apple/cups/issues/5674">#5674</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="520470189" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5682" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5682/hovercard" href="https://github.com/apple/cups/issues/5682">#5682</a>)</li>
+<li>CVE-2019-2228: The <code>ippSetValuetag</code> function did not validate the default<br>
+language value.</li>
+<li>Fixed a crash bug in the web interface (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="473925613" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5621" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5621/hovercard" href="https://github.com/apple/cups/pull/5621">#5621</a>)</li>
+<li>The PPD cache code now looks up page sizes using their dimensions<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="479877680" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5633" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5633/hovercard" href="https://github.com/apple/cups/issues/5633">#5633</a>)</li>
+<li>PPD files containing "custom" option keywords did not work (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="486024591" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5639" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5639/hovercard" href="https://github.com/apple/cups/issues/5639">#5639</a>)</li>
+<li>Added a workaround for the scheduler's systemd support (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="486034405" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5640" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5640/hovercard" href="https://github.com/apple/cups/issues/5640">#5640</a>)</li>
+<li>On Windows, TLS certificates generated on February 29 would likely fail<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="487215972" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5643" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5643/hovercard" href="https://github.com/apple/cups/pull/5643">#5643</a>)</li>
+<li>Added a DigestOptions directive for the <code>client.conf</code> file to control whether<br>
+MD5-based Digest authentication is allowed (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="489725887" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5647" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5647/hovercard" href="https://github.com/apple/cups/issues/5647">#5647</a>)</li>
+<li>Fixed a bug in the handling of printer resource files (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="495269347" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5652" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5652/hovercard" href="https://github.com/apple/cups/issues/5652">#5652</a>)</li>
+<li>The libusb-based USB backend now reports an error when the distribution<br>
+permissions are wrong (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="500594517" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5658" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5658/hovercard" href="https://github.com/apple/cups/issues/5658">#5658</a>)</li>
+<li>Added paint can labels to Dymo driver (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="504754248" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5662" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5662/hovercard" href="https://github.com/apple/cups/issues/5662">#5662</a>)</li>
+<li>The <code>ippeveprinter</code> program now supports authentication (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="505829095" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5665" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5665/hovercard" href="https://github.com/apple/cups/issues/5665">#5665</a>)</li>
+<li>The <code>ippeveprinter</code> program now advertises DNS-SD services on the correct<br>
+interfaces, and provides a way to turn them off (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="505830047" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5666" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5666/hovercard" href="https://github.com/apple/cups/issues/5666">#5666</a>)</li>
+<li>The <code>--with-dbusdir</code> option was ignored by the configure script (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="509611838" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5671" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5671/hovercard" href="https://github.com/apple/cups/issues/5671">#5671</a>)</li>
+<li>Sandboxed applications were not able to get the default printer (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="519179600" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5676" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5676/hovercard" href="https://github.com/apple/cups/issues/5676">#5676</a>)</li>
+<li>Log file access controls were not preserved by <code>cupsctl</code> (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="519230147" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5677" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5677/hovercard" href="https://github.com/apple/cups/pull/5677">#5677</a>)</li>
+<li>Default printers set with <code>lpoptions</code> did not work in all cases (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="520415966" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5681" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5681/hovercard" href="https://github.com/apple/cups/issues/5681">#5681</a>,<br>
+Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="522065376" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5683" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5683/hovercard" href="https://github.com/apple/cups/issues/5683">#5683</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="523200142" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5684" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5684/hovercard" href="https://github.com/apple/cups/issues/5684">#5684</a>)</li>
+<li>Fixed an error in the jobs web interface template (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="529989288" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5694" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5694/hovercard" href="https://github.com/apple/cups/pull/5694">#5694</a>)</li>
+<li>Fixed an off-by-one error in <code>ippEnumString</code> (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="532862341" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5695" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5695/hovercard" href="https://github.com/apple/cups/pull/5695">#5695</a>)</li>
+<li>Fixed some new compiler warnings (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="534545419" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5700" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5700/hovercard" href="https://github.com/apple/cups/pull/5700">#5700</a>)</li>
+<li>Fixed a few issues with the Apple Raster support (rdar://55301114)</li>
+<li>The IPP backend did not detect all cases where a job should be retried using<br>
+a raster format (rdar://56021091)</li>
+<li>Fixed spelling of "fold-accordion".</li>
+<li>Fixed the default common name for TLS certificates used by <code>ippeveprinter</code>.</li>
+<li>Fixed the option names used for IPP Everywhere finishing options.</li>
+<li>Added support for the second roll of the DYMO Twin/DUO label printers.</li>
+</ul>
+<p>Enjoy!</p>
+ </div>
+
+
+ <details
+ class="details-reset Details-element border-top pt-3 mt-4 mb-2 mb-md-4"
+ open
+
+ >
+ <summary>
+ <div class="d-flex flex-items-center">
+ <span class="mr-2 Details-content--closed"><svg class="octicon octicon-triangle-right" viewBox="0 0 6 16" version="1.1" width="6" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 14l6-6-6-6v12z"/></svg></span>
+ <span class="mr-2 Details-content--open"><svg class="octicon octicon-triangle-down" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 5l6 6 6-6H0z"/></svg></span>
+ <span class="text-bold">Assets</span>
+ <span class="ml-1 Counter">4</span>
+ </div>
+ </summary>
+ <div class="Box Box--condensed mt-3">
+ <div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3.1/cups-2.3.1-source.tar.gz" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3.1-source.tar.gz</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">7.76 MB</small>
+ </div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3.1/cups-2.3.1-source.tar.gz.sig" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3.1-source.tar.gz.sig</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">585 Bytes</small>
+ </div>
+
+
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3.1.zip" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (zip)
+ </a>
+ </div>
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3.1.tar.gz" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (tar.gz)
+ </a>
+ </div>
+ </div>
+ </div>
+ </details>
+
+
+ </div><!-- /.release-body -->
+</div><!-- /.release -->
+
+ </div>
+
+
+
+ <div class="release-entry">
+
+<div class="release pt-2 pt-md-0 pb-3 pb-md-0 clearfix label-">
+ <div class="d-none d-md-block flex-wrap flex-items-center col-12 col-md-3 col-lg-2 px-md-3 pb-1 pb-md-4 pt-md-4 float-left text-md-right v-align-top">
+ <div class="flex-auto flex-self-start">
+
+
+ </div>
+
+ <ul class="d-none d-md-block mt-2 list-style-none">
+ <li class="d-block mb-1">
+ <a href="/apple/cups/tree/v2.2.13" class="muted-link css-truncate" title="v2.2.13">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.2.13</span>
+ </a>
+ </li>
+
+ <li class="d-block mb-1">
+ <a href="/apple/cups/commit/0ad6ac55da2686c6fa24b05bde5e9036fd4db5d1" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>0ad6ac5</code>
+ </a>
+ </li>
+
+ </ul>
+
+
+ </div><!-- /.meta -->
+
+ <div class="col-12 col-md-9 col-lg-10 px-md-3 py-md-4 release-main-section commit open float-left">
+ <div class="release-header">
+ <div class="d-flex flex-items-start">
+ <div class="f1 flex-auto min-width-0 text-normal">
+ <a href="/apple/cups/releases/tag/v2.2.13">v2.2.13</a>
+ </div>
+
+
+ </div>
+ <ul class="d-flex d-md-none flex-items-center mb-1 list-style-none">
+ <li class="d-block mr-2">
+ <a href="/apple/cups/tree/v2.2.13" class="muted-link css-truncate" title="v2.2.13">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.2.13</span>
+ </a>
+ </li>
+
+ <li class="d-block mr-2 flex-auto">
+ <a href="/apple/cups/commit/0ad6ac55da2686c6fa24b05bde5e9036fd4db5d1" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>0ad6ac5</code>
+ </a>
+ </li>
+
+
+
+
+ </ul>
+
+<p class="f5 text-gray mt-2 mt-md-1 mb-2 mb-md-4">
+ <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet"><img class="avatar" src="https://avatars3.githubusercontent.com/u/488103?s=40&amp;v=4" width="20" height="20" alt="@michaelrsweet" /></a>
+ <a class="text-bold text-gray" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet">michaelrsweet</a>
+ released this
+ <relative-time datetime="2019-12-13T14:49:55Z" class="no-wrap">Dec 13, 2019</relative-time>
+ &middot;
+ <a href="/apple/cups/compare/v2.2.13...master">
+ 793 commits</a>
+ to master
+ since this release
+</p>
+ </div>
+
+
+
+ <div class="markdown-body">
+ <p>CUPS 2.2.13 is the last general bug fix release in the 2.2.x series and includes<br>
+a fix for CVE-2019-2228. Changes include:</p>
+<ul>
+<li>CVE-2019-2228: The <code>ippSetValuetag</code> function did not validate the default<br>
+language value.</li>
+<li>Added a workaround for the scheduler's systemd support (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="486034405" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5640" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5640/hovercard" href="https://github.com/apple/cups/issues/5640">#5640</a>)</li>
+<li>Fixed spelling of "fold-accordion".</li>
+<li>Fixed the default common name for TLS certificates used by <code>ippserver</code>.</li>
+<li>The libusb-based USB backend now reports an error when the distribution<br>
+permissions are wrong (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="500594517" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5658" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5658/hovercard" href="https://github.com/apple/cups/issues/5658">#5658</a>)</li>
+<li>Default printers set with <code>lpoptions</code> did not work in all cases (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="520415966" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5681" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5681/hovercard" href="https://github.com/apple/cups/issues/5681">#5681</a>,<br>
+Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="522065376" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5683" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5683/hovercard" href="https://github.com/apple/cups/issues/5683">#5683</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="523200142" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5684" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5684/hovercard" href="https://github.com/apple/cups/issues/5684">#5684</a>)</li>
+<li>Fixed an off-by-one error in <code>ippEnumString</code> (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="532862341" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5695" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5695/hovercard" href="https://github.com/apple/cups/pull/5695">#5695</a>)</li>
+<li>Fixed some new compiler warnings (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="534545419" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5700" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5700/hovercard" href="https://github.com/apple/cups/pull/5700">#5700</a>)</li>
+<li>Fixed a few issues with the Apple Raster support (rdar://55301114)</li>
+<li>The IPP backend did not detect all cases where a job should be retried using<br>
+a raster format (rdar://56021091)</li>
+</ul>
+<p>Enjoy!</p>
+ </div>
+
+
+ <details
+ class="details-reset Details-element border-top pt-3 mt-4 mb-2 mb-md-4"
+
+
+ >
+ <summary>
+ <div class="d-flex flex-items-center">
+ <span class="mr-2 Details-content--closed"><svg class="octicon octicon-triangle-right" viewBox="0 0 6 16" version="1.1" width="6" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 14l6-6-6-6v12z"/></svg></span>
+ <span class="mr-2 Details-content--open"><svg class="octicon octicon-triangle-down" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 5l6 6 6-6H0z"/></svg></span>
+ <span class="text-bold">Assets</span>
+ <span class="ml-1 Counter">4</span>
+ </div>
+ </summary>
+ <div class="Box Box--condensed mt-3">
+ <div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.2.13/cups-2.2.13-source.tar.gz" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.2.13-source.tar.gz</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">9.93 MB</small>
+ </div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.2.13/cups-2.2.13-source.tar.gz.sig" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.2.13-source.tar.gz.sig</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">585 Bytes</small>
+ </div>
+
+
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.2.13.zip" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (zip)
+ </a>
+ </div>
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.2.13.tar.gz" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (tar.gz)
+ </a>
+ </div>
+ </div>
+ </div>
+ </details>
+
+
+ </div><!-- /.release-body -->
+</div><!-- /.release -->
+
+ </div>
+
+
+
+ <div class="release-entry">
+
+<div class="release pt-2 pt-md-0 pb-3 pb-md-0 clearfix label-">
+ <div class="d-none d-md-block flex-wrap flex-items-center col-12 col-md-3 col-lg-2 px-md-3 pb-1 pb-md-4 pt-md-4 float-left text-md-right v-align-top">
+ <div class="flex-auto flex-self-start">
+
+
+ </div>
+
+ <ul class="d-none d-md-block mt-2 list-style-none">
+ <li class="d-block mb-1">
+ <a href="/apple/cups/tree/v2.3.0" class="muted-link css-truncate" title="v2.3.0">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3.0</span>
+ </a>
+ </li>
+
+ <li class="d-block mb-1">
+ <a href="/apple/cups/commit/ee6be9cd7e863abf36b9b131fc379d967414aa2e" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>ee6be9c</code>
+ </a>
+ </li>
+
+ </ul>
+
+
+ </div><!-- /.meta -->
+
+ <div class="col-12 col-md-9 col-lg-10 px-md-3 py-md-4 release-main-section commit open float-left">
+ <div class="release-header">
+ <div class="d-flex flex-items-start">
+ <div class="f1 flex-auto min-width-0 text-normal">
+ <a href="/apple/cups/releases/tag/v2.3.0">v2.3.0</a>
+ </div>
+
+
+ </div>
+ <ul class="d-flex d-md-none flex-items-center mb-1 list-style-none">
+ <li class="d-block mr-2">
+ <a href="/apple/cups/tree/v2.3.0" class="muted-link css-truncate" title="v2.3.0">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3.0</span>
+ </a>
+ </li>
+
+ <li class="d-block mr-2 flex-auto">
+ <a href="/apple/cups/commit/ee6be9cd7e863abf36b9b131fc379d967414aa2e" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>ee6be9c</code>
+ </a>
+ </li>
+
+
+
+
+ </ul>
+
+<p class="f5 text-gray mt-2 mt-md-1 mb-2 mb-md-4">
+ <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet"><img class="avatar" src="https://avatars3.githubusercontent.com/u/488103?s=40&amp;v=4" width="20" height="20" alt="@michaelrsweet" /></a>
+ <a class="text-bold text-gray" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet">michaelrsweet</a>
+ released this
+ <relative-time datetime="2019-08-23T18:17:21Z" class="no-wrap">Aug 23, 2019</relative-time>
+ &middot;
+ <a href="/apple/cups/compare/v2.3.0...master">
+ 65 commits</a>
+ to master
+ since this release
+</p>
+ </div>
+
+
+
+ <div class="markdown-body">
+ <p>CUPS 2.3.0 is now available for download, which adopts the new CUPS license, adds support for IPP presets and finishing templates, fixes a number of bugs and "polish" issues, and includes the new ippeveprinter utility. Changes include:</p>
+<ul>
+<li>CVE-2019-8696 and CVE-2019-8675: Fixed SNMP buffer overflows (rdar://51685251)</li>
+<li>Added a GPL2/LGPL2 exception to the new CUPS license terms.</li>
+<li>Documentation updates (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="459594644" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5604" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5604/hovercard" href="https://github.com/apple/cups/issues/5604">#5604</a>)</li>
+<li>Localization updates (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="483641898" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5637" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5637/hovercard" href="https://github.com/apple/cups/pull/5637">#5637</a>)</li>
+<li>Fixed a bug in the scheduler job cleanup code (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="450279216" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5588" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5588/hovercard" href="https://github.com/apple/cups/pull/5588">#5588</a>)</li>
+<li>Fixed builds when there is no TLS library (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="451578186" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5590" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5590/hovercard" href="https://github.com/apple/cups/pull/5590">#5590</a>)</li>
+<li>Eliminated some new GCC compiler warnings (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="453328747" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5591" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5591/hovercard" href="https://github.com/apple/cups/pull/5591">#5591</a>)</li>
+<li>Removed dead code from the scheduler (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="453329871" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5593" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5593/hovercard" href="https://github.com/apple/cups/pull/5593">#5593</a>)</li>
+<li>"make" failed with GZIP options (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="455017934" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5595" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5595/hovercard" href="https://github.com/apple/cups/issues/5595">#5595</a>)</li>
+<li>Fixed potential excess logging from the scheduler when removing job files<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="456284406" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5597" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5597/hovercard" href="https://github.com/apple/cups/issues/5597">#5597</a>)</li>
+<li>Fixed a NULL pointer dereference bug in <code>httpGetSubField2</code> (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="456534137" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5598" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5598/hovercard" href="https://github.com/apple/cups/issues/5598">#5598</a>)</li>
+<li>Added FIPS-140 workarounds for GNU TLS (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="458015929" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5601" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5601/hovercard" href="https://github.com/apple/cups/issues/5601">#5601</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="474117231" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5622" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5622/hovercard" href="https://github.com/apple/cups/pull/5622">#5622</a>)</li>
+<li>The scheduler no longer provides a default value for the description<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="459074733" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5603" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5603/hovercard" href="https://github.com/apple/cups/issues/5603">#5603</a>)</li>
+<li>The scheduler now logs jobs held for authentication using the error level so<br>
+it is clear what happened (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="459594644" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5604" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5604/hovercard" href="https://github.com/apple/cups/issues/5604">#5604</a>)</li>
+<li>The <code>lpadmin</code> command did not always update the PPD file for changes to the<br>
+<code>cupsIPPSupplies</code> and <code>cupsSNMPSupplies</code> keywords (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="465727195" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5610" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5610/hovercard" href="https://github.com/apple/cups/pull/5610">#5610</a>)</li>
+<li>The scheduler now uses both the group's membership list as well as the<br>
+various OS-specific membership functions to determine whether a user belongs<br>
+to a named group (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="468463678" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5613" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5613/hovercard" href="https://github.com/apple/cups/pull/5613">#5613</a>)</li>
+<li>Added USB quirks rule for HP LaserJet 1015 (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="470659313" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5617" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5617/hovercard" href="https://github.com/apple/cups/issues/5617">#5617</a>)</li>
+<li>Fixed some PPD parser issues (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="474314074" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5623" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5623/hovercard" href="https://github.com/apple/cups/pull/5623">#5623</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="474317092" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5624" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5624/hovercard" href="https://github.com/apple/cups/pull/5624">#5624</a>)</li>
+<li>The IPP parser no longer allows invalid member attributes in collections<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="477979886" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5630" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5630/hovercard" href="https://github.com/apple/cups/issues/5630">#5630</a>)</li>
+<li>The configure script now treats the "wheel" group as a potential system<br>
+group (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="484535130" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5638" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5638/hovercard" href="https://github.com/apple/cups/pull/5638">#5638</a>)</li>
+<li>Fixed a USB printing issue on macOS (rdar://31433931)</li>
+<li>Fixed IPP buffer overflow (rdar://50035411)</li>
+<li>Fixed memory disclosure issue in the scheduler (rdar://51373853)</li>
+<li>Fixed DoS issues in the scheduler (rdar://51373929)</li>
+<li>Fixed an issue with unsupported "sides" values in the IPP backend<br>
+(rdar://51775322)</li>
+<li>The scheduler would restart continuously when idle and printers were not<br>
+shared (rdar://52561199)</li>
+<li>Fixed an issue with <code>EXPECT !name WITH-VALUE ...</code> tests.</li>
+<li>Fixed a command ordering issue in the Zebra ZPL driver.</li>
+<li>Fixed a memory leak in <code>ppdOpen</code>.</li>
+</ul>
+<p>Enjoy!</p>
+ </div>
+
+
+ <details
+ class="details-reset Details-element border-top pt-3 mt-4 mb-2 mb-md-4"
+
+
+ >
+ <summary>
+ <div class="d-flex flex-items-center">
+ <span class="mr-2 Details-content--closed"><svg class="octicon octicon-triangle-right" viewBox="0 0 6 16" version="1.1" width="6" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 14l6-6-6-6v12z"/></svg></span>
+ <span class="mr-2 Details-content--open"><svg class="octicon octicon-triangle-down" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 5l6 6 6-6H0z"/></svg></span>
+ <span class="text-bold">Assets</span>
+ <span class="ml-1 Counter">4</span>
+ </div>
+ </summary>
+ <div class="Box Box--condensed mt-3">
+ <div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3.0/cups-2.3.0-source.tar.gz" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3.0-source.tar.gz</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">7.75 MB</small>
+ </div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3.0/cups-2.3.0-source.tar.gz.sig" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3.0-source.tar.gz.sig</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">585 Bytes</small>
+ </div>
+
+
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3.0.zip" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (zip)
+ </a>
+ </div>
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3.0.tar.gz" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (tar.gz)
+ </a>
+ </div>
+ </div>
+ </div>
+ </details>
+
+
+ </div><!-- /.release-body -->
+</div><!-- /.release -->
+
+ </div>
+
+
+
+ <div class="release-entry">
+
+<div class="release pt-2 pt-md-0 pb-3 pb-md-0 clearfix label-">
+ <div class="d-none d-md-block flex-wrap flex-items-center col-12 col-md-3 col-lg-2 px-md-3 pb-1 pb-md-4 pt-md-4 float-left text-md-right v-align-top">
+ <div class="flex-auto flex-self-start">
+
+
+ </div>
+
+ <ul class="d-none d-md-block mt-2 list-style-none">
+ <li class="d-block mb-1">
+ <a href="/apple/cups/tree/v2.2.12" class="muted-link css-truncate" title="v2.2.12">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.2.12</span>
+ </a>
+ </li>
+
+ <li class="d-block mb-1">
+ <a href="/apple/cups/commit/c8cb6400e317633f66cdc87884915d54710b53a0" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>c8cb640</code>
+ </a>
+ </li>
+
+ </ul>
+
+
+ </div><!-- /.meta -->
+
+ <div class="col-12 col-md-9 col-lg-10 px-md-3 py-md-4 release-main-section commit open float-left">
+ <div class="release-header">
+ <div class="d-flex flex-items-start">
+ <div class="f1 flex-auto min-width-0 text-normal">
+ <a href="/apple/cups/releases/tag/v2.2.12">v2.2.12</a>
+ </div>
+
+
+ </div>
+ <ul class="d-flex d-md-none flex-items-center mb-1 list-style-none">
+ <li class="d-block mr-2">
+ <a href="/apple/cups/tree/v2.2.12" class="muted-link css-truncate" title="v2.2.12">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.2.12</span>
+ </a>
+ </li>
+
+ <li class="d-block mr-2 flex-auto">
+ <a href="/apple/cups/commit/c8cb6400e317633f66cdc87884915d54710b53a0" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>c8cb640</code>
+ </a>
+ </li>
+
+
+
+
+ </ul>
+
+<p class="f5 text-gray mt-2 mt-md-1 mb-2 mb-md-4">
+ <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet"><img class="avatar" src="https://avatars3.githubusercontent.com/u/488103?s=40&amp;v=4" width="20" height="20" alt="@michaelrsweet" /></a>
+ <a class="text-bold text-gray" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet">michaelrsweet</a>
+ released this
+ <relative-time datetime="2019-08-15T22:52:44Z" class="no-wrap">Aug 15, 2019</relative-time>
+ &middot;
+ <a href="/apple/cups/compare/v2.2.12...master">
+ 793 commits</a>
+ to master
+ since this release
+</p>
+ </div>
+
+
+
+ <div class="markdown-body">
+ <p>CUPS 2.2.12 is now available and includes security, compatibility, and general bug fixes. Changes include:</p>
+<ul>
+<li>CVE-2019-8696 and CVE-2019-8675: Fixed SNMP buffer overflows (rdar://51685251)</li>
+<li>The <code>cupsctl</code> command now prevents setting "cups-files.conf" directives<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="413829254" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5530" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5530/hovercard" href="https://github.com/apple/cups/issues/5530">#5530</a>)</li>
+<li>Updated the systemd service file for cupsd (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="426479041" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5551" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5551/hovercard" href="https://github.com/apple/cups/pull/5551">#5551</a>)</li>
+<li>The <code>cupsCheckDestSupported</code> function did not check octetString values<br>
+correctly (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="429820862" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5557" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5557/hovercard" href="https://github.com/apple/cups/pull/5557">#5557</a>)</li>
+<li>The scheduler did not encode octetString values like "job-password" correctly<br>
+for the print filters (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="429827127" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5558" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5558/hovercard" href="https://github.com/apple/cups/pull/5558">#5558</a>)</li>
+<li>Restored minimal support for the <code>Emulators</code> keyword in PPD files to allow<br>
+old Samsung printer drivers to continue to work (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="432214569" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5562" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5562/hovercard" href="https://github.com/apple/cups/issues/5562">#5562</a>)</li>
+<li>Timed out job submission now yields an error (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="437390564" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5570" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5570/hovercard" href="https://github.com/apple/cups/issues/5570">#5570</a>)</li>
+<li>The footer in the web interface covered some content on small displays<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="440365801" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5574" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5574/hovercard" href="https://github.com/apple/cups/issues/5574">#5574</a>)</li>
+<li>The libusb-based USB backend now enforces read limits, improving print speed<br>
+in many cases (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="445315055" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5583" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5583/hovercard" href="https://github.com/apple/cups/issues/5583">#5583</a>)</li>
+<li>Fixed some compatibility issues with old releases of CUPS (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="449361069" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5587" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5587/hovercard" href="https://github.com/apple/cups/issues/5587">#5587</a>)</li>
+<li>Fixed a bug in the scheduler job cleanup code (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="450279216" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5588" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5588/hovercard" href="https://github.com/apple/cups/pull/5588">#5588</a>)</li>
+<li>"make" failed with GZIP options (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="455017934" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5595" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5595/hovercard" href="https://github.com/apple/cups/issues/5595">#5595</a>)</li>
+<li>Added FIPS-140 workarounds for GNU TLS (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="458015929" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5601" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5601/hovercard" href="https://github.com/apple/cups/issues/5601">#5601</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="474117231" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5622" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5622/hovercard" href="https://github.com/apple/cups/pull/5622">#5622</a>)</li>
+<li>The scheduler no longer provides a default value for the description<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="459074733" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5603" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5603/hovercard" href="https://github.com/apple/cups/issues/5603">#5603</a>)</li>
+<li>The <code>lpadmin</code> command did not always update the PPD file for changes to the<br>
+<code>cupsIPPSupplies</code> and <code>cupsSNMPSupplies</code> keywords (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="465727195" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5610" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5610/hovercard" href="https://github.com/apple/cups/pull/5610">#5610</a>)</li>
+<li>The scheduler now uses both the group's membership list as well as the<br>
+various OS-specific membership functions to determine whether a user belongs<br>
+to a named group (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="468463678" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5613" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5613/hovercard" href="https://github.com/apple/cups/pull/5613">#5613</a>)</li>
+<li>Added USB quirks rule for HP LaserJet 1015 (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="470659313" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5617" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5617/hovercard" href="https://github.com/apple/cups/issues/5617">#5617</a>)</li>
+<li>Fixed some PPD parser issues (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="474314074" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5623" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5623/hovercard" href="https://github.com/apple/cups/pull/5623">#5623</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="474317092" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5624" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5624/hovercard" href="https://github.com/apple/cups/pull/5624">#5624</a>)</li>
+<li>The IPP parser no longer allows invalid member attributes in collections<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="477979886" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5630" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5630/hovercard" href="https://github.com/apple/cups/issues/5630">#5630</a>)</li>
+<li>Fixed IPP buffer overflow (rdar://50035411)</li>
+<li>Fixed memory disclosure issue in the scheduler (rdar://51373853)</li>
+<li>Fixed DoS issues in the scheduler (rdar://51373929)</li>
+<li>The scheduler would restart continuously when idle and printers were not<br>
+shared (rdar://52561199)</li>
+<li>Fixed a command ordering issue in the Zebra ZPL driver.</li>
+<li>Fixed a memory leak in <code>ppdOpen</code>.</li>
+</ul>
+<p>Enjoy!</p>
+ </div>
+
+
+ <details
+ class="details-reset Details-element border-top pt-3 mt-4 mb-2 mb-md-4"
+
+
+ >
+ <summary>
+ <div class="d-flex flex-items-center">
+ <span class="mr-2 Details-content--closed"><svg class="octicon octicon-triangle-right" viewBox="0 0 6 16" version="1.1" width="6" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 14l6-6-6-6v12z"/></svg></span>
+ <span class="mr-2 Details-content--open"><svg class="octicon octicon-triangle-down" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 5l6 6 6-6H0z"/></svg></span>
+ <span class="text-bold">Assets</span>
+ <span class="ml-1 Counter">4</span>
+ </div>
+ </summary>
+ <div class="Box Box--condensed mt-3">
+ <div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.2.12/cups-2.2.12-source.tar.gz" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.2.12-source.tar.gz</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">9.93 MB</small>
+ </div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.2.12/cups-2.2.12-source.tar.gz.sig" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.2.12-source.tar.gz.sig</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">585 Bytes</small>
+ </div>
+
+
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.2.12.zip" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (zip)
+ </a>
+ </div>
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.2.12.tar.gz" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (tar.gz)
+ </a>
+ </div>
+ </div>
+ </div>
+ </details>
+
+
+ </div><!-- /.release-body -->
+</div><!-- /.release -->
+
+ </div>
+
+
+
+ <div class="release-entry">
+
+<div class="release pt-2 pt-md-0 pb-3 pb-md-0 clearfix label-prerelease">
+ <div class="d-none d-md-block flex-wrap flex-items-center col-12 col-md-3 col-lg-2 px-md-3 pb-1 pb-md-4 pt-md-4 float-left text-md-right v-align-top">
+ <div class="flex-auto flex-self-start">
+ <span class="flex-shrink-0 Label Label--outline mb-md-2 mr-2 mr-md-0 Label--prerelease">
+ Pre-release
+ </span>
+
+
+ </div>
+
+ <ul class="d-none d-md-block mt-2 list-style-none">
+ <li class="d-block mb-1">
+ <a href="/apple/cups/tree/v2.3rc1" class="muted-link css-truncate" title="v2.3rc1">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3rc1</span>
+ </a>
+ </li>
+
+ <li class="d-block mb-1">
+ <a href="/apple/cups/commit/4d03c4ca90d8c1c0d5303427858e537fd3c415e4" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>4d03c4c</code>
+ </a>
+ </li>
+
+ </ul>
+
+
+ </div><!-- /.meta -->
+
+ <div class="col-12 col-md-9 col-lg-10 px-md-3 py-md-4 release-main-section commit open float-left">
+ <div class="release-header">
+ <div class="d-flex flex-items-start">
+ <div class="f1 flex-auto min-width-0 text-normal">
+ <a href="/apple/cups/releases/tag/v2.3rc1">v2.3rc1</a>
+ </div>
+
+ <span class="d-md-none flex-shrink-0 ml-2 mt-2 mt-md-0 Label Label--outline Label--prerelease">
+ Pre-release
+ </span>
+
+ </div>
+ <ul class="d-flex d-md-none flex-items-center mb-1 list-style-none">
+ <li class="d-block mr-2">
+ <a href="/apple/cups/tree/v2.3rc1" class="muted-link css-truncate" title="v2.3rc1">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3rc1</span>
+ </a>
+ </li>
+
+ <li class="d-block mr-2 flex-auto">
+ <a href="/apple/cups/commit/4d03c4ca90d8c1c0d5303427858e537fd3c415e4" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>4d03c4c</code>
+ </a>
+ </li>
+
+
+
+
+ </ul>
+
+<p class="f5 text-gray mt-2 mt-md-1 mb-2 mb-md-4">
+ <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet"><img class="avatar" src="https://avatars3.githubusercontent.com/u/488103?s=40&amp;v=4" width="20" height="20" alt="@michaelrsweet" /></a>
+ <a class="text-bold text-gray" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet">michaelrsweet</a>
+ released this
+ <relative-time datetime="2019-05-21T17:07:50Z" class="no-wrap">May 21, 2019</relative-time>
+ &middot;
+ <a href="/apple/cups/compare/v2.3rc1...master">
+ 122 commits</a>
+ to master
+ since this release
+</p>
+ </div>
+
+
+
+ <div class="markdown-body">
+ <p>CUPS 2.3rc1 is now available for download. This is the first release candidate for CUPS 2.3.0 which adopts the new CUPS license, adds support for IPP presets and finishing templates, and fixes a number of bugs and "polish" issues. This beta also includes the new ippeveprinter utility. Changes include:</p>
+<ul>
+<li>The <code>cups-config</code> script no longer adds extra libraries when linking against<br>
+shared libraries (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="303656158" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5261" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5261/hovercard" href="https://github.com/apple/cups/pull/5261">#5261</a>)</li>
+<li>The supplied example print documents have been optimized for size<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="413810404" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5529" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5529/hovercard" href="https://github.com/apple/cups/pull/5529">#5529</a>)</li>
+<li>The <code>cupsctl</code> command now prevents setting "cups-files.conf" directives<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="413829254" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5530" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5530/hovercard" href="https://github.com/apple/cups/issues/5530">#5530</a>)</li>
+<li>The "forbidden" message in the web interface is now explained (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="424534348" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5547" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5547/hovercard" href="https://github.com/apple/cups/issues/5547">#5547</a>)</li>
+<li>The footer in the web interface covered some content on small displays<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="440365801" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5574" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5574/hovercard" href="https://github.com/apple/cups/issues/5574">#5574</a>)</li>
+<li>The libusb-based USB backend now enforces read limits, improving print speed<br>
+in many cases (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="445315055" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5583" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5583/hovercard" href="https://github.com/apple/cups/issues/5583">#5583</a>)</li>
+<li>The <code>ippeveprinter</code> command now looks for print commands in the "command"<br>
+subdirectory.</li>
+<li>The <code>ipptool</code> command now supports <code>$date-current</code> and <code>$date-start</code> variables<br>
+to insert the current and starting date and time values, as well as ISO-8601<br>
+relative time values such as "PT30S" for 30 seconds in the future.</li>
+</ul>
+<p>Enjoy!</p>
+ </div>
+
+
+ <details
+ class="details-reset Details-element border-top pt-3 mt-4 mb-2 mb-md-4"
+
+
+ >
+ <summary>
+ <div class="d-flex flex-items-center">
+ <span class="mr-2 Details-content--closed"><svg class="octicon octicon-triangle-right" viewBox="0 0 6 16" version="1.1" width="6" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 14l6-6-6-6v12z"/></svg></span>
+ <span class="mr-2 Details-content--open"><svg class="octicon octicon-triangle-down" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 5l6 6 6-6H0z"/></svg></span>
+ <span class="text-bold">Assets</span>
+ <span class="ml-1 Counter">4</span>
+ </div>
+ </summary>
+ <div class="Box Box--condensed mt-3">
+ <div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3rc1/cups-2.3rc1-source.tar.gz" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3rc1-source.tar.gz</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">7.56 MB</small>
+ </div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3rc1/cups-2.3rc1-source.tar.gz.sig" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3rc1-source.tar.gz.sig</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">585 Bytes</small>
+ </div>
+
+
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3rc1.zip" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (zip)
+ </a>
+ </div>
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3rc1.tar.gz" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (tar.gz)
+ </a>
+ </div>
+ </div>
+ </div>
+ </details>
+
+
+ </div><!-- /.release-body -->
+</div><!-- /.release -->
+
+ </div>
+
+
+
+ <div class="release-entry">
+
+<div class="release pt-2 pt-md-0 pb-3 pb-md-0 clearfix label-prerelease">
+ <div class="d-none d-md-block flex-wrap flex-items-center col-12 col-md-3 col-lg-2 px-md-3 pb-1 pb-md-4 pt-md-4 float-left text-md-right v-align-top">
+ <div class="flex-auto flex-self-start">
+ <span class="flex-shrink-0 Label Label--outline mb-md-2 mr-2 mr-md-0 Label--prerelease">
+ Pre-release
+ </span>
+
+
+ </div>
+
+ <ul class="d-none d-md-block mt-2 list-style-none">
+ <li class="d-block mb-1">
+ <a href="/apple/cups/tree/v2.3b8" class="muted-link css-truncate" title="v2.3b8">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3b8</span>
+ </a>
+ </li>
+
+ <li class="d-block mb-1">
+ <a href="/apple/cups/commit/0450ddd4f003de8aa8d8e7a54d181a992607d031" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>0450ddd</code>
+ </a>
+ </li>
+
+ </ul>
+
+
+ </div><!-- /.meta -->
+
+ <div class="col-12 col-md-9 col-lg-10 px-md-3 py-md-4 release-main-section commit open float-left">
+ <div class="release-header">
+ <div class="d-flex flex-items-start">
+ <div class="f1 flex-auto min-width-0 text-normal">
+ <a href="/apple/cups/releases/tag/v2.3b8">v2.3b8</a>
+ </div>
+
+ <span class="d-md-none flex-shrink-0 ml-2 mt-2 mt-md-0 Label Label--outline Label--prerelease">
+ Pre-release
+ </span>
+
+ </div>
+ <ul class="d-flex d-md-none flex-items-center mb-1 list-style-none">
+ <li class="d-block mr-2">
+ <a href="/apple/cups/tree/v2.3b8" class="muted-link css-truncate" title="v2.3b8">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3b8</span>
+ </a>
+ </li>
+
+ <li class="d-block mr-2 flex-auto">
+ <a href="/apple/cups/commit/0450ddd4f003de8aa8d8e7a54d181a992607d031" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>0450ddd</code>
+ </a>
+ </li>
+
+
+
+
+ </ul>
+
+<p class="f5 text-gray mt-2 mt-md-1 mb-2 mb-md-4">
+ <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet"><img class="avatar" src="https://avatars3.githubusercontent.com/u/488103?s=40&amp;v=4" width="20" height="20" alt="@michaelrsweet" /></a>
+ <a class="text-bold text-gray" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet">michaelrsweet</a>
+ released this
+ <relative-time datetime="2019-05-02T17:10:16Z" class="no-wrap">May 2, 2019</relative-time>
+ &middot;
+ <a href="/apple/cups/compare/v2.3b8...master">
+ 165 commits</a>
+ to master
+ since this release
+</p>
+ </div>
+
+
+
+ <div class="markdown-body">
+ <p>CUPS 2.3b8 is now available for download. This is the eighth beta of the CUPS 2.3 series which adopts the new CUPS license, adds support for IPP presets and finishing templates, and fixes a number of bugs and "polish" issues. This beta also includes the new ippeveprinter utility. Changes include:</p>
+<ul>
+<li>Media size matching now uses a tolerance of 0.5mm (rdar://33822024)</li>
+<li>The lpadmin command would hang with a bad PPD file (rdar://41495016)</li>
+<li>Fixed a potential crash bug in cups-driverd (rdar://46625579)</li>
+<li>Fixed a performance regression with large PPDs (rdar://47040759)</li>
+<li>Fixed a memory reallocation bug in HTTP header value expansion<br>
+(rdar://problem/50000749)</li>
+<li>Timed out job submission now yields an error (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="437390564" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5570" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5570/hovercard" href="https://github.com/apple/cups/issues/5570">#5570</a>)</li>
+<li>Restored minimal support for the <code>Emulators</code> keyword in PPD files to allow<br>
+old Samsung printer drivers to continue to work (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="432214569" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5562" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5562/hovercard" href="https://github.com/apple/cups/issues/5562">#5562</a>)</li>
+<li>The scheduler did not encode octetString values like "job-password" correctly<br>
+for the print filters (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="429827127" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5558" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5558/hovercard" href="https://github.com/apple/cups/pull/5558">#5558</a>)</li>
+<li>The <code>cupsCheckDestSupported</code> function did not check octetString values<br>
+correctly (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="429820862" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5557" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5557/hovercard" href="https://github.com/apple/cups/pull/5557">#5557</a>)</li>
+<li>Added support for <code>UserAgentTokens</code> directive in "client.conf" (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="429062399" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5555" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5555/hovercard" href="https://github.com/apple/cups/issues/5555">#5555</a>)</li>
+<li>Updated the systemd service file for cupsd (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="426479041" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5551" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5551/hovercard" href="https://github.com/apple/cups/pull/5551">#5551</a>)</li>
+<li>The <code>ippValidateAttribute</code> function did not catch all instances of invalid<br>
+UTF-8 strings (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="406851979" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5509" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5509/hovercard" href="https://github.com/apple/cups/issues/5509">#5509</a>)</li>
+<li>Fixed an issue with the self-signed certificates generated by GNU TLS<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="405881346" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5506" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5506/hovercard" href="https://github.com/apple/cups/issues/5506">#5506</a>)</li>
+<li>Fixed a potential memory leak when reading at the end of a file (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="397128929" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5473" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5473/hovercard" href="https://github.com/apple/cups/pull/5473">#5473</a>)</li>
+<li>Fixed potential unaligned accesses in the string pool (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="397129335" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5474" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5474/hovercard" href="https://github.com/apple/cups/pull/5474">#5474</a>)</li>
+<li>Fixed a potential memory leak when loading a PPD file (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="397129544" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5475" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5475/hovercard" href="https://github.com/apple/cups/pull/5475">#5475</a>)</li>
+<li>Added a USB quirks rule for the Lexmark E120n (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="398002110" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5478" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5478/hovercard" href="https://github.com/apple/cups/issues/5478">#5478</a>)</li>
+<li>Updated the USB quirks rule for Zebra label printers (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="357733286" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5395" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5395/hovercard" href="https://github.com/apple/cups/issues/5395">#5395</a>)</li>
+<li>Fixed a compile error on Linux (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="400297392" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5483" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5483/hovercard" href="https://github.com/apple/cups/issues/5483">#5483</a>)</li>
+<li>The lpadmin command, web interface, and scheduler all queried an IPP<br>
+Everywhere printer differently, resulting in different PPDs for the same<br>
+printer (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="400475471" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5484" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5484/hovercard" href="https://github.com/apple/cups/issues/5484">#5484</a>)</li>
+<li>The web interface no longer provides access to the log files (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="408923646" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5513" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5513/hovercard" href="https://github.com/apple/cups/pull/5513">#5513</a>)</li>
+<li>Non-Kerberized printing to Windows via IPP was broken (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="409779414" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5515" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5515/hovercard" href="https://github.com/apple/cups/issues/5515">#5515</a>)</li>
+<li>Eliminated use of private headers and some deprecated macOS APIs (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="410260107" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5516" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5516/hovercard" href="https://github.com/apple/cups/issues/5516">#5516</a>)</li>
+<li>The scheduler no longer stops a printer if an error occurs when a job is<br>
+canceled or aborted (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="410355270" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5517" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5517/hovercard" href="https://github.com/apple/cups/issues/5517">#5517</a>)</li>
+<li>Added a USB quirks rule for the DYMO 450 Turbo (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="411711197" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5521" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5521/hovercard" href="https://github.com/apple/cups/issues/5521">#5521</a>)</li>
+<li>Added a USB quirks rule for Xerox printers (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="411753258" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5523" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5523/hovercard" href="https://github.com/apple/cups/pull/5523">#5523</a>)</li>
+<li>The scheduler's self-signed certificate did not include all of the alternate<br>
+names for the server when using GNU TLS (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="412016449" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5525" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5525/hovercard" href="https://github.com/apple/cups/issues/5525">#5525</a>)</li>
+<li>Fixed compiler warnings with newer versions of GCC (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="414042934" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5532" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5532/hovercard" href="https://github.com/apple/cups/issues/5532">#5532</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="414066704" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5533" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5533/hovercard" href="https://github.com/apple/cups/issues/5533">#5533</a>)</li>
+<li>Fixed some PPD caching and IPP Everywhere PPD accounting/password bugs<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="415271479" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5535" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5535/hovercard" href="https://github.com/apple/cups/pull/5535">#5535</a>)</li>
+<li>Fixed <code>PreserveJobHistory</code> bug with time values (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="417234320" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5538" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5538/hovercard" href="https://github.com/apple/cups/issues/5538">#5538</a>)</li>
+<li>The scheduler no longer advertises the HTTP methods it supports (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="418016911" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5540" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5540/hovercard" href="https://github.com/apple/cups/issues/5540">#5540</a>)</li>
+<li>Localization updates (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="389910117" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5461" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5461/hovercard" href="https://github.com/apple/cups/pull/5461">#5461</a>, Issues <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="396109475" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5471" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5471/hovercard" href="https://github.com/apple/cups/pull/5471">#5471</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="399515079" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5481" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5481/hovercard" href="https://github.com/apple/cups/pull/5481">#5481</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="401477553" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5486" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5486/hovercard" href="https://github.com/apple/cups/pull/5486">#5486</a>,<br>
+Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="401560266" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5489" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5489/hovercard" href="https://github.com/apple/cups/pull/5489">#5489</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="401580756" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5491" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5491/hovercard" href="https://github.com/apple/cups/issues/5491">#5491</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="401583167" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5492" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5492/hovercard" href="https://github.com/apple/cups/pull/5492">#5492</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="401587120" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5493" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5493/hovercard" href="https://github.com/apple/cups/pull/5493">#5493</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="401591890" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5494" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5494/hovercard" href="https://github.com/apple/cups/pull/5494">#5494</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="401976167" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5495" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5495/hovercard" href="https://github.com/apple/cups/issues/5495">#5495</a>,<br>
+Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="402516307" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5497" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5497/hovercard" href="https://github.com/apple/cups/issues/5497">#5497</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="402552206" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5499" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5499/hovercard" href="https://github.com/apple/cups/pull/5499">#5499</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="402552661" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5500" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5500/hovercard" href="https://github.com/apple/cups/pull/5500">#5500</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="402553767" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5501" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5501/hovercard" href="https://github.com/apple/cups/pull/5501">#5501</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="403396003" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5504" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5504/hovercard" href="https://github.com/apple/cups/pull/5504">#5504</a>)</li>
+<li>The scheduler did not always idle exit as quickly as it could.</li>
+<li>Added a new <code>ippeveprinter</code> command based on the old ippserver sample code.</li>
+</ul>
+<p>Enjoy!</p>
+ </div>
+
+
+ <details
+ class="details-reset Details-element border-top pt-3 mt-4 mb-2 mb-md-4"
+
+
+ >
+ <summary>
+ <div class="d-flex flex-items-center">
+ <span class="mr-2 Details-content--closed"><svg class="octicon octicon-triangle-right" viewBox="0 0 6 16" version="1.1" width="6" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 14l6-6-6-6v12z"/></svg></span>
+ <span class="mr-2 Details-content--open"><svg class="octicon octicon-triangle-down" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 5l6 6 6-6H0z"/></svg></span>
+ <span class="text-bold">Assets</span>
+ <span class="ml-1 Counter">4</span>
+ </div>
+ </summary>
+ <div class="Box Box--condensed mt-3">
+ <div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3b8/cups-2.3b8-source.tar.gz" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3b8-source.tar.gz</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">9.89 MB</small>
+ </div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3b8/cups-2.3b8-source.tar.gz.sig" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3b8-source.tar.gz.sig</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">585 Bytes</small>
+ </div>
+
+
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3b8.zip" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (zip)
+ </a>
+ </div>
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3b8.tar.gz" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (tar.gz)
+ </a>
+ </div>
+ </div>
+ </div>
+ </details>
+
+
+ </div><!-- /.release-body -->
+</div><!-- /.release -->
+
+ </div>
+
+
+
+ <div class="release-entry">
+
+<div class="release pt-2 pt-md-0 pb-3 pb-md-0 clearfix label-">
+ <div class="d-none d-md-block flex-wrap flex-items-center col-12 col-md-3 col-lg-2 px-md-3 pb-1 pb-md-4 pt-md-4 float-left text-md-right v-align-top">
+ <div class="flex-auto flex-self-start">
+
+
+ </div>
+
+ <ul class="d-none d-md-block mt-2 list-style-none">
+ <li class="d-block mb-1">
+ <a href="/apple/cups/tree/v2.2.11" class="muted-link css-truncate" title="v2.2.11">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.2.11</span>
+ </a>
+ </li>
+
+ <li class="d-block mb-1">
+ <a href="/apple/cups/commit/e4a0aa86c96b5ddda3770c46709f4dee9a59071f" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>e4a0aa8</code>
+ </a>
+ </li>
+
+ </ul>
+
+
+ </div><!-- /.meta -->
+
+ <div class="col-12 col-md-9 col-lg-10 px-md-3 py-md-4 release-main-section commit open float-left">
+ <div class="release-header">
+ <div class="d-flex flex-items-start">
+ <div class="f1 flex-auto min-width-0 text-normal">
+ <a href="/apple/cups/releases/tag/v2.2.11">v2.2.11</a>
+ </div>
+
+
+ </div>
+ <ul class="d-flex d-md-none flex-items-center mb-1 list-style-none">
+ <li class="d-block mr-2">
+ <a href="/apple/cups/tree/v2.2.11" class="muted-link css-truncate" title="v2.2.11">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.2.11</span>
+ </a>
+ </li>
+
+ <li class="d-block mr-2 flex-auto">
+ <a href="/apple/cups/commit/e4a0aa86c96b5ddda3770c46709f4dee9a59071f" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>e4a0aa8</code>
+ </a>
+ </li>
+
+
+
+
+ </ul>
+
+<p class="f5 text-gray mt-2 mt-md-1 mb-2 mb-md-4">
+ <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet"><img class="avatar" src="https://avatars3.githubusercontent.com/u/488103?s=40&amp;v=4" width="20" height="20" alt="@michaelrsweet" /></a>
+ <a class="text-bold text-gray" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet">michaelrsweet</a>
+ released this
+ <relative-time datetime="2019-03-22T20:07:02Z" class="no-wrap">Mar 22, 2019</relative-time>
+ &middot;
+ <a href="/apple/cups/compare/v2.2.11...master">
+ 793 commits</a>
+ to master
+ since this release
+</p>
+ </div>
+
+
+
+ <div class="markdown-body">
+ <p>CUPS 2.2.11 is a bug fix release that addresses issues in the scheduler,<br>
+IPP Everywhere support, CUPS library, and USB printer support. Changes include:</p>
+<ul>
+<li>Running ppdmerge with the same input and output filenames did not work as<br>
+advertised (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="389283806" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5455" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5455/hovercard" href="https://github.com/apple/cups/issues/5455">#5455</a>)</li>
+<li>Fixed a potential memory leak when reading at the end of a file (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="397128929" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5473" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5473/hovercard" href="https://github.com/apple/cups/pull/5473">#5473</a>)</li>
+<li>Fixed potential unaligned accesses in the string pool (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="397129335" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5474" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5474/hovercard" href="https://github.com/apple/cups/pull/5474">#5474</a>)</li>
+<li>Fixed a potential memory leak when loading a PPD file (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="397129544" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5475" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5475/hovercard" href="https://github.com/apple/cups/pull/5475">#5475</a>)</li>
+<li>Added a USB quirks rule for the Lexmark E120n (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="398002110" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5478" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5478/hovercard" href="https://github.com/apple/cups/issues/5478">#5478</a>)</li>
+<li>Updated the USB quirks rule for Zebra label printers (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="357733286" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5395" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5395/hovercard" href="https://github.com/apple/cups/issues/5395">#5395</a>)</li>
+<li>Fixed a compile error on Linux (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="400297392" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5483" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5483/hovercard" href="https://github.com/apple/cups/issues/5483">#5483</a>)</li>
+<li>The lpadmin command, web interface, and scheduler all queried an IPP<br>
+Everywhere printer differently, resulting in different PPDs for the same<br>
+printer (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="400475471" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5484" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5484/hovercard" href="https://github.com/apple/cups/issues/5484">#5484</a>)</li>
+<li>Fixed an issue with the self-signed certificates generated by GNU TLS<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="405881346" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5506" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5506/hovercard" href="https://github.com/apple/cups/issues/5506">#5506</a>)</li>
+<li>The <code>ippValidateAttribute</code> function did not catch all instances of invalid<br>
+UTF-8 strings (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="406851979" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5509" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5509/hovercard" href="https://github.com/apple/cups/issues/5509">#5509</a>)</li>
+<li>Non-Kerberized printing to Windows via IPP was broken (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="409779414" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5515" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5515/hovercard" href="https://github.com/apple/cups/issues/5515">#5515</a>)</li>
+<li>The scheduler no longer stops a printer if an error occurs when a job is<br>
+canceled or aborted (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="410355270" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5517" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5517/hovercard" href="https://github.com/apple/cups/issues/5517">#5517</a>)</li>
+<li>Added a USB quirks rule for the DYMO 450 Turbo (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="411711197" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5521" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5521/hovercard" href="https://github.com/apple/cups/issues/5521">#5521</a>)</li>
+<li>Added a USB quirks rule for Xerox printers (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="411753258" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5523" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5523/hovercard" href="https://github.com/apple/cups/pull/5523">#5523</a>)</li>
+<li>The scheduler's self-signed certificate did not include all of the alternate<br>
+names for the server when using GNU TLS (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="412016449" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5525" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5525/hovercard" href="https://github.com/apple/cups/issues/5525">#5525</a>)</li>
+<li>Fixed compiler warnings with newer versions of GCC (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="414042934" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5532" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5532/hovercard" href="https://github.com/apple/cups/issues/5532">#5532</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="414066704" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5533" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5533/hovercard" href="https://github.com/apple/cups/issues/5533">#5533</a>)</li>
+<li>Fixed some PPD caching and IPP Everywhere PPD accounting/password bugs<br>
+(Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="415271479" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5535" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5535/hovercard" href="https://github.com/apple/cups/pull/5535">#5535</a>)</li>
+<li>Fixed <code>PreserveJobHistory</code> bug with time values (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="417234320" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5538" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5538/hovercard" href="https://github.com/apple/cups/issues/5538">#5538</a>)</li>
+<li>Media size matching now uses a tolerance of 0.5mm (rdar://33822024)</li>
+<li>The lpadmin command would hang with a bad PPD file (rdar://41495016)</li>
+<li>Fixed a potential crash bug in cups-driverd (rdar://46625579)</li>
+<li>Fixed a performance regression with large PPDs (rdar://47040759)</li>
+<li>The scheduler did not always idle exit as quickly as it could.</li>
+</ul>
+<p>Enjoy!</p>
+ </div>
+
+
+ <details
+ class="details-reset Details-element border-top pt-3 mt-4 mb-2 mb-md-4"
+
+
+ >
+ <summary>
+ <div class="d-flex flex-items-center">
+ <span class="mr-2 Details-content--closed"><svg class="octicon octicon-triangle-right" viewBox="0 0 6 16" version="1.1" width="6" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 14l6-6-6-6v12z"/></svg></span>
+ <span class="mr-2 Details-content--open"><svg class="octicon octicon-triangle-down" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 5l6 6 6-6H0z"/></svg></span>
+ <span class="text-bold">Assets</span>
+ <span class="ml-1 Counter">4</span>
+ </div>
+ </summary>
+ <div class="Box Box--condensed mt-3">
+ <div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.2.11/cups-2.2.11-source.tar.gz" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.2.11-source.tar.gz</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">9.92 MB</small>
+ </div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.2.11/cups-2.2.11-source.tar.gz.sig" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.2.11-source.tar.gz.sig</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">585 Bytes</small>
+ </div>
+
+
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.2.11.zip" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (zip)
+ </a>
+ </div>
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.2.11.tar.gz" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (tar.gz)
+ </a>
+ </div>
+ </div>
+ </div>
+ </details>
+
+
+ </div><!-- /.release-body -->
+</div><!-- /.release -->
+
+ </div>
+
+
+
+ <div class="release-entry">
+
+<div class="release pt-2 pt-md-0 pb-3 pb-md-0 clearfix label-prerelease">
+ <div class="d-none d-md-block flex-wrap flex-items-center col-12 col-md-3 col-lg-2 px-md-3 pb-1 pb-md-4 pt-md-4 float-left text-md-right v-align-top">
+ <div class="flex-auto flex-self-start">
+ <span class="flex-shrink-0 Label Label--outline mb-md-2 mr-2 mr-md-0 Label--prerelease">
+ Pre-release
+ </span>
+
+
+ </div>
+
+ <ul class="d-none d-md-block mt-2 list-style-none">
+ <li class="d-block mb-1">
+ <a href="/apple/cups/tree/v2.3b7" class="muted-link css-truncate" title="v2.3b7">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3b7</span>
+ </a>
+ </li>
+
+ <li class="d-block mb-1">
+ <a href="/apple/cups/commit/b1e7afd5964cbe1aeab6f0a2d5b33884693a143a" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>b1e7afd</code>
+ </a>
+ </li>
+
+ </ul>
+
+
+ </div><!-- /.meta -->
+
+ <div class="col-12 col-md-9 col-lg-10 px-md-3 py-md-4 release-main-section commit open float-left">
+ <div class="release-header">
+ <div class="d-flex flex-items-start">
+ <div class="f1 flex-auto min-width-0 text-normal">
+ <a href="/apple/cups/releases/tag/v2.3b7">v2.3b7</a>
+ </div>
+
+ <span class="d-md-none flex-shrink-0 ml-2 mt-2 mt-md-0 Label Label--outline Label--prerelease">
+ Pre-release
+ </span>
+
+ </div>
+ <ul class="d-flex d-md-none flex-items-center mb-1 list-style-none">
+ <li class="d-block mr-2">
+ <a href="/apple/cups/tree/v2.3b7" class="muted-link css-truncate" title="v2.3b7">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3b7</span>
+ </a>
+ </li>
+
+ <li class="d-block mr-2 flex-auto">
+ <a href="/apple/cups/commit/b1e7afd5964cbe1aeab6f0a2d5b33884693a143a" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>b1e7afd</code>
+ </a>
+ </li>
+
+
+
+
+ </ul>
+
+<p class="f5 text-gray mt-2 mt-md-1 mb-2 mb-md-4">
+ <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet"><img class="avatar" src="https://avatars3.githubusercontent.com/u/488103?s=40&amp;v=4" width="20" height="20" alt="@michaelrsweet" /></a>
+ <a class="text-bold text-gray" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet">michaelrsweet</a>
+ released this
+ <relative-time datetime="2018-12-14T15:25:40Z" class="no-wrap">Dec 14, 2018</relative-time>
+ &middot;
+ <a href="/apple/cups/compare/v2.3b7...master">
+ 350 commits</a>
+ to master
+ since this release
+</p>
+ </div>
+
+
+
+ <div class="markdown-body">
+ <p>CUPS 2.3b7 is now available for download. This is the sixth beta of the CUPS 2.3 series which adopts the new CUPS license, adds support for IPP presets and finishing templates, and fixes a number of bugs and "polish" issues.</p>
+<p>Changes include:</p>
+<ul>
+<li>Fixed some build failures (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="388917027" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5451" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5451/hovercard" href="https://github.com/apple/cups/pull/5451">#5451</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="391143584" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5463" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5463/hovercard" href="https://github.com/apple/cups/pull/5463">#5463</a>)</li>
+<li>Running ppdmerge with the same input and output filenames did not work as<br>
+advertised (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="389283806" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5455" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5455/hovercard" href="https://github.com/apple/cups/issues/5455">#5455</a>)</li>
+</ul>
+<p>Enjoy!</p>
+ </div>
+
+
+ <details
+ class="details-reset Details-element border-top pt-3 mt-4 mb-2 mb-md-4"
+
+
+ >
+ <summary>
+ <div class="d-flex flex-items-center">
+ <span class="mr-2 Details-content--closed"><svg class="octicon octicon-triangle-right" viewBox="0 0 6 16" version="1.1" width="6" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 14l6-6-6-6v12z"/></svg></span>
+ <span class="mr-2 Details-content--open"><svg class="octicon octicon-triangle-down" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 5l6 6 6-6H0z"/></svg></span>
+ <span class="text-bold">Assets</span>
+ <span class="ml-1 Counter">4</span>
+ </div>
+ </summary>
+ <div class="Box Box--condensed mt-3">
+ <div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3b7/cups-2.3b7-source.tar.gz" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3b7-source.tar.gz</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">9.77 MB</small>
+ </div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3b7/cups-2.3b7-source.tar.gz.sig" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3b7-source.tar.gz.sig</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">585 Bytes</small>
+ </div>
+
+
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3b7.zip" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (zip)
+ </a>
+ </div>
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3b7.tar.gz" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (tar.gz)
+ </a>
+ </div>
+ </div>
+ </div>
+ </details>
+
+
+ </div><!-- /.release-body -->
+</div><!-- /.release -->
+
+ </div>
+
+
+
+ <div class="release-entry">
+
+<div class="release pt-2 pt-md-0 pb-3 pb-md-0 clearfix label-prerelease">
+ <div class="d-none d-md-block flex-wrap flex-items-center col-12 col-md-3 col-lg-2 px-md-3 pb-1 pb-md-4 pt-md-4 float-left text-md-right v-align-top">
+ <div class="flex-auto flex-self-start">
+ <span class="flex-shrink-0 Label Label--outline mb-md-2 mr-2 mr-md-0 Label--prerelease">
+ Pre-release
+ </span>
+
+
+ </div>
+
+ <ul class="d-none d-md-block mt-2 list-style-none">
+ <li class="d-block mb-1">
+ <a href="/apple/cups/tree/v2.3b6" class="muted-link css-truncate" title="v2.3b6">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3b6</span>
+ </a>
+ </li>
+
+ <li class="d-block mb-1">
+ <a href="/apple/cups/commit/c13e2f44eb15bcdbff9126df86d1ed9a5108e47c" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>c13e2f4</code>
+ </a>
+ </li>
+
+ </ul>
+
+
+ </div><!-- /.meta -->
+
+ <div class="col-12 col-md-9 col-lg-10 px-md-3 py-md-4 release-main-section commit open float-left">
+ <div class="release-header">
+ <div class="d-flex flex-items-start">
+ <div class="f1 flex-auto min-width-0 text-normal">
+ <a href="/apple/cups/releases/tag/v2.3b6">v2.3b6</a>
+ </div>
+
+ <span class="d-md-none flex-shrink-0 ml-2 mt-2 mt-md-0 Label Label--outline Label--prerelease">
+ Pre-release
+ </span>
+
+ </div>
+ <ul class="d-flex d-md-none flex-items-center mb-1 list-style-none">
+ <li class="d-block mr-2">
+ <a href="/apple/cups/tree/v2.3b6" class="muted-link css-truncate" title="v2.3b6">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.3b6</span>
+ </a>
+ </li>
+
+ <li class="d-block mr-2 flex-auto">
+ <a href="/apple/cups/commit/c13e2f44eb15bcdbff9126df86d1ed9a5108e47c" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>c13e2f4</code>
+ </a>
+ </li>
+
+
+
+
+ </ul>
+
+<p class="f5 text-gray mt-2 mt-md-1 mb-2 mb-md-4">
+ <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet"><img class="avatar" src="https://avatars3.githubusercontent.com/u/488103?s=40&amp;v=4" width="20" height="20" alt="@michaelrsweet" /></a>
+ <a class="text-bold text-gray" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet">michaelrsweet</a>
+ released this
+ <relative-time datetime="2018-12-07T19:55:15Z" class="no-wrap">Dec 7, 2018</relative-time>
+ &middot;
+ <a href="/apple/cups/compare/v2.3b6...master">
+ 358 commits</a>
+ to master
+ since this release
+</p>
+ </div>
+
+
+
+ <div class="markdown-body">
+ <p>CUPS 2.3b6 is now available for download. This is the sixth beta of the CUPS 2.3 series which adopts the new CUPS license, adds support for IPP presets and finishing templates, and fixes a number of bugs and “polish” issues. Changes include:</p>
+<ul>
+<li>Localization update (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="331487448" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5339" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5339/hovercard" href="https://github.com/apple/cups/pull/5339">#5339</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="338371070" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5348" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5348/hovercard" href="https://github.com/apple/cups/pull/5348">#5348</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="346031038" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5362" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5362/hovercard" href="https://github.com/apple/cups/issues/5362">#5362</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="366787211" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5408" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5408/hovercard" href="https://github.com/apple/cups/pull/5408">#5408</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="368045074" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5410" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5410/hovercard" href="https://github.com/apple/cups/pull/5410">#5410</a>)</li>
+<li>Documentation updates (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="348353282" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5369" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5369/hovercard" href="https://github.com/apple/cups/pull/5369">#5369</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="363404487" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5402" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5402/hovercard" href="https://github.com/apple/cups/issues/5402">#5402</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="363405764" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5403" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5403/hovercard" href="https://github.com/apple/cups/issues/5403">#5403</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="364552772" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5404" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5404/hovercard" href="https://github.com/apple/cups/issues/5404">#5404</a>)</li>
+<li>CVE-2018-4700: Linux session cookies used a predictable random number seed.</li>
+<li>All user commands now support the <code>--help</code> option (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="330540965" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5326" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5326/hovercard" href="https://github.com/apple/cups/pull/5326">#5326</a>)</li>
+<li>The <code>lpoptions</code> command now works with IPP Everywhere printers that have not yet been added as local queues (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="240476360" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5045" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5045/hovercard" href="https://github.com/apple/cups/issues/5045">#5045</a>)</li>
+<li>The lpadmin command would create a non-working printer in some error cases (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="318946590" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5305" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5305/hovercard" href="https://github.com/apple/cups/issues/5305">#5305</a>)</li>
+<li>The scheduler would crash if an empty <code>AccessLog</code> directive was specified (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="320205820" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5309" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5309/hovercard" href="https://github.com/apple/cups/issues/5309">#5309</a>)</li>
+<li>The scheduler did not idle-exit on some Linux distributions (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="326681481" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5319" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5319/hovercard" href="https://github.com/apple/cups/issues/5319">#5319</a>)</li>
+<li>Fixed a regression in the changes to ippValidateAttribute (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="329849228" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5322" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5322/hovercard" href="https://github.com/apple/cups/issues/5322">#5322</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="330795910" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5330" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5330/hovercard" href="https://github.com/apple/cups/pull/5330">#5330</a>)</li>
+<li>Fixed a crash bug in the Epson dot matrix driver (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="329933700" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5323" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5323/hovercard" href="https://github.com/apple/cups/issues/5323">#5323</a>)</li>
+<li>Automatic debug logging of job errors did not work with systemd (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="331250505" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5337" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5337/hovercard" href="https://github.com/apple/cups/pull/5337">#5337</a>)</li>
+<li>The web interface did not list the IPP Everywhere "driver" (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="331312712" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5338" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5338/hovercard" href="https://github.com/apple/cups/issues/5338">#5338</a>)</li>
+<li>The scheduler did not report all of the supported job options and values (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="333276783" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5340" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5340/hovercard" href="https://github.com/apple/cups/issues/5340">#5340</a>)</li>
+<li>The IPP Everywhere "driver" now properly supports face-up printers (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="337083449" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5345" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5345/hovercard" href="https://github.com/apple/cups/pull/5345">#5345</a>)</li>
+<li>Fixed some typos in the label printer drivers (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="339185565" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5350" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5350/hovercard" href="https://github.com/apple/cups/pull/5350">#5350</a>)</li>
+<li>Setting the <code>Community</code> name to the empty string in <code>snmp.conf</code> now disables SNMP supply level monitoring by all the standard network backends (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="340624090" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5354" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5354/hovercard" href="https://github.com/apple/cups/issues/5354">#5354</a>)</li>
+<li>Multi-file jobs could get stuck if the backend failed (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="345069787" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5359" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5359/hovercard" href="https://github.com/apple/cups/issues/5359">#5359</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="371092957" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5413" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5413/hovercard" href="https://github.com/apple/cups/pull/5413">#5413</a>)</li>
+<li>The IPP Everywhere "driver" no longer does local filtering when printing to a shared CUPS printer (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="345371064" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5361" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5361/hovercard" href="https://github.com/apple/cups/issues/5361">#5361</a>)</li>
+<li>The lpadmin command now correctly reports IPP errors when configuring an IPP Everywhere printer (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="348454669" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5370" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5370/hovercard" href="https://github.com/apple/cups/issues/5370">#5370</a>)</li>
+<li>Fixed some memory leaks discovered by Coverity (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="350817056" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5375" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5375/hovercard" href="https://github.com/apple/cups/pull/5375">#5375</a>)</li>
+<li>The PPD compiler incorrectly terminated JCL options (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="353923453" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5379" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5379/hovercard" href="https://github.com/apple/cups/issues/5379">#5379</a>)</li>
+<li>The cupstestppd utility did not generate errors for missing/mismatched CloseUI/JCLCloseUI keywords (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="354366018" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5381" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5381/hovercard" href="https://github.com/apple/cups/issues/5381">#5381</a>)</li>
+<li>The scheduler now reports the actual location of the log file (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="360830362" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5398" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5398/hovercard" href="https://github.com/apple/cups/pull/5398">#5398</a>)</li>
+<li>Added USB quirk rules (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="357733286" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5395" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5395/hovercard" href="https://github.com/apple/cups/issues/5395">#5395</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="374789312" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5420" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5420/hovercard" href="https://github.com/apple/cups/issues/5420">#5420</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="383353143" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5443" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5443/hovercard" href="https://github.com/apple/cups/issues/5443">#5443</a>)</li>
+<li>The generated PPD files for IPP Everywhere printers did not contain the cupsManualCopies keyword (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="379168700" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5433" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5433/hovercard" href="https://github.com/apple/cups/issues/5433">#5433</a>)</li>
+<li>Kerberos credentials might be truncated (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="379992572" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5435" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5435/hovercard" href="https://github.com/apple/cups/pull/5435">#5435</a>)</li>
+<li>The handling of <code>MaxJobTime 0</code> did not match the documentation (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="381247863" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5438" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5438/hovercard" href="https://github.com/apple/cups/issues/5438">#5438</a>)</li>
+<li>Fixed a bug adding a queue with the <code>-E</code> option (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="381942069" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5440" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5440/hovercard" href="https://github.com/apple/cups/issues/5440">#5440</a>)</li>
+<li>The <code>cupsaddsmb</code> program has been removed (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="388302147" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5449" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5449/hovercard" href="https://github.com/apple/cups/issues/5449">#5449</a>)</li>
+<li>The <code>cupstestdsc</code> program has been removed (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="388307516" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5450" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5450/hovercard" href="https://github.com/apple/cups/issues/5450">#5450</a>)</li>
+<li>The scheduler was being backgrounded on macOS, causing applications to spin (rdar://40436080)</li>
+<li>The scheduler did not validate that required initial request attributes were in the operation group (rdar://41098178)</li>
+<li>Authentication in the web interface did not work on macOS (rdar://41444473)</li>
+<li>Fixed an issue with HTTP Digest authentication (rdar://41709086)</li>
+<li>The scheduler could crash when job history was purged (rdar://42198057)</li>
+<li>Fixed a crash bug when mapping PPD duplex options to IPP attributes (rdar://46183976)</li>
+<li>Fixed a memory leak for some IPP (extension) syntaxes.</li>
+<li>The <code>cupscgi</code>, <code>cupsmime</code>, and <code>cupsppdc</code> support libraries are no longer installed as shared libraries.</li>
+<li>The <code>snmp</code> backend is now deprecated.</li>
+</ul>
+<p>Enjoy!</p>
+ </div>
+
+
+ <details
+ class="details-reset Details-element border-top pt-3 mt-4 mb-2 mb-md-4"
+
+
+ >
+ <summary>
+ <div class="d-flex flex-items-center">
+ <span class="mr-2 Details-content--closed"><svg class="octicon octicon-triangle-right" viewBox="0 0 6 16" version="1.1" width="6" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 14l6-6-6-6v12z"/></svg></span>
+ <span class="mr-2 Details-content--open"><svg class="octicon octicon-triangle-down" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 5l6 6 6-6H0z"/></svg></span>
+ <span class="text-bold">Assets</span>
+ <span class="ml-1 Counter">4</span>
+ </div>
+ </summary>
+ <div class="Box Box--condensed mt-3">
+ <div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3b6/cups-2.3b6-source.tar.gz" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3b6-source.tar.gz</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">9.77 MB</small>
+ </div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.3b6/cups-2.3b6-source.tar.gz.sig" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.3b6-source.tar.gz.sig</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">585 Bytes</small>
+ </div>
+
+
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3b6.zip" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (zip)
+ </a>
+ </div>
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.3b6.tar.gz" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (tar.gz)
+ </a>
+ </div>
+ </div>
+ </div>
+ </details>
+
+
+ </div><!-- /.release-body -->
+</div><!-- /.release -->
+
+ </div>
+
+
+
+ <div class="release-entry">
+
+<div class="release pt-2 pt-md-0 pb-3 pb-md-0 clearfix label-">
+ <div class="d-none d-md-block flex-wrap flex-items-center col-12 col-md-3 col-lg-2 px-md-3 pb-1 pb-md-4 pt-md-4 float-left text-md-right v-align-top">
+ <div class="flex-auto flex-self-start">
+
+
+ </div>
+
+ <ul class="d-none d-md-block mt-2 list-style-none">
+ <li class="d-block mb-1">
+ <a href="/apple/cups/tree/v2.2.10" class="muted-link css-truncate" title="v2.2.10">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.2.10</span>
+ </a>
+ </li>
+
+ <li class="d-block mb-1">
+ <a href="/apple/cups/commit/25b2338346ef3abbb93ea88476887cba7b2b86f8" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>25b2338</code>
+ </a>
+ </li>
+
+ </ul>
+
+
+ </div><!-- /.meta -->
+
+ <div class="col-12 col-md-9 col-lg-10 px-md-3 py-md-4 release-main-section commit open float-left">
+ <div class="release-header">
+ <div class="d-flex flex-items-start">
+ <div class="f1 flex-auto min-width-0 text-normal">
+ <a href="/apple/cups/releases/tag/v2.2.10">v2.2.10</a>
+ </div>
+
+
+ </div>
+ <ul class="d-flex d-md-none flex-items-center mb-1 list-style-none">
+ <li class="d-block mr-2">
+ <a href="/apple/cups/tree/v2.2.10" class="muted-link css-truncate" title="v2.2.10">
+ <svg class="octicon octicon-tag" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 000-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
+ <span class="css-truncate-target" style="max-width: 125px">v2.2.10</span>
+ </a>
+ </li>
+
+ <li class="d-block mr-2 flex-auto">
+ <a href="/apple/cups/commit/25b2338346ef3abbb93ea88476887cba7b2b86f8" class="muted-link">
+ <svg class="octicon octicon-git-commit" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"/></svg>
+ <code>25b2338</code>
+ </a>
+ </li>
+
+
+
+
+ </ul>
+
+<p class="f5 text-gray mt-2 mt-md-1 mb-2 mb-md-4">
+ <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet"><img class="avatar" src="https://avatars3.githubusercontent.com/u/488103?s=40&amp;v=4" width="20" height="20" alt="@michaelrsweet" /></a>
+ <a class="text-bold text-gray" data-hovercard-type="user" data-hovercard-url="/users/michaelrsweet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/michaelrsweet">michaelrsweet</a>
+ released this
+ <relative-time datetime="2018-12-07T19:57:55Z" class="no-wrap">Dec 7, 2018</relative-time>
+ &middot;
+ <a href="/apple/cups/compare/v2.2.10...master">
+ 793 commits</a>
+ to master
+ since this release
+</p>
+ </div>
+
+
+
+ <div class="markdown-body">
+ <p>CUPS 2.2.10 is a bug fix release that addresses issues in the scheduler, IPP Everywhere support, CUPS library, and USB printer support. Changes include:</p>
+<ul>
+<li>CVE-2018-4300: Linux session cookies used a predictable random number seed.</li>
+<li>The <code>lpoptions</code> command now works with IPP Everywhere printers that have not yet been added as local queues (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="240476360" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5045" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5045/hovercard" href="https://github.com/apple/cups/issues/5045">#5045</a>)</li>
+<li>Added USB quirk rules (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="357733286" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5395" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5395/hovercard" href="https://github.com/apple/cups/issues/5395">#5395</a>, Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="383353143" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5443" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5443/hovercard" href="https://github.com/apple/cups/issues/5443">#5443</a>)</li>
+<li>The generated PPD files for IPP Everywhere printers did not contain the cupsManualCopies keyword (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="379168700" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5433" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5433/hovercard" href="https://github.com/apple/cups/issues/5433">#5433</a>)</li>
+<li>Kerberos credentials might be truncated (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="379992572" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5435" data-hovercard-type="pull_request" data-hovercard-url="/apple/cups/pull/5435/hovercard" href="https://github.com/apple/cups/pull/5435">#5435</a>)</li>
+<li>The handling of <code>MaxJobTime 0</code> did not match the documentation (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="381247863" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5438" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5438/hovercard" href="https://github.com/apple/cups/issues/5438">#5438</a>)</li>
+<li>Incorporated the page accounting changes from CUPS 2.3 (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="381531578" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5439" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5439/hovercard" href="https://github.com/apple/cups/issues/5439">#5439</a>)</li>
+<li>Fixed a bug adding a queue with the <code>-E</code> option (Issue <a class="issue-link js-issue-link" data-error-text="Failed to load issue title" data-id="381942069" data-permission-text="Issue title is private" data-url="https://github.com/apple/cups/issues/5440" data-hovercard-type="issue" data-hovercard-url="/apple/cups/issues/5440/hovercard" href="https://github.com/apple/cups/issues/5440">#5440</a>)</li>
+<li>Fixed a crash bug when mapping PPD duplex options to IPP attributes (rdar://46183976)</li>
+</ul>
+<p>Enjoy!</p>
+ </div>
+
+
+ <details
+ class="details-reset Details-element border-top pt-3 mt-4 mb-2 mb-md-4"
+
+
+ >
+ <summary>
+ <div class="d-flex flex-items-center">
+ <span class="mr-2 Details-content--closed"><svg class="octicon octicon-triangle-right" viewBox="0 0 6 16" version="1.1" width="6" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 14l6-6-6-6v12z"/></svg></span>
+ <span class="mr-2 Details-content--open"><svg class="octicon octicon-triangle-down" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 5l6 6 6-6H0z"/></svg></span>
+ <span class="text-bold">Assets</span>
+ <span class="ml-1 Counter">4</span>
+ </div>
+ </summary>
+ <div class="Box Box--condensed mt-3">
+ <div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.2.10/cups-2.2.10-source.tar.gz" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.2.10-source.tar.gz</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">9.92 MB</small>
+ </div>
+ <div class="d-flex flex-justify-between flex-items-center py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/releases/download/v2.2.10/cups-2.2.10-source.tar.gz.sig" rel="nofollow" class="d-flex flex-items-center min-width-0">
+ <svg class="octicon octicon-package flex-shrink-0 text-gray" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 00-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
+ <span class="pl-2 flex-auto min-width-0 text-bold">cups-2.2.10-source.tar.gz.sig</span>
+ </a>
+ <small class="pl-2 text-gray flex-shrink-0">585 Bytes</small>
+ </div>
+
+
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.2.10.zip" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (zip)
+ </a>
+ </div>
+ <div class="d-block py-1 py-md-2 Box-body px-2">
+ <a href="/apple/cups/archive/v2.2.10.tar.gz" rel="nofollow" class="d-flex flex-items-center">
+ <svg class="octicon octicon-file-zip flex-shrink-0 text-gray" width="16" height="16" viewBox="0 0 12 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 00-1 1v12a1 1 0 001 1h10a1 1 0 001-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 003 11v1h4v-1a2 2 0 00-2-2V8H4v1.28zM6 10v1H4v-1h2z"/></svg>
+ <span class="px-1 text-bold">Source code</span> (tar.gz)
+ </a>
+ </div>
+ </div>
+ </div>
+ </details>
+
+
+ </div><!-- /.release-body -->
+</div><!-- /.release -->
+
+ </div>
+
+ </div>
+
+ <div data-pjax class="paginate-container">
+ <div class="pagination"><span class="disabled">Previous</span><a rel="nofollow" href="https://github.com/apple/cups/releases?after=v2.2.10">Next</a></div>
+ </div>
+
+
+ </div>
+</div>
+
+ </main>
+ </div>
+
+
+ </div>
+
+
+<div class="footer container-lg width-full p-responsive" role="contentinfo">
+ <div class="position-relative d-flex flex-row-reverse flex-lg-row flex-wrap flex-lg-nowrap flex-justify-center flex-lg-justify-between pt-6 pb-2 mt-6 f6 text-gray border-top border-gray-light ">
+ <ul class="list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0">
+ <li class="mr-3 mr-lg-0">&copy; 2019 GitHub, Inc.</li>
+ <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to terms, text:terms" href="https://github.com/site/terms">Terms</a></li>
+ <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to privacy, text:privacy" href="https://github.com/site/privacy">Privacy</a></li>
+ <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to security, text:security" href="https://github.com/security">Security</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://githubstatus.com/" data-ga-click="Footer, go to status, text:status">Status</a></li>
+ <li><a data-ga-click="Footer, go to help, text:help" href="https://help.github.com">Help</a></li>
+ </ul>
+
+ <a aria-label="Homepage" title="GitHub" class="footer-octicon d-none d-lg-block mx-lg-4" href="https://github.com">
+ <svg height="24" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
+</a>
+ <ul class="list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0">
+ <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to contact, text:contact" href="https://github.com/contact">Contact GitHub</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://github.com/pricing" data-ga-click="Footer, go to Pricing, text:Pricing">Pricing</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://github.blog" data-ga-click="Footer, go to blog, text:blog">Blog</a></li>
+ <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li>
+
+ </ul>
+ </div>
+ <div class="d-flex flex-justify-center pb-6">
+ <span class="f6 text-gray-light"></span>
+ </div>
+</div>
+
+
+
+ <div id="ajax-error-message" class="ajax-error-message flash flash-error">
+ <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 000 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 00.01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg>
+ <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
+ <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
+ </button>
+ You can’t perform that action at this time.
+ </div>
+
+
+ <script crossorigin="anonymous" integrity="sha512-mdrBasYG+QjgS391PSyVkPr06io3gWplCVbPscguetNEHxIEt+mZwCeCxPR9eMNfda6qNuibNFqBo5ak2+O/hg==" type="application/javascript" src="https://github.githubassets.com/assets/compat-bootstrap-99dac16a.js"></script>
+ <script crossorigin="anonymous" integrity="sha512-QxcIZ5pa4j8P5eL6FLQaU/FAIfodWkzV2rf+7OlyiiiIM9ZaG3MODvgQme+LVDUPMBdmjYYZ+svSlFu5yjFhRw==" type="application/javascript" src="https://github.githubassets.com/assets/frameworks-43170867.js"></script>
+
+ <script crossorigin="anonymous" async="async" integrity="sha512-pWb+XERZ8B74prW8yPNeOMfFEfMfo8DvbO4kDA/DzPk10uGiVYPCB51sRRwisgKrPyfXtC+Igc5k9BfUpepmtQ==" type="application/javascript" src="https://github.githubassets.com/assets/github-bootstrap-a566fe5c.js"></script>
+
+
+
+ <div class="js-stale-session-flash flash flash-warn flash-banner" hidden
+ >
+ <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 000 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 00.01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg>
+ <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ </div>
+ <template id="site-details-dialog">
+ <details class="details-reset details-overlay details-overlay-dark lh-default text-gray-dark hx_rsm" open>
+ <summary role="button" aria-label="Close dialog"></summary>
+ <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
+ <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
+ <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
+ </button>
+ <div class="octocat-spinner my-6 js-details-dialog-spinner"></div>
+ </details-dialog>
+ </details>
+</template>
+
+ <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0">
+ <div class="Popover-message Popover-message--bottom-left Popover-message--large Box box-shadow-large" style="width:360px;">
+ </div>
+</div>
+
+ <div aria-live="polite" class="js-global-screen-reader-notice sr-only"></div>
+
+ </body>
+</html>
+
diff --git a/bitbake/lib/bb/tests/fetch-testdata/debian/pool/main/d/db5.3/index.html b/bitbake/lib/bb/tests/fetch-testdata/debian/pool/main/d/db5.3/index.html
new file mode 100644
index 0000000000..a5a6f4839e
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/debian/pool/main/d/db5.3/index.html
@@ -0,0 +1,509 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /debian/pool/main/d/db5.3</title>
+ </head>
+ <body>
+<h1>Index of /debian/pool/main/d/db5.3</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th></tr>
+ <tr><th colspan="4"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/debian/pool/main/d/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-doc_5.3.28+dfsg1-0.5_all.deb">db5.3-doc_5.3.28+dfsg1-0.5_all.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right"> 15M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-doc_5.3.28+dfsg1-0.6_all.deb">db5.3-doc_5.3.28+dfsg1-0.6_all.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right"> 15M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-doc_5.3.28-9+deb8u1_all.deb">db5.3-doc_5.3.28-9+deb8u1_all.deb</a></td><td align="right">2017-11-18 20:15 </td><td align="right"> 18M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-doc_5.3.28-12+deb9u1_all.deb">db5.3-doc_5.3.28-12+deb9u1_all.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right"> 18M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.5_amd64.deb">db5.3-sql-util_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right"> 21K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.5_arm64.deb">db5.3-sql-util_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.5_armel.deb">db5.3-sql-util_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right"> 20K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.5_armhf.deb">db5.3-sql-util_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.5_i386.deb">db5.3-sql-util_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right"> 22K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.5_mips.deb">db5.3-sql-util_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.5_mips64el.deb">db5.3-sql-util_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.5_mipsel.deb">db5.3-sql-util_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.5_ppc64el.deb">db5.3-sql-util_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right"> 23K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.5_s390x.deb">db5.3-sql-util_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right"> 20K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.6_amd64.deb">db5.3-sql-util_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right"> 21K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.6_arm64.deb">db5.3-sql-util_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.6_armel.deb">db5.3-sql-util_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right"> 20K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.6_armhf.deb">db5.3-sql-util_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.6_i386.deb">db5.3-sql-util_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right"> 22K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.6_mips64el.deb">db5.3-sql-util_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.6_mipsel.deb">db5.3-sql-util_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.6_ppc64el.deb">db5.3-sql-util_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right"> 23K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28+dfsg1-0.6_s390x.deb">db5.3-sql-util_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right"> 20K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-9+deb8u1_amd64.deb">db5.3-sql-util_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right"> 21K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-9+deb8u1_armel.deb">db5.3-sql-util_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right"> 20K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-9+deb8u1_armhf.deb">db5.3-sql-util_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-9+deb8u1_i386.deb">db5.3-sql-util_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right"> 22K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-12+deb9u1_amd64.deb">db5.3-sql-util_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right"> 20K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-12+deb9u1_arm64.deb">db5.3-sql-util_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right"> 18K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-12+deb9u1_armel.deb">db5.3-sql-util_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right"> 20K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-12+deb9u1_armhf.deb">db5.3-sql-util_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-12+deb9u1_i386.deb">db5.3-sql-util_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right"> 22K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-12+deb9u1_mips.deb">db5.3-sql-util_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-12+deb9u1_mips64el.deb">db5.3-sql-util_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-12+deb9u1_mipsel.deb">db5.3-sql-util_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-12+deb9u1_ppc64el.deb">db5.3-sql-util_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right"> 19K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-sql-util_5.3.28-12+deb9u1_s390x.deb">db5.3-sql-util_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right"> 20K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.5_amd64.deb">db5.3-util_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right"> 63K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.5_arm64.deb">db5.3-util_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right"> 63K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.5_armel.deb">db5.3-util_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right"> 58K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.5_armhf.deb">db5.3-util_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right"> 59K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.5_i386.deb">db5.3-util_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right"> 65K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.5_mips.deb">db5.3-util_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right"> 62K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.5_mips64el.deb">db5.3-util_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right"> 64K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.5_mipsel.deb">db5.3-util_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right"> 63K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.5_ppc64el.deb">db5.3-util_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right"> 69K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.5_s390x.deb">db5.3-util_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right"> 64K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.6_amd64.deb">db5.3-util_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right"> 63K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.6_arm64.deb">db5.3-util_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right"> 63K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.6_armel.deb">db5.3-util_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right"> 58K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.6_armhf.deb">db5.3-util_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right"> 59K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.6_i386.deb">db5.3-util_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right"> 65K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.6_mips64el.deb">db5.3-util_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right"> 64K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.6_mipsel.deb">db5.3-util_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right"> 63K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.6_ppc64el.deb">db5.3-util_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right"> 69K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28+dfsg1-0.6_s390x.deb">db5.3-util_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right"> 64K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-9+deb8u1_amd64.deb">db5.3-util_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right"> 63K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-9+deb8u1_armel.deb">db5.3-util_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right"> 60K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-9+deb8u1_armhf.deb">db5.3-util_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right"> 61K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-9+deb8u1_i386.deb">db5.3-util_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right"> 65K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-12+deb9u1_amd64.deb">db5.3-util_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right"> 63K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-12+deb9u1_arm64.deb">db5.3-util_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right"> 60K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-12+deb9u1_armel.deb">db5.3-util_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right"> 60K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-12+deb9u1_armhf.deb">db5.3-util_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right"> 61K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-12+deb9u1_i386.deb">db5.3-util_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right"> 66K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-12+deb9u1_mips.deb">db5.3-util_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right"> 62K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-12+deb9u1_mips64el.deb">db5.3-util_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right"> 64K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-12+deb9u1_mipsel.deb">db5.3-util_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right"> 63K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-12+deb9u1_ppc64el.deb">db5.3-util_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right"> 60K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3-util_5.3.28-12+deb9u1_s390x.deb">db5.3-util_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right"> 64K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3_5.3.28+dfsg1-0.5.debian.tar.xz">db5.3_5.3.28+dfsg1-0.5.debian.tar.xz</a></td><td align="right">2019-02-26 08:51 </td><td align="right"> 28K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3_5.3.28+dfsg1-0.5.dsc">db5.3_5.3.28+dfsg1-0.5.dsc</a></td><td align="right">2019-02-26 08:51 </td><td align="right">2.7K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3_5.3.28+dfsg1-0.6.debian.tar.xz">db5.3_5.3.28+dfsg1-0.6.debian.tar.xz</a></td><td align="right">2019-03-12 04:27 </td><td align="right"> 29K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3_5.3.28+dfsg1-0.6.dsc">db5.3_5.3.28+dfsg1-0.6.dsc</a></td><td align="right">2019-03-12 04:27 </td><td align="right">3.1K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3_5.3.28+dfsg1.orig.tar.xz">db5.3_5.3.28+dfsg1.orig.tar.xz</a></td><td align="right">2018-08-09 01:52 </td><td align="right"> 19M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3_5.3.28-9+deb8u1.debian.tar.xz">db5.3_5.3.28-9+deb8u1.debian.tar.xz</a></td><td align="right">2017-11-18 20:15 </td><td align="right"> 28K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3_5.3.28-9+deb8u1.dsc">db5.3_5.3.28-9+deb8u1.dsc</a></td><td align="right">2017-11-18 20:15 </td><td align="right">3.2K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3_5.3.28-12+deb9u1.debian.tar.xz">db5.3_5.3.28-12+deb9u1.debian.tar.xz</a></td><td align="right">2017-09-24 16:26 </td><td align="right"> 28K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3_5.3.28-12+deb9u1.dsc">db5.3_5.3.28-12+deb9u1.dsc</a></td><td align="right">2017-09-24 16:26 </td><td align="right">3.2K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="db5.3_5.3.28.orig.tar.xz">db5.3_5.3.28.orig.tar.xz</a></td><td align="right">2013-10-27 14:01 </td><td align="right"> 23M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3++-dev_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right">760K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3++-dev_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">722K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.5_armel.deb">libdb5.3++-dev_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">668K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3++-dev_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">692K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.5_i386.deb">libdb5.3++-dev_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right">842K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.5_mips.deb">libdb5.3++-dev_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">773K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3++-dev_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">801K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3++-dev_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">789K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3++-dev_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">816K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3++-dev_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">693K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3++-dev_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">759K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3++-dev_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">722K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.6_armel.deb">libdb5.3++-dev_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">668K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3++-dev_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right">692K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.6_i386.deb">libdb5.3++-dev_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right">842K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3++-dev_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">801K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3++-dev_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right">789K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3++-dev_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">816K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3++-dev_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right">693K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-9+deb8u1_amd64.deb">libdb5.3++-dev_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">740K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-9+deb8u1_armel.deb">libdb5.3++-dev_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">643K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-9+deb8u1_armhf.deb">libdb5.3++-dev_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">672K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-9+deb8u1_i386.deb">libdb5.3++-dev_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">780K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-12+deb9u1_amd64.deb">libdb5.3++-dev_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">757K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-12+deb9u1_arm64.deb">libdb5.3++-dev_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">663K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-12+deb9u1_armel.deb">libdb5.3++-dev_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">676K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-12+deb9u1_armhf.deb">libdb5.3++-dev_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">690K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-12+deb9u1_i386.deb">libdb5.3++-dev_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">836K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-12+deb9u1_mips.deb">libdb5.3++-dev_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">768K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-12+deb9u1_mips64el.deb">libdb5.3++-dev_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">795K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-12+deb9u1_mipsel.deb">libdb5.3++-dev_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">786K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3++-dev_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">701K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++-dev_5.3.28-12+deb9u1_s390x.deb">libdb5.3++-dev_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">714K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3++_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right">690K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3++_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">628K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.5_armel.deb">libdb5.3++_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">576K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3++_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">600K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.5_i386.deb">libdb5.3++_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right">755K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.5_mips.deb">libdb5.3++_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">595K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3++_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">604K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3++_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">604K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3++_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">723K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3++_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">619K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3++_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">690K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3++_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">629K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.6_armel.deb">libdb5.3++_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">574K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3++_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right">600K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.6_i386.deb">libdb5.3++_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right">755K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3++_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">604K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3++_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right">604K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3++_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">724K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3++_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right">620K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-9+deb8u1_amd64.deb">libdb5.3++_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">691K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-9+deb8u1_armel.deb">libdb5.3++_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">580K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-9+deb8u1_armhf.deb">libdb5.3++_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">606K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-9+deb8u1_i386.deb">libdb5.3++_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">749K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-12+deb9u1_amd64.deb">libdb5.3++_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">687K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-12+deb9u1_arm64.deb">libdb5.3++_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">574K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-12+deb9u1_armel.deb">libdb5.3++_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">575K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-12+deb9u1_armhf.deb">libdb5.3++_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">600K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-12+deb9u1_i386.deb">libdb5.3++_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">751K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-12+deb9u1_mips.deb">libdb5.3++_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">593K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-12+deb9u1_mips64el.deb">libdb5.3++_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">601K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-12+deb9u1_mipsel.deb">libdb5.3++_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">602K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3++_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">618K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3++_5.3.28-12+deb9u1_s390x.deb">libdb5.3++_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">637K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3-dbg_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right"> 43M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3-dbg_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right"> 42M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.5_armel.deb">libdb5.3-dbg_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right"> 42M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3-dbg_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right"> 42M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.5_i386.deb">libdb5.3-dbg_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right"> 41M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.5_mips.deb">libdb5.3-dbg_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right"> 43M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3-dbg_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right"> 43M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3-dbg_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right"> 42M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3-dbg_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right"> 42M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3-dbg_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right"> 44M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3-dbg_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right"> 43M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3-dbg_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right"> 42M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.6_armel.deb">libdb5.3-dbg_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right"> 42M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3-dbg_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right"> 42M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.6_i386.deb">libdb5.3-dbg_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right"> 41M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3-dbg_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right"> 43M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3-dbg_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right"> 42M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3-dbg_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right"> 42M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3-dbg_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right"> 44M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-9+deb8u1_amd64.deb">libdb5.3-dbg_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right"> 34M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-9+deb8u1_armel.deb">libdb5.3-dbg_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right"> 35M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-9+deb8u1_armhf.deb">libdb5.3-dbg_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right"> 35M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-9+deb8u1_i386.deb">libdb5.3-dbg_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right"> 32M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-12+deb9u1_amd64.deb">libdb5.3-dbg_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right"> 40M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-12+deb9u1_arm64.deb">libdb5.3-dbg_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right"> 40M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-12+deb9u1_armel.deb">libdb5.3-dbg_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right"> 39M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-12+deb9u1_armhf.deb">libdb5.3-dbg_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right"> 39M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-12+deb9u1_i386.deb">libdb5.3-dbg_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right"> 38M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-12+deb9u1_mips.deb">libdb5.3-dbg_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right"> 41M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-12+deb9u1_mips64el.deb">libdb5.3-dbg_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right"> 40M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-12+deb9u1_mipsel.deb">libdb5.3-dbg_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right"> 39M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3-dbg_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right"> 40M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dbg_5.3.28-12+deb9u1_s390x.deb">libdb5.3-dbg_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right"> 42M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3-dev_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right">743K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3-dev_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">707K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.5_armel.deb">libdb5.3-dev_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">654K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3-dev_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">677K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.5_i386.deb">libdb5.3-dev_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right">822K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.5_mips.deb">libdb5.3-dev_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">753K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3-dev_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">780K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3-dev_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">769K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3-dev_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">797K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3-dev_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">679K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3-dev_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">743K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3-dev_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">707K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.6_armel.deb">libdb5.3-dev_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">654K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3-dev_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right">677K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.6_i386.deb">libdb5.3-dev_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right">822K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3-dev_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">780K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3-dev_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right">769K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3-dev_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">797K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3-dev_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right">679K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-9+deb8u1_amd64.deb">libdb5.3-dev_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">725K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-9+deb8u1_armel.deb">libdb5.3-dev_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">630K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-9+deb8u1_armhf.deb">libdb5.3-dev_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">659K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-9+deb8u1_i386.deb">libdb5.3-dev_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">766K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-12+deb9u1_amd64.deb">libdb5.3-dev_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">742K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-12+deb9u1_arm64.deb">libdb5.3-dev_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">648K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-12+deb9u1_armel.deb">libdb5.3-dev_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">660K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-12+deb9u1_armhf.deb">libdb5.3-dev_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">676K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-12+deb9u1_i386.deb">libdb5.3-dev_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">817K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-12+deb9u1_mips.deb">libdb5.3-dev_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">748K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-12+deb9u1_mips64el.deb">libdb5.3-dev_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">774K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-12+deb9u1_mipsel.deb">libdb5.3-dev_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">765K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3-dev_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">682K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-dev_5.3.28-12+deb9u1_s390x.deb">libdb5.3-dev_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">699K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right">757K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">720K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.5_armel.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">662K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">688K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.5_i386.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right">840K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.5_mips.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">768K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">795K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">784K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">814K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">688K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">756K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">721K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.6_armel.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">663K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right">688K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.6_i386.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right">840K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">796K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right">785K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">814K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3-java-dev_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right">688K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-9+deb8u1_amd64.deb">libdb5.3-java-dev_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">737K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-9+deb8u1_armel.deb">libdb5.3-java-dev_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">637K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-9+deb8u1_armhf.deb">libdb5.3-java-dev_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">666K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-9+deb8u1_i386.deb">libdb5.3-java-dev_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">781K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-12+deb9u1_amd64.deb">libdb5.3-java-dev_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">756K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-12+deb9u1_arm64.deb">libdb5.3-java-dev_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">657K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-12+deb9u1_armel.deb">libdb5.3-java-dev_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">670K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-12+deb9u1_armhf.deb">libdb5.3-java-dev_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">686K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-12+deb9u1_i386.deb">libdb5.3-java-dev_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">836K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-12+deb9u1_mips.deb">libdb5.3-java-dev_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">763K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-12+deb9u1_mips64el.deb">libdb5.3-java-dev_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">789K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-12+deb9u1_mipsel.deb">libdb5.3-java-dev_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">780K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3-java-dev_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">691K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-dev_5.3.28-12+deb9u1_s390x.deb">libdb5.3-java-dev_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">711K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-9+deb8u1_amd64.deb">libdb5.3-java-gcj_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">602K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-9+deb8u1_armel.deb">libdb5.3-java-gcj_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">455K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-9+deb8u1_armhf.deb">libdb5.3-java-gcj_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">450K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-9+deb8u1_i386.deb">libdb5.3-java-gcj_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">503K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-12+deb9u1_amd64.deb">libdb5.3-java-gcj_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">602K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-12+deb9u1_arm64.deb">libdb5.3-java-gcj_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">595K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-12+deb9u1_armel.deb">libdb5.3-java-gcj_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">453K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-12+deb9u1_armhf.deb">libdb5.3-java-gcj_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">447K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-12+deb9u1_i386.deb">libdb5.3-java-gcj_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">518K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-12+deb9u1_mips.deb">libdb5.3-java-gcj_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">463K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-12+deb9u1_mips64el.deb">libdb5.3-java-gcj_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">474K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-12+deb9u1_mipsel.deb">libdb5.3-java-gcj_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">471K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3-java-gcj_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">611K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-gcj_5.3.28-12+deb9u1_s390x.deb">libdb5.3-java-gcj_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">578K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right">696K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">635K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.5_armel.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">580K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">606K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.5_i386.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right">763K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.5_mips.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">596K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">603K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">605K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">732K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">624K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">696K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">636K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.6_armel.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">581K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right">606K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.6_i386.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right">762K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">603K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right">605K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">733K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3-java-jni_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right">625K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-9+deb8u1_amd64.deb">libdb5.3-java-jni_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">696K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-9+deb8u1_armel.deb">libdb5.3-java-jni_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">583K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-9+deb8u1_armhf.deb">libdb5.3-java-jni_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">612K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-9+deb8u1_i386.deb">libdb5.3-java-jni_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">754K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-12+deb9u1_amd64.deb">libdb5.3-java-jni_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">695K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-12+deb9u1_arm64.deb">libdb5.3-java-jni_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">574K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-12+deb9u1_armel.deb">libdb5.3-java-jni_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">580K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-12+deb9u1_armhf.deb">libdb5.3-java-jni_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">606K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-12+deb9u1_i386.deb">libdb5.3-java-jni_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">758K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-12+deb9u1_mips.deb">libdb5.3-java-jni_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">593K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-12+deb9u1_mips64el.deb">libdb5.3-java-jni_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">600K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-12+deb9u1_mipsel.deb">libdb5.3-java-jni_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">603K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3-java-jni_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">618K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java-jni_5.3.28-12+deb9u1_s390x.deb">libdb5.3-java-jni_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">641K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java_5.3.28+dfsg1-0.5_all.deb">libdb5.3-java_5.3.28+dfsg1-0.5_all.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">575K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java_5.3.28+dfsg1-0.6_all.deb">libdb5.3-java_5.3.28+dfsg1-0.6_all.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">575K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java_5.3.28-9+deb8u1_all.deb">libdb5.3-java_5.3.28-9+deb8u1_all.deb</a></td><td align="right">2017-11-18 20:15 </td><td align="right">543K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-java_5.3.28-12+deb9u1_all.deb">libdb5.3-java_5.3.28-12+deb9u1_all.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">548K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">968K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.5_armel.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">901K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">929K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.5_i386.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right">1.1M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.5_mips.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">1.1M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">1.1M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">938K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">968K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.6_armel.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">901K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right">929K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.6_i386.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right">1.1M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">1.1M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">1.1M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3-sql-dev_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right">938K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-9+deb8u1_amd64.deb">libdb5.3-sql-dev_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-9+deb8u1_armel.deb">libdb5.3-sql-dev_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">869K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-9+deb8u1_armhf.deb">libdb5.3-sql-dev_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">906K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-9+deb8u1_i386.deb">libdb5.3-sql-dev_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-12+deb9u1_amd64.deb">libdb5.3-sql-dev_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-12+deb9u1_arm64.deb">libdb5.3-sql-dev_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">891K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-12+deb9u1_armel.deb">libdb5.3-sql-dev_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">910K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-12+deb9u1_armhf.deb">libdb5.3-sql-dev_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">929K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-12+deb9u1_i386.deb">libdb5.3-sql-dev_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">1.1M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-12+deb9u1_mips.deb">libdb5.3-sql-dev_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-12+deb9u1_mips64el.deb">libdb5.3-sql-dev_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-12+deb9u1_mipsel.deb">libdb5.3-sql-dev_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3-sql-dev_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">939K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql-dev_5.3.28-12+deb9u1_s390x.deb">libdb5.3-sql-dev_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">965K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3-sql_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right">885K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3-sql_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">808K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.5_armel.deb">libdb5.3-sql_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">737K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3-sql_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">766K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.5_i386.deb">libdb5.3-sql_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right">963K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.5_mips.deb">libdb5.3-sql_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">777K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3-sql_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">789K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3-sql_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">788K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3-sql_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">928K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3-sql_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">794K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3-sql_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">883K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3-sql_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">808K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.6_armel.deb">libdb5.3-sql_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">739K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3-sql_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right">766K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.6_i386.deb">libdb5.3-sql_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right">963K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3-sql_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">789K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3-sql_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right">788K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3-sql_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">927K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3-sql_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right">794K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-9+deb8u1_amd64.deb">libdb5.3-sql_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">882K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-9+deb8u1_armel.deb">libdb5.3-sql_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">742K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-9+deb8u1_armhf.deb">libdb5.3-sql_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">774K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-9+deb8u1_i386.deb">libdb5.3-sql_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">954K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-12+deb9u1_amd64.deb">libdb5.3-sql_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">879K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-12+deb9u1_arm64.deb">libdb5.3-sql_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">733K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-12+deb9u1_armel.deb">libdb5.3-sql_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">737K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-12+deb9u1_armhf.deb">libdb5.3-sql_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">766K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-12+deb9u1_i386.deb">libdb5.3-sql_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">958K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-12+deb9u1_mips.deb">libdb5.3-sql_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">776K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-12+deb9u1_mips64el.deb">libdb5.3-sql_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">786K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-12+deb9u1_mipsel.deb">libdb5.3-sql_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">788K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3-sql_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">786K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-sql_5.3.28-12+deb9u1_s390x.deb">libdb5.3-sql_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">817K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right">842K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">804K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.5_armel.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">751K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">774K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.5_i386.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right">927K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.5_mips.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">856K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">885K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">874K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">900K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">773K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">842K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">804K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.6_armel.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">751K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right">774K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.6_i386.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right">927K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">886K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right">874K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">900K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3-stl-dev_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right">774K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-9+deb8u1_amd64.deb">libdb5.3-stl-dev_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">826K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-9+deb8u1_armel.deb">libdb5.3-stl-dev_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">727K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-9+deb8u1_armhf.deb">libdb5.3-stl-dev_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">757K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-9+deb8u1_i386.deb">libdb5.3-stl-dev_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">868K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-12+deb9u1_amd64.deb">libdb5.3-stl-dev_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">838K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-12+deb9u1_arm64.deb">libdb5.3-stl-dev_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">745K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-12+deb9u1_armel.deb">libdb5.3-stl-dev_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">759K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-12+deb9u1_armhf.deb">libdb5.3-stl-dev_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">773K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-12+deb9u1_i386.deb">libdb5.3-stl-dev_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">920K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-12+deb9u1_mips.deb">libdb5.3-stl-dev_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">852K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-12+deb9u1_mips64el.deb">libdb5.3-stl-dev_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">880K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-12+deb9u1_mipsel.deb">libdb5.3-stl-dev_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">870K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3-stl-dev_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">783K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl-dev_5.3.28-12+deb9u1_s390x.deb">libdb5.3-stl-dev_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">795K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3-stl_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right">711K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3-stl_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">650K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.5_armel.deb">libdb5.3-stl_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">592K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3-stl_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">618K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.5_i386.deb">libdb5.3-stl_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right">779K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.5_mips.deb">libdb5.3-stl_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">614K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3-stl_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">623K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3-stl_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">623K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3-stl_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">746K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3-stl_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">639K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3-stl_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">712K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3-stl_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">649K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.6_armel.deb">libdb5.3-stl_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">592K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3-stl_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right">618K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.6_i386.deb">libdb5.3-stl_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right">779K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3-stl_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">623K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3-stl_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right">624K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3-stl_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">746K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3-stl_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right">639K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-9+deb8u1_amd64.deb">libdb5.3-stl_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">714K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-9+deb8u1_armel.deb">libdb5.3-stl_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">599K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-9+deb8u1_armhf.deb">libdb5.3-stl_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">627K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-9+deb8u1_i386.deb">libdb5.3-stl_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">774K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-12+deb9u1_amd64.deb">libdb5.3-stl_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">707K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-12+deb9u1_arm64.deb">libdb5.3-stl_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">594K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-12+deb9u1_armel.deb">libdb5.3-stl_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">591K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-12+deb9u1_armhf.deb">libdb5.3-stl_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">617K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-12+deb9u1_i386.deb">libdb5.3-stl_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">774K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-12+deb9u1_mips.deb">libdb5.3-stl_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">612K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-12+deb9u1_mips64el.deb">libdb5.3-stl_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">620K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-12+deb9u1_mipsel.deb">libdb5.3-stl_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">622K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3-stl_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">639K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-stl_5.3.28-12+deb9u1_s390x.deb">libdb5.3-stl_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">657K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3-tcl_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right">954K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3-tcl_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">894K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.5_armel.deb">libdb5.3-tcl_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">805K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3-tcl_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">826K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.5_i386.deb">libdb5.3-tcl_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.5_mips.deb">libdb5.3-tcl_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">921K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3-tcl_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">952K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3-tcl_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">941K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3-tcl_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3-tcl_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">854K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3-tcl_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">954K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3-tcl_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">894K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.6_armel.deb">libdb5.3-tcl_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">803K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3-tcl_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right">825K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.6_i386.deb">libdb5.3-tcl_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3-tcl_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">952K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3-tcl_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right">942K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3-tcl_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3-tcl_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right">853K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-9+deb8u1_amd64.deb">libdb5.3-tcl_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">1.1M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-9+deb8u1_armel.deb">libdb5.3-tcl_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">971K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-9+deb8u1_armhf.deb">libdb5.3-tcl_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-9+deb8u1_i386.deb">libdb5.3-tcl_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">1.3M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-12+deb9u1_amd64.deb">libdb5.3-tcl_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">949K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-12+deb9u1_arm64.deb">libdb5.3-tcl_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">809K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-12+deb9u1_armel.deb">libdb5.3-tcl_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">808K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-12+deb9u1_armhf.deb">libdb5.3-tcl_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">823K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-12+deb9u1_i386.deb">libdb5.3-tcl_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">1.0M</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-12+deb9u1_mips.deb">libdb5.3-tcl_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">915K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-12+deb9u1_mips64el.deb">libdb5.3-tcl_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">943K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-12+deb9u1_mipsel.deb">libdb5.3-tcl_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">936K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3-tcl_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">871K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3-tcl_5.3.28-12+deb9u1_s390x.deb">libdb5.3-tcl_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">885K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.5_amd64.deb">libdb5.3_5.3.28+dfsg1-0.5_amd64.deb</a></td><td align="right">2019-02-26 10:11 </td><td align="right">667K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.5_arm64.deb">libdb5.3_5.3.28+dfsg1-0.5_arm64.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">607K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.5_armel.deb">libdb5.3_5.3.28+dfsg1-0.5_armel.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">558K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.5_armhf.deb">libdb5.3_5.3.28+dfsg1-0.5_armhf.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">583K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.5_i386.deb">libdb5.3_5.3.28+dfsg1-0.5_i386.deb</a></td><td align="right">2019-02-26 09:46 </td><td align="right">730K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.5_mips.deb">libdb5.3_5.3.28+dfsg1-0.5_mips.deb</a></td><td align="right">2019-02-26 10:57 </td><td align="right">575K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.5_mips64el.deb">libdb5.3_5.3.28+dfsg1-0.5_mips64el.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">583K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.5_mipsel.deb">libdb5.3_5.3.28+dfsg1-0.5_mipsel.deb</a></td><td align="right">2019-02-26 12:42 </td><td align="right">584K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.5_ppc64el.deb">libdb5.3_5.3.28+dfsg1-0.5_ppc64el.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">701K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.5_s390x.deb">libdb5.3_5.3.28+dfsg1-0.5_s390x.deb</a></td><td align="right">2019-02-26 09:56 </td><td align="right">599K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.6_amd64.deb">libdb5.3_5.3.28+dfsg1-0.6_amd64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">667K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.6_arm64.deb">libdb5.3_5.3.28+dfsg1-0.6_arm64.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">607K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.6_armel.deb">libdb5.3_5.3.28+dfsg1-0.6_armel.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">559K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.6_armhf.deb">libdb5.3_5.3.28+dfsg1-0.6_armhf.deb</a></td><td align="right">2019-03-12 06:14 </td><td align="right">583K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.6_i386.deb">libdb5.3_5.3.28+dfsg1-0.6_i386.deb</a></td><td align="right">2019-03-12 05:43 </td><td align="right">730K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.6_mips64el.deb">libdb5.3_5.3.28+dfsg1-0.6_mips64el.deb</a></td><td align="right">2019-03-12 06:29 </td><td align="right">583K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.6_mipsel.deb">libdb5.3_5.3.28+dfsg1-0.6_mipsel.deb</a></td><td align="right">2019-03-12 07:30 </td><td align="right">584K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.6_ppc64el.deb">libdb5.3_5.3.28+dfsg1-0.6_ppc64el.deb</a></td><td align="right">2019-03-12 05:28 </td><td align="right">701K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28+dfsg1-0.6_s390x.deb">libdb5.3_5.3.28+dfsg1-0.6_s390x.deb</a></td><td align="right">2019-03-12 05:13 </td><td align="right">598K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-9+deb8u1_amd64.deb">libdb5.3_5.3.28-9+deb8u1_amd64.deb</a></td><td align="right">2017-11-20 03:40 </td><td align="right">664K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-9+deb8u1_armel.deb">libdb5.3_5.3.28-9+deb8u1_armel.deb</a></td><td align="right">2017-11-20 04:26 </td><td align="right">561K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-9+deb8u1_armhf.deb">libdb5.3_5.3.28-9+deb8u1_armhf.deb</a></td><td align="right">2017-12-02 16:26 </td><td align="right">587K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-9+deb8u1_i386.deb">libdb5.3_5.3.28-9+deb8u1_i386.deb</a></td><td align="right">2017-11-20 03:25 </td><td align="right">721K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-12+deb9u1_amd64.deb">libdb5.3_5.3.28-12+deb9u1_amd64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">663K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-12+deb9u1_arm64.deb">libdb5.3_5.3.28-12+deb9u1_arm64.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">550K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-12+deb9u1_armel.deb">libdb5.3_5.3.28-12+deb9u1_armel.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">556K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-12+deb9u1_armhf.deb">libdb5.3_5.3.28-12+deb9u1_armhf.deb</a></td><td align="right">2017-09-28 10:28 </td><td align="right">581K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-12+deb9u1_i386.deb">libdb5.3_5.3.28-12+deb9u1_i386.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">725K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-12+deb9u1_mips.deb">libdb5.3_5.3.28-12+deb9u1_mips.deb</a></td><td align="right">2017-09-29 16:10 </td><td align="right">572K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-12+deb9u1_mips64el.deb">libdb5.3_5.3.28-12+deb9u1_mips64el.deb</a></td><td align="right">2017-09-28 11:29 </td><td align="right">579K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-12+deb9u1_mipsel.deb">libdb5.3_5.3.28-12+deb9u1_mipsel.deb</a></td><td align="right">2017-09-28 11:14 </td><td align="right">581K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-12+deb9u1_ppc64el.deb">libdb5.3_5.3.28-12+deb9u1_ppc64el.deb</a></td><td align="right">2017-09-28 09:27 </td><td align="right">594K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="libdb5.3_5.3.28-12+deb9u1_s390x.deb">libdb5.3_5.3.28-12+deb9u1_s390x.deb</a></td><td align="right">2017-09-28 09:42 </td><td align="right">615K</td></tr>
+ <tr><th colspan="4"><hr></th></tr>
+</table>
+<address>Apache Server at ftp.debian.org Port 80</address>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/downloads/enchant/1.6.0/index.html b/bitbake/lib/bb/tests/fetch-testdata/downloads/enchant/1.6.0/index.html
new file mode 100644
index 0000000000..b7bfb1e947
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/downloads/enchant/1.6.0/index.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /downloads/enchant/1.6.0</title>
+ </head>
+ <body>
+<h1>Index of /downloads/enchant/1.6.0</h1>
+<table><tr><th><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr><tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[DIR]"></td><td><a href="/downloads/enchant/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="MD5SUM">MD5SUM</a></td><td align="right">01-Apr-2010 23:03 </td><td align="right"> 55 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="enchant-1.6.0.tar.gz">enchant-1.6.0.tar.gz</a></td><td align="right">01-Apr-2010 23:02 </td><td align="right">593K</td><td>&nbsp;</td></tr>
+<tr><th colspan="5"><hr></th></tr>
+</table>
+<address>Apache/2.2.15 (Fedora) Server at www.abisource.com Port 443</address>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v2.8/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v2.8/index.html
new file mode 100644
index 0000000000..9ea077d5b7
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v2.8/index.html
@@ -0,0 +1,774 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v2.8</title>
+ </head>
+ <body>
+<h1>Index of /files/v2.8</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="-*">-*</a></td><td align="right">2012-06-07 12:08 </td><td align="right"> 0 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.0">CMakeChangeLog-2.8.0</a></td><td align="right">2009-11-13 15:41 </td><td align="right"> 13K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.1">CMakeChangeLog-2.8.1</a></td><td align="right">2010-03-17 14:37 </td><td align="right"> 17K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.2">CMakeChangeLog-2.8.2</a></td><td align="right">2010-06-28 14:37 </td><td align="right"> 23K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.3">CMakeChangeLog-2.8.3</a></td><td align="right">2010-11-03 17:21 </td><td align="right"> 41K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.4">CMakeChangeLog-2.8.4</a></td><td align="right">2011-02-16 09:15 </td><td align="right"> 61K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.5">CMakeChangeLog-2.8.5</a></td><td align="right">2011-07-08 10:49 </td><td align="right"> 81K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.6">CMakeChangeLog-2.8.6</a></td><td align="right">2011-12-30 15:30 </td><td align="right">100K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.7">CMakeChangeLog-2.8.7</a></td><td align="right">2011-12-30 15:31 </td><td align="right">115K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.8">CMakeChangeLog-2.8.8</a></td><td align="right">2012-04-18 17:47 </td><td align="right">144K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.9">CMakeChangeLog-2.8.9</a></td><td align="right">2012-08-09 16:29 </td><td align="right">163K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.10">CMakeChangeLog-2.8.10</a></td><td align="right">2012-10-31 15:09 </td><td align="right">185K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.10.1">CMakeChangeLog-2.8.10.1</a></td><td align="right">2012-11-07 11:52 </td><td align="right">186K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.10.2">CMakeChangeLog-2.8.10.2</a></td><td align="right">2012-11-27 15:15 </td><td align="right">186K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.11">CMakeChangeLog-2.8.11</a></td><td align="right">2013-05-16 09:39 </td><td align="right">218K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.12">CMakeChangeLog-2.8.12</a></td><td align="right">2013-10-11 08:57 </td><td align="right">247K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeChangeLog-2.8.12.1">CMakeChangeLog-2.8.12.1</a></td><td align="right">2013-11-08 14:33 </td><td align="right">248K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CMakeVS10FindMake.cmake">CMakeVS10FindMake.cmake</a></td><td align="right">2010-05-27 09:45 </td><td align="right">1.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.0-AIX-powerpc.sh">cmake-2.8.0-AIX-powerpc.sh</a></td><td align="right">2010-02-08 10:44 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-AIX-powerpc.tar.Z">cmake-2.8.0-AIX-powerpc.tar.Z</a></td><td align="right">2010-02-08 10:44 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-AIX-powerpc.tar.gz">cmake-2.8.0-AIX-powerpc.tar.gz</a></td><td align="right">2010-02-08 10:44 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-Darwin-universal.dmg">cmake-2.8.0-Darwin-universal.dmg</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-Darwin-universal.tar.Z">cmake-2.8.0-Darwin-universal.tar.Z</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-Darwin-universal.tar.gz">cmake-2.8.0-Darwin-universal.tar.gz</a></td><td align="right">2009-11-13 15:33 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.0-HP-UX-9000_785.sh">cmake-2.8.0-HP-UX-9000_785.sh</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-HP-UX-9000_785.tar.Z">cmake-2.8.0-HP-UX-9000_785.tar.Z</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-HP-UX-9000_785.tar.gz">cmake-2.8.0-HP-UX-9000_785.tar.gz</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.0-IRIX64-64.sh">cmake-2.8.0-IRIX64-64.sh</a></td><td align="right">2009-11-13 15:32 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-IRIX64-64.tar.Z">cmake-2.8.0-IRIX64-64.tar.Z</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-IRIX64-64.tar.gz">cmake-2.8.0-IRIX64-64.tar.gz</a></td><td align="right">2009-11-13 15:32 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.0-IRIX64-n32.sh">cmake-2.8.0-IRIX64-n32.sh</a></td><td align="right">2009-11-13 15:32 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-IRIX64-n32.tar.Z">cmake-2.8.0-IRIX64-n32.tar.Z</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-IRIX64-n32.tar.gz">cmake-2.8.0-IRIX64-n32.tar.gz</a></td><td align="right">2009-11-13 15:32 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.0-Linux-i386.sh">cmake-2.8.0-Linux-i386.sh</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-Linux-i386.tar.Z">cmake-2.8.0-Linux-i386.tar.Z</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-Linux-i386.tar.gz">cmake-2.8.0-Linux-i386.tar.gz</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.0-SunOS-sparc.sh">cmake-2.8.0-SunOS-sparc.sh</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-SunOS-sparc.tar.Z">cmake-2.8.0-SunOS-sparc.tar.Z</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-SunOS-sparc.tar.gz">cmake-2.8.0-SunOS-sparc.tar.gz</a></td><td align="right">2009-11-13 15:32 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-win32-x86.exe">cmake-2.8.0-win32-x86.exe</a></td><td align="right">2009-11-13 15:32 </td><td align="right">7.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0-win32-x86.zip">cmake-2.8.0-win32-x86.zip</a></td><td align="right">2009-11-13 15:32 </td><td align="right">9.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0.tar.Z">cmake-2.8.0.tar.Z</a></td><td align="right">2009-11-13 15:32 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0.tar.gz">cmake-2.8.0.tar.gz</a></td><td align="right">2009-11-13 15:32 </td><td align="right">3.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.0.zip">cmake-2.8.0.zip</a></td><td align="right">2009-11-13 15:32 </td><td align="right">4.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.1-AIX-powerpc.sh">cmake-2.8.1-AIX-powerpc.sh</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-AIX-powerpc.tar.Z">cmake-2.8.1-AIX-powerpc.tar.Z</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-AIX-powerpc.tar.gz">cmake-2.8.1-AIX-powerpc.tar.gz</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-Darwin-universal.dmg">cmake-2.8.1-Darwin-universal.dmg</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-Darwin-universal.tar.Z">cmake-2.8.1-Darwin-universal.tar.Z</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-Darwin-universal.tar.gz">cmake-2.8.1-Darwin-universal.tar.gz</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.1-HP-UX-9000_785.sh">cmake-2.8.1-HP-UX-9000_785.sh</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-HP-UX-9000_785.tar.Z">cmake-2.8.1-HP-UX-9000_785.tar.Z</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-HP-UX-9000_785.tar.gz">cmake-2.8.1-HP-UX-9000_785.tar.gz</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.1-IRIX64-64.sh">cmake-2.8.1-IRIX64-64.sh</a></td><td align="right">2010-04-06 14:37 </td><td align="right">9.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-IRIX64-64.tar.Z">cmake-2.8.1-IRIX64-64.tar.Z</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-IRIX64-64.tar.gz">cmake-2.8.1-IRIX64-64.tar.gz</a></td><td align="right">2010-04-06 14:37 </td><td align="right">9.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.1-IRIX64-n32.sh">cmake-2.8.1-IRIX64-n32.sh</a></td><td align="right">2010-04-06 14:37 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-IRIX64-n32.tar.Z">cmake-2.8.1-IRIX64-n32.tar.Z</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-IRIX64-n32.tar.gz">cmake-2.8.1-IRIX64-n32.tar.gz</a></td><td align="right">2010-04-06 14:37 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.1-Linux-i386.sh">cmake-2.8.1-Linux-i386.sh</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-Linux-i386.tar.Z">cmake-2.8.1-Linux-i386.tar.Z</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-Linux-i386.tar.gz">cmake-2.8.1-Linux-i386.tar.gz</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.1-SunOS-sparc.sh">cmake-2.8.1-SunOS-sparc.sh</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-SunOS-sparc.tar.Z">cmake-2.8.1-SunOS-sparc.tar.Z</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-SunOS-sparc.tar.gz">cmake-2.8.1-SunOS-sparc.tar.gz</a></td><td align="right">2010-04-06 14:37 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-win32-x86.exe">cmake-2.8.1-win32-x86.exe</a></td><td align="right">2010-04-06 14:37 </td><td align="right">7.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1-win32-x86.zip">cmake-2.8.1-win32-x86.zip</a></td><td align="right">2010-04-06 14:37 </td><td align="right">9.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1.tar.Z">cmake-2.8.1.tar.Z</a></td><td align="right">2010-04-06 14:37 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1.tar.gz">cmake-2.8.1.tar.gz</a></td><td align="right">2010-04-06 14:37 </td><td align="right">3.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.1.zip">cmake-2.8.1.zip</a></td><td align="right">2010-04-06 14:37 </td><td align="right">4.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.2-AIX-powerpc.sh">cmake-2.8.2-AIX-powerpc.sh</a></td><td align="right">2010-06-28 14:10 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-AIX-powerpc.tar.Z">cmake-2.8.2-AIX-powerpc.tar.Z</a></td><td align="right">2010-06-28 14:09 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-AIX-powerpc.tar.gz">cmake-2.8.2-AIX-powerpc.tar.gz</a></td><td align="right">2010-06-28 14:09 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-Darwin-universal.dmg">cmake-2.8.2-Darwin-universal.dmg</a></td><td align="right">2010-06-28 14:10 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-Darwin-universal.tar.Z">cmake-2.8.2-Darwin-universal.tar.Z</a></td><td align="right">2010-06-28 14:10 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-Darwin-universal.tar.gz">cmake-2.8.2-Darwin-universal.tar.gz</a></td><td align="right">2010-06-28 14:09 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.2-HP-UX-9000_785.sh">cmake-2.8.2-HP-UX-9000_785.sh</a></td><td align="right">2010-06-28 14:09 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-HP-UX-9000_785.tar.Z">cmake-2.8.2-HP-UX-9000_785.tar.Z</a></td><td align="right">2010-06-28 14:10 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-HP-UX-9000_785.tar.gz">cmake-2.8.2-HP-UX-9000_785.tar.gz</a></td><td align="right">2010-06-28 14:10 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.2-IRIX64-64.sh">cmake-2.8.2-IRIX64-64.sh</a></td><td align="right">2010-06-28 14:10 </td><td align="right">9.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-IRIX64-64.tar.Z">cmake-2.8.2-IRIX64-64.tar.Z</a></td><td align="right">2010-06-28 14:09 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-IRIX64-64.tar.gz">cmake-2.8.2-IRIX64-64.tar.gz</a></td><td align="right">2010-06-28 14:10 </td><td align="right">9.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.2-IRIX64-n32.sh">cmake-2.8.2-IRIX64-n32.sh</a></td><td align="right">2010-06-28 14:10 </td><td align="right">9.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-IRIX64-n32.tar.Z">cmake-2.8.2-IRIX64-n32.tar.Z</a></td><td align="right">2010-06-28 14:09 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-IRIX64-n32.tar.gz">cmake-2.8.2-IRIX64-n32.tar.gz</a></td><td align="right">2010-06-28 14:10 </td><td align="right">9.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.2-Linux-i386.sh">cmake-2.8.2-Linux-i386.sh</a></td><td align="right">2010-06-28 14:10 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-Linux-i386.tar.Z">cmake-2.8.2-Linux-i386.tar.Z</a></td><td align="right">2010-06-28 14:09 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-Linux-i386.tar.gz">cmake-2.8.2-Linux-i386.tar.gz</a></td><td align="right">2010-06-28 14:10 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.2-SunOS-sparc.sh">cmake-2.8.2-SunOS-sparc.sh</a></td><td align="right">2010-06-28 14:09 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-SunOS-sparc.tar.Z">cmake-2.8.2-SunOS-sparc.tar.Z</a></td><td align="right">2010-06-28 14:10 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-SunOS-sparc.tar.gz">cmake-2.8.2-SunOS-sparc.tar.gz</a></td><td align="right">2010-06-28 14:10 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-win32-x86.exe">cmake-2.8.2-win32-x86.exe</a></td><td align="right">2010-06-28 14:09 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2-win32-x86.zip">cmake-2.8.2-win32-x86.zip</a></td><td align="right">2010-06-28 14:09 </td><td align="right">9.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2.tar.Z">cmake-2.8.2.tar.Z</a></td><td align="right">2010-06-28 14:10 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2.tar.gz">cmake-2.8.2.tar.gz</a></td><td align="right">2010-06-28 14:09 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.2.zip">cmake-2.8.2.zip</a></td><td align="right">2010-06-28 14:10 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.3-AIX-powerpc.sh">cmake-2.8.3-AIX-powerpc.sh</a></td><td align="right">2010-11-03 17:11 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-AIX-powerpc.tar.Z">cmake-2.8.3-AIX-powerpc.tar.Z</a></td><td align="right">2010-11-03 17:11 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-AIX-powerpc.tar.gz">cmake-2.8.3-AIX-powerpc.tar.gz</a></td><td align="right">2010-11-03 17:10 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-Darwin-universal.dmg">cmake-2.8.3-Darwin-universal.dmg</a></td><td align="right">2010-11-03 17:11 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-Darwin-universal.tar.Z">cmake-2.8.3-Darwin-universal.tar.Z</a></td><td align="right">2010-11-03 17:11 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-Darwin-universal.tar.gz">cmake-2.8.3-Darwin-universal.tar.gz</a></td><td align="right">2010-11-03 17:11 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.3-IRIX64-64.sh">cmake-2.8.3-IRIX64-64.sh</a></td><td align="right">2010-11-03 17:11 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-IRIX64-64.tar.Z">cmake-2.8.3-IRIX64-64.tar.Z</a></td><td align="right">2010-11-03 17:11 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-IRIX64-64.tar.gz">cmake-2.8.3-IRIX64-64.tar.gz</a></td><td align="right">2010-11-03 17:11 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.3-IRIX64-n32.sh">cmake-2.8.3-IRIX64-n32.sh</a></td><td align="right">2010-11-03 17:10 </td><td align="right">9.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-IRIX64-n32.tar.Z">cmake-2.8.3-IRIX64-n32.tar.Z</a></td><td align="right">2010-11-03 17:11 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-IRIX64-n32.tar.gz">cmake-2.8.3-IRIX64-n32.tar.gz</a></td><td align="right">2010-11-03 17:10 </td><td align="right">9.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.3-Linux-i386.sh">cmake-2.8.3-Linux-i386.sh</a></td><td align="right">2010-11-03 17:11 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-Linux-i386.tar.Z">cmake-2.8.3-Linux-i386.tar.Z</a></td><td align="right">2010-11-03 17:11 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-Linux-i386.tar.gz">cmake-2.8.3-Linux-i386.tar.gz</a></td><td align="right">2010-11-03 17:10 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.3-SunOS-sparc.sh">cmake-2.8.3-SunOS-sparc.sh</a></td><td align="right">2010-11-03 17:10 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-SunOS-sparc.tar.Z">cmake-2.8.3-SunOS-sparc.tar.Z</a></td><td align="right">2010-11-03 17:11 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-SunOS-sparc.tar.gz">cmake-2.8.3-SunOS-sparc.tar.gz</a></td><td align="right">2010-11-03 17:11 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-win32-x86.exe">cmake-2.8.3-win32-x86.exe</a></td><td align="right">2010-11-03 17:11 </td><td align="right">7.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3-win32-x86.zip">cmake-2.8.3-win32-x86.zip</a></td><td align="right">2010-11-03 17:11 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3.tar.Z">cmake-2.8.3.tar.Z</a></td><td align="right">2010-11-03 17:11 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3.tar.gz">cmake-2.8.3.tar.gz</a></td><td align="right">2010-11-03 17:11 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.3.zip">cmake-2.8.3.zip</a></td><td align="right">2010-11-03 17:11 </td><td align="right">6.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.4-AIX-powerpc.sh">cmake-2.8.4-AIX-powerpc.sh</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-AIX-powerpc.tar.Z">cmake-2.8.4-AIX-powerpc.tar.Z</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-AIX-powerpc.tar.gz">cmake-2.8.4-AIX-powerpc.tar.gz</a></td><td align="right">2011-02-15 15:53 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-Darwin-universal.dmg">cmake-2.8.4-Darwin-universal.dmg</a></td><td align="right">2011-02-15 15:53 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-Darwin-universal.tar.Z">cmake-2.8.4-Darwin-universal.tar.Z</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-Darwin-universal.tar.gz">cmake-2.8.4-Darwin-universal.tar.gz</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.4-IRIX64-64.sh">cmake-2.8.4-IRIX64-64.sh</a></td><td align="right">2011-02-15 15:53 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-IRIX64-64.tar.Z">cmake-2.8.4-IRIX64-64.tar.Z</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-IRIX64-64.tar.gz">cmake-2.8.4-IRIX64-64.tar.gz</a></td><td align="right">2011-02-15 15:54 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.4-IRIX64-n32.sh">cmake-2.8.4-IRIX64-n32.sh</a></td><td align="right">2011-02-15 15:53 </td><td align="right">9.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-IRIX64-n32.tar.Z">cmake-2.8.4-IRIX64-n32.tar.Z</a></td><td align="right">2011-02-15 15:55 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-IRIX64-n32.tar.gz">cmake-2.8.4-IRIX64-n32.tar.gz</a></td><td align="right">2011-02-15 15:54 </td><td align="right">9.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.4-Linux-i386.sh">cmake-2.8.4-Linux-i386.sh</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-Linux-i386.tar.Z">cmake-2.8.4-Linux-i386.tar.Z</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-Linux-i386.tar.gz">cmake-2.8.4-Linux-i386.tar.gz</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.4-SunOS-sparc.sh">cmake-2.8.4-SunOS-sparc.sh</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-SunOS-sparc.tar.Z">cmake-2.8.4-SunOS-sparc.tar.Z</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-SunOS-sparc.tar.gz">cmake-2.8.4-SunOS-sparc.tar.gz</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-win32-x86.exe">cmake-2.8.4-win32-x86.exe</a></td><td align="right">2011-02-15 15:54 </td><td align="right">7.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4-win32-x86.zip">cmake-2.8.4-win32-x86.zip</a></td><td align="right">2011-02-15 15:54 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4.tar.Z">cmake-2.8.4.tar.Z</a></td><td align="right">2011-02-15 15:54 </td><td align="right">8.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4.tar.gz">cmake-2.8.4.tar.gz</a></td><td align="right">2011-02-15 15:54 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.4.zip">cmake-2.8.4.zip</a></td><td align="right">2011-02-15 15:54 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-1-src.tar.bz2">cmake-2.8.5-1-src.tar.bz2</a></td><td align="right">2011-07-08 10:34 </td><td align="right">4.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-1.tar.bz2">cmake-2.8.5-1.tar.bz2</a></td><td align="right">2011-07-08 10:34 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.5-AIX-powerpc.sh">cmake-2.8.5-AIX-powerpc.sh</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-AIX-powerpc.tar.Z">cmake-2.8.5-AIX-powerpc.tar.Z</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-AIX-powerpc.tar.gz">cmake-2.8.5-AIX-powerpc.tar.gz</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-Darwin-universal.dmg">cmake-2.8.5-Darwin-universal.dmg</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-Darwin-universal.tar.Z">cmake-2.8.5-Darwin-universal.tar.Z</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-Darwin-universal.tar.gz">cmake-2.8.5-Darwin-universal.tar.gz</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.5-IRIX64-64.sh">cmake-2.8.5-IRIX64-64.sh</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-IRIX64-64.tar.Z">cmake-2.8.5-IRIX64-64.tar.Z</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-IRIX64-64.tar.gz">cmake-2.8.5-IRIX64-64.tar.gz</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.5-IRIX64-n32.sh">cmake-2.8.5-IRIX64-n32.sh</a></td><td align="right">2011-07-08 10:34 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-IRIX64-n32.tar.Z">cmake-2.8.5-IRIX64-n32.tar.Z</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-IRIX64-n32.tar.gz">cmake-2.8.5-IRIX64-n32.tar.gz</a></td><td align="right">2011-07-08 10:34 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.5-Linux-i386.sh">cmake-2.8.5-Linux-i386.sh</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-Linux-i386.tar.Z">cmake-2.8.5-Linux-i386.tar.Z</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-Linux-i386.tar.gz">cmake-2.8.5-Linux-i386.tar.gz</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.5-SunOS-sparc.sh">cmake-2.8.5-SunOS-sparc.sh</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-SunOS-sparc.tar.Z">cmake-2.8.5-SunOS-sparc.tar.Z</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-SunOS-sparc.tar.gz">cmake-2.8.5-SunOS-sparc.tar.gz</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-win32-x86.exe">cmake-2.8.5-win32-x86.exe</a></td><td align="right">2011-07-08 10:34 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5-win32-x86.zip">cmake-2.8.5-win32-x86.zip</a></td><td align="right">2011-07-08 10:34 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5.tar.Z">cmake-2.8.5.tar.Z</a></td><td align="right">2011-07-08 10:34 </td><td align="right">8.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5.tar.gz">cmake-2.8.5.tar.gz</a></td><td align="right">2011-07-08 10:34 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.5.zip">cmake-2.8.5.zip</a></td><td align="right">2011-07-08 10:34 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-1-src.tar.bz2">cmake-2.8.6-1-src.tar.bz2</a></td><td align="right">2011-10-04 13:59 </td><td align="right">4.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-1.tar.bz2">cmake-2.8.6-1.tar.bz2</a></td><td align="right">2011-10-04 13:59 </td><td align="right">6.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.6-AIX-powerpc.sh">cmake-2.8.6-AIX-powerpc.sh</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-AIX-powerpc.tar.Z">cmake-2.8.6-AIX-powerpc.tar.Z</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-AIX-powerpc.tar.gz">cmake-2.8.6-AIX-powerpc.tar.gz</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-Darwin-universal.dmg">cmake-2.8.6-Darwin-universal.dmg</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-Darwin-universal.tar.Z">cmake-2.8.6-Darwin-universal.tar.Z</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-Darwin-universal.tar.gz">cmake-2.8.6-Darwin-universal.tar.gz</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-Darwin64-universal.dmg">cmake-2.8.6-Darwin64-universal.dmg</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-Darwin64-universal.tar.Z">cmake-2.8.6-Darwin64-universal.tar.Z</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-Darwin64-universal.tar.gz">cmake-2.8.6-Darwin64-universal.tar.gz</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.6-IRIX64-64.sh">cmake-2.8.6-IRIX64-64.sh</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-IRIX64-64.tar.Z">cmake-2.8.6-IRIX64-64.tar.Z</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-IRIX64-64.tar.gz">cmake-2.8.6-IRIX64-64.tar.gz</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.6-IRIX64-n32.sh">cmake-2.8.6-IRIX64-n32.sh</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-IRIX64-n32.tar.Z">cmake-2.8.6-IRIX64-n32.tar.Z</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-IRIX64-n32.tar.gz">cmake-2.8.6-IRIX64-n32.tar.gz</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.6-Linux-i386.sh">cmake-2.8.6-Linux-i386.sh</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-Linux-i386.tar.Z">cmake-2.8.6-Linux-i386.tar.Z</a></td><td align="right">2011-10-04 13:59 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-Linux-i386.tar.gz">cmake-2.8.6-Linux-i386.tar.gz</a></td><td align="right">2011-10-04 13:58 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-win32-x86.exe">cmake-2.8.6-win32-x86.exe</a></td><td align="right">2011-10-04 13:58 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6-win32-x86.zip">cmake-2.8.6-win32-x86.zip</a></td><td align="right">2011-10-04 13:58 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6.tar.Z">cmake-2.8.6.tar.Z</a></td><td align="right">2011-10-04 13:58 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6.tar.gz">cmake-2.8.6.tar.gz</a></td><td align="right">2011-10-04 13:58 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.6.zip">cmake-2.8.6.zip</a></td><td align="right">2011-10-04 13:58 </td><td align="right">7.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-1-src.tar.bz2">cmake-2.8.7-1-src.tar.bz2</a></td><td align="right">2011-12-30 14:14 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-1.tar.bz2">cmake-2.8.7-1.tar.bz2</a></td><td align="right">2011-12-30 14:14 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.7-AIX-powerpc.sh">cmake-2.8.7-AIX-powerpc.sh</a></td><td align="right">2012-01-03 16:51 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-AIX-powerpc.tar.Z">cmake-2.8.7-AIX-powerpc.tar.Z</a></td><td align="right">2012-01-03 16:51 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-AIX-powerpc.tar.gz">cmake-2.8.7-AIX-powerpc.tar.gz</a></td><td align="right">2012-01-03 16:51 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-Darwin-universal.dmg">cmake-2.8.7-Darwin-universal.dmg</a></td><td align="right">2011-12-30 14:14 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-Darwin-universal.tar.Z">cmake-2.8.7-Darwin-universal.tar.Z</a></td><td align="right">2011-12-30 14:14 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-Darwin-universal.tar.gz">cmake-2.8.7-Darwin-universal.tar.gz</a></td><td align="right">2011-12-30 14:14 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-Darwin64-universal.dmg">cmake-2.8.7-Darwin64-universal.dmg</a></td><td align="right">2011-12-30 14:14 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-Darwin64-universal.tar.Z">cmake-2.8.7-Darwin64-universal.tar.Z</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-Darwin64-universal.tar.gz">cmake-2.8.7-Darwin64-universal.tar.gz</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.7-IRIX64-64.sh">cmake-2.8.7-IRIX64-64.sh</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-IRIX64-64.tar.Z">cmake-2.8.7-IRIX64-64.tar.Z</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-IRIX64-64.tar.gz">cmake-2.8.7-IRIX64-64.tar.gz</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.7-IRIX64-n32.sh">cmake-2.8.7-IRIX64-n32.sh</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-IRIX64-n32.tar.Z">cmake-2.8.7-IRIX64-n32.tar.Z</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-IRIX64-n32.tar.gz">cmake-2.8.7-IRIX64-n32.tar.gz</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.7-Linux-i386.sh">cmake-2.8.7-Linux-i386.sh</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-Linux-i386.tar.Z">cmake-2.8.7-Linux-i386.tar.Z</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-Linux-i386.tar.gz">cmake-2.8.7-Linux-i386.tar.gz</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-win32-x86.exe">cmake-2.8.7-win32-x86.exe</a></td><td align="right">2011-12-30 14:13 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7-win32-x86.zip">cmake-2.8.7-win32-x86.zip</a></td><td align="right">2011-12-30 14:13 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7.tar.Z">cmake-2.8.7.tar.Z</a></td><td align="right">2011-12-30 14:13 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7.tar.gz">cmake-2.8.7.tar.gz</a></td><td align="right">2011-12-30 14:13 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.7.zip">cmake-2.8.7.zip</a></td><td align="right">2011-12-30 14:13 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.8-AIX-powerpc.sh">cmake-2.8.8-AIX-powerpc.sh</a></td><td align="right">2012-04-18 15:23 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-AIX-powerpc.tar.Z">cmake-2.8.8-AIX-powerpc.tar.Z</a></td><td align="right">2012-04-18 15:23 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-AIX-powerpc.tar.gz">cmake-2.8.8-AIX-powerpc.tar.gz</a></td><td align="right">2012-04-18 15:23 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-Darwin-universal.dmg">cmake-2.8.8-Darwin-universal.dmg</a></td><td align="right">2012-04-18 15:23 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-Darwin-universal.tar.Z">cmake-2.8.8-Darwin-universal.tar.Z</a></td><td align="right">2012-04-18 15:23 </td><td align="right"> 49M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-Darwin-universal.tar.gz">cmake-2.8.8-Darwin-universal.tar.gz</a></td><td align="right">2012-04-18 15:23 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-Darwin64-universal.dmg">cmake-2.8.8-Darwin64-universal.dmg</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-Darwin64-universal.tar.Z">cmake-2.8.8-Darwin64-universal.tar.Z</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 44M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-Darwin64-universal.tar.gz">cmake-2.8.8-Darwin64-universal.tar.gz</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.8-IRIX64-64.sh">cmake-2.8.8-IRIX64-64.sh</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-IRIX64-64.tar.Z">cmake-2.8.8-IRIX64-64.tar.Z</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-IRIX64-64.tar.gz">cmake-2.8.8-IRIX64-64.tar.gz</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.8-IRIX64-n32.sh">cmake-2.8.8-IRIX64-n32.sh</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-IRIX64-n32.tar.Z">cmake-2.8.8-IRIX64-n32.tar.Z</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-IRIX64-n32.tar.gz">cmake-2.8.8-IRIX64-n32.tar.gz</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.8-Linux-i386.sh">cmake-2.8.8-Linux-i386.sh</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-Linux-i386.tar.Z">cmake-2.8.8-Linux-i386.tar.Z</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-Linux-i386.tar.gz">cmake-2.8.8-Linux-i386.tar.gz</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.8-SHA-256.txt">cmake-2.8.8-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.8-SHA-256.txt.asc">cmake-2.8.8-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-win32-x86.exe">cmake-2.8.8-win32-x86.exe</a></td><td align="right">2012-04-18 15:22 </td><td align="right">8.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8-win32-x86.zip">cmake-2.8.8-win32-x86.zip</a></td><td align="right">2012-04-18 15:22 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8.tar.Z">cmake-2.8.8.tar.Z</a></td><td align="right">2012-04-18 15:22 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8.tar.gz">cmake-2.8.8.tar.gz</a></td><td align="right">2012-04-18 15:22 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.8.zip">cmake-2.8.8.zip</a></td><td align="right">2012-04-18 15:22 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.9-AIX-powerpc.sh">cmake-2.8.9-AIX-powerpc.sh</a></td><td align="right">2012-08-09 15:36 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-AIX-powerpc.tar.Z">cmake-2.8.9-AIX-powerpc.tar.Z</a></td><td align="right">2012-08-09 15:36 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-AIX-powerpc.tar.gz">cmake-2.8.9-AIX-powerpc.tar.gz</a></td><td align="right">2012-08-09 15:36 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-Darwin-universal.dmg">cmake-2.8.9-Darwin-universal.dmg</a></td><td align="right">2012-08-09 15:36 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-Darwin-universal.tar.Z">cmake-2.8.9-Darwin-universal.tar.Z</a></td><td align="right">2012-08-09 15:36 </td><td align="right"> 50M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-Darwin-universal.tar.gz">cmake-2.8.9-Darwin-universal.tar.gz</a></td><td align="right">2012-08-09 15:36 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-Darwin64-universal.dmg">cmake-2.8.9-Darwin64-universal.dmg</a></td><td align="right">2012-08-09 15:36 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-Darwin64-universal.tar.Z">cmake-2.8.9-Darwin64-universal.tar.Z</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 45M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-Darwin64-universal.tar.gz">cmake-2.8.9-Darwin64-universal.tar.gz</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.9-IRIX64-64.sh">cmake-2.8.9-IRIX64-64.sh</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-IRIX64-64.tar.Z">cmake-2.8.9-IRIX64-64.tar.Z</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-IRIX64-64.tar.gz">cmake-2.8.9-IRIX64-64.tar.gz</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.9-IRIX64-n32.sh">cmake-2.8.9-IRIX64-n32.sh</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-IRIX64-n32.tar.Z">cmake-2.8.9-IRIX64-n32.tar.Z</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-IRIX64-n32.tar.gz">cmake-2.8.9-IRIX64-n32.tar.gz</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.9-Linux-i386.sh">cmake-2.8.9-Linux-i386.sh</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-Linux-i386.tar.Z">cmake-2.8.9-Linux-i386.tar.Z</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-Linux-i386.tar.gz">cmake-2.8.9-Linux-i386.tar.gz</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.9-SHA-256.txt">cmake-2.8.9-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.9-SHA-256.txt.asc">cmake-2.8.9-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-win32-x86.exe">cmake-2.8.9-win32-x86.exe</a></td><td align="right">2012-08-09 15:35 </td><td align="right">8.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9-win32-x86.zip">cmake-2.8.9-win32-x86.zip</a></td><td align="right">2012-08-09 15:35 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9.tar.Z">cmake-2.8.9.tar.Z</a></td><td align="right">2012-08-09 15:35 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9.tar.gz">cmake-2.8.9.tar.gz</a></td><td align="right">2012-08-09 15:35 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.9.zip">cmake-2.8.9.zip</a></td><td align="right">2012-08-09 15:35 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-AIX-powerpc.sh">cmake-2.8.10-AIX-powerpc.sh</a></td><td align="right">2012-10-31 13:05 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-AIX-powerpc.tar.Z">cmake-2.8.10-AIX-powerpc.tar.Z</a></td><td align="right">2012-10-31 13:05 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-AIX-powerpc.tar.gz">cmake-2.8.10-AIX-powerpc.tar.gz</a></td><td align="right">2012-10-31 13:05 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-Darwin-universal.dmg">cmake-2.8.10-Darwin-universal.dmg</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-Darwin-universal.tar.Z">cmake-2.8.10-Darwin-universal.tar.Z</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-Darwin-universal.tar.gz">cmake-2.8.10-Darwin-universal.tar.gz</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-Darwin64-universal.dmg">cmake-2.8.10-Darwin64-universal.dmg</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-Darwin64-universal.tar.Z">cmake-2.8.10-Darwin64-universal.tar.Z</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 53M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-Darwin64-universal.tar.gz">cmake-2.8.10-Darwin64-universal.tar.gz</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-IRIX64-64.sh">cmake-2.8.10-IRIX64-64.sh</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-IRIX64-64.tar.Z">cmake-2.8.10-IRIX64-64.tar.Z</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-IRIX64-64.tar.gz">cmake-2.8.10-IRIX64-64.tar.gz</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-IRIX64-n32.sh">cmake-2.8.10-IRIX64-n32.sh</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-IRIX64-n32.tar.Z">cmake-2.8.10-IRIX64-n32.tar.Z</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-IRIX64-n32.tar.gz">cmake-2.8.10-IRIX64-n32.tar.gz</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-Linux-i386.sh">cmake-2.8.10-Linux-i386.sh</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-Linux-i386.tar.Z">cmake-2.8.10-Linux-i386.tar.Z</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-Linux-i386.tar.gz">cmake-2.8.10-Linux-i386.tar.gz</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-SHA-256.txt">cmake-2.8.10-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-SHA-256.txt.asc">cmake-2.8.10-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc1-AIX-powerpc.sh">cmake-2.8.10-rc1-AIX-powerpc.sh</a></td><td align="right">2012-10-02 13:28 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-AIX-powerpc.tar.Z">cmake-2.8.10-rc1-AIX-powerpc.tar.Z</a></td><td align="right">2012-10-02 13:28 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-AIX-powerpc.tar.gz">cmake-2.8.10-rc1-AIX-powerpc.tar.gz</a></td><td align="right">2012-10-02 13:28 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-Darwin-universal.dmg">cmake-2.8.10-rc1-Darwin-universal.dmg</a></td><td align="right">2012-10-02 13:28 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-Darwin-universal.tar.Z">cmake-2.8.10-rc1-Darwin-universal.tar.Z</a></td><td align="right">2012-10-02 13:28 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-Darwin-universal.tar.gz">cmake-2.8.10-rc1-Darwin-universal.tar.gz</a></td><td align="right">2012-10-02 13:28 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-Darwin64-universal.dmg">cmake-2.8.10-rc1-Darwin64-universal.dmg</a></td><td align="right">2012-10-02 13:28 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-Darwin64-universal.tar.Z">cmake-2.8.10-rc1-Darwin64-universal.tar.Z</a></td><td align="right">2012-10-02 13:28 </td><td align="right"> 53M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-Darwin64-universal.tar.gz">cmake-2.8.10-rc1-Darwin64-universal.tar.gz</a></td><td align="right">2012-10-02 13:28 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc1-IRIX64-64.sh">cmake-2.8.10-rc1-IRIX64-64.sh</a></td><td align="right">2012-10-02 13:27 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-IRIX64-64.tar.Z">cmake-2.8.10-rc1-IRIX64-64.tar.Z</a></td><td align="right">2012-10-02 13:27 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-IRIX64-64.tar.gz">cmake-2.8.10-rc1-IRIX64-64.tar.gz</a></td><td align="right">2012-10-02 13:27 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc1-IRIX64-n32.sh">cmake-2.8.10-rc1-IRIX64-n32.sh</a></td><td align="right">2012-10-02 13:27 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-IRIX64-n32.tar.Z">cmake-2.8.10-rc1-IRIX64-n32.tar.Z</a></td><td align="right">2012-10-02 13:27 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-IRIX64-n32.tar.gz">cmake-2.8.10-rc1-IRIX64-n32.tar.gz</a></td><td align="right">2012-10-02 13:27 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc1-Linux-i386.sh">cmake-2.8.10-rc1-Linux-i386.sh</a></td><td align="right">2012-10-02 13:27 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-Linux-i386.tar.Z">cmake-2.8.10-rc1-Linux-i386.tar.Z</a></td><td align="right">2012-10-02 13:27 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-Linux-i386.tar.gz">cmake-2.8.10-rc1-Linux-i386.tar.gz</a></td><td align="right">2012-10-02 13:27 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc1-SHA-256.txt">cmake-2.8.10-rc1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc1-SHA-256.txt.asc">cmake-2.8.10-rc1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-win32-x86.exe">cmake-2.8.10-rc1-win32-x86.exe</a></td><td align="right">2012-10-02 13:27 </td><td align="right">9.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1-win32-x86.zip">cmake-2.8.10-rc1-win32-x86.zip</a></td><td align="right">2012-10-02 13:27 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1.tar.Z">cmake-2.8.10-rc1.tar.Z</a></td><td align="right">2012-10-02 13:27 </td><td align="right">8.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1.tar.gz">cmake-2.8.10-rc1.tar.gz</a></td><td align="right">2012-10-02 13:27 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc1.zip">cmake-2.8.10-rc1.zip</a></td><td align="right">2012-10-02 13:27 </td><td align="right">7.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc2-AIX-powerpc.sh">cmake-2.8.10-rc2-AIX-powerpc.sh</a></td><td align="right">2012-10-19 09:26 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-AIX-powerpc.tar.Z">cmake-2.8.10-rc2-AIX-powerpc.tar.Z</a></td><td align="right">2012-10-19 09:26 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-AIX-powerpc.tar.gz">cmake-2.8.10-rc2-AIX-powerpc.tar.gz</a></td><td align="right">2012-10-19 09:26 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-Darwin-universal.dmg">cmake-2.8.10-rc2-Darwin-universal.dmg</a></td><td align="right">2012-10-19 09:26 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-Darwin-universal.tar.Z">cmake-2.8.10-rc2-Darwin-universal.tar.Z</a></td><td align="right">2012-10-19 09:26 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-Darwin-universal.tar.gz">cmake-2.8.10-rc2-Darwin-universal.tar.gz</a></td><td align="right">2012-10-19 09:26 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-Darwin64-universal.dmg">cmake-2.8.10-rc2-Darwin64-universal.dmg</a></td><td align="right">2012-10-19 09:25 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-Darwin64-universal.tar.Z">cmake-2.8.10-rc2-Darwin64-universal.tar.Z</a></td><td align="right">2012-10-19 09:25 </td><td align="right"> 53M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-Darwin64-universal.tar.gz">cmake-2.8.10-rc2-Darwin64-universal.tar.gz</a></td><td align="right">2012-10-19 09:25 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc2-IRIX64-64.sh">cmake-2.8.10-rc2-IRIX64-64.sh</a></td><td align="right">2012-10-19 09:25 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-IRIX64-64.tar.Z">cmake-2.8.10-rc2-IRIX64-64.tar.Z</a></td><td align="right">2012-10-19 09:25 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-IRIX64-64.tar.gz">cmake-2.8.10-rc2-IRIX64-64.tar.gz</a></td><td align="right">2012-10-19 09:25 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc2-IRIX64-n32.sh">cmake-2.8.10-rc2-IRIX64-n32.sh</a></td><td align="right">2012-10-19 09:25 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-IRIX64-n32.tar.Z">cmake-2.8.10-rc2-IRIX64-n32.tar.Z</a></td><td align="right">2012-10-19 09:25 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-IRIX64-n32.tar.gz">cmake-2.8.10-rc2-IRIX64-n32.tar.gz</a></td><td align="right">2012-10-19 09:25 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc2-Linux-i386.sh">cmake-2.8.10-rc2-Linux-i386.sh</a></td><td align="right">2012-10-19 09:25 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-Linux-i386.tar.Z">cmake-2.8.10-rc2-Linux-i386.tar.Z</a></td><td align="right">2012-10-19 09:24 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-Linux-i386.tar.gz">cmake-2.8.10-rc2-Linux-i386.tar.gz</a></td><td align="right">2012-10-19 09:24 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc2-SHA-256.txt">cmake-2.8.10-rc2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc2-SHA-256.txt.asc">cmake-2.8.10-rc2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-win32-x86.exe">cmake-2.8.10-rc2-win32-x86.exe</a></td><td align="right">2012-10-19 09:24 </td><td align="right">9.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2-win32-x86.zip">cmake-2.8.10-rc2-win32-x86.zip</a></td><td align="right">2012-10-19 09:24 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2.tar.Z">cmake-2.8.10-rc2.tar.Z</a></td><td align="right">2012-10-19 09:24 </td><td align="right">8.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2.tar.gz">cmake-2.8.10-rc2.tar.gz</a></td><td align="right">2012-10-19 09:24 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc2.zip">cmake-2.8.10-rc2.zip</a></td><td align="right">2012-10-19 09:24 </td><td align="right">7.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc3-AIX-powerpc.sh">cmake-2.8.10-rc3-AIX-powerpc.sh</a></td><td align="right">2012-10-24 15:11 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-AIX-powerpc.tar.Z">cmake-2.8.10-rc3-AIX-powerpc.tar.Z</a></td><td align="right">2012-10-24 15:11 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-AIX-powerpc.tar.gz">cmake-2.8.10-rc3-AIX-powerpc.tar.gz</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-Darwin-universal.dmg">cmake-2.8.10-rc3-Darwin-universal.dmg</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-Darwin-universal.tar.Z">cmake-2.8.10-rc3-Darwin-universal.tar.Z</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-Darwin-universal.tar.gz">cmake-2.8.10-rc3-Darwin-universal.tar.gz</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-Darwin64-universal.dmg">cmake-2.8.10-rc3-Darwin64-universal.dmg</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-Darwin64-universal.tar.Z">cmake-2.8.10-rc3-Darwin64-universal.tar.Z</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 53M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-Darwin64-universal.tar.gz">cmake-2.8.10-rc3-Darwin64-universal.tar.gz</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc3-IRIX64-64.sh">cmake-2.8.10-rc3-IRIX64-64.sh</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-IRIX64-64.tar.Z">cmake-2.8.10-rc3-IRIX64-64.tar.Z</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-IRIX64-64.tar.gz">cmake-2.8.10-rc3-IRIX64-64.tar.gz</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc3-IRIX64-n32.sh">cmake-2.8.10-rc3-IRIX64-n32.sh</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-IRIX64-n32.tar.Z">cmake-2.8.10-rc3-IRIX64-n32.tar.Z</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-IRIX64-n32.tar.gz">cmake-2.8.10-rc3-IRIX64-n32.tar.gz</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc3-Linux-i386.sh">cmake-2.8.10-rc3-Linux-i386.sh</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-Linux-i386.tar.Z">cmake-2.8.10-rc3-Linux-i386.tar.Z</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-Linux-i386.tar.gz">cmake-2.8.10-rc3-Linux-i386.tar.gz</a></td><td align="right">2012-10-24 15:10 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc3-SHA-256.txt">cmake-2.8.10-rc3-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10-rc3-SHA-256.txt.asc">cmake-2.8.10-rc3-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-win32-x86.exe">cmake-2.8.10-rc3-win32-x86.exe</a></td><td align="right">2012-10-24 15:10 </td><td align="right">9.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3-win32-x86.zip">cmake-2.8.10-rc3-win32-x86.zip</a></td><td align="right">2012-10-24 15:09 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3.tar.Z">cmake-2.8.10-rc3.tar.Z</a></td><td align="right">2012-10-24 15:09 </td><td align="right">8.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3.tar.gz">cmake-2.8.10-rc3.tar.gz</a></td><td align="right">2012-10-24 15:09 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-rc3.zip">cmake-2.8.10-rc3.zip</a></td><td align="right">2012-10-24 15:09 </td><td align="right">7.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-win32-x86.exe">cmake-2.8.10-win32-x86.exe</a></td><td align="right">2012-10-31 13:04 </td><td align="right">9.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10-win32-x86.zip">cmake-2.8.10-win32-x86.zip</a></td><td align="right">2012-10-31 13:04 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.1-AIX-powerpc.sh">cmake-2.8.10.1-AIX-powerpc.sh</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-AIX-powerpc.tar.Z">cmake-2.8.10.1-AIX-powerpc.tar.Z</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-AIX-powerpc.tar.gz">cmake-2.8.10.1-AIX-powerpc.tar.gz</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-Darwin-universal.dmg">cmake-2.8.10.1-Darwin-universal.dmg</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-Darwin-universal.tar.Z">cmake-2.8.10.1-Darwin-universal.tar.Z</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-Darwin-universal.tar.gz">cmake-2.8.10.1-Darwin-universal.tar.gz</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-Darwin64-universal.dmg">cmake-2.8.10.1-Darwin64-universal.dmg</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-Darwin64-universal.tar.Z">cmake-2.8.10.1-Darwin64-universal.tar.Z</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 53M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-Darwin64-universal.tar.gz">cmake-2.8.10.1-Darwin64-universal.tar.gz</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.1-IRIX64-64.sh">cmake-2.8.10.1-IRIX64-64.sh</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-IRIX64-64.tar.Z">cmake-2.8.10.1-IRIX64-64.tar.Z</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-IRIX64-64.tar.gz">cmake-2.8.10.1-IRIX64-64.tar.gz</a></td><td align="right">2012-11-07 11:48 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.1-IRIX64-n32.sh">cmake-2.8.10.1-IRIX64-n32.sh</a></td><td align="right">2012-11-07 11:47 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-IRIX64-n32.tar.Z">cmake-2.8.10.1-IRIX64-n32.tar.Z</a></td><td align="right">2012-11-07 11:47 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-IRIX64-n32.tar.gz">cmake-2.8.10.1-IRIX64-n32.tar.gz</a></td><td align="right">2012-11-07 11:47 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.1-Linux-i386.sh">cmake-2.8.10.1-Linux-i386.sh</a></td><td align="right">2012-11-07 11:47 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-Linux-i386.tar.Z">cmake-2.8.10.1-Linux-i386.tar.Z</a></td><td align="right">2012-11-07 11:47 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-Linux-i386.tar.gz">cmake-2.8.10.1-Linux-i386.tar.gz</a></td><td align="right">2012-11-07 11:47 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.1-SHA-256.txt">cmake-2.8.10.1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.1-SHA-256.txt.asc">cmake-2.8.10.1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-win32-x86.exe">cmake-2.8.10.1-win32-x86.exe</a></td><td align="right">2012-11-07 11:47 </td><td align="right">9.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1-win32-x86.zip">cmake-2.8.10.1-win32-x86.zip</a></td><td align="right">2012-11-07 11:47 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1.tar.Z">cmake-2.8.10.1.tar.Z</a></td><td align="right">2012-11-07 11:47 </td><td align="right">8.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1.tar.gz">cmake-2.8.10.1.tar.gz</a></td><td align="right">2012-11-07 11:47 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.1.zip">cmake-2.8.10.1.zip</a></td><td align="right">2012-11-07 11:47 </td><td align="right">7.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.2-AIX-powerpc.sh">cmake-2.8.10.2-AIX-powerpc.sh</a></td><td align="right">2012-11-27 15:05 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-AIX-powerpc.tar.Z">cmake-2.8.10.2-AIX-powerpc.tar.Z</a></td><td align="right">2012-11-27 15:05 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-AIX-powerpc.tar.gz">cmake-2.8.10.2-AIX-powerpc.tar.gz</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-Darwin-universal.dmg">cmake-2.8.10.2-Darwin-universal.dmg</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-Darwin-universal.tar.Z">cmake-2.8.10.2-Darwin-universal.tar.Z</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-Darwin-universal.tar.gz">cmake-2.8.10.2-Darwin-universal.tar.gz</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-Darwin64-universal.dmg">cmake-2.8.10.2-Darwin64-universal.dmg</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-Darwin64-universal.tar.Z">cmake-2.8.10.2-Darwin64-universal.tar.Z</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 53M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-Darwin64-universal.tar.gz">cmake-2.8.10.2-Darwin64-universal.tar.gz</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.2-IRIX64-64.sh">cmake-2.8.10.2-IRIX64-64.sh</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-IRIX64-64.tar.Z">cmake-2.8.10.2-IRIX64-64.tar.Z</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-IRIX64-64.tar.gz">cmake-2.8.10.2-IRIX64-64.tar.gz</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.2-IRIX64-n32.sh">cmake-2.8.10.2-IRIX64-n32.sh</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-IRIX64-n32.tar.Z">cmake-2.8.10.2-IRIX64-n32.tar.Z</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-IRIX64-n32.tar.gz">cmake-2.8.10.2-IRIX64-n32.tar.gz</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.2-Linux-i386.sh">cmake-2.8.10.2-Linux-i386.sh</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-Linux-i386.tar.Z">cmake-2.8.10.2-Linux-i386.tar.Z</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-Linux-i386.tar.gz">cmake-2.8.10.2-Linux-i386.tar.gz</a></td><td align="right">2012-11-27 15:04 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.2-SHA-256.txt">cmake-2.8.10.2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.10.2-SHA-256.txt.asc">cmake-2.8.10.2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-win32-x86.exe">cmake-2.8.10.2-win32-x86.exe</a></td><td align="right">2012-11-27 15:04 </td><td align="right">9.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2-win32-x86.zip">cmake-2.8.10.2-win32-x86.zip</a></td><td align="right">2012-11-27 15:03 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2.tar.Z">cmake-2.8.10.2.tar.Z</a></td><td align="right">2012-11-27 15:03 </td><td align="right">8.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2.tar.gz">cmake-2.8.10.2.tar.gz</a></td><td align="right">2012-11-27 15:03 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.2.zip">cmake-2.8.10.2.zip</a></td><td align="right">2012-11-27 15:03 </td><td align="right">7.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.tar.Z">cmake-2.8.10.tar.Z</a></td><td align="right">2012-10-31 13:03 </td><td align="right">8.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.tar.gz">cmake-2.8.10.tar.gz</a></td><td align="right">2012-10-31 13:03 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.10.zip">cmake-2.8.10.zip</a></td><td align="right">2012-10-31 13:03 </td><td align="right">7.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-AIX-powerpc.sh">cmake-2.8.11-AIX-powerpc.sh</a></td><td align="right">2013-06-07 14:42 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-AIX-powerpc.tar.Z">cmake-2.8.11-AIX-powerpc.tar.Z</a></td><td align="right">2013-06-07 14:42 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-AIX-powerpc.tar.gz">cmake-2.8.11-AIX-powerpc.tar.gz</a></td><td align="right">2013-06-07 14:42 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-Darwin-universal.dmg">cmake-2.8.11-Darwin-universal.dmg</a></td><td align="right">2013-05-15 15:54 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-Darwin-universal.tar.Z">cmake-2.8.11-Darwin-universal.tar.Z</a></td><td align="right">2013-05-15 15:54 </td><td align="right"> 59M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-Darwin-universal.tar.gz">cmake-2.8.11-Darwin-universal.tar.gz</a></td><td align="right">2013-05-15 15:54 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-Darwin64-universal.dmg">cmake-2.8.11-Darwin64-universal.dmg</a></td><td align="right">2013-05-15 15:54 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-Darwin64-universal.tar.Z">cmake-2.8.11-Darwin64-universal.tar.Z</a></td><td align="right">2013-05-15 15:54 </td><td align="right"> 55M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-Darwin64-universal.tar.gz">cmake-2.8.11-Darwin64-universal.tar.gz</a></td><td align="right">2013-05-15 15:54 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-IRIX64-64.sh">cmake-2.8.11-IRIX64-64.sh</a></td><td align="right">2013-05-15 15:53 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-IRIX64-64.tar.Z">cmake-2.8.11-IRIX64-64.tar.Z</a></td><td align="right">2013-05-15 15:53 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-IRIX64-64.tar.gz">cmake-2.8.11-IRIX64-64.tar.gz</a></td><td align="right">2013-05-15 15:53 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-IRIX64-n32.sh">cmake-2.8.11-IRIX64-n32.sh</a></td><td align="right">2013-05-15 15:53 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-IRIX64-n32.tar.Z">cmake-2.8.11-IRIX64-n32.tar.Z</a></td><td align="right">2013-05-15 15:53 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-IRIX64-n32.tar.gz">cmake-2.8.11-IRIX64-n32.tar.gz</a></td><td align="right">2013-05-15 15:53 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-Linux-i386.sh">cmake-2.8.11-Linux-i386.sh</a></td><td align="right">2013-05-15 15:53 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-Linux-i386.tar.Z">cmake-2.8.11-Linux-i386.tar.Z</a></td><td align="right">2013-05-15 15:53 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-Linux-i386.tar.gz">cmake-2.8.11-Linux-i386.tar.gz</a></td><td align="right">2013-05-15 15:53 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-SHA-256.txt">cmake-2.8.11-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.4K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-SHA-256.txt.asc">cmake-2.8.11-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc1-AIX-powerpc.sh">cmake-2.8.11-rc1-AIX-powerpc.sh</a></td><td align="right">2013-03-14 17:16 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-AIX-powerpc.tar.Z">cmake-2.8.11-rc1-AIX-powerpc.tar.Z</a></td><td align="right">2013-03-14 17:16 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-AIX-powerpc.tar.gz">cmake-2.8.11-rc1-AIX-powerpc.tar.gz</a></td><td align="right">2013-03-14 17:16 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-Darwin-universal.dmg">cmake-2.8.11-rc1-Darwin-universal.dmg</a></td><td align="right">2013-03-14 17:16 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-Darwin-universal.tar.Z">cmake-2.8.11-rc1-Darwin-universal.tar.Z</a></td><td align="right">2013-03-14 17:16 </td><td align="right"> 59M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-Darwin-universal.tar.gz">cmake-2.8.11-rc1-Darwin-universal.tar.gz</a></td><td align="right">2013-03-14 17:16 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-Darwin64-universal.dmg">cmake-2.8.11-rc1-Darwin64-universal.dmg</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-Darwin64-universal.tar.Z">cmake-2.8.11-rc1-Darwin64-universal.tar.Z</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 55M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-Darwin64-universal.tar.gz">cmake-2.8.11-rc1-Darwin64-universal.tar.gz</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc1-IRIX64-64.sh">cmake-2.8.11-rc1-IRIX64-64.sh</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-IRIX64-64.tar.Z">cmake-2.8.11-rc1-IRIX64-64.tar.Z</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-IRIX64-64.tar.gz">cmake-2.8.11-rc1-IRIX64-64.tar.gz</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc1-IRIX64-n32.sh">cmake-2.8.11-rc1-IRIX64-n32.sh</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-IRIX64-n32.tar.Z">cmake-2.8.11-rc1-IRIX64-n32.tar.Z</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-IRIX64-n32.tar.gz">cmake-2.8.11-rc1-IRIX64-n32.tar.gz</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc1-Linux-i386.sh">cmake-2.8.11-rc1-Linux-i386.sh</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-Linux-i386.tar.Z">cmake-2.8.11-rc1-Linux-i386.tar.Z</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-Linux-i386.tar.gz">cmake-2.8.11-rc1-Linux-i386.tar.gz</a></td><td align="right">2013-03-14 17:15 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc1-SHA-256.txt">cmake-2.8.11-rc1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc1-SHA-256.txt.asc">cmake-2.8.11-rc1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-win32-x86.exe">cmake-2.8.11-rc1-win32-x86.exe</a></td><td align="right">2013-03-14 17:15 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1-win32-x86.zip">cmake-2.8.11-rc1-win32-x86.zip</a></td><td align="right">2013-03-14 17:14 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1.tar.Z">cmake-2.8.11-rc1.tar.Z</a></td><td align="right">2013-03-14 17:14 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1.tar.gz">cmake-2.8.11-rc1.tar.gz</a></td><td align="right">2013-03-14 17:14 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc1.zip">cmake-2.8.11-rc1.zip</a></td><td align="right">2013-03-14 17:14 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc2-AIX-powerpc.sh">cmake-2.8.11-rc2-AIX-powerpc.sh</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-AIX-powerpc.tar.Z">cmake-2.8.11-rc2-AIX-powerpc.tar.Z</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-AIX-powerpc.tar.gz">cmake-2.8.11-rc2-AIX-powerpc.tar.gz</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-Darwin-universal.dmg">cmake-2.8.11-rc2-Darwin-universal.dmg</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-Darwin-universal.tar.Z">cmake-2.8.11-rc2-Darwin-universal.tar.Z</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 59M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-Darwin-universal.tar.gz">cmake-2.8.11-rc2-Darwin-universal.tar.gz</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-Darwin64-universal.dmg">cmake-2.8.11-rc2-Darwin64-universal.dmg</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-Darwin64-universal.tar.Z">cmake-2.8.11-rc2-Darwin64-universal.tar.Z</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 55M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-Darwin64-universal.tar.gz">cmake-2.8.11-rc2-Darwin64-universal.tar.gz</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc2-IRIX64-64.sh">cmake-2.8.11-rc2-IRIX64-64.sh</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-IRIX64-64.tar.Z">cmake-2.8.11-rc2-IRIX64-64.tar.Z</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-IRIX64-64.tar.gz">cmake-2.8.11-rc2-IRIX64-64.tar.gz</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc2-IRIX64-n32.sh">cmake-2.8.11-rc2-IRIX64-n32.sh</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-IRIX64-n32.tar.Z">cmake-2.8.11-rc2-IRIX64-n32.tar.Z</a></td><td align="right">2013-04-05 18:01 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-IRIX64-n32.tar.gz">cmake-2.8.11-rc2-IRIX64-n32.tar.gz</a></td><td align="right">2013-04-05 18:00 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc2-Linux-i386.sh">cmake-2.8.11-rc2-Linux-i386.sh</a></td><td align="right">2013-04-05 18:00 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-Linux-i386.tar.Z">cmake-2.8.11-rc2-Linux-i386.tar.Z</a></td><td align="right">2013-04-05 18:00 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-Linux-i386.tar.gz">cmake-2.8.11-rc2-Linux-i386.tar.gz</a></td><td align="right">2013-04-05 18:00 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc2-SHA-256.txt">cmake-2.8.11-rc2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc2-SHA-256.txt.asc">cmake-2.8.11-rc2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-win32-x86.exe">cmake-2.8.11-rc2-win32-x86.exe</a></td><td align="right">2013-04-05 18:00 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2-win32-x86.zip">cmake-2.8.11-rc2-win32-x86.zip</a></td><td align="right">2013-04-05 18:00 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2.tar.Z">cmake-2.8.11-rc2.tar.Z</a></td><td align="right">2013-04-05 18:00 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2.tar.gz">cmake-2.8.11-rc2.tar.gz</a></td><td align="right">2013-04-05 18:00 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc2.zip">cmake-2.8.11-rc2.zip</a></td><td align="right">2013-04-05 18:00 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc3-AIX-powerpc.sh">cmake-2.8.11-rc3-AIX-powerpc.sh</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-AIX-powerpc.tar.Z">cmake-2.8.11-rc3-AIX-powerpc.tar.Z</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-AIX-powerpc.tar.gz">cmake-2.8.11-rc3-AIX-powerpc.tar.gz</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-Darwin-universal.dmg">cmake-2.8.11-rc3-Darwin-universal.dmg</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-Darwin-universal.tar.Z">cmake-2.8.11-rc3-Darwin-universal.tar.Z</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 59M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-Darwin-universal.tar.gz">cmake-2.8.11-rc3-Darwin-universal.tar.gz</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-Darwin64-universal.dmg">cmake-2.8.11-rc3-Darwin64-universal.dmg</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-Darwin64-universal.tar.Z">cmake-2.8.11-rc3-Darwin64-universal.tar.Z</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 55M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-Darwin64-universal.tar.gz">cmake-2.8.11-rc3-Darwin64-universal.tar.gz</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc3-IRIX64-64.sh">cmake-2.8.11-rc3-IRIX64-64.sh</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-IRIX64-64.tar.Z">cmake-2.8.11-rc3-IRIX64-64.tar.Z</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-IRIX64-64.tar.gz">cmake-2.8.11-rc3-IRIX64-64.tar.gz</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc3-IRIX64-n32.sh">cmake-2.8.11-rc3-IRIX64-n32.sh</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-IRIX64-n32.tar.Z">cmake-2.8.11-rc3-IRIX64-n32.tar.Z</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-IRIX64-n32.tar.gz">cmake-2.8.11-rc3-IRIX64-n32.tar.gz</a></td><td align="right">2013-04-18 17:33 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc3-Linux-i386.sh">cmake-2.8.11-rc3-Linux-i386.sh</a></td><td align="right">2013-04-18 17:32 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-Linux-i386.tar.Z">cmake-2.8.11-rc3-Linux-i386.tar.Z</a></td><td align="right">2013-04-18 17:32 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-Linux-i386.tar.gz">cmake-2.8.11-rc3-Linux-i386.tar.gz</a></td><td align="right">2013-04-18 17:32 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc3-SHA-256.txt">cmake-2.8.11-rc3-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc3-SHA-256.txt.asc">cmake-2.8.11-rc3-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-win32-x86.exe">cmake-2.8.11-rc3-win32-x86.exe</a></td><td align="right">2013-04-18 17:32 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3-win32-x86.zip">cmake-2.8.11-rc3-win32-x86.zip</a></td><td align="right">2013-04-18 17:32 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3.tar.Z">cmake-2.8.11-rc3.tar.Z</a></td><td align="right">2013-04-18 17:32 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3.tar.gz">cmake-2.8.11-rc3.tar.gz</a></td><td align="right">2013-04-18 17:32 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc3.zip">cmake-2.8.11-rc3.zip</a></td><td align="right">2013-04-18 17:32 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc4-AIX-powerpc.sh">cmake-2.8.11-rc4-AIX-powerpc.sh</a></td><td align="right">2013-05-08 09:54 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-AIX-powerpc.tar.Z">cmake-2.8.11-rc4-AIX-powerpc.tar.Z</a></td><td align="right">2013-05-08 09:54 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-AIX-powerpc.tar.gz">cmake-2.8.11-rc4-AIX-powerpc.tar.gz</a></td><td align="right">2013-05-08 09:54 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-Darwin-universal.dmg">cmake-2.8.11-rc4-Darwin-universal.dmg</a></td><td align="right">2013-05-08 09:54 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-Darwin-universal.tar.Z">cmake-2.8.11-rc4-Darwin-universal.tar.Z</a></td><td align="right">2013-05-08 09:54 </td><td align="right"> 59M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-Darwin-universal.tar.gz">cmake-2.8.11-rc4-Darwin-universal.tar.gz</a></td><td align="right">2013-05-08 09:54 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-Darwin64-universal.dmg">cmake-2.8.11-rc4-Darwin64-universal.dmg</a></td><td align="right">2013-05-08 09:54 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-Darwin64-universal.tar.Z">cmake-2.8.11-rc4-Darwin64-universal.tar.Z</a></td><td align="right">2013-05-08 09:54 </td><td align="right"> 55M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-Darwin64-universal.tar.gz">cmake-2.8.11-rc4-Darwin64-universal.tar.gz</a></td><td align="right">2013-05-08 09:54 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc4-IRIX64-64.sh">cmake-2.8.11-rc4-IRIX64-64.sh</a></td><td align="right">2013-05-08 09:54 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-IRIX64-64.tar.Z">cmake-2.8.11-rc4-IRIX64-64.tar.Z</a></td><td align="right">2013-05-08 09:54 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-IRIX64-64.tar.gz">cmake-2.8.11-rc4-IRIX64-64.tar.gz</a></td><td align="right">2013-05-08 09:53 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc4-IRIX64-n32.sh">cmake-2.8.11-rc4-IRIX64-n32.sh</a></td><td align="right">2013-05-08 09:53 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-IRIX64-n32.tar.Z">cmake-2.8.11-rc4-IRIX64-n32.tar.Z</a></td><td align="right">2013-05-08 09:53 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-IRIX64-n32.tar.gz">cmake-2.8.11-rc4-IRIX64-n32.tar.gz</a></td><td align="right">2013-05-08 09:53 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc4-Linux-i386.sh">cmake-2.8.11-rc4-Linux-i386.sh</a></td><td align="right">2013-05-08 09:53 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-Linux-i386.tar.Z">cmake-2.8.11-rc4-Linux-i386.tar.Z</a></td><td align="right">2013-05-08 09:53 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-Linux-i386.tar.gz">cmake-2.8.11-rc4-Linux-i386.tar.gz</a></td><td align="right">2013-05-08 09:53 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc4-SHA-256.txt">cmake-2.8.11-rc4-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11-rc4-SHA-256.txt.asc">cmake-2.8.11-rc4-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-win32-x86.exe">cmake-2.8.11-rc4-win32-x86.exe</a></td><td align="right">2013-05-08 09:53 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4-win32-x86.zip">cmake-2.8.11-rc4-win32-x86.zip</a></td><td align="right">2013-05-08 09:53 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4.tar.Z">cmake-2.8.11-rc4.tar.Z</a></td><td align="right">2013-05-08 09:53 </td><td align="right">8.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4.tar.gz">cmake-2.8.11-rc4.tar.gz</a></td><td align="right">2013-05-08 09:53 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-rc4.zip">cmake-2.8.11-rc4.zip</a></td><td align="right">2013-05-08 09:53 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-win32-x86.exe">cmake-2.8.11-win32-x86.exe</a></td><td align="right">2013-05-15 15:53 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11-win32-x86.zip">cmake-2.8.11-win32-x86.zip</a></td><td align="right">2013-05-15 15:53 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.1-AIX-powerpc.sh">cmake-2.8.11.1-AIX-powerpc.sh</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-AIX-powerpc.tar.Z">cmake-2.8.11.1-AIX-powerpc.tar.Z</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-AIX-powerpc.tar.gz">cmake-2.8.11.1-AIX-powerpc.tar.gz</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-Darwin-universal.dmg">cmake-2.8.11.1-Darwin-universal.dmg</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-Darwin-universal.tar.Z">cmake-2.8.11.1-Darwin-universal.tar.Z</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 59M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-Darwin-universal.tar.gz">cmake-2.8.11.1-Darwin-universal.tar.gz</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-Darwin64-universal.dmg">cmake-2.8.11.1-Darwin64-universal.dmg</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-Darwin64-universal.tar.Z">cmake-2.8.11.1-Darwin64-universal.tar.Z</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 55M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-Darwin64-universal.tar.gz">cmake-2.8.11.1-Darwin64-universal.tar.gz</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.1-IRIX64-64.sh">cmake-2.8.11.1-IRIX64-64.sh</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-IRIX64-64.tar.Z">cmake-2.8.11.1-IRIX64-64.tar.Z</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-IRIX64-64.tar.gz">cmake-2.8.11.1-IRIX64-64.tar.gz</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.1-IRIX64-n32.sh">cmake-2.8.11.1-IRIX64-n32.sh</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-IRIX64-n32.tar.Z">cmake-2.8.11.1-IRIX64-n32.tar.Z</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-IRIX64-n32.tar.gz">cmake-2.8.11.1-IRIX64-n32.tar.gz</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.1-Linux-i386.sh">cmake-2.8.11.1-Linux-i386.sh</a></td><td align="right">2013-06-07 14:41 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-Linux-i386.tar.Z">cmake-2.8.11.1-Linux-i386.tar.Z</a></td><td align="right">2013-06-07 14:40 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-Linux-i386.tar.gz">cmake-2.8.11.1-Linux-i386.tar.gz</a></td><td align="right">2013-06-07 14:40 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.1-SHA-256.txt">cmake-2.8.11.1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.1-SHA-256.txt.asc">cmake-2.8.11.1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-win32-x86.exe">cmake-2.8.11.1-win32-x86.exe</a></td><td align="right">2013-06-07 14:40 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1-win32-x86.zip">cmake-2.8.11.1-win32-x86.zip</a></td><td align="right">2013-06-07 14:40 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1.tar.Z">cmake-2.8.11.1.tar.Z</a></td><td align="right">2013-06-07 14:40 </td><td align="right">8.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1.tar.gz">cmake-2.8.11.1.tar.gz</a></td><td align="right">2013-06-07 14:40 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.1.zip">cmake-2.8.11.1.zip</a></td><td align="right">2013-06-07 14:40 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.2-AIX-powerpc.sh">cmake-2.8.11.2-AIX-powerpc.sh</a></td><td align="right">2013-07-03 11:53 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-AIX-powerpc.tar.Z">cmake-2.8.11.2-AIX-powerpc.tar.Z</a></td><td align="right">2013-07-03 11:53 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-AIX-powerpc.tar.gz">cmake-2.8.11.2-AIX-powerpc.tar.gz</a></td><td align="right">2013-07-03 11:53 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-Darwin-universal.dmg">cmake-2.8.11.2-Darwin-universal.dmg</a></td><td align="right">2013-07-03 11:53 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-Darwin-universal.tar.Z">cmake-2.8.11.2-Darwin-universal.tar.Z</a></td><td align="right">2013-07-03 11:53 </td><td align="right"> 59M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-Darwin-universal.tar.gz">cmake-2.8.11.2-Darwin-universal.tar.gz</a></td><td align="right">2013-07-03 11:53 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-Darwin64-universal.dmg">cmake-2.8.11.2-Darwin64-universal.dmg</a></td><td align="right">2013-07-03 11:53 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-Darwin64-universal.tar.Z">cmake-2.8.11.2-Darwin64-universal.tar.Z</a></td><td align="right">2013-07-03 11:53 </td><td align="right"> 55M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-Darwin64-universal.tar.gz">cmake-2.8.11.2-Darwin64-universal.tar.gz</a></td><td align="right">2013-07-03 11:53 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.2-IRIX64-64.sh">cmake-2.8.11.2-IRIX64-64.sh</a></td><td align="right">2013-07-03 11:53 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-IRIX64-64.tar.Z">cmake-2.8.11.2-IRIX64-64.tar.Z</a></td><td align="right">2013-07-03 11:53 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-IRIX64-64.tar.gz">cmake-2.8.11.2-IRIX64-64.tar.gz</a></td><td align="right">2013-07-03 11:52 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.2-IRIX64-n32.sh">cmake-2.8.11.2-IRIX64-n32.sh</a></td><td align="right">2013-07-03 11:52 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-IRIX64-n32.tar.Z">cmake-2.8.11.2-IRIX64-n32.tar.Z</a></td><td align="right">2013-07-03 11:52 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-IRIX64-n32.tar.gz">cmake-2.8.11.2-IRIX64-n32.tar.gz</a></td><td align="right">2013-07-03 11:52 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.2-Linux-i386.sh">cmake-2.8.11.2-Linux-i386.sh</a></td><td align="right">2013-07-03 11:52 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-Linux-i386.tar.Z">cmake-2.8.11.2-Linux-i386.tar.Z</a></td><td align="right">2013-07-03 11:52 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-Linux-i386.tar.gz">cmake-2.8.11.2-Linux-i386.tar.gz</a></td><td align="right">2013-07-03 11:52 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.2-SHA-256.txt">cmake-2.8.11.2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.11.2-SHA-256.txt.asc">cmake-2.8.11.2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-win32-x86.exe">cmake-2.8.11.2-win32-x86.exe</a></td><td align="right">2013-07-03 11:52 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2-win32-x86.zip">cmake-2.8.11.2-win32-x86.zip</a></td><td align="right">2013-07-03 11:52 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2.tar.Z">cmake-2.8.11.2.tar.Z</a></td><td align="right">2013-07-03 11:52 </td><td align="right">8.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2.tar.gz">cmake-2.8.11.2.tar.gz</a></td><td align="right">2013-07-03 11:52 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.2.zip">cmake-2.8.11.2.zip</a></td><td align="right">2013-07-03 11:52 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.tar.Z">cmake-2.8.11.tar.Z</a></td><td align="right">2013-05-15 15:53 </td><td align="right">8.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.tar.gz">cmake-2.8.11.tar.gz</a></td><td align="right">2013-05-15 15:53 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.11.zip">cmake-2.8.11.zip</a></td><td align="right">2013-05-15 15:53 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-AIX-powerpc.sh">cmake-2.8.12-AIX-powerpc.sh</a></td><td align="right">2013-10-07 14:34 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-AIX-powerpc.tar.Z">cmake-2.8.12-AIX-powerpc.tar.Z</a></td><td align="right">2013-10-07 14:34 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-AIX-powerpc.tar.gz">cmake-2.8.12-AIX-powerpc.tar.gz</a></td><td align="right">2013-10-07 14:34 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-Darwin-universal.dmg">cmake-2.8.12-Darwin-universal.dmg</a></td><td align="right">2013-10-07 14:34 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-Darwin-universal.tar.Z">cmake-2.8.12-Darwin-universal.tar.Z</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 61M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-Darwin-universal.tar.gz">cmake-2.8.12-Darwin-universal.tar.gz</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-Darwin64-universal.dmg">cmake-2.8.12-Darwin64-universal.dmg</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-Darwin64-universal.tar.Z">cmake-2.8.12-Darwin64-universal.tar.Z</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 57M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-Darwin64-universal.tar.gz">cmake-2.8.12-Darwin64-universal.tar.gz</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-IRIX64-64.sh">cmake-2.8.12-IRIX64-64.sh</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-IRIX64-64.tar.Z">cmake-2.8.12-IRIX64-64.tar.Z</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-IRIX64-64.tar.gz">cmake-2.8.12-IRIX64-64.tar.gz</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-IRIX64-n32.sh">cmake-2.8.12-IRIX64-n32.sh</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-IRIX64-n32.tar.Z">cmake-2.8.12-IRIX64-n32.tar.Z</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-IRIX64-n32.tar.gz">cmake-2.8.12-IRIX64-n32.tar.gz</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-Linux-i386.sh">cmake-2.8.12-Linux-i386.sh</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-Linux-i386.tar.Z">cmake-2.8.12-Linux-i386.tar.Z</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-Linux-i386.tar.gz">cmake-2.8.12-Linux-i386.tar.gz</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-SHA-256.txt">cmake-2.8.12-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-SHA-256.txt.asc">cmake-2.8.12-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc1-AIX-powerpc.sh">cmake-2.8.12-rc1-AIX-powerpc.sh</a></td><td align="right">2013-08-19 08:54 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-AIX-powerpc.tar.Z">cmake-2.8.12-rc1-AIX-powerpc.tar.Z</a></td><td align="right">2013-08-19 08:54 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-AIX-powerpc.tar.gz">cmake-2.8.12-rc1-AIX-powerpc.tar.gz</a></td><td align="right">2013-08-19 08:54 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-Darwin-universal.dmg">cmake-2.8.12-rc1-Darwin-universal.dmg</a></td><td align="right">2013-08-19 08:54 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-Darwin-universal.tar.Z">cmake-2.8.12-rc1-Darwin-universal.tar.Z</a></td><td align="right">2013-08-19 08:53 </td><td align="right"> 61M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-Darwin-universal.tar.gz">cmake-2.8.12-rc1-Darwin-universal.tar.gz</a></td><td align="right">2013-08-19 08:53 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-Darwin64-universal.dmg">cmake-2.8.12-rc1-Darwin64-universal.dmg</a></td><td align="right">2013-08-19 08:53 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-Darwin64-universal.tar.Z">cmake-2.8.12-rc1-Darwin64-universal.tar.Z</a></td><td align="right">2013-08-19 08:53 </td><td align="right"> 57M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-Darwin64-universal.tar.gz">cmake-2.8.12-rc1-Darwin64-universal.tar.gz</a></td><td align="right">2013-08-19 08:53 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc1-IRIX64-64.sh">cmake-2.8.12-rc1-IRIX64-64.sh</a></td><td align="right">2013-08-19 08:53 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-IRIX64-64.tar.Z">cmake-2.8.12-rc1-IRIX64-64.tar.Z</a></td><td align="right">2013-08-19 08:53 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-IRIX64-64.tar.gz">cmake-2.8.12-rc1-IRIX64-64.tar.gz</a></td><td align="right">2013-08-19 08:53 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc1-IRIX64-n32.sh">cmake-2.8.12-rc1-IRIX64-n32.sh</a></td><td align="right">2013-08-19 08:53 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-IRIX64-n32.tar.Z">cmake-2.8.12-rc1-IRIX64-n32.tar.Z</a></td><td align="right">2013-08-19 08:53 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-IRIX64-n32.tar.gz">cmake-2.8.12-rc1-IRIX64-n32.tar.gz</a></td><td align="right">2013-08-19 08:53 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc1-Linux-i386.sh">cmake-2.8.12-rc1-Linux-i386.sh</a></td><td align="right">2013-08-19 08:52 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-Linux-i386.tar.Z">cmake-2.8.12-rc1-Linux-i386.tar.Z</a></td><td align="right">2013-08-19 08:52 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-Linux-i386.tar.gz">cmake-2.8.12-rc1-Linux-i386.tar.gz</a></td><td align="right">2013-08-19 08:52 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc1-SHA-256.txt">cmake-2.8.12-rc1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc1-SHA-256.txt.asc">cmake-2.8.12-rc1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-win32-x86.exe">cmake-2.8.12-rc1-win32-x86.exe</a></td><td align="right">2013-08-19 08:52 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1-win32-x86.zip">cmake-2.8.12-rc1-win32-x86.zip</a></td><td align="right">2013-08-19 08:52 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1.tar.Z">cmake-2.8.12-rc1.tar.Z</a></td><td align="right">2013-08-19 08:52 </td><td align="right">9.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1.tar.gz">cmake-2.8.12-rc1.tar.gz</a></td><td align="right">2013-08-19 08:52 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc1.zip">cmake-2.8.12-rc1.zip</a></td><td align="right">2013-08-19 08:52 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc2-AIX-powerpc.sh">cmake-2.8.12-rc2-AIX-powerpc.sh</a></td><td align="right">2013-08-30 15:59 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-AIX-powerpc.tar.Z">cmake-2.8.12-rc2-AIX-powerpc.tar.Z</a></td><td align="right">2013-08-30 15:59 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-AIX-powerpc.tar.gz">cmake-2.8.12-rc2-AIX-powerpc.tar.gz</a></td><td align="right">2013-08-30 15:59 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-Darwin-universal.dmg">cmake-2.8.12-rc2-Darwin-universal.dmg</a></td><td align="right">2013-08-30 15:59 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-Darwin-universal.tar.Z">cmake-2.8.12-rc2-Darwin-universal.tar.Z</a></td><td align="right">2013-08-30 15:59 </td><td align="right"> 61M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-Darwin-universal.tar.gz">cmake-2.8.12-rc2-Darwin-universal.tar.gz</a></td><td align="right">2013-08-30 15:59 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-Darwin64-universal.dmg">cmake-2.8.12-rc2-Darwin64-universal.dmg</a></td><td align="right">2013-08-30 15:59 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-Darwin64-universal.tar.Z">cmake-2.8.12-rc2-Darwin64-universal.tar.Z</a></td><td align="right">2013-08-30 15:59 </td><td align="right"> 57M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-Darwin64-universal.tar.gz">cmake-2.8.12-rc2-Darwin64-universal.tar.gz</a></td><td align="right">2013-08-30 15:58 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-IRIX64-64.tar.Z">cmake-2.8.12-rc2-IRIX64-64.tar.Z</a></td><td align="right">2013-08-30 15:58 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-IRIX64-64.tar.gz">cmake-2.8.12-rc2-IRIX64-64.tar.gz</a></td><td align="right">2013-08-30 15:58 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc2-IRIX64-n32.sh">cmake-2.8.12-rc2-IRIX64-n32.sh</a></td><td align="right">2013-08-30 15:58 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-IRIX64-n32.tar.Z">cmake-2.8.12-rc2-IRIX64-n32.tar.Z</a></td><td align="right">2013-08-30 15:58 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-IRIX64-n32.tar.gz">cmake-2.8.12-rc2-IRIX64-n32.tar.gz</a></td><td align="right">2013-08-30 15:58 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc2-Linux-i386.sh">cmake-2.8.12-rc2-Linux-i386.sh</a></td><td align="right">2013-08-30 15:58 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-Linux-i386.tar.Z">cmake-2.8.12-rc2-Linux-i386.tar.Z</a></td><td align="right">2013-08-30 15:58 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-Linux-i386.tar.gz">cmake-2.8.12-rc2-Linux-i386.tar.gz</a></td><td align="right">2013-08-30 15:58 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc2-SHA-256.txt">cmake-2.8.12-rc2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.1K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc2-SHA-256.txt.asc">cmake-2.8.12-rc2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-win32-x86.exe">cmake-2.8.12-rc2-win32-x86.exe</a></td><td align="right">2013-08-30 15:58 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2-win32-x86.zip">cmake-2.8.12-rc2-win32-x86.zip</a></td><td align="right">2013-08-30 15:58 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2.tar.Z">cmake-2.8.12-rc2.tar.Z</a></td><td align="right">2013-08-30 15:58 </td><td align="right">9.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2.tar.gz">cmake-2.8.12-rc2.tar.gz</a></td><td align="right">2013-08-30 15:58 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc2.zip">cmake-2.8.12-rc2.zip</a></td><td align="right">2013-08-30 15:58 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc3-AIX-powerpc.sh">cmake-2.8.12-rc3-AIX-powerpc.sh</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-AIX-powerpc.tar.Z">cmake-2.8.12-rc3-AIX-powerpc.tar.Z</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-AIX-powerpc.tar.gz">cmake-2.8.12-rc3-AIX-powerpc.tar.gz</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-Darwin-universal.dmg">cmake-2.8.12-rc3-Darwin-universal.dmg</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-Darwin-universal.tar.Z">cmake-2.8.12-rc3-Darwin-universal.tar.Z</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 61M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-Darwin-universal.tar.gz">cmake-2.8.12-rc3-Darwin-universal.tar.gz</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-Darwin64-universal.dmg">cmake-2.8.12-rc3-Darwin64-universal.dmg</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-Darwin64-universal.tar.Z">cmake-2.8.12-rc3-Darwin64-universal.tar.Z</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 57M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-Darwin64-universal.tar.gz">cmake-2.8.12-rc3-Darwin64-universal.tar.gz</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc3-Linux-i386.sh">cmake-2.8.12-rc3-Linux-i386.sh</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-Linux-i386.tar.Z">cmake-2.8.12-rc3-Linux-i386.tar.Z</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-Linux-i386.tar.gz">cmake-2.8.12-rc3-Linux-i386.tar.gz</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc3-SHA-256.txt">cmake-2.8.12-rc3-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.7K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc3-SHA-256.txt.asc">cmake-2.8.12-rc3-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-win32-x86.exe">cmake-2.8.12-rc3-win32-x86.exe</a></td><td align="right">2013-09-10 15:39 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3-win32-x86.zip">cmake-2.8.12-rc3-win32-x86.zip</a></td><td align="right">2013-09-10 15:38 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3.tar.Z">cmake-2.8.12-rc3.tar.Z</a></td><td align="right">2013-09-10 15:38 </td><td align="right">9.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3.tar.gz">cmake-2.8.12-rc3.tar.gz</a></td><td align="right">2013-09-10 15:38 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc3.zip">cmake-2.8.12-rc3.zip</a></td><td align="right">2013-09-10 15:38 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc4-AIX-powerpc.sh">cmake-2.8.12-rc4-AIX-powerpc.sh</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-AIX-powerpc.tar.Z">cmake-2.8.12-rc4-AIX-powerpc.tar.Z</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-AIX-powerpc.tar.gz">cmake-2.8.12-rc4-AIX-powerpc.tar.gz</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-Darwin-universal.dmg">cmake-2.8.12-rc4-Darwin-universal.dmg</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-Darwin-universal.tar.Z">cmake-2.8.12-rc4-Darwin-universal.tar.Z</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 61M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-Darwin-universal.tar.gz">cmake-2.8.12-rc4-Darwin-universal.tar.gz</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-Darwin64-universal.dmg">cmake-2.8.12-rc4-Darwin64-universal.dmg</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-Darwin64-universal.tar.Z">cmake-2.8.12-rc4-Darwin64-universal.tar.Z</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 57M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-Darwin64-universal.tar.gz">cmake-2.8.12-rc4-Darwin64-universal.tar.gz</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc4-IRIX64-64.sh">cmake-2.8.12-rc4-IRIX64-64.sh</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-IRIX64-64.tar.Z">cmake-2.8.12-rc4-IRIX64-64.tar.Z</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-IRIX64-64.tar.gz">cmake-2.8.12-rc4-IRIX64-64.tar.gz</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc4-IRIX64-n32.sh">cmake-2.8.12-rc4-IRIX64-n32.sh</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-IRIX64-n32.tar.Z">cmake-2.8.12-rc4-IRIX64-n32.tar.Z</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-IRIX64-n32.tar.gz">cmake-2.8.12-rc4-IRIX64-n32.tar.gz</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc4-Linux-i386.sh">cmake-2.8.12-rc4-Linux-i386.sh</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-Linux-i386.tar.Z">cmake-2.8.12-rc4-Linux-i386.tar.Z</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-Linux-i386.tar.gz">cmake-2.8.12-rc4-Linux-i386.tar.gz</a></td><td align="right">2013-10-01 16:23 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc4-SHA-256.txt">cmake-2.8.12-rc4-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12-rc4-SHA-256.txt.asc">cmake-2.8.12-rc4-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-win32-x86.exe">cmake-2.8.12-rc4-win32-x86.exe</a></td><td align="right">2013-10-01 16:22 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4-win32-x86.zip">cmake-2.8.12-rc4-win32-x86.zip</a></td><td align="right">2013-10-01 16:22 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4.tar.Z">cmake-2.8.12-rc4.tar.Z</a></td><td align="right">2013-10-01 16:22 </td><td align="right">9.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4.tar.gz">cmake-2.8.12-rc4.tar.gz</a></td><td align="right">2013-10-01 16:22 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-rc4.zip">cmake-2.8.12-rc4.zip</a></td><td align="right">2013-10-01 16:22 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-win32-x86.exe">cmake-2.8.12-win32-x86.exe</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12-win32-x86.zip">cmake-2.8.12-win32-x86.zip</a></td><td align="right">2013-10-07 14:33 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.1-AIX-powerpc.sh">cmake-2.8.12.1-AIX-powerpc.sh</a></td><td align="right">2013-11-06 10:48 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-AIX-powerpc.tar.Z">cmake-2.8.12.1-AIX-powerpc.tar.Z</a></td><td align="right">2013-11-06 10:47 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-AIX-powerpc.tar.gz">cmake-2.8.12.1-AIX-powerpc.tar.gz</a></td><td align="right">2013-11-06 10:47 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-Darwin-universal.dmg">cmake-2.8.12.1-Darwin-universal.dmg</a></td><td align="right">2013-11-06 10:47 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-Darwin-universal.tar.Z">cmake-2.8.12.1-Darwin-universal.tar.Z</a></td><td align="right">2013-11-06 10:47 </td><td align="right"> 61M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-Darwin-universal.tar.gz">cmake-2.8.12.1-Darwin-universal.tar.gz</a></td><td align="right">2013-11-06 10:47 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-Darwin64-universal.dmg">cmake-2.8.12.1-Darwin64-universal.dmg</a></td><td align="right">2013-11-06 10:47 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-Darwin64-universal.tar.Z">cmake-2.8.12.1-Darwin64-universal.tar.Z</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 57M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-Darwin64-universal.tar.gz">cmake-2.8.12.1-Darwin64-universal.tar.gz</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.1-IRIX64-64.sh">cmake-2.8.12.1-IRIX64-64.sh</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-IRIX64-64.tar.Z">cmake-2.8.12.1-IRIX64-64.tar.Z</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-IRIX64-64.tar.gz">cmake-2.8.12.1-IRIX64-64.tar.gz</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.1-IRIX64-n32.sh">cmake-2.8.12.1-IRIX64-n32.sh</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-IRIX64-n32.tar.Z">cmake-2.8.12.1-IRIX64-n32.tar.Z</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-IRIX64-n32.tar.gz">cmake-2.8.12.1-IRIX64-n32.tar.gz</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.1-Linux-i386.sh">cmake-2.8.12.1-Linux-i386.sh</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-Linux-i386.tar.Z">cmake-2.8.12.1-Linux-i386.tar.Z</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-Linux-i386.tar.gz">cmake-2.8.12.1-Linux-i386.tar.gz</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.1-SHA-256.txt">cmake-2.8.12.1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.1-SHA-256.txt.asc">cmake-2.8.12.1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-win32-x86.exe">cmake-2.8.12.1-win32-x86.exe</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1-win32-x86.zip">cmake-2.8.12.1-win32-x86.zip</a></td><td align="right">2013-11-06 10:46 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1.tar.Z">cmake-2.8.12.1.tar.Z</a></td><td align="right">2013-11-06 10:45 </td><td align="right">9.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1.tar.gz">cmake-2.8.12.1.tar.gz</a></td><td align="right">2013-11-06 10:45 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.1.zip">cmake-2.8.12.1.zip</a></td><td align="right">2013-11-06 10:45 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.2-AIX-powerpc.sh">cmake-2.8.12.2-AIX-powerpc.sh</a></td><td align="right">2014-01-16 14:49 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-AIX-powerpc.tar.Z">cmake-2.8.12.2-AIX-powerpc.tar.Z</a></td><td align="right">2014-01-16 14:49 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-AIX-powerpc.tar.gz">cmake-2.8.12.2-AIX-powerpc.tar.gz</a></td><td align="right">2014-01-16 14:49 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-Darwin-universal.dmg">cmake-2.8.12.2-Darwin-universal.dmg</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-Darwin-universal.tar.Z">cmake-2.8.12.2-Darwin-universal.tar.Z</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 61M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-Darwin-universal.tar.gz">cmake-2.8.12.2-Darwin-universal.tar.gz</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 43M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-Darwin64-universal.dmg">cmake-2.8.12.2-Darwin64-universal.dmg</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-Darwin64-universal.tar.Z">cmake-2.8.12.2-Darwin64-universal.tar.Z</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 57M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-Darwin64-universal.tar.gz">cmake-2.8.12.2-Darwin64-universal.tar.gz</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.2-IRIX64-64.sh">cmake-2.8.12.2-IRIX64-64.sh</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-IRIX64-64.tar.Z">cmake-2.8.12.2-IRIX64-64.tar.Z</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-IRIX64-64.tar.gz">cmake-2.8.12.2-IRIX64-64.tar.gz</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.2-IRIX64-n32.sh">cmake-2.8.12.2-IRIX64-n32.sh</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-IRIX64-n32.tar.Z">cmake-2.8.12.2-IRIX64-n32.tar.Z</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-IRIX64-n32.tar.gz">cmake-2.8.12.2-IRIX64-n32.tar.gz</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.2-Linux-i386.sh">cmake-2.8.12.2-Linux-i386.sh</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-Linux-i386.tar.Z">cmake-2.8.12.2-Linux-i386.tar.Z</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-Linux-i386.tar.gz">cmake-2.8.12.2-Linux-i386.tar.gz</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.2-SHA-256.txt">cmake-2.8.12.2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-2.8.12.2-SHA-256.txt.asc">cmake-2.8.12.2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-win32-x86.exe">cmake-2.8.12.2-win32-x86.exe</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2-win32-x86.zip">cmake-2.8.12.2-win32-x86.zip</a></td><td align="right">2014-01-16 14:48 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2.tar.Z">cmake-2.8.12.2.tar.Z</a></td><td align="right">2014-01-16 14:48 </td><td align="right">9.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2.tar.gz">cmake-2.8.12.2.tar.gz</a></td><td align="right">2014-01-16 14:48 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.2.zip">cmake-2.8.12.2.zip</a></td><td align="right">2014-01-16 14:48 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.tar.Z">cmake-2.8.12.tar.Z</a></td><td align="right">2013-10-07 14:32 </td><td align="right">9.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.tar.gz">cmake-2.8.12.tar.gz</a></td><td align="right">2013-10-07 14:32 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-2.8.12.zip">cmake-2.8.12.zip</a></td><td align="right">2013-10-07 14:32 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.0/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.0/index.html
new file mode 100644
index 0000000000..2583dcd711
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.0/index.html
@@ -0,0 +1,209 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.0</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.0</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-1-src.tar.bz2">cmake-3.0.0-1-src.tar.bz2</a></td><td align="right">2014-06-10 13:28 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-1.tar.bz2">cmake-3.0.0-1.tar.bz2</a></td><td align="right">2014-06-10 13:28 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-Darwin-universal.dmg">cmake-3.0.0-Darwin-universal.dmg</a></td><td align="right">2014-06-10 13:28 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-Darwin-universal.tar.Z">cmake-3.0.0-Darwin-universal.tar.Z</a></td><td align="right">2014-06-10 13:27 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-Darwin-universal.tar.gz">cmake-3.0.0-Darwin-universal.tar.gz</a></td><td align="right">2014-06-10 13:27 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-Darwin64-universal.dmg">cmake-3.0.0-Darwin64-universal.dmg</a></td><td align="right">2014-06-10 13:27 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-Darwin64-universal.tar.Z">cmake-3.0.0-Darwin64-universal.tar.Z</a></td><td align="right">2014-06-10 13:27 </td><td align="right"> 54M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-Darwin64-universal.tar.gz">cmake-3.0.0-Darwin64-universal.tar.gz</a></td><td align="right">2014-06-10 13:27 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-Linux-i386.sh">cmake-3.0.0-Linux-i386.sh</a></td><td align="right">2014-06-10 13:27 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-Linux-i386.tar.Z">cmake-3.0.0-Linux-i386.tar.Z</a></td><td align="right">2014-06-10 13:27 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-Linux-i386.tar.gz">cmake-3.0.0-Linux-i386.tar.gz</a></td><td align="right">2014-06-10 13:27 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-SHA-256.txt">cmake-3.0.0-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-SHA-256.txt.asc">cmake-3.0.0-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-1-src.tar.bz2">cmake-3.0.0-rc1-1-src.tar.bz2</a></td><td align="right">2014-02-28 13:54 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-1.tar.bz2">cmake-3.0.0-rc1-1.tar.bz2</a></td><td align="right">2014-02-28 13:54 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc1-AIX-powerpc.sh">cmake-3.0.0-rc1-AIX-powerpc.sh</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-AIX-powerpc.tar.Z">cmake-3.0.0-rc1-AIX-powerpc.tar.Z</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-AIX-powerpc.tar.gz">cmake-3.0.0-rc1-AIX-powerpc.tar.gz</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-Darwin-universal.dmg">cmake-3.0.0-rc1-Darwin-universal.dmg</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-Darwin-universal.tar.Z">cmake-3.0.0-rc1-Darwin-universal.tar.Z</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-Darwin-universal.tar.gz">cmake-3.0.0-rc1-Darwin-universal.tar.gz</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-Darwin64-universal.dmg">cmake-3.0.0-rc1-Darwin64-universal.dmg</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-Darwin64-universal.tar.Z">cmake-3.0.0-rc1-Darwin64-universal.tar.Z</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 54M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-Darwin64-universal.tar.gz">cmake-3.0.0-rc1-Darwin64-universal.tar.gz</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc1-IRIX64-64.sh">cmake-3.0.0-rc1-IRIX64-64.sh</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-IRIX64-64.tar.Z">cmake-3.0.0-rc1-IRIX64-64.tar.Z</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-IRIX64-64.tar.gz">cmake-3.0.0-rc1-IRIX64-64.tar.gz</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc1-IRIX64-n32.sh">cmake-3.0.0-rc1-IRIX64-n32.sh</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-IRIX64-n32.tar.Z">cmake-3.0.0-rc1-IRIX64-n32.tar.Z</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-IRIX64-n32.tar.gz">cmake-3.0.0-rc1-IRIX64-n32.tar.gz</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc1-Linux-i386.sh">cmake-3.0.0-rc1-Linux-i386.sh</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-Linux-i386.tar.Z">cmake-3.0.0-rc1-Linux-i386.tar.Z</a></td><td align="right">2014-02-28 13:54 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-Linux-i386.tar.gz">cmake-3.0.0-rc1-Linux-i386.tar.gz</a></td><td align="right">2014-02-28 13:53 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc1-SHA-256.txt">cmake-3.0.0-rc1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc1-SHA-256.txt.asc">cmake-3.0.0-rc1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-win32-x86.exe">cmake-3.0.0-rc1-win32-x86.exe</a></td><td align="right">2014-02-28 13:53 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1-win32-x86.zip">cmake-3.0.0-rc1-win32-x86.zip</a></td><td align="right">2014-02-28 13:53 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1.tar.Z">cmake-3.0.0-rc1.tar.Z</a></td><td align="right">2014-02-28 13:53 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1.tar.gz">cmake-3.0.0-rc1.tar.gz</a></td><td align="right">2014-02-28 13:53 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc1.zip">cmake-3.0.0-rc1.zip</a></td><td align="right">2014-02-28 13:53 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-1-src.tar.bz2">cmake-3.0.0-rc2-1-src.tar.bz2</a></td><td align="right">2014-03-19 10:29 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-1.tar.bz2">cmake-3.0.0-rc2-1.tar.bz2</a></td><td align="right">2014-03-19 10:28 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc2-AIX-powerpc.sh">cmake-3.0.0-rc2-AIX-powerpc.sh</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-AIX-powerpc.tar.Z">cmake-3.0.0-rc2-AIX-powerpc.tar.Z</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-AIX-powerpc.tar.gz">cmake-3.0.0-rc2-AIX-powerpc.tar.gz</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-Darwin-universal.dmg">cmake-3.0.0-rc2-Darwin-universal.dmg</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-Darwin-universal.tar.Z">cmake-3.0.0-rc2-Darwin-universal.tar.Z</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-Darwin-universal.tar.gz">cmake-3.0.0-rc2-Darwin-universal.tar.gz</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-Darwin64-universal.dmg">cmake-3.0.0-rc2-Darwin64-universal.dmg</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-Darwin64-universal.tar.Z">cmake-3.0.0-rc2-Darwin64-universal.tar.Z</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 54M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-Darwin64-universal.tar.gz">cmake-3.0.0-rc2-Darwin64-universal.tar.gz</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc2-IRIX64-64.sh">cmake-3.0.0-rc2-IRIX64-64.sh</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-IRIX64-64.tar.Z">cmake-3.0.0-rc2-IRIX64-64.tar.Z</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-IRIX64-64.tar.gz">cmake-3.0.0-rc2-IRIX64-64.tar.gz</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc2-IRIX64-n32.sh">cmake-3.0.0-rc2-IRIX64-n32.sh</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-IRIX64-n32.tar.Z">cmake-3.0.0-rc2-IRIX64-n32.tar.Z</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-IRIX64-n32.tar.gz">cmake-3.0.0-rc2-IRIX64-n32.tar.gz</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc2-Linux-i386.sh">cmake-3.0.0-rc2-Linux-i386.sh</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-Linux-i386.tar.Z">cmake-3.0.0-rc2-Linux-i386.tar.Z</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-Linux-i386.tar.gz">cmake-3.0.0-rc2-Linux-i386.tar.gz</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc2-SHA-256.txt">cmake-3.0.0-rc2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc2-SHA-256.txt.asc">cmake-3.0.0-rc2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-win32-x86.exe">cmake-3.0.0-rc2-win32-x86.exe</a></td><td align="right">2014-03-19 10:28 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2-win32-x86.zip">cmake-3.0.0-rc2-win32-x86.zip</a></td><td align="right">2014-03-19 10:27 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2.tar.Z">cmake-3.0.0-rc2.tar.Z</a></td><td align="right">2014-03-19 10:27 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2.tar.gz">cmake-3.0.0-rc2.tar.gz</a></td><td align="right">2014-03-19 10:27 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc2.zip">cmake-3.0.0-rc2.zip</a></td><td align="right">2014-03-19 10:27 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-1-src.tar.bz2">cmake-3.0.0-rc3-1-src.tar.bz2</a></td><td align="right">2014-03-26 13:00 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-1.tar.bz2">cmake-3.0.0-rc3-1.tar.bz2</a></td><td align="right">2014-03-26 13:00 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc3-AIX-powerpc.sh">cmake-3.0.0-rc3-AIX-powerpc.sh</a></td><td align="right">2014-03-26 13:00 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-AIX-powerpc.tar.Z">cmake-3.0.0-rc3-AIX-powerpc.tar.Z</a></td><td align="right">2014-03-26 13:00 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-AIX-powerpc.tar.gz">cmake-3.0.0-rc3-AIX-powerpc.tar.gz</a></td><td align="right">2014-03-26 13:00 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-Darwin-universal.dmg">cmake-3.0.0-rc3-Darwin-universal.dmg</a></td><td align="right">2014-03-26 13:00 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-Darwin-universal.tar.Z">cmake-3.0.0-rc3-Darwin-universal.tar.Z</a></td><td align="right">2014-03-26 13:00 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-Darwin-universal.tar.gz">cmake-3.0.0-rc3-Darwin-universal.tar.gz</a></td><td align="right">2014-03-26 13:00 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-Darwin64-universal.dmg">cmake-3.0.0-rc3-Darwin64-universal.dmg</a></td><td align="right">2014-03-26 12:59 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-Darwin64-universal.tar.Z">cmake-3.0.0-rc3-Darwin64-universal.tar.Z</a></td><td align="right">2014-03-26 12:59 </td><td align="right"> 54M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-Darwin64-universal.tar.gz">cmake-3.0.0-rc3-Darwin64-universal.tar.gz</a></td><td align="right">2014-03-26 12:59 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc3-IRIX64-64.sh">cmake-3.0.0-rc3-IRIX64-64.sh</a></td><td align="right">2014-03-26 12:59 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-IRIX64-64.tar.Z">cmake-3.0.0-rc3-IRIX64-64.tar.Z</a></td><td align="right">2014-03-26 12:59 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-IRIX64-64.tar.gz">cmake-3.0.0-rc3-IRIX64-64.tar.gz</a></td><td align="right">2014-03-26 12:59 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc3-IRIX64-n32.sh">cmake-3.0.0-rc3-IRIX64-n32.sh</a></td><td align="right">2014-03-26 12:59 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-IRIX64-n32.tar.Z">cmake-3.0.0-rc3-IRIX64-n32.tar.Z</a></td><td align="right">2014-03-26 12:59 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-IRIX64-n32.tar.gz">cmake-3.0.0-rc3-IRIX64-n32.tar.gz</a></td><td align="right">2014-03-26 12:59 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc3-SHA-256.txt">cmake-3.0.0-rc3-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.9K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc3-SHA-256.txt.asc">cmake-3.0.0-rc3-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-win32-x86.exe">cmake-3.0.0-rc3-win32-x86.exe</a></td><td align="right">2014-03-26 12:59 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3-win32-x86.zip">cmake-3.0.0-rc3-win32-x86.zip</a></td><td align="right">2014-03-26 12:59 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3.tar.Z">cmake-3.0.0-rc3.tar.Z</a></td><td align="right">2014-03-26 12:59 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3.tar.gz">cmake-3.0.0-rc3.tar.gz</a></td><td align="right">2014-03-26 12:59 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc3.zip">cmake-3.0.0-rc3.zip</a></td><td align="right">2014-03-26 12:59 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-1-src.tar.bz2">cmake-3.0.0-rc4-1-src.tar.bz2</a></td><td align="right">2014-04-18 09:52 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-1.tar.bz2">cmake-3.0.0-rc4-1.tar.bz2</a></td><td align="right">2014-04-18 09:52 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc4-AIX-powerpc.sh">cmake-3.0.0-rc4-AIX-powerpc.sh</a></td><td align="right">2014-04-18 09:52 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-AIX-powerpc.tar.Z">cmake-3.0.0-rc4-AIX-powerpc.tar.Z</a></td><td align="right">2014-04-18 09:52 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-AIX-powerpc.tar.gz">cmake-3.0.0-rc4-AIX-powerpc.tar.gz</a></td><td align="right">2014-04-18 09:52 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-Darwin-universal.dmg">cmake-3.0.0-rc4-Darwin-universal.dmg</a></td><td align="right">2014-04-18 09:52 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-Darwin-universal.tar.Z">cmake-3.0.0-rc4-Darwin-universal.tar.Z</a></td><td align="right">2014-04-18 09:52 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-Darwin-universal.tar.gz">cmake-3.0.0-rc4-Darwin-universal.tar.gz</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-Darwin64-universal.dmg">cmake-3.0.0-rc4-Darwin64-universal.dmg</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-Darwin64-universal.tar.Z">cmake-3.0.0-rc4-Darwin64-universal.tar.Z</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 54M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-Darwin64-universal.tar.gz">cmake-3.0.0-rc4-Darwin64-universal.tar.gz</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc4-IRIX64-64.sh">cmake-3.0.0-rc4-IRIX64-64.sh</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-IRIX64-64.tar.Z">cmake-3.0.0-rc4-IRIX64-64.tar.Z</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-IRIX64-64.tar.gz">cmake-3.0.0-rc4-IRIX64-64.tar.gz</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc4-IRIX64-n32.sh">cmake-3.0.0-rc4-IRIX64-n32.sh</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-IRIX64-n32.tar.Z">cmake-3.0.0-rc4-IRIX64-n32.tar.Z</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-IRIX64-n32.tar.gz">cmake-3.0.0-rc4-IRIX64-n32.tar.gz</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc4-Linux-i386.sh">cmake-3.0.0-rc4-Linux-i386.sh</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-Linux-i386.tar.Z">cmake-3.0.0-rc4-Linux-i386.tar.Z</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-Linux-i386.tar.gz">cmake-3.0.0-rc4-Linux-i386.tar.gz</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc4-SHA-256.txt">cmake-3.0.0-rc4-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">2.2K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc4-SHA-256.txt.asc">cmake-3.0.0-rc4-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-win32-x86.exe">cmake-3.0.0-rc4-win32-x86.exe</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4-win32-x86.zip">cmake-3.0.0-rc4-win32-x86.zip</a></td><td align="right">2014-04-18 09:51 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4.tar.Z">cmake-3.0.0-rc4.tar.Z</a></td><td align="right">2014-04-18 09:51 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4.tar.gz">cmake-3.0.0-rc4.tar.gz</a></td><td align="right">2014-04-18 09:51 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc4.zip">cmake-3.0.0-rc4.zip</a></td><td align="right">2014-04-18 09:51 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-1-src.tar.bz2">cmake-3.0.0-rc5-1-src.tar.bz2</a></td><td align="right">2014-05-13 14:25 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-1.tar.bz2">cmake-3.0.0-rc5-1.tar.bz2</a></td><td align="right">2014-05-13 14:25 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-Darwin-universal.dmg">cmake-3.0.0-rc5-Darwin-universal.dmg</a></td><td align="right">2014-05-13 14:25 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-Darwin-universal.tar.Z">cmake-3.0.0-rc5-Darwin-universal.tar.Z</a></td><td align="right">2014-05-13 14:24 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-Darwin-universal.tar.gz">cmake-3.0.0-rc5-Darwin-universal.tar.gz</a></td><td align="right">2014-05-13 14:24 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-Darwin64-universal.dmg">cmake-3.0.0-rc5-Darwin64-universal.dmg</a></td><td align="right">2014-05-13 14:24 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-Darwin64-universal.tar.Z">cmake-3.0.0-rc5-Darwin64-universal.tar.Z</a></td><td align="right">2014-05-13 14:24 </td><td align="right"> 54M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-Darwin64-universal.tar.gz">cmake-3.0.0-rc5-Darwin64-universal.tar.gz</a></td><td align="right">2014-05-13 14:24 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc5-Linux-i386.sh">cmake-3.0.0-rc5-Linux-i386.sh</a></td><td align="right">2014-05-13 14:24 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-Linux-i386.tar.Z">cmake-3.0.0-rc5-Linux-i386.tar.Z</a></td><td align="right">2014-05-13 14:24 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-Linux-i386.tar.gz">cmake-3.0.0-rc5-Linux-i386.tar.gz</a></td><td align="right">2014-05-13 14:24 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc5-SHA-256.txt">cmake-3.0.0-rc5-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.4K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc5-SHA-256.txt.asc">cmake-3.0.0-rc5-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-win32-x86.exe">cmake-3.0.0-rc5-win32-x86.exe</a></td><td align="right">2014-05-13 14:24 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5-win32-x86.zip">cmake-3.0.0-rc5-win32-x86.zip</a></td><td align="right">2014-05-13 14:24 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5.tar.Z">cmake-3.0.0-rc5.tar.Z</a></td><td align="right">2014-05-13 14:24 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5.tar.gz">cmake-3.0.0-rc5.tar.gz</a></td><td align="right">2014-05-13 14:24 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc5.zip">cmake-3.0.0-rc5.zip</a></td><td align="right">2014-05-13 14:24 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-1-src.tar.bz2">cmake-3.0.0-rc6-1-src.tar.bz2</a></td><td align="right">2014-05-22 14:57 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-1.tar.bz2">cmake-3.0.0-rc6-1.tar.bz2</a></td><td align="right">2014-05-22 14:57 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-Darwin-universal.dmg">cmake-3.0.0-rc6-Darwin-universal.dmg</a></td><td align="right">2014-05-22 14:57 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-Darwin-universal.tar.Z">cmake-3.0.0-rc6-Darwin-universal.tar.Z</a></td><td align="right">2014-05-22 14:56 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-Darwin-universal.tar.gz">cmake-3.0.0-rc6-Darwin-universal.tar.gz</a></td><td align="right">2014-05-22 14:56 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-Darwin64-universal.dmg">cmake-3.0.0-rc6-Darwin64-universal.dmg</a></td><td align="right">2014-05-22 14:56 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-Darwin64-universal.tar.Z">cmake-3.0.0-rc6-Darwin64-universal.tar.Z</a></td><td align="right">2014-05-22 14:56 </td><td align="right"> 54M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-Darwin64-universal.tar.gz">cmake-3.0.0-rc6-Darwin64-universal.tar.gz</a></td><td align="right">2014-05-22 14:56 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc6-Linux-i386.sh">cmake-3.0.0-rc6-Linux-i386.sh</a></td><td align="right">2014-05-22 14:56 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-Linux-i386.tar.Z">cmake-3.0.0-rc6-Linux-i386.tar.Z</a></td><td align="right">2014-05-22 14:56 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-Linux-i386.tar.gz">cmake-3.0.0-rc6-Linux-i386.tar.gz</a></td><td align="right">2014-05-22 14:56 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc6-SHA-256.txt">cmake-3.0.0-rc6-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.4K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.0-rc6-SHA-256.txt.asc">cmake-3.0.0-rc6-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-win32-x86.exe">cmake-3.0.0-rc6-win32-x86.exe</a></td><td align="right">2014-05-22 14:56 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6-win32-x86.zip">cmake-3.0.0-rc6-win32-x86.zip</a></td><td align="right">2014-05-22 14:56 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6.tar.Z">cmake-3.0.0-rc6.tar.Z</a></td><td align="right">2014-05-22 14:56 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6.tar.gz">cmake-3.0.0-rc6.tar.gz</a></td><td align="right">2014-05-22 14:56 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-rc6.zip">cmake-3.0.0-rc6.zip</a></td><td align="right">2014-05-22 14:56 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-win32-x86.exe">cmake-3.0.0-win32-x86.exe</a></td><td align="right">2014-06-10 13:27 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0-win32-x86.zip">cmake-3.0.0-win32-x86.zip</a></td><td align="right">2014-06-10 13:27 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0.tar.Z">cmake-3.0.0.tar.Z</a></td><td align="right">2014-06-10 13:27 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0.tar.gz">cmake-3.0.0.tar.gz</a></td><td align="right">2014-06-10 13:27 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.0.zip">cmake-3.0.0.zip</a></td><td align="right">2014-06-10 13:27 </td><td align="right">7.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-1-src.tar.bz2">cmake-3.0.1-1-src.tar.bz2</a></td><td align="right">2014-09-11 09:19 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-1.tar.bz2">cmake-3.0.1-1.tar.bz2</a></td><td align="right">2014-09-11 09:19 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-Darwin-universal.dmg">cmake-3.0.1-Darwin-universal.dmg</a></td><td align="right">2014-09-11 09:19 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-Darwin-universal.tar.Z">cmake-3.0.1-Darwin-universal.tar.Z</a></td><td align="right">2014-09-11 09:19 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-Darwin-universal.tar.gz">cmake-3.0.1-Darwin-universal.tar.gz</a></td><td align="right">2014-09-11 09:19 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-Darwin64-universal.dmg">cmake-3.0.1-Darwin64-universal.dmg</a></td><td align="right">2014-09-11 09:18 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-Darwin64-universal.tar.Z">cmake-3.0.1-Darwin64-universal.tar.Z</a></td><td align="right">2014-09-11 09:18 </td><td align="right"> 54M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-Darwin64-universal.tar.gz">cmake-3.0.1-Darwin64-universal.tar.gz</a></td><td align="right">2014-09-11 09:18 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.1-Linux-i386.sh">cmake-3.0.1-Linux-i386.sh</a></td><td align="right">2014-09-11 09:18 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-Linux-i386.tar.Z">cmake-3.0.1-Linux-i386.tar.Z</a></td><td align="right">2014-09-11 09:18 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-Linux-i386.tar.gz">cmake-3.0.1-Linux-i386.tar.gz</a></td><td align="right">2014-09-11 09:18 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.1-SHA-256.txt">cmake-3.0.1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.1-SHA-256.txt.asc">cmake-3.0.1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-win32-x86.exe">cmake-3.0.1-win32-x86.exe</a></td><td align="right">2014-09-11 09:18 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.1-win32-x86.zip">cmake-3.0.1-win32-x86.zip</a></td><td align="right">2014-09-11 09:18 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.1.tar.Z">cmake-3.0.1.tar.Z</a></td><td align="right">2014-09-11 09:18 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.1.tar.gz">cmake-3.0.1.tar.gz</a></td><td align="right">2014-09-11 09:18 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.1.zip">cmake-3.0.1.zip</a></td><td align="right">2014-09-11 09:18 </td><td align="right">7.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-1-src.tar.bz2">cmake-3.0.2-1-src.tar.bz2</a></td><td align="right">2014-09-11 12:19 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-1.tar.bz2">cmake-3.0.2-1.tar.bz2</a></td><td align="right">2014-09-11 12:19 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-Darwin-universal.dmg">cmake-3.0.2-Darwin-universal.dmg</a></td><td align="right">2014-09-11 12:19 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-Darwin-universal.tar.Z">cmake-3.0.2-Darwin-universal.tar.Z</a></td><td align="right">2014-09-11 12:19 </td><td align="right"> 58M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-Darwin-universal.tar.gz">cmake-3.0.2-Darwin-universal.tar.gz</a></td><td align="right">2014-09-11 12:19 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-Darwin64-universal.dmg">cmake-3.0.2-Darwin64-universal.dmg</a></td><td align="right">2014-09-11 12:19 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-Darwin64-universal.tar.Z">cmake-3.0.2-Darwin64-universal.tar.Z</a></td><td align="right">2014-09-11 12:19 </td><td align="right"> 54M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-Darwin64-universal.tar.gz">cmake-3.0.2-Darwin64-universal.tar.gz</a></td><td align="right">2014-09-11 12:18 </td><td align="right"> 39M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.2-Linux-i386.sh">cmake-3.0.2-Linux-i386.sh</a></td><td align="right">2014-09-11 12:18 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-Linux-i386.tar.Z">cmake-3.0.2-Linux-i386.tar.Z</a></td><td align="right">2014-09-11 12:18 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-Linux-i386.tar.gz">cmake-3.0.2-Linux-i386.tar.gz</a></td><td align="right">2014-09-11 12:18 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.2-SHA-256.txt">cmake-3.0.2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.0.2-SHA-256.txt.asc">cmake-3.0.2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-win32-x86.exe">cmake-3.0.2-win32-x86.exe</a></td><td align="right">2014-09-11 12:18 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.2-win32-x86.zip">cmake-3.0.2-win32-x86.zip</a></td><td align="right">2014-09-11 12:18 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.2.tar.Z">cmake-3.0.2.tar.Z</a></td><td align="right">2014-09-11 12:18 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.2.tar.gz">cmake-3.0.2.tar.gz</a></td><td align="right">2014-09-11 12:18 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.0.2.zip">cmake-3.0.2.zip</a></td><td align="right">2014-09-11 12:18 </td><td align="right">7.9M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.1/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.1/index.html
new file mode 100644
index 0000000000..635d34c096
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.1/index.html
@@ -0,0 +1,156 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.1</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.1</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-1-src.tar.bz2">cmake-3.1.0-1-src.tar.bz2</a></td><td align="right">2014-12-17 13:10 </td><td align="right">4.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-1.tar.bz2">cmake-3.1.0-1.tar.bz2</a></td><td align="right">2014-12-17 13:10 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Darwin-universal.dmg">cmake-3.1.0-Darwin-universal.dmg</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 45M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Darwin-universal.tar.Z">cmake-3.1.0-Darwin-universal.tar.Z</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 63M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Darwin-universal.tar.gz">cmake-3.1.0-Darwin-universal.tar.gz</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 44M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Darwin64-universal.dmg">cmake-3.1.0-Darwin64-universal.dmg</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Darwin64-universal.tar.Z">cmake-3.1.0-Darwin64-universal.tar.Z</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Darwin64-universal.tar.gz">cmake-3.1.0-Darwin64-universal.tar.gz</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Darwin64.dmg">cmake-3.1.0-Darwin64.dmg</a></td><td align="right">2014-12-19 11:38 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Darwin64.tar.Z">cmake-3.1.0-Darwin64.tar.Z</a></td><td align="right">2014-12-19 11:38 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Darwin64.tar.gz">cmake-3.1.0-Darwin64.tar.gz</a></td><td align="right">2014-12-19 11:38 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-Linux-i386.sh">cmake-3.1.0-Linux-i386.sh</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Linux-i386.tar.Z">cmake-3.1.0-Linux-i386.tar.Z</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Linux-i386.tar.gz">cmake-3.1.0-Linux-i386.tar.gz</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-Linux-x86_64.sh">cmake-3.1.0-Linux-x86_64.sh</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Linux-x86_64.tar.Z">cmake-3.1.0-Linux-x86_64.tar.Z</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-Linux-x86_64.tar.gz">cmake-3.1.0-Linux-x86_64.tar.gz</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-SHA-256.txt">cmake-3.1.0-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.9K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-SHA-256.txt.asc">cmake-3.1.0-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-1-src.tar.bz2">cmake-3.1.0-rc1-1-src.tar.bz2</a></td><td align="right">2014-10-28 14:09 </td><td align="right">4.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-1.tar.bz2">cmake-3.1.0-rc1-1.tar.bz2</a></td><td align="right">2014-10-28 14:09 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-Darwin-universal.dmg">cmake-3.1.0-rc1-Darwin-universal.dmg</a></td><td align="right">2014-10-28 14:09 </td><td align="right"> 45M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-Darwin-universal.tar.Z">cmake-3.1.0-rc1-Darwin-universal.tar.Z</a></td><td align="right">2014-10-28 14:09 </td><td align="right"> 63M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-Darwin-universal.tar.gz">cmake-3.1.0-rc1-Darwin-universal.tar.gz</a></td><td align="right">2014-10-28 14:09 </td><td align="right"> 44M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-Darwin64-universal.dmg">cmake-3.1.0-rc1-Darwin64-universal.dmg</a></td><td align="right">2014-10-28 14:09 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-Darwin64-universal.tar.Z">cmake-3.1.0-rc1-Darwin64-universal.tar.Z</a></td><td align="right">2014-10-28 14:09 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-Darwin64-universal.tar.gz">cmake-3.1.0-rc1-Darwin64-universal.tar.gz</a></td><td align="right">2014-10-28 14:08 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-rc1-Linux-i386.sh">cmake-3.1.0-rc1-Linux-i386.sh</a></td><td align="right">2014-10-28 14:08 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-Linux-i386.tar.Z">cmake-3.1.0-rc1-Linux-i386.tar.Z</a></td><td align="right">2014-10-28 14:08 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-Linux-i386.tar.gz">cmake-3.1.0-rc1-Linux-i386.tar.gz</a></td><td align="right">2014-10-28 14:08 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-rc1-SHA-256.txt">cmake-3.1.0-rc1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.4K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-rc1-SHA-256.txt.asc">cmake-3.1.0-rc1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-win32-x86.exe">cmake-3.1.0-rc1-win32-x86.exe</a></td><td align="right">2014-10-28 14:08 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1-win32-x86.zip">cmake-3.1.0-rc1-win32-x86.zip</a></td><td align="right">2014-10-28 14:08 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1.tar.Z">cmake-3.1.0-rc1.tar.Z</a></td><td align="right">2014-10-28 14:08 </td><td align="right">9.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1.tar.gz">cmake-3.1.0-rc1.tar.gz</a></td><td align="right">2014-10-28 14:08 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc1.zip">cmake-3.1.0-rc1.zip</a></td><td align="right">2014-10-28 14:08 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-1-src.tar.bz2">cmake-3.1.0-rc2-1-src.tar.bz2</a></td><td align="right">2014-11-13 11:51 </td><td align="right">4.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-1.tar.bz2">cmake-3.1.0-rc2-1.tar.bz2</a></td><td align="right">2014-11-13 11:51 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-Darwin-universal.dmg">cmake-3.1.0-rc2-Darwin-universal.dmg</a></td><td align="right">2014-11-13 11:51 </td><td align="right"> 45M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-Darwin-universal.tar.Z">cmake-3.1.0-rc2-Darwin-universal.tar.Z</a></td><td align="right">2014-11-13 11:51 </td><td align="right"> 63M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-Darwin-universal.tar.gz">cmake-3.1.0-rc2-Darwin-universal.tar.gz</a></td><td align="right">2014-11-13 11:50 </td><td align="right"> 44M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-Darwin64-universal.dmg">cmake-3.1.0-rc2-Darwin64-universal.dmg</a></td><td align="right">2014-11-13 11:50 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-Darwin64-universal.tar.Z">cmake-3.1.0-rc2-Darwin64-universal.tar.Z</a></td><td align="right">2014-11-13 11:50 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-Darwin64-universal.tar.gz">cmake-3.1.0-rc2-Darwin64-universal.tar.gz</a></td><td align="right">2014-11-13 11:50 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-rc2-Linux-i386.sh">cmake-3.1.0-rc2-Linux-i386.sh</a></td><td align="right">2014-11-13 11:50 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-Linux-i386.tar.Z">cmake-3.1.0-rc2-Linux-i386.tar.Z</a></td><td align="right">2014-11-13 11:50 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-Linux-i386.tar.gz">cmake-3.1.0-rc2-Linux-i386.tar.gz</a></td><td align="right">2014-11-13 11:50 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-rc2-SHA-256.txt">cmake-3.1.0-rc2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.4K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-rc2-SHA-256.txt.asc">cmake-3.1.0-rc2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-win32-x86.exe">cmake-3.1.0-rc2-win32-x86.exe</a></td><td align="right">2014-11-13 11:50 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2-win32-x86.zip">cmake-3.1.0-rc2-win32-x86.zip</a></td><td align="right">2014-11-13 11:50 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2.tar.Z">cmake-3.1.0-rc2.tar.Z</a></td><td align="right">2014-11-13 11:50 </td><td align="right">9.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2.tar.gz">cmake-3.1.0-rc2.tar.gz</a></td><td align="right">2014-11-13 11:50 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc2.zip">cmake-3.1.0-rc2.zip</a></td><td align="right">2014-11-13 11:50 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-1-src.tar.bz2">cmake-3.1.0-rc3-1-src.tar.bz2</a></td><td align="right">2014-12-09 16:53 </td><td align="right">4.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-1.tar.bz2">cmake-3.1.0-rc3-1.tar.bz2</a></td><td align="right">2014-12-09 16:53 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-Darwin-universal.dmg">cmake-3.1.0-rc3-Darwin-universal.dmg</a></td><td align="right">2014-12-09 16:53 </td><td align="right"> 45M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-Darwin-universal.tar.Z">cmake-3.1.0-rc3-Darwin-universal.tar.Z</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 63M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-Darwin-universal.tar.gz">cmake-3.1.0-rc3-Darwin-universal.tar.gz</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 44M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-Darwin64-universal.dmg">cmake-3.1.0-rc3-Darwin64-universal.dmg</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-Darwin64-universal.tar.Z">cmake-3.1.0-rc3-Darwin64-universal.tar.Z</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 40M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-Darwin64-universal.tar.gz">cmake-3.1.0-rc3-Darwin64-universal.tar.gz</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-rc3-Linux-i386.sh">cmake-3.1.0-rc3-Linux-i386.sh</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-Linux-i386.tar.Z">cmake-3.1.0-rc3-Linux-i386.tar.Z</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-Linux-i386.tar.gz">cmake-3.1.0-rc3-Linux-i386.tar.gz</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-rc3-Linux-x86_64.sh">cmake-3.1.0-rc3-Linux-x86_64.sh</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-Linux-x86_64.tar.Z">cmake-3.1.0-rc3-Linux-x86_64.tar.Z</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-Linux-x86_64.tar.gz">cmake-3.1.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-rc3-SHA-256.txt">cmake-3.1.0-rc3-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.0-rc3-SHA-256.txt.asc">cmake-3.1.0-rc3-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-win32-x86.exe">cmake-3.1.0-rc3-win32-x86.exe</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3-win32-x86.zip">cmake-3.1.0-rc3-win32-x86.zip</a></td><td align="right">2014-12-09 16:52 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3.tar.Z">cmake-3.1.0-rc3.tar.Z</a></td><td align="right">2014-12-09 16:52 </td><td align="right">9.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3.tar.gz">cmake-3.1.0-rc3.tar.gz</a></td><td align="right">2014-12-09 16:52 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-rc3.zip">cmake-3.1.0-rc3.zip</a></td><td align="right">2014-12-09 16:52 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-win32-x86.exe">cmake-3.1.0-win32-x86.exe</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0-win32-x86.zip">cmake-3.1.0-win32-x86.zip</a></td><td align="right">2014-12-17 13:10 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0.tar.Z">cmake-3.1.0.tar.Z</a></td><td align="right">2014-12-17 13:10 </td><td align="right">9.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0.tar.gz">cmake-3.1.0.tar.gz</a></td><td align="right">2014-12-17 13:10 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.0.zip">cmake-3.1.0.zip</a></td><td align="right">2014-12-17 13:10 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-1-src.tar.bz2">cmake-3.1.1-1-src.tar.bz2</a></td><td align="right">2015-01-22 16:49 </td><td align="right">4.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-1.tar.bz2">cmake-3.1.1-1.tar.bz2</a></td><td align="right">2015-01-22 16:49 </td><td align="right">9.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-Darwin-universal.dmg">cmake-3.1.1-Darwin-universal.dmg</a></td><td align="right">2015-01-22 16:49 </td><td align="right"> 45M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-Darwin-universal.tar.Z">cmake-3.1.1-Darwin-universal.tar.Z</a></td><td align="right">2015-01-22 16:49 </td><td align="right"> 64M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-Darwin-universal.tar.gz">cmake-3.1.1-Darwin-universal.tar.gz</a></td><td align="right">2015-01-22 16:49 </td><td align="right"> 44M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-Darwin-x86_64.dmg">cmake-3.1.1-Darwin-x86_64.dmg</a></td><td align="right">2015-01-22 16:48 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-Darwin-x86_64.tar.Z">cmake-3.1.1-Darwin-x86_64.tar.Z</a></td><td align="right">2015-01-22 16:48 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-Darwin-x86_64.tar.gz">cmake-3.1.1-Darwin-x86_64.tar.gz</a></td><td align="right">2015-01-22 16:48 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.1-Linux-i386.sh">cmake-3.1.1-Linux-i386.sh</a></td><td align="right">2015-01-22 16:48 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-Linux-i386.tar.Z">cmake-3.1.1-Linux-i386.tar.Z</a></td><td align="right">2015-01-22 16:48 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-Linux-i386.tar.gz">cmake-3.1.1-Linux-i386.tar.gz</a></td><td align="right">2015-01-22 16:48 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.1-Linux-x86_64.sh">cmake-3.1.1-Linux-x86_64.sh</a></td><td align="right">2015-01-22 16:48 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-Linux-x86_64.tar.Z">cmake-3.1.1-Linux-x86_64.tar.Z</a></td><td align="right">2015-01-22 16:48 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-Linux-x86_64.tar.gz">cmake-3.1.1-Linux-x86_64.tar.gz</a></td><td align="right">2015-01-22 16:48 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.1-SHA-256.txt">cmake-3.1.1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.1-SHA-256.txt.asc">cmake-3.1.1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-win32-x86.exe">cmake-3.1.1-win32-x86.exe</a></td><td align="right">2015-01-22 16:48 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1-win32-x86.zip">cmake-3.1.1-win32-x86.zip</a></td><td align="right">2015-01-22 16:48 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1.tar.Z">cmake-3.1.1.tar.Z</a></td><td align="right">2015-01-22 16:48 </td><td align="right">9.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1.tar.gz">cmake-3.1.1.tar.gz</a></td><td align="right">2015-01-22 16:48 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.1.zip">cmake-3.1.1.zip</a></td><td align="right">2015-01-22 16:48 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-Darwin-universal.dmg">cmake-3.1.2-Darwin-universal.dmg</a></td><td align="right">2015-02-05 10:06 </td><td align="right"> 45M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-Darwin-universal.tar.Z">cmake-3.1.2-Darwin-universal.tar.Z</a></td><td align="right">2015-02-05 10:06 </td><td align="right"> 64M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-Darwin-universal.tar.gz">cmake-3.1.2-Darwin-universal.tar.gz</a></td><td align="right">2015-02-05 10:06 </td><td align="right"> 44M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-Darwin-x86_64.dmg">cmake-3.1.2-Darwin-x86_64.dmg</a></td><td align="right">2015-02-05 10:06 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-Darwin-x86_64.tar.Z">cmake-3.1.2-Darwin-x86_64.tar.Z</a></td><td align="right">2015-02-05 10:06 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-Darwin-x86_64.tar.gz">cmake-3.1.2-Darwin-x86_64.tar.gz</a></td><td align="right">2015-02-05 10:06 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.2-Linux-i386.sh">cmake-3.1.2-Linux-i386.sh</a></td><td align="right">2015-02-05 10:06 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-Linux-i386.tar.Z">cmake-3.1.2-Linux-i386.tar.Z</a></td><td align="right">2015-02-05 10:06 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-Linux-i386.tar.gz">cmake-3.1.2-Linux-i386.tar.gz</a></td><td align="right">2015-02-05 10:05 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.2-Linux-x86_64.sh">cmake-3.1.2-Linux-x86_64.sh</a></td><td align="right">2015-02-05 10:05 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-Linux-x86_64.tar.Z">cmake-3.1.2-Linux-x86_64.tar.Z</a></td><td align="right">2015-02-05 10:05 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-Linux-x86_64.tar.gz">cmake-3.1.2-Linux-x86_64.tar.gz</a></td><td align="right">2015-02-05 10:05 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.2-SHA-256.txt">cmake-3.1.2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.2-SHA-256.txt.asc">cmake-3.1.2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-win32-x86.exe">cmake-3.1.2-win32-x86.exe</a></td><td align="right">2015-02-05 10:05 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2-win32-x86.zip">cmake-3.1.2-win32-x86.zip</a></td><td align="right">2015-02-05 10:05 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2.tar.Z">cmake-3.1.2.tar.Z</a></td><td align="right">2015-02-05 10:05 </td><td align="right">9.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2.tar.gz">cmake-3.1.2.tar.gz</a></td><td align="right">2015-02-05 10:05 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.2.zip">cmake-3.1.2.zip</a></td><td align="right">2015-02-05 10:05 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-1-src.tar.bz2">cmake-3.1.3-1-src.tar.bz2</a></td><td align="right">2015-02-12 17:40 </td><td align="right">4.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-1.tar.bz2">cmake-3.1.3-1.tar.bz2</a></td><td align="right">2015-02-12 17:40 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-Darwin-universal.dmg">cmake-3.1.3-Darwin-universal.dmg</a></td><td align="right">2015-02-12 17:40 </td><td align="right"> 45M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-Darwin-universal.tar.Z">cmake-3.1.3-Darwin-universal.tar.Z</a></td><td align="right">2015-02-12 17:40 </td><td align="right"> 64M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-Darwin-universal.tar.gz">cmake-3.1.3-Darwin-universal.tar.gz</a></td><td align="right">2015-02-12 17:40 </td><td align="right"> 44M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-Darwin-x86_64.dmg">cmake-3.1.3-Darwin-x86_64.dmg</a></td><td align="right">2015-02-12 17:40 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-Darwin-x86_64.tar.Z">cmake-3.1.3-Darwin-x86_64.tar.Z</a></td><td align="right">2015-02-12 17:40 </td><td align="right"> 41M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-Darwin-x86_64.tar.gz">cmake-3.1.3-Darwin-x86_64.tar.gz</a></td><td align="right">2015-02-12 17:39 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.3-Linux-i386.sh">cmake-3.1.3-Linux-i386.sh</a></td><td align="right">2015-02-12 17:39 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-Linux-i386.tar.Z">cmake-3.1.3-Linux-i386.tar.Z</a></td><td align="right">2015-02-12 17:39 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-Linux-i386.tar.gz">cmake-3.1.3-Linux-i386.tar.gz</a></td><td align="right">2015-02-12 17:39 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.3-Linux-x86_64.sh">cmake-3.1.3-Linux-x86_64.sh</a></td><td align="right">2015-02-12 17:39 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-Linux-x86_64.tar.Z">cmake-3.1.3-Linux-x86_64.tar.Z</a></td><td align="right">2015-02-12 17:39 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-Linux-x86_64.tar.gz">cmake-3.1.3-Linux-x86_64.tar.gz</a></td><td align="right">2015-02-12 17:39 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.3-SHA-256.txt">cmake-3.1.3-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.1.3-SHA-256.txt.asc">cmake-3.1.3-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-win32-x86.exe">cmake-3.1.3-win32-x86.exe</a></td><td align="right">2015-02-12 17:39 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3-win32-x86.zip">cmake-3.1.3-win32-x86.zip</a></td><td align="right">2015-02-12 17:39 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3.tar.Z">cmake-3.1.3.tar.Z</a></td><td align="right">2015-02-12 17:39 </td><td align="right">9.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3.tar.gz">cmake-3.1.3.tar.gz</a></td><td align="right">2015-02-12 17:39 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.1.3.zip">cmake-3.1.3.zip</a></td><td align="right">2015-02-12 17:39 </td><td align="right">9.0M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.10/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.10/index.html
new file mode 100644
index 0000000000..df654a3691
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.10/index.html
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.10</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.10</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-Darwin-x86_64.dmg">cmake-3.10.0-Darwin-x86_64.dmg</a></td><td align="right">2017-11-20 16:00 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-Darwin-x86_64.tar.gz">cmake-3.10.0-Darwin-x86_64.tar.gz</a></td><td align="right">2017-11-20 16:00 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-Linux-x86_64.sh">cmake-3.10.0-Linux-x86_64.sh</a></td><td align="right">2017-11-20 16:00 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-Linux-x86_64.tar.gz">cmake-3.10.0-Linux-x86_64.tar.gz</a></td><td align="right">2017-11-20 16:00 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-SHA-256.txt">cmake-3.10.0-SHA-256.txt</a></td><td align="right">2017-11-20 16:00 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-SHA-256.txt.asc">cmake-3.10.0-SHA-256.txt.asc</a></td><td align="right">2017-11-20 16:00 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc1-Darwin-x86_64.dmg">cmake-3.10.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2017-10-05 15:50 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc1-Darwin-x86_64.tar.gz">cmake-3.10.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2017-10-05 15:50 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc1-Linux-x86_64.sh">cmake-3.10.0-rc1-Linux-x86_64.sh</a></td><td align="right">2017-10-05 15:50 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc1-Linux-x86_64.tar.gz">cmake-3.10.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2017-10-05 15:50 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc1-SHA-256.txt">cmake-3.10.0-rc1-SHA-256.txt</a></td><td align="right">2017-10-05 15:50 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc1-SHA-256.txt.asc">cmake-3.10.0-rc1-SHA-256.txt.asc</a></td><td align="right">2017-10-05 15:50 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc1-win32-x86.msi">cmake-3.10.0-rc1-win32-x86.msi</a></td><td align="right">2017-10-05 15:50 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc1-win32-x86.zip">cmake-3.10.0-rc1-win32-x86.zip</a></td><td align="right">2017-10-05 15:50 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc1-win64-x64.msi">cmake-3.10.0-rc1-win64-x64.msi</a></td><td align="right">2017-10-05 15:50 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc1-win64-x64.zip">cmake-3.10.0-rc1-win64-x64.zip</a></td><td align="right">2017-10-05 15:50 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc1.tar.Z">cmake-3.10.0-rc1.tar.Z</a></td><td align="right">2017-10-05 15:50 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc1.tar.gz">cmake-3.10.0-rc1.tar.gz</a></td><td align="right">2017-10-05 15:50 </td><td align="right">7.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc1.zip">cmake-3.10.0-rc1.zip</a></td><td align="right">2017-10-05 15:50 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc2-Darwin-x86_64.dmg">cmake-3.10.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2017-10-12 12:07 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc2-Darwin-x86_64.tar.gz">cmake-3.10.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2017-10-12 12:07 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc2-Linux-x86_64.sh">cmake-3.10.0-rc2-Linux-x86_64.sh</a></td><td align="right">2017-10-12 12:07 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc2-Linux-x86_64.tar.gz">cmake-3.10.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2017-10-12 12:07 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc2-SHA-256.txt">cmake-3.10.0-rc2-SHA-256.txt</a></td><td align="right">2017-10-12 12:07 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc2-SHA-256.txt.asc">cmake-3.10.0-rc2-SHA-256.txt.asc</a></td><td align="right">2017-10-12 12:06 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc2-win32-x86.msi">cmake-3.10.0-rc2-win32-x86.msi</a></td><td align="right">2017-10-12 12:06 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc2-win32-x86.zip">cmake-3.10.0-rc2-win32-x86.zip</a></td><td align="right">2017-10-12 12:06 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc2-win64-x64.msi">cmake-3.10.0-rc2-win64-x64.msi</a></td><td align="right">2017-10-12 12:06 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc2-win64-x64.zip">cmake-3.10.0-rc2-win64-x64.zip</a></td><td align="right">2017-10-12 12:06 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc2.tar.Z">cmake-3.10.0-rc2.tar.Z</a></td><td align="right">2017-10-12 12:06 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc2.tar.gz">cmake-3.10.0-rc2.tar.gz</a></td><td align="right">2017-10-12 12:06 </td><td align="right">7.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc2.zip">cmake-3.10.0-rc2.zip</a></td><td align="right">2017-10-12 12:06 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc3-Darwin-x86_64.dmg">cmake-3.10.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2017-10-19 13:24 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc3-Darwin-x86_64.tar.gz">cmake-3.10.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2017-10-19 13:24 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc3-Linux-x86_64.sh">cmake-3.10.0-rc3-Linux-x86_64.sh</a></td><td align="right">2017-10-19 13:24 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc3-Linux-x86_64.tar.gz">cmake-3.10.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2017-10-19 13:24 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc3-SHA-256.txt">cmake-3.10.0-rc3-SHA-256.txt</a></td><td align="right">2017-10-19 13:24 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc3-SHA-256.txt.asc">cmake-3.10.0-rc3-SHA-256.txt.asc</a></td><td align="right">2017-10-19 13:24 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc3-win32-x86.msi">cmake-3.10.0-rc3-win32-x86.msi</a></td><td align="right">2017-10-19 13:24 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc3-win32-x86.zip">cmake-3.10.0-rc3-win32-x86.zip</a></td><td align="right">2017-10-19 13:24 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc3-win64-x64.msi">cmake-3.10.0-rc3-win64-x64.msi</a></td><td align="right">2017-10-19 13:24 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc3-win64-x64.zip">cmake-3.10.0-rc3-win64-x64.zip</a></td><td align="right">2017-10-19 13:24 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc3.tar.Z">cmake-3.10.0-rc3.tar.Z</a></td><td align="right">2017-10-19 13:24 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc3.tar.gz">cmake-3.10.0-rc3.tar.gz</a></td><td align="right">2017-10-19 13:24 </td><td align="right">7.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc3.zip">cmake-3.10.0-rc3.zip</a></td><td align="right">2017-10-19 13:24 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc4-Darwin-x86_64.dmg">cmake-3.10.0-rc4-Darwin-x86_64.dmg</a></td><td align="right">2017-11-01 15:37 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc4-Darwin-x86_64.tar.gz">cmake-3.10.0-rc4-Darwin-x86_64.tar.gz</a></td><td align="right">2017-11-01 15:37 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc4-Linux-x86_64.sh">cmake-3.10.0-rc4-Linux-x86_64.sh</a></td><td align="right">2017-11-01 15:37 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc4-Linux-x86_64.tar.gz">cmake-3.10.0-rc4-Linux-x86_64.tar.gz</a></td><td align="right">2017-11-01 15:37 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc4-SHA-256.txt">cmake-3.10.0-rc4-SHA-256.txt</a></td><td align="right">2017-11-01 15:37 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc4-SHA-256.txt.asc">cmake-3.10.0-rc4-SHA-256.txt.asc</a></td><td align="right">2017-11-01 15:37 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc4-win32-x86.msi">cmake-3.10.0-rc4-win32-x86.msi</a></td><td align="right">2017-11-01 15:37 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc4-win32-x86.zip">cmake-3.10.0-rc4-win32-x86.zip</a></td><td align="right">2017-11-01 15:37 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc4-win64-x64.msi">cmake-3.10.0-rc4-win64-x64.msi</a></td><td align="right">2017-11-01 15:37 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc4-win64-x64.zip">cmake-3.10.0-rc4-win64-x64.zip</a></td><td align="right">2017-11-01 15:37 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc4.tar.Z">cmake-3.10.0-rc4.tar.Z</a></td><td align="right">2017-11-01 15:37 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc4.tar.gz">cmake-3.10.0-rc4.tar.gz</a></td><td align="right">2017-11-01 15:37 </td><td align="right">7.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc4.zip">cmake-3.10.0-rc4.zip</a></td><td align="right">2017-11-01 15:37 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc5-Darwin-x86_64.dmg">cmake-3.10.0-rc5-Darwin-x86_64.dmg</a></td><td align="right">2017-11-10 14:01 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc5-Darwin-x86_64.tar.gz">cmake-3.10.0-rc5-Darwin-x86_64.tar.gz</a></td><td align="right">2017-11-10 14:01 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc5-Linux-x86_64.sh">cmake-3.10.0-rc5-Linux-x86_64.sh</a></td><td align="right">2017-11-10 14:01 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc5-Linux-x86_64.tar.gz">cmake-3.10.0-rc5-Linux-x86_64.tar.gz</a></td><td align="right">2017-11-10 14:01 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc5-SHA-256.txt">cmake-3.10.0-rc5-SHA-256.txt</a></td><td align="right">2017-11-10 14:01 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.0-rc5-SHA-256.txt.asc">cmake-3.10.0-rc5-SHA-256.txt.asc</a></td><td align="right">2017-11-10 14:01 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc5-win32-x86.msi">cmake-3.10.0-rc5-win32-x86.msi</a></td><td align="right">2017-11-10 14:01 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc5-win32-x86.zip">cmake-3.10.0-rc5-win32-x86.zip</a></td><td align="right">2017-11-10 14:01 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc5-win64-x64.msi">cmake-3.10.0-rc5-win64-x64.msi</a></td><td align="right">2017-11-10 14:01 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc5-win64-x64.zip">cmake-3.10.0-rc5-win64-x64.zip</a></td><td align="right">2017-11-10 14:01 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc5.tar.Z">cmake-3.10.0-rc5.tar.Z</a></td><td align="right">2017-11-10 14:01 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc5.tar.gz">cmake-3.10.0-rc5.tar.gz</a></td><td align="right">2017-11-10 14:01 </td><td align="right">7.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-rc5.zip">cmake-3.10.0-rc5.zip</a></td><td align="right">2017-11-10 14:00 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-win32-x86.msi">cmake-3.10.0-win32-x86.msi</a></td><td align="right">2017-11-20 16:00 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-win32-x86.zip">cmake-3.10.0-win32-x86.zip</a></td><td align="right">2017-11-20 16:00 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-win64-x64.msi">cmake-3.10.0-win64-x64.msi</a></td><td align="right">2017-11-20 16:00 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0-win64-x64.zip">cmake-3.10.0-win64-x64.zip</a></td><td align="right">2017-11-20 16:00 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0.tar.Z">cmake-3.10.0.tar.Z</a></td><td align="right">2017-11-20 16:00 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0.tar.gz">cmake-3.10.0.tar.gz</a></td><td align="right">2017-11-20 16:00 </td><td align="right">7.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.0.zip">cmake-3.10.0.zip</a></td><td align="right">2017-11-20 16:00 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.1-Darwin-x86_64.dmg">cmake-3.10.1-Darwin-x86_64.dmg</a></td><td align="right">2017-12-14 09:10 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.1-Darwin-x86_64.tar.gz">cmake-3.10.1-Darwin-x86_64.tar.gz</a></td><td align="right">2017-12-14 09:10 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.1-Linux-x86_64.sh">cmake-3.10.1-Linux-x86_64.sh</a></td><td align="right">2017-12-14 09:10 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.1-Linux-x86_64.tar.gz">cmake-3.10.1-Linux-x86_64.tar.gz</a></td><td align="right">2017-12-14 09:10 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.1-SHA-256.txt">cmake-3.10.1-SHA-256.txt</a></td><td align="right">2017-12-14 09:10 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.1-SHA-256.txt.asc">cmake-3.10.1-SHA-256.txt.asc</a></td><td align="right">2017-12-14 09:10 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.1-win32-x86.msi">cmake-3.10.1-win32-x86.msi</a></td><td align="right">2017-12-14 09:10 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.1-win32-x86.zip">cmake-3.10.1-win32-x86.zip</a></td><td align="right">2017-12-14 09:10 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.1-win64-x64.msi">cmake-3.10.1-win64-x64.msi</a></td><td align="right">2017-12-14 09:10 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.1-win64-x64.zip">cmake-3.10.1-win64-x64.zip</a></td><td align="right">2017-12-14 09:09 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.1.tar.Z">cmake-3.10.1.tar.Z</a></td><td align="right">2017-12-14 09:09 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.1.tar.gz">cmake-3.10.1.tar.gz</a></td><td align="right">2017-12-14 09:09 </td><td align="right">7.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.1.zip">cmake-3.10.1.zip</a></td><td align="right">2017-12-14 09:09 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.2-Darwin-x86_64.dmg">cmake-3.10.2-Darwin-x86_64.dmg</a></td><td align="right">2018-01-18 12:09 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.2-Darwin-x86_64.tar.gz">cmake-3.10.2-Darwin-x86_64.tar.gz</a></td><td align="right">2018-01-18 12:09 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.2-Linux-x86_64.sh">cmake-3.10.2-Linux-x86_64.sh</a></td><td align="right">2018-01-18 12:09 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.2-Linux-x86_64.tar.gz">cmake-3.10.2-Linux-x86_64.tar.gz</a></td><td align="right">2018-01-18 12:09 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.2-SHA-256.txt">cmake-3.10.2-SHA-256.txt</a></td><td align="right">2018-01-18 12:09 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.2-SHA-256.txt.asc">cmake-3.10.2-SHA-256.txt.asc</a></td><td align="right">2018-01-18 12:09 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.2-win32-x86.msi">cmake-3.10.2-win32-x86.msi</a></td><td align="right">2018-01-18 12:09 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.2-win32-x86.zip">cmake-3.10.2-win32-x86.zip</a></td><td align="right">2018-01-18 12:09 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.2-win64-x64.msi">cmake-3.10.2-win64-x64.msi</a></td><td align="right">2018-01-18 12:09 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.2-win64-x64.zip">cmake-3.10.2-win64-x64.zip</a></td><td align="right">2018-01-18 12:09 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.2.tar.Z">cmake-3.10.2.tar.Z</a></td><td align="right">2018-01-18 12:09 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.2.tar.gz">cmake-3.10.2.tar.gz</a></td><td align="right">2018-01-18 12:09 </td><td align="right">7.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.2.zip">cmake-3.10.2.zip</a></td><td align="right">2018-01-18 12:08 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.3-Darwin-x86_64.dmg">cmake-3.10.3-Darwin-x86_64.dmg</a></td><td align="right">2018-03-16 09:38 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.3-Darwin-x86_64.tar.gz">cmake-3.10.3-Darwin-x86_64.tar.gz</a></td><td align="right">2018-03-16 09:38 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.3-Linux-x86_64.sh">cmake-3.10.3-Linux-x86_64.sh</a></td><td align="right">2018-03-16 09:38 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.3-Linux-x86_64.tar.gz">cmake-3.10.3-Linux-x86_64.tar.gz</a></td><td align="right">2018-03-16 09:38 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.3-SHA-256.txt">cmake-3.10.3-SHA-256.txt</a></td><td align="right">2018-03-16 09:38 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.10.3-SHA-256.txt.asc">cmake-3.10.3-SHA-256.txt.asc</a></td><td align="right">2018-03-16 09:38 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.3-win32-x86.msi">cmake-3.10.3-win32-x86.msi</a></td><td align="right">2018-03-16 09:38 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.3-win32-x86.zip">cmake-3.10.3-win32-x86.zip</a></td><td align="right">2018-03-16 09:38 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.10.3-win64-x64.msi">cmake-3.10.3-win64-x64.msi</a></td><td align="right">2018-03-16 09:38 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.3-win64-x64.zip">cmake-3.10.3-win64-x64.zip</a></td><td align="right">2018-03-16 09:38 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.3.tar.Z">cmake-3.10.3.tar.Z</a></td><td align="right">2018-03-16 09:38 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.3.tar.gz">cmake-3.10.3.tar.gz</a></td><td align="right">2018-03-16 09:38 </td><td align="right">7.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.10.3.zip">cmake-3.10.3.zip</a></td><td align="right">2018-03-16 09:38 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.11/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.11/index.html
new file mode 100644
index 0000000000..869d7427a1
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.11/index.html
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.11</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.11</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-Darwin-x86_64.dmg">cmake-3.11.0-Darwin-x86_64.dmg</a></td><td align="right">2018-03-28 13:40 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-Darwin-x86_64.tar.gz">cmake-3.11.0-Darwin-x86_64.tar.gz</a></td><td align="right">2018-03-28 13:40 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-Linux-x86_64.sh">cmake-3.11.0-Linux-x86_64.sh</a></td><td align="right">2018-03-28 13:40 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-Linux-x86_64.tar.gz">cmake-3.11.0-Linux-x86_64.tar.gz</a></td><td align="right">2018-03-28 13:40 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-SHA-256.txt">cmake-3.11.0-SHA-256.txt</a></td><td align="right">2018-03-28 13:40 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-SHA-256.txt.asc">cmake-3.11.0-SHA-256.txt.asc</a></td><td align="right">2018-03-28 13:40 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc1-Darwin-x86_64.dmg">cmake-3.11.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2018-02-15 11:53 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc1-Darwin-x86_64.tar.gz">cmake-3.11.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2018-02-15 11:53 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc1-Linux-x86_64.sh">cmake-3.11.0-rc1-Linux-x86_64.sh</a></td><td align="right">2018-02-15 11:53 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc1-Linux-x86_64.tar.gz">cmake-3.11.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2018-02-15 11:53 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc1-SHA-256.txt">cmake-3.11.0-rc1-SHA-256.txt</a></td><td align="right">2018-02-15 11:53 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc1-SHA-256.txt.asc">cmake-3.11.0-rc1-SHA-256.txt.asc</a></td><td align="right">2018-02-15 11:53 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc1-win32-x86.msi">cmake-3.11.0-rc1-win32-x86.msi</a></td><td align="right">2018-02-15 11:53 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc1-win32-x86.zip">cmake-3.11.0-rc1-win32-x86.zip</a></td><td align="right">2018-02-15 11:53 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc1-win64-x64.msi">cmake-3.11.0-rc1-win64-x64.msi</a></td><td align="right">2018-02-15 11:53 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc1-win64-x64.zip">cmake-3.11.0-rc1-win64-x64.zip</a></td><td align="right">2018-02-15 11:53 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc1.tar.Z">cmake-3.11.0-rc1.tar.Z</a></td><td align="right">2018-02-15 11:52 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc1.tar.gz">cmake-3.11.0-rc1.tar.gz</a></td><td align="right">2018-02-15 11:52 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc1.zip">cmake-3.11.0-rc1.zip</a></td><td align="right">2018-02-15 11:52 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc2-Darwin-x86_64.dmg">cmake-3.11.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2018-02-27 11:09 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc2-Darwin-x86_64.tar.gz">cmake-3.11.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2018-02-27 11:09 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc2-Linux-x86_64.sh">cmake-3.11.0-rc2-Linux-x86_64.sh</a></td><td align="right">2018-02-27 11:09 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc2-Linux-x86_64.tar.gz">cmake-3.11.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2018-02-27 11:09 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc2-SHA-256.txt">cmake-3.11.0-rc2-SHA-256.txt</a></td><td align="right">2018-02-27 11:09 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc2-SHA-256.txt.asc">cmake-3.11.0-rc2-SHA-256.txt.asc</a></td><td align="right">2018-02-27 11:09 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc2-win32-x86.msi">cmake-3.11.0-rc2-win32-x86.msi</a></td><td align="right">2018-02-27 11:09 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc2-win32-x86.zip">cmake-3.11.0-rc2-win32-x86.zip</a></td><td align="right">2018-02-27 11:09 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc2-win64-x64.msi">cmake-3.11.0-rc2-win64-x64.msi</a></td><td align="right">2018-02-27 11:09 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc2-win64-x64.zip">cmake-3.11.0-rc2-win64-x64.zip</a></td><td align="right">2018-02-27 11:09 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc2.tar.Z">cmake-3.11.0-rc2.tar.Z</a></td><td align="right">2018-02-27 11:09 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc2.tar.gz">cmake-3.11.0-rc2.tar.gz</a></td><td align="right">2018-02-27 11:09 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc2.zip">cmake-3.11.0-rc2.zip</a></td><td align="right">2018-02-27 11:09 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc3-Darwin-x86_64.dmg">cmake-3.11.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2018-03-09 13:46 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc3-Darwin-x86_64.tar.gz">cmake-3.11.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2018-03-09 13:46 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc3-Linux-x86_64.sh">cmake-3.11.0-rc3-Linux-x86_64.sh</a></td><td align="right">2018-03-09 13:46 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc3-Linux-x86_64.tar.gz">cmake-3.11.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2018-03-09 13:46 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc3-SHA-256.txt">cmake-3.11.0-rc3-SHA-256.txt</a></td><td align="right">2018-03-09 13:46 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc3-SHA-256.txt.asc">cmake-3.11.0-rc3-SHA-256.txt.asc</a></td><td align="right">2018-03-09 13:46 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc3-win32-x86.msi">cmake-3.11.0-rc3-win32-x86.msi</a></td><td align="right">2018-03-09 13:46 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc3-win32-x86.zip">cmake-3.11.0-rc3-win32-x86.zip</a></td><td align="right">2018-03-09 13:45 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc3-win64-x64.msi">cmake-3.11.0-rc3-win64-x64.msi</a></td><td align="right">2018-03-09 13:45 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc3-win64-x64.zip">cmake-3.11.0-rc3-win64-x64.zip</a></td><td align="right">2018-03-09 13:45 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc3.tar.Z">cmake-3.11.0-rc3.tar.Z</a></td><td align="right">2018-03-09 13:45 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc3.tar.gz">cmake-3.11.0-rc3.tar.gz</a></td><td align="right">2018-03-09 13:45 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc3.zip">cmake-3.11.0-rc3.zip</a></td><td align="right">2018-03-09 13:45 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc4-Darwin-x86_64.dmg">cmake-3.11.0-rc4-Darwin-x86_64.dmg</a></td><td align="right">2018-03-19 11:07 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc4-Darwin-x86_64.tar.gz">cmake-3.11.0-rc4-Darwin-x86_64.tar.gz</a></td><td align="right">2018-03-19 11:07 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc4-Linux-x86_64.sh">cmake-3.11.0-rc4-Linux-x86_64.sh</a></td><td align="right">2018-03-19 11:06 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc4-Linux-x86_64.tar.gz">cmake-3.11.0-rc4-Linux-x86_64.tar.gz</a></td><td align="right">2018-03-19 11:06 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc4-SHA-256.txt">cmake-3.11.0-rc4-SHA-256.txt</a></td><td align="right">2018-03-19 11:06 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.0-rc4-SHA-256.txt.asc">cmake-3.11.0-rc4-SHA-256.txt.asc</a></td><td align="right">2018-03-19 11:06 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc4-win32-x86.msi">cmake-3.11.0-rc4-win32-x86.msi</a></td><td align="right">2018-03-19 11:06 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc4-win32-x86.zip">cmake-3.11.0-rc4-win32-x86.zip</a></td><td align="right">2018-03-19 11:06 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc4-win64-x64.msi">cmake-3.11.0-rc4-win64-x64.msi</a></td><td align="right">2018-03-19 11:06 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc4-win64-x64.zip">cmake-3.11.0-rc4-win64-x64.zip</a></td><td align="right">2018-03-19 11:06 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc4.tar.Z">cmake-3.11.0-rc4.tar.Z</a></td><td align="right">2018-03-19 11:06 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc4.tar.gz">cmake-3.11.0-rc4.tar.gz</a></td><td align="right">2018-03-19 11:06 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-rc4.zip">cmake-3.11.0-rc4.zip</a></td><td align="right">2018-03-19 11:06 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-win32-x86.msi">cmake-3.11.0-win32-x86.msi</a></td><td align="right">2018-03-28 13:40 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-win32-x86.zip">cmake-3.11.0-win32-x86.zip</a></td><td align="right">2018-03-28 13:40 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-win64-x64.msi">cmake-3.11.0-win64-x64.msi</a></td><td align="right">2018-03-28 13:40 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0-win64-x64.zip">cmake-3.11.0-win64-x64.zip</a></td><td align="right">2018-03-28 13:40 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0.tar.Z">cmake-3.11.0.tar.Z</a></td><td align="right">2018-03-28 13:40 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0.tar.gz">cmake-3.11.0.tar.gz</a></td><td align="right">2018-03-28 13:40 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.0.zip">cmake-3.11.0.zip</a></td><td align="right">2018-03-28 13:40 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.1-Darwin-x86_64.dmg">cmake-3.11.1-Darwin-x86_64.dmg</a></td><td align="right">2018-04-17 11:33 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.1-Darwin-x86_64.tar.gz">cmake-3.11.1-Darwin-x86_64.tar.gz</a></td><td align="right">2018-04-17 11:32 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.1-Linux-x86_64.sh">cmake-3.11.1-Linux-x86_64.sh</a></td><td align="right">2018-04-17 11:32 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.1-Linux-x86_64.tar.gz">cmake-3.11.1-Linux-x86_64.tar.gz</a></td><td align="right">2018-04-17 11:32 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.1-SHA-256.txt">cmake-3.11.1-SHA-256.txt</a></td><td align="right">2018-04-17 11:32 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.1-SHA-256.txt.asc">cmake-3.11.1-SHA-256.txt.asc</a></td><td align="right">2018-04-17 11:32 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.1-win32-x86.msi">cmake-3.11.1-win32-x86.msi</a></td><td align="right">2018-04-17 11:32 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.1-win32-x86.zip">cmake-3.11.1-win32-x86.zip</a></td><td align="right">2018-04-17 11:32 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.1-win64-x64.msi">cmake-3.11.1-win64-x64.msi</a></td><td align="right">2018-04-17 11:32 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.1-win64-x64.zip">cmake-3.11.1-win64-x64.zip</a></td><td align="right">2018-04-17 11:32 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.1.tar.Z">cmake-3.11.1.tar.Z</a></td><td align="right">2018-04-17 11:32 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.1.tar.gz">cmake-3.11.1.tar.gz</a></td><td align="right">2018-04-17 11:32 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.1.zip">cmake-3.11.1.zip</a></td><td align="right">2018-04-17 11:32 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.2-Darwin-x86_64.dmg">cmake-3.11.2-Darwin-x86_64.dmg</a></td><td align="right">2018-05-17 12:45 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.2-Darwin-x86_64.tar.gz">cmake-3.11.2-Darwin-x86_64.tar.gz</a></td><td align="right">2018-05-17 12:45 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.2-Linux-x86_64.sh">cmake-3.11.2-Linux-x86_64.sh</a></td><td align="right">2018-05-17 12:45 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.2-Linux-x86_64.tar.gz">cmake-3.11.2-Linux-x86_64.tar.gz</a></td><td align="right">2018-05-17 12:45 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.2-SHA-256.txt">cmake-3.11.2-SHA-256.txt</a></td><td align="right">2018-05-17 12:45 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.2-SHA-256.txt.asc">cmake-3.11.2-SHA-256.txt.asc</a></td><td align="right">2018-05-17 12:45 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.2-win32-x86.msi">cmake-3.11.2-win32-x86.msi</a></td><td align="right">2018-05-17 12:45 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.2-win32-x86.zip">cmake-3.11.2-win32-x86.zip</a></td><td align="right">2018-05-17 12:45 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.2-win64-x64.msi">cmake-3.11.2-win64-x64.msi</a></td><td align="right">2018-05-17 12:45 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.2-win64-x64.zip">cmake-3.11.2-win64-x64.zip</a></td><td align="right">2018-05-17 12:44 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.2.tar.Z">cmake-3.11.2.tar.Z</a></td><td align="right">2018-05-17 12:44 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.2.tar.gz">cmake-3.11.2.tar.gz</a></td><td align="right">2018-05-17 12:44 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.2.zip">cmake-3.11.2.zip</a></td><td align="right">2018-05-17 12:44 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.3-Darwin-x86_64.dmg">cmake-3.11.3-Darwin-x86_64.dmg</a></td><td align="right">2018-05-31 15:53 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.3-Darwin-x86_64.tar.gz">cmake-3.11.3-Darwin-x86_64.tar.gz</a></td><td align="right">2018-05-31 15:53 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.3-Linux-x86_64.sh">cmake-3.11.3-Linux-x86_64.sh</a></td><td align="right">2018-05-31 15:53 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.3-Linux-x86_64.tar.gz">cmake-3.11.3-Linux-x86_64.tar.gz</a></td><td align="right">2018-05-31 15:52 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.3-SHA-256.txt">cmake-3.11.3-SHA-256.txt</a></td><td align="right">2018-05-31 15:52 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.3-SHA-256.txt.asc">cmake-3.11.3-SHA-256.txt.asc</a></td><td align="right">2018-05-31 15:52 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.3-win32-x86.msi">cmake-3.11.3-win32-x86.msi</a></td><td align="right">2018-05-31 15:52 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.3-win32-x86.zip">cmake-3.11.3-win32-x86.zip</a></td><td align="right">2018-05-31 15:52 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.3-win64-x64.msi">cmake-3.11.3-win64-x64.msi</a></td><td align="right">2018-05-31 15:52 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.3-win64-x64.zip">cmake-3.11.3-win64-x64.zip</a></td><td align="right">2018-05-31 15:52 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.3.tar.Z">cmake-3.11.3.tar.Z</a></td><td align="right">2018-05-31 15:52 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.3.tar.gz">cmake-3.11.3.tar.gz</a></td><td align="right">2018-05-31 15:52 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.3.zip">cmake-3.11.3.zip</a></td><td align="right">2018-05-31 15:52 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.4-Darwin-x86_64.dmg">cmake-3.11.4-Darwin-x86_64.dmg</a></td><td align="right">2018-06-14 13:50 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.4-Darwin-x86_64.tar.gz">cmake-3.11.4-Darwin-x86_64.tar.gz</a></td><td align="right">2018-06-14 13:50 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.4-Linux-x86_64.sh">cmake-3.11.4-Linux-x86_64.sh</a></td><td align="right">2018-06-14 13:50 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.4-Linux-x86_64.tar.gz">cmake-3.11.4-Linux-x86_64.tar.gz</a></td><td align="right">2018-06-14 13:50 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.4-SHA-256.txt">cmake-3.11.4-SHA-256.txt</a></td><td align="right">2018-06-14 13:50 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.11.4-SHA-256.txt.asc">cmake-3.11.4-SHA-256.txt.asc</a></td><td align="right">2018-06-14 13:50 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.4-win32-x86.msi">cmake-3.11.4-win32-x86.msi</a></td><td align="right">2018-06-14 13:50 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.4-win32-x86.zip">cmake-3.11.4-win32-x86.zip</a></td><td align="right">2018-06-14 13:50 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.11.4-win64-x64.msi">cmake-3.11.4-win64-x64.msi</a></td><td align="right">2018-06-14 13:50 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.4-win64-x64.zip">cmake-3.11.4-win64-x64.zip</a></td><td align="right">2018-06-14 13:50 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.4.tar.Z">cmake-3.11.4.tar.Z</a></td><td align="right">2018-06-14 13:50 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.4.tar.gz">cmake-3.11.4.tar.gz</a></td><td align="right">2018-06-14 13:50 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.11.4.zip">cmake-3.11.4.zip</a></td><td align="right">2018-06-14 13:50 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.12/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.12/index.html
new file mode 100644
index 0000000000..1977e7e07f
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.12/index.html
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.12</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.12</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-Darwin-x86_64.dmg">cmake-3.12.0-Darwin-x86_64.dmg</a></td><td align="right">2018-07-17 09:58 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-Darwin-x86_64.tar.gz">cmake-3.12.0-Darwin-x86_64.tar.gz</a></td><td align="right">2018-07-17 09:58 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-Linux-x86_64.sh">cmake-3.12.0-Linux-x86_64.sh</a></td><td align="right">2018-07-17 09:58 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-Linux-x86_64.tar.gz">cmake-3.12.0-Linux-x86_64.tar.gz</a></td><td align="right">2018-07-17 09:58 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-SHA-256.txt">cmake-3.12.0-SHA-256.txt</a></td><td align="right">2018-07-17 09:58 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-SHA-256.txt.asc">cmake-3.12.0-SHA-256.txt.asc</a></td><td align="right">2018-07-17 09:58 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc1-Darwin-x86_64.dmg">cmake-3.12.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2018-06-14 15:01 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc1-Darwin-x86_64.tar.gz">cmake-3.12.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2018-06-14 15:01 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-rc1-Linux-x86_64.sh">cmake-3.12.0-rc1-Linux-x86_64.sh</a></td><td align="right">2018-06-14 15:01 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc1-Linux-x86_64.tar.gz">cmake-3.12.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2018-06-14 15:01 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-rc1-SHA-256.txt">cmake-3.12.0-rc1-SHA-256.txt</a></td><td align="right">2018-06-14 15:01 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-rc1-SHA-256.txt.asc">cmake-3.12.0-rc1-SHA-256.txt.asc</a></td><td align="right">2018-06-14 15:01 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc1-win32-x86.msi">cmake-3.12.0-rc1-win32-x86.msi</a></td><td align="right">2018-06-14 15:01 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc1-win32-x86.zip">cmake-3.12.0-rc1-win32-x86.zip</a></td><td align="right">2018-06-14 15:01 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc1-win64-x64.msi">cmake-3.12.0-rc1-win64-x64.msi</a></td><td align="right">2018-06-14 15:01 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc1-win64-x64.zip">cmake-3.12.0-rc1-win64-x64.zip</a></td><td align="right">2018-06-14 15:01 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc1.tar.Z">cmake-3.12.0-rc1.tar.Z</a></td><td align="right">2018-06-14 15:01 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc1.tar.gz">cmake-3.12.0-rc1.tar.gz</a></td><td align="right">2018-06-14 15:01 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc1.zip">cmake-3.12.0-rc1.zip</a></td><td align="right">2018-06-14 15:01 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc2-Darwin-x86_64.dmg">cmake-3.12.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2018-06-29 13:57 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc2-Darwin-x86_64.tar.gz">cmake-3.12.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2018-06-29 13:57 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-rc2-Linux-x86_64.sh">cmake-3.12.0-rc2-Linux-x86_64.sh</a></td><td align="right">2018-06-29 13:57 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc2-Linux-x86_64.tar.gz">cmake-3.12.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2018-06-29 13:57 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-rc2-SHA-256.txt">cmake-3.12.0-rc2-SHA-256.txt</a></td><td align="right">2018-06-29 13:57 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-rc2-SHA-256.txt.asc">cmake-3.12.0-rc2-SHA-256.txt.asc</a></td><td align="right">2018-06-29 13:57 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc2-win32-x86.msi">cmake-3.12.0-rc2-win32-x86.msi</a></td><td align="right">2018-06-29 13:56 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc2-win32-x86.zip">cmake-3.12.0-rc2-win32-x86.zip</a></td><td align="right">2018-06-29 13:56 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc2-win64-x64.msi">cmake-3.12.0-rc2-win64-x64.msi</a></td><td align="right">2018-06-29 13:56 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc2-win64-x64.zip">cmake-3.12.0-rc2-win64-x64.zip</a></td><td align="right">2018-06-29 13:56 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc2.tar.Z">cmake-3.12.0-rc2.tar.Z</a></td><td align="right">2018-06-29 13:56 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc2.tar.gz">cmake-3.12.0-rc2.tar.gz</a></td><td align="right">2018-06-29 13:56 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc2.zip">cmake-3.12.0-rc2.zip</a></td><td align="right">2018-06-29 13:56 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc3-Darwin-x86_64.dmg">cmake-3.12.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2018-07-09 11:38 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc3-Darwin-x86_64.tar.gz">cmake-3.12.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2018-07-09 11:38 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-rc3-Linux-x86_64.sh">cmake-3.12.0-rc3-Linux-x86_64.sh</a></td><td align="right">2018-07-09 11:38 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc3-Linux-x86_64.tar.gz">cmake-3.12.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2018-07-09 11:38 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-rc3-SHA-256.txt">cmake-3.12.0-rc3-SHA-256.txt</a></td><td align="right">2018-07-09 11:38 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.0-rc3-SHA-256.txt.asc">cmake-3.12.0-rc3-SHA-256.txt.asc</a></td><td align="right">2018-07-09 11:38 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc3-win32-x86.msi">cmake-3.12.0-rc3-win32-x86.msi</a></td><td align="right">2018-07-09 11:38 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc3-win32-x86.zip">cmake-3.12.0-rc3-win32-x86.zip</a></td><td align="right">2018-07-09 11:38 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc3-win64-x64.msi">cmake-3.12.0-rc3-win64-x64.msi</a></td><td align="right">2018-07-09 11:37 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc3-win64-x64.zip">cmake-3.12.0-rc3-win64-x64.zip</a></td><td align="right">2018-07-09 11:37 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc3.tar.Z">cmake-3.12.0-rc3.tar.Z</a></td><td align="right">2018-07-09 11:37 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc3.tar.gz">cmake-3.12.0-rc3.tar.gz</a></td><td align="right">2018-07-09 11:37 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-rc3.zip">cmake-3.12.0-rc3.zip</a></td><td align="right">2018-07-09 11:37 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-win32-x86.msi">cmake-3.12.0-win32-x86.msi</a></td><td align="right">2018-07-17 09:58 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-win32-x86.zip">cmake-3.12.0-win32-x86.zip</a></td><td align="right">2018-07-17 09:58 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-win64-x64.msi">cmake-3.12.0-win64-x64.msi</a></td><td align="right">2018-07-17 09:58 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0-win64-x64.zip">cmake-3.12.0-win64-x64.zip</a></td><td align="right">2018-07-17 09:58 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0.tar.Z">cmake-3.12.0.tar.Z</a></td><td align="right">2018-07-17 09:58 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0.tar.gz">cmake-3.12.0.tar.gz</a></td><td align="right">2018-07-17 09:58 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.0.zip">cmake-3.12.0.zip</a></td><td align="right">2018-07-17 09:57 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.1-Darwin-x86_64.dmg">cmake-3.12.1-Darwin-x86_64.dmg</a></td><td align="right">2018-08-09 11:21 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.1-Darwin-x86_64.tar.gz">cmake-3.12.1-Darwin-x86_64.tar.gz</a></td><td align="right">2018-08-09 11:21 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.1-Linux-x86_64.sh">cmake-3.12.1-Linux-x86_64.sh</a></td><td align="right">2018-08-09 11:21 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.1-Linux-x86_64.tar.gz">cmake-3.12.1-Linux-x86_64.tar.gz</a></td><td align="right">2018-08-09 11:21 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.1-SHA-256.txt">cmake-3.12.1-SHA-256.txt</a></td><td align="right">2018-08-09 11:20 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.1-SHA-256.txt.asc">cmake-3.12.1-SHA-256.txt.asc</a></td><td align="right">2018-08-09 11:20 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.1-win32-x86.msi">cmake-3.12.1-win32-x86.msi</a></td><td align="right">2018-08-09 11:20 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.1-win32-x86.zip">cmake-3.12.1-win32-x86.zip</a></td><td align="right">2018-08-09 11:20 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.1-win64-x64.msi">cmake-3.12.1-win64-x64.msi</a></td><td align="right">2018-08-09 11:20 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.1-win64-x64.zip">cmake-3.12.1-win64-x64.zip</a></td><td align="right">2018-08-09 11:20 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.1.tar.Z">cmake-3.12.1.tar.Z</a></td><td align="right">2018-08-09 11:20 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.1.tar.gz">cmake-3.12.1.tar.gz</a></td><td align="right">2018-08-09 11:20 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.1.zip">cmake-3.12.1.zip</a></td><td align="right">2018-08-09 11:20 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.2-Darwin-x86_64.dmg">cmake-3.12.2-Darwin-x86_64.dmg</a></td><td align="right">2018-09-07 12:51 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.2-Darwin-x86_64.tar.gz">cmake-3.12.2-Darwin-x86_64.tar.gz</a></td><td align="right">2018-09-07 12:51 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.2-Linux-x86_64.sh">cmake-3.12.2-Linux-x86_64.sh</a></td><td align="right">2018-09-07 12:51 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.2-Linux-x86_64.tar.gz">cmake-3.12.2-Linux-x86_64.tar.gz</a></td><td align="right">2018-09-07 12:51 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.2-SHA-256.txt">cmake-3.12.2-SHA-256.txt</a></td><td align="right">2018-09-07 12:51 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.2-SHA-256.txt.asc">cmake-3.12.2-SHA-256.txt.asc</a></td><td align="right">2018-09-07 12:51 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.2-win32-x86.msi">cmake-3.12.2-win32-x86.msi</a></td><td align="right">2018-09-07 12:51 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.2-win32-x86.zip">cmake-3.12.2-win32-x86.zip</a></td><td align="right">2018-09-07 12:51 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.2-win64-x64.msi">cmake-3.12.2-win64-x64.msi</a></td><td align="right">2018-09-07 12:51 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.2-win64-x64.zip">cmake-3.12.2-win64-x64.zip</a></td><td align="right">2018-09-07 12:51 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.2.tar.Z">cmake-3.12.2.tar.Z</a></td><td align="right">2018-09-07 12:51 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.2.tar.gz">cmake-3.12.2.tar.gz</a></td><td align="right">2018-09-07 12:51 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.2.zip">cmake-3.12.2.zip</a></td><td align="right">2018-09-07 12:51 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.3-Darwin-x86_64.dmg">cmake-3.12.3-Darwin-x86_64.dmg</a></td><td align="right">2018-10-03 10:46 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.3-Darwin-x86_64.tar.gz">cmake-3.12.3-Darwin-x86_64.tar.gz</a></td><td align="right">2018-10-03 10:46 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.3-Linux-x86_64.sh">cmake-3.12.3-Linux-x86_64.sh</a></td><td align="right">2018-10-03 10:45 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.3-Linux-x86_64.tar.gz">cmake-3.12.3-Linux-x86_64.tar.gz</a></td><td align="right">2018-10-03 10:45 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.3-SHA-256.txt">cmake-3.12.3-SHA-256.txt</a></td><td align="right">2018-10-03 10:45 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.3-SHA-256.txt.asc">cmake-3.12.3-SHA-256.txt.asc</a></td><td align="right">2018-10-03 10:45 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.3-win32-x86.msi">cmake-3.12.3-win32-x86.msi</a></td><td align="right">2018-10-03 10:45 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.3-win32-x86.zip">cmake-3.12.3-win32-x86.zip</a></td><td align="right">2018-10-03 10:45 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.3-win64-x64.msi">cmake-3.12.3-win64-x64.msi</a></td><td align="right">2018-10-03 10:45 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.3-win64-x64.zip">cmake-3.12.3-win64-x64.zip</a></td><td align="right">2018-10-03 10:45 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.3.tar.Z">cmake-3.12.3.tar.Z</a></td><td align="right">2018-10-03 10:45 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.3.tar.gz">cmake-3.12.3.tar.gz</a></td><td align="right">2018-10-03 10:45 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.3.zip">cmake-3.12.3.zip</a></td><td align="right">2018-10-03 10:45 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.4-Darwin-x86_64.dmg">cmake-3.12.4-Darwin-x86_64.dmg</a></td><td align="right">2018-11-02 13:51 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.4-Darwin-x86_64.tar.gz">cmake-3.12.4-Darwin-x86_64.tar.gz</a></td><td align="right">2018-11-02 13:51 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.4-Linux-x86_64.sh">cmake-3.12.4-Linux-x86_64.sh</a></td><td align="right">2018-11-02 13:51 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.4-Linux-x86_64.tar.gz">cmake-3.12.4-Linux-x86_64.tar.gz</a></td><td align="right">2018-11-02 13:51 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.4-SHA-256.txt">cmake-3.12.4-SHA-256.txt</a></td><td align="right">2018-11-02 13:51 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.12.4-SHA-256.txt.asc">cmake-3.12.4-SHA-256.txt.asc</a></td><td align="right">2018-11-02 13:51 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.4-win32-x86.msi">cmake-3.12.4-win32-x86.msi</a></td><td align="right">2018-11-02 13:51 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.4-win32-x86.zip">cmake-3.12.4-win32-x86.zip</a></td><td align="right">2018-11-02 13:51 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.12.4-win64-x64.msi">cmake-3.12.4-win64-x64.msi</a></td><td align="right">2018-11-02 13:51 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.4-win64-x64.zip">cmake-3.12.4-win64-x64.zip</a></td><td align="right">2018-11-02 13:51 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.4.tar.Z">cmake-3.12.4.tar.Z</a></td><td align="right">2018-11-02 13:51 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.4.tar.gz">cmake-3.12.4.tar.gz</a></td><td align="right">2018-11-02 13:51 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.12.4.zip">cmake-3.12.4.zip</a></td><td align="right">2018-11-02 13:51 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.13/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.13/index.html
new file mode 100644
index 0000000000..b50a791b80
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.13/index.html
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.13</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.13</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-Darwin-x86_64.dmg">cmake-3.13.0-Darwin-x86_64.dmg</a></td><td align="right">2018-11-20 14:05 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-Darwin-x86_64.tar.gz">cmake-3.13.0-Darwin-x86_64.tar.gz</a></td><td align="right">2018-11-20 14:05 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-Linux-x86_64.sh">cmake-3.13.0-Linux-x86_64.sh</a></td><td align="right">2018-11-20 14:05 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-Linux-x86_64.tar.gz">cmake-3.13.0-Linux-x86_64.tar.gz</a></td><td align="right">2018-11-20 14:05 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-SHA-256.txt">cmake-3.13.0-SHA-256.txt</a></td><td align="right">2018-11-20 14:05 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-SHA-256.txt.asc">cmake-3.13.0-SHA-256.txt.asc</a></td><td align="right">2018-11-20 14:05 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc1-Darwin-x86_64.dmg">cmake-3.13.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2018-10-09 11:32 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc1-Darwin-x86_64.tar.gz">cmake-3.13.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2018-10-09 11:32 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-rc1-Linux-x86_64.sh">cmake-3.13.0-rc1-Linux-x86_64.sh</a></td><td align="right">2018-10-09 11:32 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc1-Linux-x86_64.tar.gz">cmake-3.13.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2018-10-09 11:32 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-rc1-SHA-256.txt">cmake-3.13.0-rc1-SHA-256.txt</a></td><td align="right">2018-10-09 11:32 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-rc1-SHA-256.txt.asc">cmake-3.13.0-rc1-SHA-256.txt.asc</a></td><td align="right">2018-10-09 11:32 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc1-win32-x86.msi">cmake-3.13.0-rc1-win32-x86.msi</a></td><td align="right">2018-10-09 11:32 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc1-win32-x86.zip">cmake-3.13.0-rc1-win32-x86.zip</a></td><td align="right">2018-10-09 11:32 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc1-win64-x64.msi">cmake-3.13.0-rc1-win64-x64.msi</a></td><td align="right">2018-10-09 11:32 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc1-win64-x64.zip">cmake-3.13.0-rc1-win64-x64.zip</a></td><td align="right">2018-10-09 11:32 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc1.tar.Z">cmake-3.13.0-rc1.tar.Z</a></td><td align="right">2018-10-09 11:32 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc1.tar.gz">cmake-3.13.0-rc1.tar.gz</a></td><td align="right">2018-10-09 11:32 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc1.zip">cmake-3.13.0-rc1.zip</a></td><td align="right">2018-10-09 11:32 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc2-Darwin-x86_64.dmg">cmake-3.13.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2018-10-25 10:28 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc2-Darwin-x86_64.tar.gz">cmake-3.13.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2018-10-25 10:28 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-rc2-Linux-x86_64.sh">cmake-3.13.0-rc2-Linux-x86_64.sh</a></td><td align="right">2018-10-25 10:27 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc2-Linux-x86_64.tar.gz">cmake-3.13.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2018-10-25 10:27 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-rc2-SHA-256.txt">cmake-3.13.0-rc2-SHA-256.txt</a></td><td align="right">2018-10-25 10:27 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-rc2-SHA-256.txt.asc">cmake-3.13.0-rc2-SHA-256.txt.asc</a></td><td align="right">2018-10-25 10:27 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc2-win32-x86.msi">cmake-3.13.0-rc2-win32-x86.msi</a></td><td align="right">2018-10-25 10:27 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc2-win32-x86.zip">cmake-3.13.0-rc2-win32-x86.zip</a></td><td align="right">2018-10-25 10:27 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc2-win64-x64.msi">cmake-3.13.0-rc2-win64-x64.msi</a></td><td align="right">2018-10-25 10:27 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc2-win64-x64.zip">cmake-3.13.0-rc2-win64-x64.zip</a></td><td align="right">2018-10-25 10:27 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc2.tar.Z">cmake-3.13.0-rc2.tar.Z</a></td><td align="right">2018-10-25 10:27 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc2.tar.gz">cmake-3.13.0-rc2.tar.gz</a></td><td align="right">2018-10-25 10:27 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc2.zip">cmake-3.13.0-rc2.zip</a></td><td align="right">2018-10-25 10:27 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc3-Darwin-x86_64.dmg">cmake-3.13.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2018-11-07 12:11 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc3-Darwin-x86_64.tar.gz">cmake-3.13.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2018-11-07 12:11 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-rc3-Linux-x86_64.sh">cmake-3.13.0-rc3-Linux-x86_64.sh</a></td><td align="right">2018-11-07 12:11 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc3-Linux-x86_64.tar.gz">cmake-3.13.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2018-11-07 12:11 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-rc3-SHA-256.txt">cmake-3.13.0-rc3-SHA-256.txt</a></td><td align="right">2018-11-07 12:11 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.0-rc3-SHA-256.txt.asc">cmake-3.13.0-rc3-SHA-256.txt.asc</a></td><td align="right">2018-11-07 12:11 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc3-win32-x86.msi">cmake-3.13.0-rc3-win32-x86.msi</a></td><td align="right">2018-11-07 12:11 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc3-win32-x86.zip">cmake-3.13.0-rc3-win32-x86.zip</a></td><td align="right">2018-11-07 12:11 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc3-win64-x64.msi">cmake-3.13.0-rc3-win64-x64.msi</a></td><td align="right">2018-11-07 12:11 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc3-win64-x64.zip">cmake-3.13.0-rc3-win64-x64.zip</a></td><td align="right">2018-11-07 12:11 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc3.tar.Z">cmake-3.13.0-rc3.tar.Z</a></td><td align="right">2018-11-07 12:11 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc3.tar.gz">cmake-3.13.0-rc3.tar.gz</a></td><td align="right">2018-11-07 12:11 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-rc3.zip">cmake-3.13.0-rc3.zip</a></td><td align="right">2018-11-07 12:11 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-win32-x86.msi">cmake-3.13.0-win32-x86.msi</a></td><td align="right">2018-11-20 14:05 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-win32-x86.zip">cmake-3.13.0-win32-x86.zip</a></td><td align="right">2018-11-20 14:05 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-win64-x64.msi">cmake-3.13.0-win64-x64.msi</a></td><td align="right">2018-11-20 14:05 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0-win64-x64.zip">cmake-3.13.0-win64-x64.zip</a></td><td align="right">2018-11-20 14:05 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0.tar.Z">cmake-3.13.0.tar.Z</a></td><td align="right">2018-11-20 14:04 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0.tar.gz">cmake-3.13.0.tar.gz</a></td><td align="right">2018-11-20 14:04 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.0.zip">cmake-3.13.0.zip</a></td><td align="right">2018-11-20 14:04 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.1-Darwin-x86_64.dmg">cmake-3.13.1-Darwin-x86_64.dmg</a></td><td align="right">2018-11-28 08:50 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.1-Darwin-x86_64.tar.gz">cmake-3.13.1-Darwin-x86_64.tar.gz</a></td><td align="right">2018-11-28 08:50 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.1-Linux-x86_64.sh">cmake-3.13.1-Linux-x86_64.sh</a></td><td align="right">2018-11-28 08:50 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.1-Linux-x86_64.tar.gz">cmake-3.13.1-Linux-x86_64.tar.gz</a></td><td align="right">2018-11-28 08:50 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.1-SHA-256.txt">cmake-3.13.1-SHA-256.txt</a></td><td align="right">2018-11-28 08:50 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.1-SHA-256.txt.asc">cmake-3.13.1-SHA-256.txt.asc</a></td><td align="right">2018-11-28 08:50 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.1-win32-x86.msi">cmake-3.13.1-win32-x86.msi</a></td><td align="right">2018-11-28 08:50 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.1-win32-x86.zip">cmake-3.13.1-win32-x86.zip</a></td><td align="right">2018-11-28 08:50 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.1-win64-x64.msi">cmake-3.13.1-win64-x64.msi</a></td><td align="right">2018-11-28 08:50 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.1-win64-x64.zip">cmake-3.13.1-win64-x64.zip</a></td><td align="right">2018-11-28 08:50 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.1.tar.Z">cmake-3.13.1.tar.Z</a></td><td align="right">2018-11-28 08:50 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.1.tar.gz">cmake-3.13.1.tar.gz</a></td><td align="right">2018-11-28 08:50 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.1.zip">cmake-3.13.1.zip</a></td><td align="right">2018-11-28 08:50 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.2-Darwin-x86_64.dmg">cmake-3.13.2-Darwin-x86_64.dmg</a></td><td align="right">2018-12-13 08:41 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.2-Darwin-x86_64.tar.gz">cmake-3.13.2-Darwin-x86_64.tar.gz</a></td><td align="right">2018-12-13 08:41 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.2-Linux-x86_64.sh">cmake-3.13.2-Linux-x86_64.sh</a></td><td align="right">2018-12-13 08:41 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.2-Linux-x86_64.tar.gz">cmake-3.13.2-Linux-x86_64.tar.gz</a></td><td align="right">2018-12-13 08:41 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.2-SHA-256.txt">cmake-3.13.2-SHA-256.txt</a></td><td align="right">2018-12-13 08:41 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.2-SHA-256.txt.asc">cmake-3.13.2-SHA-256.txt.asc</a></td><td align="right">2018-12-13 08:41 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.2-win32-x86.msi">cmake-3.13.2-win32-x86.msi</a></td><td align="right">2018-12-13 08:41 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.2-win32-x86.zip">cmake-3.13.2-win32-x86.zip</a></td><td align="right">2018-12-13 08:41 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.2-win64-x64.msi">cmake-3.13.2-win64-x64.msi</a></td><td align="right">2018-12-13 08:41 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.2-win64-x64.zip">cmake-3.13.2-win64-x64.zip</a></td><td align="right">2018-12-13 08:41 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.2.tar.Z">cmake-3.13.2.tar.Z</a></td><td align="right">2018-12-13 08:41 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.2.tar.gz">cmake-3.13.2.tar.gz</a></td><td align="right">2018-12-13 08:41 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.2.zip">cmake-3.13.2.zip</a></td><td align="right">2018-12-13 08:41 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.3-Darwin-x86_64.dmg">cmake-3.13.3-Darwin-x86_64.dmg</a></td><td align="right">2019-01-14 09:26 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.3-Darwin-x86_64.tar.gz">cmake-3.13.3-Darwin-x86_64.tar.gz</a></td><td align="right">2019-01-14 09:26 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.3-Linux-x86_64.sh">cmake-3.13.3-Linux-x86_64.sh</a></td><td align="right">2019-01-14 09:25 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.3-Linux-x86_64.tar.gz">cmake-3.13.3-Linux-x86_64.tar.gz</a></td><td align="right">2019-01-14 09:25 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.3-SHA-256.txt">cmake-3.13.3-SHA-256.txt</a></td><td align="right">2019-01-14 09:25 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.3-SHA-256.txt.asc">cmake-3.13.3-SHA-256.txt.asc</a></td><td align="right">2019-01-14 09:25 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.3-win32-x86.msi">cmake-3.13.3-win32-x86.msi</a></td><td align="right">2019-01-14 09:25 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.3-win32-x86.zip">cmake-3.13.3-win32-x86.zip</a></td><td align="right">2019-01-14 09:25 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.3-win64-x64.msi">cmake-3.13.3-win64-x64.msi</a></td><td align="right">2019-01-14 09:25 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.3-win64-x64.zip">cmake-3.13.3-win64-x64.zip</a></td><td align="right">2019-01-14 09:25 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.3.tar.Z">cmake-3.13.3.tar.Z</a></td><td align="right">2019-01-14 09:25 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.3.tar.gz">cmake-3.13.3.tar.gz</a></td><td align="right">2019-01-14 09:25 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.3.zip">cmake-3.13.3.zip</a></td><td align="right">2019-01-14 09:25 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.4-Darwin-x86_64.dmg">cmake-3.13.4-Darwin-x86_64.dmg</a></td><td align="right">2019-02-01 13:20 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.4-Darwin-x86_64.tar.gz">cmake-3.13.4-Darwin-x86_64.tar.gz</a></td><td align="right">2019-02-01 13:20 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.4-Linux-x86_64.sh">cmake-3.13.4-Linux-x86_64.sh</a></td><td align="right">2019-02-01 13:20 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.4-Linux-x86_64.tar.gz">cmake-3.13.4-Linux-x86_64.tar.gz</a></td><td align="right">2019-02-01 13:20 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.4-SHA-256.txt">cmake-3.13.4-SHA-256.txt</a></td><td align="right">2019-02-01 13:20 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.4-SHA-256.txt.asc">cmake-3.13.4-SHA-256.txt.asc</a></td><td align="right">2019-02-01 13:20 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.4-win32-x86.msi">cmake-3.13.4-win32-x86.msi</a></td><td align="right">2019-02-01 13:20 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.4-win32-x86.zip">cmake-3.13.4-win32-x86.zip</a></td><td align="right">2019-02-01 13:20 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.4-win64-x64.msi">cmake-3.13.4-win64-x64.msi</a></td><td align="right">2019-02-01 13:20 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.4-win64-x64.zip">cmake-3.13.4-win64-x64.zip</a></td><td align="right">2019-02-01 13:20 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.4.tar.Z">cmake-3.13.4.tar.Z</a></td><td align="right">2019-02-01 13:20 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.4.tar.gz">cmake-3.13.4.tar.gz</a></td><td align="right">2019-02-01 13:20 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.4.zip">cmake-3.13.4.zip</a></td><td align="right">2019-02-01 13:20 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.5-Darwin-x86_64.dmg">cmake-3.13.5-Darwin-x86_64.dmg</a></td><td align="right">2019-05-14 12:44 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.5-Darwin-x86_64.tar.gz">cmake-3.13.5-Darwin-x86_64.tar.gz</a></td><td align="right">2019-05-14 12:44 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.5-Linux-x86_64.sh">cmake-3.13.5-Linux-x86_64.sh</a></td><td align="right">2019-05-14 12:44 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.5-Linux-x86_64.tar.gz">cmake-3.13.5-Linux-x86_64.tar.gz</a></td><td align="right">2019-05-14 12:44 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.5-SHA-256.txt">cmake-3.13.5-SHA-256.txt</a></td><td align="right">2019-05-14 12:43 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.13.5-SHA-256.txt.asc">cmake-3.13.5-SHA-256.txt.asc</a></td><td align="right">2019-05-14 12:43 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.5-win32-x86.msi">cmake-3.13.5-win32-x86.msi</a></td><td align="right">2019-05-14 12:43 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.5-win32-x86.zip">cmake-3.13.5-win32-x86.zip</a></td><td align="right">2019-05-14 12:43 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.13.5-win64-x64.msi">cmake-3.13.5-win64-x64.msi</a></td><td align="right">2019-05-14 12:43 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.5-win64-x64.zip">cmake-3.13.5-win64-x64.zip</a></td><td align="right">2019-05-14 12:43 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.5.tar.Z">cmake-3.13.5.tar.Z</a></td><td align="right">2019-05-14 12:43 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.5.tar.gz">cmake-3.13.5.tar.gz</a></td><td align="right">2019-05-14 12:43 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.13.5.zip">cmake-3.13.5.zip</a></td><td align="right">2019-05-14 12:43 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.14/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.14/index.html
new file mode 100644
index 0000000000..bec9c14d45
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.14/index.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.14</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.14</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-Darwin-x86_64.dmg">cmake-3.14.0-Darwin-x86_64.dmg</a></td><td align="right">2019-03-14 11:37 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-Darwin-x86_64.tar.gz">cmake-3.14.0-Darwin-x86_64.tar.gz</a></td><td align="right">2019-03-14 11:37 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-Linux-x86_64.sh">cmake-3.14.0-Linux-x86_64.sh</a></td><td align="right">2019-03-14 11:37 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-Linux-x86_64.tar.gz">cmake-3.14.0-Linux-x86_64.tar.gz</a></td><td align="right">2019-03-14 11:37 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-SHA-256.txt">cmake-3.14.0-SHA-256.txt</a></td><td align="right">2019-03-22 11:03 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-SHA-256.txt.asc">cmake-3.14.0-SHA-256.txt.asc</a></td><td align="right">2019-03-22 11:03 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc1-Darwin-x86_64.dmg">cmake-3.14.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2019-02-07 10:36 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc1-Darwin-x86_64.tar.gz">cmake-3.14.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2019-02-07 10:36 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc1-Linux-x86_64.sh">cmake-3.14.0-rc1-Linux-x86_64.sh</a></td><td align="right">2019-02-07 10:36 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc1-Linux-x86_64.tar.gz">cmake-3.14.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2019-02-07 10:36 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc1-SHA-256.txt">cmake-3.14.0-rc1-SHA-256.txt</a></td><td align="right">2019-02-07 10:36 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc1-SHA-256.txt.asc">cmake-3.14.0-rc1-SHA-256.txt.asc</a></td><td align="right">2019-02-07 10:36 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc1-win32-x86.msi">cmake-3.14.0-rc1-win32-x86.msi</a></td><td align="right">2019-02-07 10:36 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc1-win32-x86.zip">cmake-3.14.0-rc1-win32-x86.zip</a></td><td align="right">2019-02-07 10:36 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc1-win64-x64.msi">cmake-3.14.0-rc1-win64-x64.msi</a></td><td align="right">2019-02-07 10:36 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc1-win64-x64.zip">cmake-3.14.0-rc1-win64-x64.zip</a></td><td align="right">2019-02-07 10:36 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc1.tar.Z">cmake-3.14.0-rc1.tar.Z</a></td><td align="right">2019-02-07 10:36 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc1.tar.gz">cmake-3.14.0-rc1.tar.gz</a></td><td align="right">2019-02-07 10:35 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc1.zip">cmake-3.14.0-rc1.zip</a></td><td align="right">2019-02-07 10:35 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc2-Darwin-x86_64.dmg">cmake-3.14.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2019-02-15 10:04 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc2-Darwin-x86_64.tar.gz">cmake-3.14.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2019-02-15 10:04 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc2-Linux-x86_64.sh">cmake-3.14.0-rc2-Linux-x86_64.sh</a></td><td align="right">2019-02-15 10:04 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc2-Linux-x86_64.tar.gz">cmake-3.14.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2019-02-15 10:04 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc2-SHA-256.txt">cmake-3.14.0-rc2-SHA-256.txt</a></td><td align="right">2019-02-15 10:04 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc2-SHA-256.txt.asc">cmake-3.14.0-rc2-SHA-256.txt.asc</a></td><td align="right">2019-02-15 10:04 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc2-win32-x86.msi">cmake-3.14.0-rc2-win32-x86.msi</a></td><td align="right">2019-02-15 10:04 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc2-win32-x86.zip">cmake-3.14.0-rc2-win32-x86.zip</a></td><td align="right">2019-02-15 10:04 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc2-win64-x64.msi">cmake-3.14.0-rc2-win64-x64.msi</a></td><td align="right">2019-02-15 10:03 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc2-win64-x64.zip">cmake-3.14.0-rc2-win64-x64.zip</a></td><td align="right">2019-02-15 10:03 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc2.tar.Z">cmake-3.14.0-rc2.tar.Z</a></td><td align="right">2019-02-15 10:03 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc2.tar.gz">cmake-3.14.0-rc2.tar.gz</a></td><td align="right">2019-02-15 10:03 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc2.zip">cmake-3.14.0-rc2.zip</a></td><td align="right">2019-02-15 10:03 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc3-Darwin-x86_64.dmg">cmake-3.14.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2019-03-01 11:20 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc3-Darwin-x86_64.tar.gz">cmake-3.14.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2019-03-01 11:20 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc3-Linux-x86_64.sh">cmake-3.14.0-rc3-Linux-x86_64.sh</a></td><td align="right">2019-03-01 11:20 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc3-Linux-x86_64.tar.gz">cmake-3.14.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2019-03-01 11:20 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc3-SHA-256.txt">cmake-3.14.0-rc3-SHA-256.txt</a></td><td align="right">2019-03-01 11:20 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc3-SHA-256.txt.asc">cmake-3.14.0-rc3-SHA-256.txt.asc</a></td><td align="right">2019-03-01 11:20 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc3-win32-x86.msi">cmake-3.14.0-rc3-win32-x86.msi</a></td><td align="right">2019-03-01 11:20 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc3-win32-x86.zip">cmake-3.14.0-rc3-win32-x86.zip</a></td><td align="right">2019-03-01 11:20 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc3-win64-x64.msi">cmake-3.14.0-rc3-win64-x64.msi</a></td><td align="right">2019-03-01 11:20 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc3-win64-x64.zip">cmake-3.14.0-rc3-win64-x64.zip</a></td><td align="right">2019-03-01 11:20 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc3.tar.Z">cmake-3.14.0-rc3.tar.Z</a></td><td align="right">2019-03-01 11:20 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc3.tar.gz">cmake-3.14.0-rc3.tar.gz</a></td><td align="right">2019-03-01 11:19 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc3.zip">cmake-3.14.0-rc3.zip</a></td><td align="right">2019-03-01 11:19 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc4-Darwin-x86_64.dmg">cmake-3.14.0-rc4-Darwin-x86_64.dmg</a></td><td align="right">2019-03-08 11:09 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc4-Darwin-x86_64.tar.gz">cmake-3.14.0-rc4-Darwin-x86_64.tar.gz</a></td><td align="right">2019-03-08 11:09 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc4-Linux-x86_64.sh">cmake-3.14.0-rc4-Linux-x86_64.sh</a></td><td align="right">2019-03-08 11:09 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc4-Linux-x86_64.tar.gz">cmake-3.14.0-rc4-Linux-x86_64.tar.gz</a></td><td align="right">2019-03-08 11:09 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc4-SHA-256.txt">cmake-3.14.0-rc4-SHA-256.txt</a></td><td align="right">2019-03-08 11:09 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.0-rc4-SHA-256.txt.asc">cmake-3.14.0-rc4-SHA-256.txt.asc</a></td><td align="right">2019-03-08 11:09 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc4-win32-x86.msi">cmake-3.14.0-rc4-win32-x86.msi</a></td><td align="right">2019-03-08 11:08 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc4-win32-x86.zip">cmake-3.14.0-rc4-win32-x86.zip</a></td><td align="right">2019-03-08 11:08 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc4-win64-x64.msi">cmake-3.14.0-rc4-win64-x64.msi</a></td><td align="right">2019-03-08 11:08 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc4-win64-x64.zip">cmake-3.14.0-rc4-win64-x64.zip</a></td><td align="right">2019-03-08 11:08 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc4.tar.Z">cmake-3.14.0-rc4.tar.Z</a></td><td align="right">2019-03-08 11:08 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc4.tar.gz">cmake-3.14.0-rc4.tar.gz</a></td><td align="right">2019-03-08 11:08 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-rc4.zip">cmake-3.14.0-rc4.zip</a></td><td align="right">2019-03-08 11:08 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-win32-x86.msi">cmake-3.14.0-win32-x86.msi</a></td><td align="right">2019-03-14 11:36 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-win32-x86.zip">cmake-3.14.0-win32-x86.zip</a></td><td align="right">2019-03-14 11:36 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-win64-x64.msi">cmake-3.14.0-win64-x64.msi</a></td><td align="right">2019-03-22 11:03 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0-win64-x64.zip">cmake-3.14.0-win64-x64.zip</a></td><td align="right">2019-03-22 11:03 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0.tar.Z">cmake-3.14.0.tar.Z</a></td><td align="right">2019-03-14 11:36 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0.tar.gz">cmake-3.14.0.tar.gz</a></td><td align="right">2019-03-14 11:36 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.0.zip">cmake-3.14.0.zip</a></td><td align="right">2019-03-14 11:36 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.1-Darwin-x86_64.dmg">cmake-3.14.1-Darwin-x86_64.dmg</a></td><td align="right">2019-03-29 12:20 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.1-Darwin-x86_64.tar.gz">cmake-3.14.1-Darwin-x86_64.tar.gz</a></td><td align="right">2019-03-29 12:20 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.1-Linux-x86_64.sh">cmake-3.14.1-Linux-x86_64.sh</a></td><td align="right">2019-03-29 12:20 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.1-Linux-x86_64.tar.gz">cmake-3.14.1-Linux-x86_64.tar.gz</a></td><td align="right">2019-03-29 12:19 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.1-SHA-256.txt">cmake-3.14.1-SHA-256.txt</a></td><td align="right">2019-03-29 12:19 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.1-SHA-256.txt.asc">cmake-3.14.1-SHA-256.txt.asc</a></td><td align="right">2019-03-29 12:19 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.1-win32-x86.msi">cmake-3.14.1-win32-x86.msi</a></td><td align="right">2019-03-29 12:19 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.1-win32-x86.zip">cmake-3.14.1-win32-x86.zip</a></td><td align="right">2019-03-29 12:19 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.1-win64-x64.msi">cmake-3.14.1-win64-x64.msi</a></td><td align="right">2019-03-29 12:19 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.1-win64-x64.zip">cmake-3.14.1-win64-x64.zip</a></td><td align="right">2019-03-29 12:19 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.1.tar.Z">cmake-3.14.1.tar.Z</a></td><td align="right">2019-03-29 12:19 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.1.tar.gz">cmake-3.14.1.tar.gz</a></td><td align="right">2019-03-29 12:19 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.1.zip">cmake-3.14.1.zip</a></td><td align="right">2019-03-29 12:19 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.2-Darwin-x86_64.dmg">cmake-3.14.2-Darwin-x86_64.dmg</a></td><td align="right">2019-04-12 10:19 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.2-Darwin-x86_64.tar.gz">cmake-3.14.2-Darwin-x86_64.tar.gz</a></td><td align="right">2019-04-12 10:19 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.2-Linux-x86_64.sh">cmake-3.14.2-Linux-x86_64.sh</a></td><td align="right">2019-04-12 10:19 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.2-Linux-x86_64.tar.gz">cmake-3.14.2-Linux-x86_64.tar.gz</a></td><td align="right">2019-04-12 10:19 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.2-SHA-256.txt">cmake-3.14.2-SHA-256.txt</a></td><td align="right">2019-04-12 10:19 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.2-SHA-256.txt.asc">cmake-3.14.2-SHA-256.txt.asc</a></td><td align="right">2019-04-12 10:19 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.2-win32-x86.msi">cmake-3.14.2-win32-x86.msi</a></td><td align="right">2019-04-12 10:19 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.2-win32-x86.zip">cmake-3.14.2-win32-x86.zip</a></td><td align="right">2019-04-12 10:19 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.2-win64-x64.msi">cmake-3.14.2-win64-x64.msi</a></td><td align="right">2019-04-12 10:19 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.2-win64-x64.zip">cmake-3.14.2-win64-x64.zip</a></td><td align="right">2019-04-12 10:19 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.2.tar.Z">cmake-3.14.2.tar.Z</a></td><td align="right">2019-04-12 10:19 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.2.tar.gz">cmake-3.14.2.tar.gz</a></td><td align="right">2019-04-12 10:19 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.2.zip">cmake-3.14.2.zip</a></td><td align="right">2019-04-12 10:19 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.3-Darwin-x86_64.dmg">cmake-3.14.3-Darwin-x86_64.dmg</a></td><td align="right">2019-04-22 10:40 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.3-Darwin-x86_64.tar.gz">cmake-3.14.3-Darwin-x86_64.tar.gz</a></td><td align="right">2019-04-22 10:39 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.3-Linux-x86_64.sh">cmake-3.14.3-Linux-x86_64.sh</a></td><td align="right">2019-04-22 10:39 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.3-Linux-x86_64.tar.gz">cmake-3.14.3-Linux-x86_64.tar.gz</a></td><td align="right">2019-04-22 10:39 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.3-SHA-256.txt">cmake-3.14.3-SHA-256.txt</a></td><td align="right">2019-04-22 10:39 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.3-SHA-256.txt.asc">cmake-3.14.3-SHA-256.txt.asc</a></td><td align="right">2019-04-22 10:39 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.3-win32-x86.msi">cmake-3.14.3-win32-x86.msi</a></td><td align="right">2019-04-22 10:39 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.3-win32-x86.zip">cmake-3.14.3-win32-x86.zip</a></td><td align="right">2019-04-22 10:39 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.3-win64-x64.msi">cmake-3.14.3-win64-x64.msi</a></td><td align="right">2019-04-22 10:39 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.3-win64-x64.zip">cmake-3.14.3-win64-x64.zip</a></td><td align="right">2019-04-22 10:39 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.3.tar.Z">cmake-3.14.3.tar.Z</a></td><td align="right">2019-04-22 10:39 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.3.tar.gz">cmake-3.14.3.tar.gz</a></td><td align="right">2019-04-22 10:39 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.3.zip">cmake-3.14.3.zip</a></td><td align="right">2019-04-22 10:39 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.4-Darwin-x86_64.dmg">cmake-3.14.4-Darwin-x86_64.dmg</a></td><td align="right">2019-05-14 14:00 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.4-Darwin-x86_64.tar.gz">cmake-3.14.4-Darwin-x86_64.tar.gz</a></td><td align="right">2019-05-14 14:00 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.4-Linux-x86_64.sh">cmake-3.14.4-Linux-x86_64.sh</a></td><td align="right">2019-05-14 14:00 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.4-Linux-x86_64.tar.gz">cmake-3.14.4-Linux-x86_64.tar.gz</a></td><td align="right">2019-05-14 13:59 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.4-SHA-256.txt">cmake-3.14.4-SHA-256.txt</a></td><td align="right">2019-05-14 13:59 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.4-SHA-256.txt.asc">cmake-3.14.4-SHA-256.txt.asc</a></td><td align="right">2019-05-14 13:59 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.4-win32-x86.msi">cmake-3.14.4-win32-x86.msi</a></td><td align="right">2019-05-14 13:59 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.4-win32-x86.zip">cmake-3.14.4-win32-x86.zip</a></td><td align="right">2019-05-14 13:59 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.4-win64-x64.msi">cmake-3.14.4-win64-x64.msi</a></td><td align="right">2019-05-14 13:59 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.4-win64-x64.zip">cmake-3.14.4-win64-x64.zip</a></td><td align="right">2019-05-14 13:59 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.4.tar.Z">cmake-3.14.4.tar.Z</a></td><td align="right">2019-05-14 13:59 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.4.tar.gz">cmake-3.14.4.tar.gz</a></td><td align="right">2019-05-14 13:59 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.4.zip">cmake-3.14.4.zip</a></td><td align="right">2019-05-14 13:59 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.5-Darwin-x86_64.dmg">cmake-3.14.5-Darwin-x86_64.dmg</a></td><td align="right">2019-05-31 12:39 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.5-Darwin-x86_64.tar.gz">cmake-3.14.5-Darwin-x86_64.tar.gz</a></td><td align="right">2019-05-31 12:39 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.5-Linux-x86_64.sh">cmake-3.14.5-Linux-x86_64.sh</a></td><td align="right">2019-05-31 12:39 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.5-Linux-x86_64.tar.gz">cmake-3.14.5-Linux-x86_64.tar.gz</a></td><td align="right">2019-05-31 12:39 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.5-SHA-256.txt">cmake-3.14.5-SHA-256.txt</a></td><td align="right">2019-05-31 12:39 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.5-SHA-256.txt.asc">cmake-3.14.5-SHA-256.txt.asc</a></td><td align="right">2019-05-31 12:39 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.5-win32-x86.msi">cmake-3.14.5-win32-x86.msi</a></td><td align="right">2019-05-31 12:39 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.5-win32-x86.zip">cmake-3.14.5-win32-x86.zip</a></td><td align="right">2019-05-31 12:39 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.5-win64-x64.msi">cmake-3.14.5-win64-x64.msi</a></td><td align="right">2019-05-31 12:39 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.5-win64-x64.zip">cmake-3.14.5-win64-x64.zip</a></td><td align="right">2019-05-31 12:39 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.5.tar.Z">cmake-3.14.5.tar.Z</a></td><td align="right">2019-05-31 12:39 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.5.tar.gz">cmake-3.14.5.tar.gz</a></td><td align="right">2019-05-31 12:39 </td><td align="right">8.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.5.zip">cmake-3.14.5.zip</a></td><td align="right">2019-05-31 12:40 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.6-Darwin-x86_64.dmg">cmake-3.14.6-Darwin-x86_64.dmg</a></td><td align="right">2019-07-16 09:33 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.6-Darwin-x86_64.tar.gz">cmake-3.14.6-Darwin-x86_64.tar.gz</a></td><td align="right">2019-07-16 09:33 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.6-Linux-x86_64.sh">cmake-3.14.6-Linux-x86_64.sh</a></td><td align="right">2019-07-16 09:33 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.6-Linux-x86_64.tar.gz">cmake-3.14.6-Linux-x86_64.tar.gz</a></td><td align="right">2019-07-16 09:33 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.6-SHA-256.txt">cmake-3.14.6-SHA-256.txt</a></td><td align="right">2019-07-16 09:33 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.6-SHA-256.txt.asc">cmake-3.14.6-SHA-256.txt.asc</a></td><td align="right">2019-07-16 09:33 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.6-win32-x86.msi">cmake-3.14.6-win32-x86.msi</a></td><td align="right">2019-07-16 09:34 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.6-win32-x86.zip">cmake-3.14.6-win32-x86.zip</a></td><td align="right">2019-07-16 09:34 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.6-win64-x64.msi">cmake-3.14.6-win64-x64.msi</a></td><td align="right">2019-07-16 09:34 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.6-win64-x64.zip">cmake-3.14.6-win64-x64.zip</a></td><td align="right">2019-07-16 09:34 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.6.tar.Z">cmake-3.14.6.tar.Z</a></td><td align="right">2019-07-16 09:34 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.6.tar.gz">cmake-3.14.6.tar.gz</a></td><td align="right">2019-07-16 09:34 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.6.zip">cmake-3.14.6.zip</a></td><td align="right">2019-07-16 09:34 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.7-Darwin-x86_64.dmg">cmake-3.14.7-Darwin-x86_64.dmg</a></td><td align="right">2019-10-02 10:48 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.7-Darwin-x86_64.tar.gz">cmake-3.14.7-Darwin-x86_64.tar.gz</a></td><td align="right">2019-10-02 10:48 </td><td align="right"> 32M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.7-Linux-x86_64.sh">cmake-3.14.7-Linux-x86_64.sh</a></td><td align="right">2019-10-02 10:48 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.7-Linux-x86_64.tar.gz">cmake-3.14.7-Linux-x86_64.tar.gz</a></td><td align="right">2019-10-02 10:48 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.7-SHA-256.txt">cmake-3.14.7-SHA-256.txt</a></td><td align="right">2019-10-02 10:48 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.14.7-SHA-256.txt.asc">cmake-3.14.7-SHA-256.txt.asc</a></td><td align="right">2019-10-02 10:48 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.7-win32-x86.msi">cmake-3.14.7-win32-x86.msi</a></td><td align="right">2019-10-02 10:48 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.7-win32-x86.zip">cmake-3.14.7-win32-x86.zip</a></td><td align="right">2019-10-02 10:48 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.14.7-win64-x64.msi">cmake-3.14.7-win64-x64.msi</a></td><td align="right">2019-10-02 10:48 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.7-win64-x64.zip">cmake-3.14.7-win64-x64.zip</a></td><td align="right">2019-10-02 10:48 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.7.tar.Z">cmake-3.14.7.tar.Z</a></td><td align="right">2019-10-02 10:48 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.7.tar.gz">cmake-3.14.7.tar.gz</a></td><td align="right">2019-10-02 10:48 </td><td align="right">8.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.14.7.zip">cmake-3.14.7.zip</a></td><td align="right">2019-10-02 10:48 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.15/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.15/index.html
new file mode 100644
index 0000000000..92726767db
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.15/index.html
@@ -0,0 +1,157 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.15</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.15</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-Darwin-x86_64.dmg">cmake-3.15.0-Darwin-x86_64.dmg</a></td><td align="right">2019-07-17 10:38 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-Darwin-x86_64.tar.gz">cmake-3.15.0-Darwin-x86_64.tar.gz</a></td><td align="right">2019-07-17 10:38 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-Linux-x86_64.sh">cmake-3.15.0-Linux-x86_64.sh</a></td><td align="right">2019-07-17 10:38 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-Linux-x86_64.tar.gz">cmake-3.15.0-Linux-x86_64.tar.gz</a></td><td align="right">2019-07-17 10:38 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-SHA-256.txt">cmake-3.15.0-SHA-256.txt</a></td><td align="right">2019-07-17 10:38 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-SHA-256.txt.asc">cmake-3.15.0-SHA-256.txt.asc</a></td><td align="right">2019-07-17 10:38 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc1-Darwin-x86_64.dmg">cmake-3.15.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2019-06-04 14:22 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc1-Darwin-x86_64.tar.gz">cmake-3.15.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2019-06-04 14:22 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc1-Linux-x86_64.sh">cmake-3.15.0-rc1-Linux-x86_64.sh</a></td><td align="right">2019-06-04 14:22 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc1-Linux-x86_64.tar.gz">cmake-3.15.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2019-06-04 14:22 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc1-SHA-256.txt">cmake-3.15.0-rc1-SHA-256.txt</a></td><td align="right">2019-06-04 14:22 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc1-SHA-256.txt.asc">cmake-3.15.0-rc1-SHA-256.txt.asc</a></td><td align="right">2019-06-04 14:22 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc1-win32-x86.msi">cmake-3.15.0-rc1-win32-x86.msi</a></td><td align="right">2019-06-04 14:23 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc1-win32-x86.zip">cmake-3.15.0-rc1-win32-x86.zip</a></td><td align="right">2019-06-04 14:23 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc1-win64-x64.msi">cmake-3.15.0-rc1-win64-x64.msi</a></td><td align="right">2019-06-04 14:23 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc1-win64-x64.zip">cmake-3.15.0-rc1-win64-x64.zip</a></td><td align="right">2019-06-04 14:23 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc1.tar.Z">cmake-3.15.0-rc1.tar.Z</a></td><td align="right">2019-06-04 14:23 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc1.tar.gz">cmake-3.15.0-rc1.tar.gz</a></td><td align="right">2019-06-04 14:22 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc1.zip">cmake-3.15.0-rc1.zip</a></td><td align="right">2019-06-04 14:23 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc2-Darwin-x86_64.dmg">cmake-3.15.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2019-06-19 10:04 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc2-Darwin-x86_64.tar.gz">cmake-3.15.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2019-06-19 10:04 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc2-Linux-x86_64.sh">cmake-3.15.0-rc2-Linux-x86_64.sh</a></td><td align="right">2019-06-19 10:04 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc2-Linux-x86_64.tar.gz">cmake-3.15.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2019-06-19 10:04 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc2-SHA-256.txt">cmake-3.15.0-rc2-SHA-256.txt</a></td><td align="right">2019-06-19 10:04 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc2-SHA-256.txt.asc">cmake-3.15.0-rc2-SHA-256.txt.asc</a></td><td align="right">2019-06-19 10:04 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc2-win32-x86.msi">cmake-3.15.0-rc2-win32-x86.msi</a></td><td align="right">2019-06-19 10:04 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc2-win32-x86.zip">cmake-3.15.0-rc2-win32-x86.zip</a></td><td align="right">2019-06-19 10:04 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc2-win64-x64.msi">cmake-3.15.0-rc2-win64-x64.msi</a></td><td align="right">2019-06-19 10:04 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc2-win64-x64.zip">cmake-3.15.0-rc2-win64-x64.zip</a></td><td align="right">2019-06-19 10:04 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc2.tar.Z">cmake-3.15.0-rc2.tar.Z</a></td><td align="right">2019-06-19 10:04 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc2.tar.gz">cmake-3.15.0-rc2.tar.gz</a></td><td align="right">2019-06-19 10:04 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc2.zip">cmake-3.15.0-rc2.zip</a></td><td align="right">2019-06-19 10:04 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc3-Darwin-x86_64.dmg">cmake-3.15.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2019-06-27 11:33 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc3-Darwin-x86_64.tar.gz">cmake-3.15.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2019-06-27 11:33 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc3-Linux-x86_64.sh">cmake-3.15.0-rc3-Linux-x86_64.sh</a></td><td align="right">2019-06-27 11:33 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc3-Linux-x86_64.tar.gz">cmake-3.15.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2019-06-27 11:33 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc3-SHA-256.txt">cmake-3.15.0-rc3-SHA-256.txt</a></td><td align="right">2019-06-27 11:33 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc3-SHA-256.txt.asc">cmake-3.15.0-rc3-SHA-256.txt.asc</a></td><td align="right">2019-06-27 11:33 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc3-win32-x86.msi">cmake-3.15.0-rc3-win32-x86.msi</a></td><td align="right">2019-06-27 11:33 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc3-win32-x86.zip">cmake-3.15.0-rc3-win32-x86.zip</a></td><td align="right">2019-06-27 11:33 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc3-win64-x64.msi">cmake-3.15.0-rc3-win64-x64.msi</a></td><td align="right">2019-06-27 11:33 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc3-win64-x64.zip">cmake-3.15.0-rc3-win64-x64.zip</a></td><td align="right">2019-06-27 11:33 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc3.tar.Z">cmake-3.15.0-rc3.tar.Z</a></td><td align="right">2019-06-27 11:33 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc3.tar.gz">cmake-3.15.0-rc3.tar.gz</a></td><td align="right">2019-06-27 11:33 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc3.zip">cmake-3.15.0-rc3.zip</a></td><td align="right">2019-06-27 11:33 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc4-Darwin-x86_64.dmg">cmake-3.15.0-rc4-Darwin-x86_64.dmg</a></td><td align="right">2019-07-10 15:06 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc4-Darwin-x86_64.tar.gz">cmake-3.15.0-rc4-Darwin-x86_64.tar.gz</a></td><td align="right">2019-07-10 15:07 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc4-Linux-x86_64.sh">cmake-3.15.0-rc4-Linux-x86_64.sh</a></td><td align="right">2019-07-10 15:07 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc4-Linux-x86_64.tar.gz">cmake-3.15.0-rc4-Linux-x86_64.tar.gz</a></td><td align="right">2019-07-10 15:07 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc4-SHA-256.txt">cmake-3.15.0-rc4-SHA-256.txt</a></td><td align="right">2019-07-10 15:07 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.0-rc4-SHA-256.txt.asc">cmake-3.15.0-rc4-SHA-256.txt.asc</a></td><td align="right">2019-07-10 15:07 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc4-win32-x86.msi">cmake-3.15.0-rc4-win32-x86.msi</a></td><td align="right">2019-07-10 15:07 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc4-win32-x86.zip">cmake-3.15.0-rc4-win32-x86.zip</a></td><td align="right">2019-07-10 15:07 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc4-win64-x64.msi">cmake-3.15.0-rc4-win64-x64.msi</a></td><td align="right">2019-07-10 15:07 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc4-win64-x64.zip">cmake-3.15.0-rc4-win64-x64.zip</a></td><td align="right">2019-07-10 15:07 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc4.tar.Z">cmake-3.15.0-rc4.tar.Z</a></td><td align="right">2019-07-10 15:07 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc4.tar.gz">cmake-3.15.0-rc4.tar.gz</a></td><td align="right">2019-07-10 15:07 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-rc4.zip">cmake-3.15.0-rc4.zip</a></td><td align="right">2019-07-10 15:07 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-win32-x86.msi">cmake-3.15.0-win32-x86.msi</a></td><td align="right">2019-07-17 10:38 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-win32-x86.zip">cmake-3.15.0-win32-x86.zip</a></td><td align="right">2019-07-17 10:38 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-win64-x64.msi">cmake-3.15.0-win64-x64.msi</a></td><td align="right">2019-07-17 10:38 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0-win64-x64.zip">cmake-3.15.0-win64-x64.zip</a></td><td align="right">2019-07-17 10:38 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0.tar.Z">cmake-3.15.0.tar.Z</a></td><td align="right">2019-07-17 10:38 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0.tar.gz">cmake-3.15.0.tar.gz</a></td><td align="right">2019-07-17 10:38 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.0.zip">cmake-3.15.0.zip</a></td><td align="right">2019-07-17 10:38 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.1-Darwin-x86_64.dmg">cmake-3.15.1-Darwin-x86_64.dmg</a></td><td align="right">2019-07-26 10:14 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.1-Darwin-x86_64.tar.gz">cmake-3.15.1-Darwin-x86_64.tar.gz</a></td><td align="right">2019-07-26 10:14 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.1-Linux-x86_64.sh">cmake-3.15.1-Linux-x86_64.sh</a></td><td align="right">2019-07-26 10:14 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.1-Linux-x86_64.tar.gz">cmake-3.15.1-Linux-x86_64.tar.gz</a></td><td align="right">2019-07-26 10:14 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.1-SHA-256.txt">cmake-3.15.1-SHA-256.txt</a></td><td align="right">2019-07-26 10:14 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.1-SHA-256.txt.asc">cmake-3.15.1-SHA-256.txt.asc</a></td><td align="right">2019-07-26 10:14 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.1-win32-x86.msi">cmake-3.15.1-win32-x86.msi</a></td><td align="right">2019-07-26 10:14 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.1-win32-x86.zip">cmake-3.15.1-win32-x86.zip</a></td><td align="right">2019-07-26 10:14 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.1-win64-x64.msi">cmake-3.15.1-win64-x64.msi</a></td><td align="right">2019-07-26 10:14 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.1-win64-x64.zip">cmake-3.15.1-win64-x64.zip</a></td><td align="right">2019-07-26 10:14 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.1.tar.Z">cmake-3.15.1.tar.Z</a></td><td align="right">2019-07-26 10:14 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.1.tar.gz">cmake-3.15.1.tar.gz</a></td><td align="right">2019-07-26 10:14 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.1.zip">cmake-3.15.1.zip</a></td><td align="right">2019-07-26 10:15 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.2-Darwin-x86_64.dmg">cmake-3.15.2-Darwin-x86_64.dmg</a></td><td align="right">2019-08-07 15:05 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.2-Darwin-x86_64.tar.gz">cmake-3.15.2-Darwin-x86_64.tar.gz</a></td><td align="right">2019-08-07 15:05 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.2-Linux-x86_64.sh">cmake-3.15.2-Linux-x86_64.sh</a></td><td align="right">2019-08-07 15:05 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.2-Linux-x86_64.tar.gz">cmake-3.15.2-Linux-x86_64.tar.gz</a></td><td align="right">2019-08-07 15:05 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.2-SHA-256.txt">cmake-3.15.2-SHA-256.txt</a></td><td align="right">2019-08-07 15:05 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.2-SHA-256.txt.asc">cmake-3.15.2-SHA-256.txt.asc</a></td><td align="right">2019-08-07 15:05 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.2-win32-x86.msi">cmake-3.15.2-win32-x86.msi</a></td><td align="right">2019-08-07 15:05 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.2-win32-x86.zip">cmake-3.15.2-win32-x86.zip</a></td><td align="right">2019-08-07 15:05 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.2-win64-x64.msi">cmake-3.15.2-win64-x64.msi</a></td><td align="right">2019-08-07 15:05 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.2-win64-x64.zip">cmake-3.15.2-win64-x64.zip</a></td><td align="right">2019-08-07 15:05 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.2.tar.Z">cmake-3.15.2.tar.Z</a></td><td align="right">2019-08-07 15:05 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.2.tar.gz">cmake-3.15.2.tar.gz</a></td><td align="right">2019-08-07 15:05 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.2.zip">cmake-3.15.2.zip</a></td><td align="right">2019-08-07 15:05 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.3-Darwin-x86_64.dmg">cmake-3.15.3-Darwin-x86_64.dmg</a></td><td align="right">2019-09-04 11:13 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.3-Darwin-x86_64.tar.gz">cmake-3.15.3-Darwin-x86_64.tar.gz</a></td><td align="right">2019-09-04 11:13 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.3-Linux-x86_64.sh">cmake-3.15.3-Linux-x86_64.sh</a></td><td align="right">2019-09-04 11:13 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.3-Linux-x86_64.tar.gz">cmake-3.15.3-Linux-x86_64.tar.gz</a></td><td align="right">2019-09-04 11:13 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.3-SHA-256.txt">cmake-3.15.3-SHA-256.txt</a></td><td align="right">2019-09-04 11:13 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.3-SHA-256.txt.asc">cmake-3.15.3-SHA-256.txt.asc</a></td><td align="right">2019-09-04 11:13 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.3-win32-x86.msi">cmake-3.15.3-win32-x86.msi</a></td><td align="right">2019-09-04 11:13 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.3-win32-x86.zip">cmake-3.15.3-win32-x86.zip</a></td><td align="right">2019-09-04 11:13 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.3-win64-x64.msi">cmake-3.15.3-win64-x64.msi</a></td><td align="right">2019-09-04 11:13 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.3-win64-x64.zip">cmake-3.15.3-win64-x64.zip</a></td><td align="right">2019-09-04 11:13 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.3.tar.Z">cmake-3.15.3.tar.Z</a></td><td align="right">2019-09-04 11:13 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.3.tar.gz">cmake-3.15.3.tar.gz</a></td><td align="right">2019-09-04 11:13 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.3.zip">cmake-3.15.3.zip</a></td><td align="right">2019-09-04 11:13 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.4-Darwin-x86_64.dmg">cmake-3.15.4-Darwin-x86_64.dmg</a></td><td align="right">2019-10-02 10:45 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.4-Darwin-x86_64.tar.gz">cmake-3.15.4-Darwin-x86_64.tar.gz</a></td><td align="right">2019-10-02 10:45 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.4-Linux-x86_64.sh">cmake-3.15.4-Linux-x86_64.sh</a></td><td align="right">2019-10-02 10:45 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.4-Linux-x86_64.tar.gz">cmake-3.15.4-Linux-x86_64.tar.gz</a></td><td align="right">2019-10-02 10:45 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.4-SHA-256.txt">cmake-3.15.4-SHA-256.txt</a></td><td align="right">2019-10-02 10:45 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.4-SHA-256.txt.asc">cmake-3.15.4-SHA-256.txt.asc</a></td><td align="right">2019-10-02 10:45 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.4-win32-x86.msi">cmake-3.15.4-win32-x86.msi</a></td><td align="right">2019-10-02 10:45 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.4-win32-x86.zip">cmake-3.15.4-win32-x86.zip</a></td><td align="right">2019-10-02 10:45 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.4-win64-x64.msi">cmake-3.15.4-win64-x64.msi</a></td><td align="right">2019-10-02 10:45 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.4-win64-x64.zip">cmake-3.15.4-win64-x64.zip</a></td><td align="right">2019-10-02 10:45 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.4.tar.Z">cmake-3.15.4.tar.Z</a></td><td align="right">2019-10-02 10:45 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.4.tar.gz">cmake-3.15.4.tar.gz</a></td><td align="right">2019-10-02 10:45 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.4.zip">cmake-3.15.4.zip</a></td><td align="right">2019-10-02 10:45 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.5-Darwin-x86_64.dmg">cmake-3.15.5-Darwin-x86_64.dmg</a></td><td align="right">2019-10-30 10:49 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.5-Darwin-x86_64.tar.gz">cmake-3.15.5-Darwin-x86_64.tar.gz</a></td><td align="right">2019-10-30 10:49 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.5-Linux-x86_64.sh">cmake-3.15.5-Linux-x86_64.sh</a></td><td align="right">2019-10-30 10:49 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.5-Linux-x86_64.tar.gz">cmake-3.15.5-Linux-x86_64.tar.gz</a></td><td align="right">2019-10-30 10:49 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.5-SHA-256.txt">cmake-3.15.5-SHA-256.txt</a></td><td align="right">2019-10-30 10:49 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.5-SHA-256.txt.asc">cmake-3.15.5-SHA-256.txt.asc</a></td><td align="right">2019-10-30 10:49 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.5-win32-x86.msi">cmake-3.15.5-win32-x86.msi</a></td><td align="right">2019-10-30 10:49 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.5-win32-x86.zip">cmake-3.15.5-win32-x86.zip</a></td><td align="right">2019-10-30 10:49 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.5-win64-x64.msi">cmake-3.15.5-win64-x64.msi</a></td><td align="right">2019-10-30 10:49 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.5-win64-x64.zip">cmake-3.15.5-win64-x64.zip</a></td><td align="right">2019-10-30 10:49 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.5.tar.Z">cmake-3.15.5.tar.Z</a></td><td align="right">2019-10-30 10:49 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.5.tar.gz">cmake-3.15.5.tar.gz</a></td><td align="right">2019-10-30 10:49 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.5.zip">cmake-3.15.5.zip</a></td><td align="right">2019-10-30 10:49 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.6-Darwin-x86_64.dmg">cmake-3.15.6-Darwin-x86_64.dmg</a></td><td align="right">2019-12-16 11:30 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.6-Darwin-x86_64.tar.gz">cmake-3.15.6-Darwin-x86_64.tar.gz</a></td><td align="right">2019-12-16 11:30 </td><td align="right"> 33M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.6-Linux-x86_64.sh">cmake-3.15.6-Linux-x86_64.sh</a></td><td align="right">2019-12-16 11:30 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.6-Linux-x86_64.tar.gz">cmake-3.15.6-Linux-x86_64.tar.gz</a></td><td align="right">2019-12-16 11:30 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.6-SHA-256.txt">cmake-3.15.6-SHA-256.txt</a></td><td align="right">2019-12-16 11:30 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.15.6-SHA-256.txt.asc">cmake-3.15.6-SHA-256.txt.asc</a></td><td align="right">2019-12-16 11:30 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.6-win32-x86.msi">cmake-3.15.6-win32-x86.msi</a></td><td align="right">2019-12-16 11:30 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.6-win32-x86.zip">cmake-3.15.6-win32-x86.zip</a></td><td align="right">2019-12-16 11:30 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.15.6-win64-x64.msi">cmake-3.15.6-win64-x64.msi</a></td><td align="right">2019-12-16 11:30 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.6-win64-x64.zip">cmake-3.15.6-win64-x64.zip</a></td><td align="right">2019-12-16 11:30 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.6.tar.Z">cmake-3.15.6.tar.Z</a></td><td align="right">2019-12-16 11:30 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.6.tar.gz">cmake-3.15.6.tar.gz</a></td><td align="right">2019-12-16 11:30 </td><td align="right">8.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.15.6.zip">cmake-3.15.6.zip</a></td><td align="right">2019-12-16 11:30 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.16/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.16/index.html
new file mode 100644
index 0000000000..74f9b40277
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.16/index.html
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.16</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.16</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-Darwin-x86_64.dmg">cmake-3.16.0-Darwin-x86_64.dmg</a></td><td align="right">2019-11-26 10:27 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-Darwin-x86_64.tar.gz">cmake-3.16.0-Darwin-x86_64.tar.gz</a></td><td align="right">2019-11-26 10:27 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-Linux-x86_64.sh">cmake-3.16.0-Linux-x86_64.sh</a></td><td align="right">2019-11-26 10:27 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-Linux-x86_64.tar.gz">cmake-3.16.0-Linux-x86_64.tar.gz</a></td><td align="right">2019-11-26 10:27 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-SHA-256.txt">cmake-3.16.0-SHA-256.txt</a></td><td align="right">2019-11-26 10:27 </td><td align="right">932 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-SHA-256.txt.asc">cmake-3.16.0-SHA-256.txt.asc</a></td><td align="right">2019-11-26 10:27 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc1-Darwin-x86_64.dmg">cmake-3.16.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2019-10-10 14:18 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc1-Darwin-x86_64.tar.gz">cmake-3.16.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2019-10-10 14:18 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc1-Linux-x86_64.sh">cmake-3.16.0-rc1-Linux-x86_64.sh</a></td><td align="right">2019-10-10 14:18 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc1-Linux-x86_64.tar.gz">cmake-3.16.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2019-10-10 14:18 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc1-SHA-256.txt">cmake-3.16.0-rc1-SHA-256.txt</a></td><td align="right">2019-10-10 14:18 </td><td align="right">972 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc1-SHA-256.txt.asc">cmake-3.16.0-rc1-SHA-256.txt.asc</a></td><td align="right">2019-10-10 14:18 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc1-win32-x86.msi">cmake-3.16.0-rc1-win32-x86.msi</a></td><td align="right">2019-10-10 14:18 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc1-win32-x86.zip">cmake-3.16.0-rc1-win32-x86.zip</a></td><td align="right">2019-10-10 14:18 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc1-win64-x64.msi">cmake-3.16.0-rc1-win64-x64.msi</a></td><td align="right">2019-10-10 14:18 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc1-win64-x64.zip">cmake-3.16.0-rc1-win64-x64.zip</a></td><td align="right">2019-10-10 14:18 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc1.tar.gz">cmake-3.16.0-rc1.tar.gz</a></td><td align="right">2019-10-10 14:18 </td><td align="right">8.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc1.zip">cmake-3.16.0-rc1.zip</a></td><td align="right">2019-10-10 14:18 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc2-Darwin-x86_64.dmg">cmake-3.16.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2019-10-18 10:47 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc2-Darwin-x86_64.tar.gz">cmake-3.16.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2019-10-18 10:47 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc2-Linux-x86_64.sh">cmake-3.16.0-rc2-Linux-x86_64.sh</a></td><td align="right">2019-10-18 10:47 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc2-Linux-x86_64.tar.gz">cmake-3.16.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2019-10-18 10:47 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc2-SHA-256.txt">cmake-3.16.0-rc2-SHA-256.txt</a></td><td align="right">2019-10-18 10:47 </td><td align="right">972 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc2-SHA-256.txt.asc">cmake-3.16.0-rc2-SHA-256.txt.asc</a></td><td align="right">2019-10-18 10:47 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc2-win32-x86.msi">cmake-3.16.0-rc2-win32-x86.msi</a></td><td align="right">2019-10-18 10:47 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc2-win32-x86.zip">cmake-3.16.0-rc2-win32-x86.zip</a></td><td align="right">2019-10-18 10:47 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc2-win64-x64.msi">cmake-3.16.0-rc2-win64-x64.msi</a></td><td align="right">2019-10-18 10:47 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc2-win64-x64.zip">cmake-3.16.0-rc2-win64-x64.zip</a></td><td align="right">2019-10-18 10:47 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc2.tar.gz">cmake-3.16.0-rc2.tar.gz</a></td><td align="right">2019-10-18 10:47 </td><td align="right">8.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc2.zip">cmake-3.16.0-rc2.zip</a></td><td align="right">2019-10-18 10:47 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc3-Darwin-x86_64.dmg">cmake-3.16.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2019-10-31 12:09 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc3-Darwin-x86_64.tar.gz">cmake-3.16.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2019-10-31 12:09 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc3-Linux-x86_64.sh">cmake-3.16.0-rc3-Linux-x86_64.sh</a></td><td align="right">2019-10-31 12:09 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc3-Linux-x86_64.tar.gz">cmake-3.16.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2019-10-31 12:10 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc3-SHA-256.txt">cmake-3.16.0-rc3-SHA-256.txt</a></td><td align="right">2019-10-31 12:10 </td><td align="right">972 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc3-SHA-256.txt.asc">cmake-3.16.0-rc3-SHA-256.txt.asc</a></td><td align="right">2019-10-31 12:10 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc3-win32-x86.msi">cmake-3.16.0-rc3-win32-x86.msi</a></td><td align="right">2019-10-31 12:10 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc3-win32-x86.zip">cmake-3.16.0-rc3-win32-x86.zip</a></td><td align="right">2019-10-31 12:10 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc3-win64-x64.msi">cmake-3.16.0-rc3-win64-x64.msi</a></td><td align="right">2019-10-31 12:10 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc3-win64-x64.zip">cmake-3.16.0-rc3-win64-x64.zip</a></td><td align="right">2019-10-31 12:10 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc3.tar.gz">cmake-3.16.0-rc3.tar.gz</a></td><td align="right">2019-10-31 12:10 </td><td align="right">8.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc3.zip">cmake-3.16.0-rc3.zip</a></td><td align="right">2019-10-31 12:10 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc4-Darwin-x86_64.dmg">cmake-3.16.0-rc4-Darwin-x86_64.dmg</a></td><td align="right">2019-11-18 17:01 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc4-Darwin-x86_64.tar.gz">cmake-3.16.0-rc4-Darwin-x86_64.tar.gz</a></td><td align="right">2019-11-18 17:01 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc4-Linux-x86_64.sh">cmake-3.16.0-rc4-Linux-x86_64.sh</a></td><td align="right">2019-11-18 17:01 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc4-Linux-x86_64.tar.gz">cmake-3.16.0-rc4-Linux-x86_64.tar.gz</a></td><td align="right">2019-11-18 17:01 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc4-SHA-256.txt">cmake-3.16.0-rc4-SHA-256.txt</a></td><td align="right">2019-11-18 17:01 </td><td align="right">972 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.0-rc4-SHA-256.txt.asc">cmake-3.16.0-rc4-SHA-256.txt.asc</a></td><td align="right">2019-11-18 17:01 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc4-win32-x86.msi">cmake-3.16.0-rc4-win32-x86.msi</a></td><td align="right">2019-11-18 17:01 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc4-win32-x86.zip">cmake-3.16.0-rc4-win32-x86.zip</a></td><td align="right">2019-11-18 17:01 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc4-win64-x64.msi">cmake-3.16.0-rc4-win64-x64.msi</a></td><td align="right">2019-11-18 17:01 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc4-win64-x64.zip">cmake-3.16.0-rc4-win64-x64.zip</a></td><td align="right">2019-11-18 17:01 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc4.tar.gz">cmake-3.16.0-rc4.tar.gz</a></td><td align="right">2019-11-18 17:01 </td><td align="right">8.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-rc4.zip">cmake-3.16.0-rc4.zip</a></td><td align="right">2019-11-18 17:01 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-win32-x86.msi">cmake-3.16.0-win32-x86.msi</a></td><td align="right">2019-11-26 10:27 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-win32-x86.zip">cmake-3.16.0-win32-x86.zip</a></td><td align="right">2019-11-26 10:27 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-win64-x64.msi">cmake-3.16.0-win64-x64.msi</a></td><td align="right">2019-11-26 10:27 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0-win64-x64.zip">cmake-3.16.0-win64-x64.zip</a></td><td align="right">2019-11-26 10:27 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0.tar.gz">cmake-3.16.0.tar.gz</a></td><td align="right">2019-11-26 10:27 </td><td align="right">8.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.0.zip">cmake-3.16.0.zip</a></td><td align="right">2019-11-26 10:27 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.1-Darwin-x86_64.dmg">cmake-3.16.1-Darwin-x86_64.dmg</a></td><td align="right">2019-12-10 10:42 </td><td align="right"> 35M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.1-Darwin-x86_64.tar.gz">cmake-3.16.1-Darwin-x86_64.tar.gz</a></td><td align="right">2019-12-10 10:42 </td><td align="right"> 34M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.1-Linux-x86_64.sh">cmake-3.16.1-Linux-x86_64.sh</a></td><td align="right">2019-12-10 10:42 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.1-Linux-x86_64.tar.gz">cmake-3.16.1-Linux-x86_64.tar.gz</a></td><td align="right">2019-12-10 10:42 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.1-SHA-256.txt">cmake-3.16.1-SHA-256.txt</a></td><td align="right">2019-12-10 10:42 </td><td align="right">932 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.16.1-SHA-256.txt.asc">cmake-3.16.1-SHA-256.txt.asc</a></td><td align="right">2019-12-10 10:42 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.1-win32-x86.msi">cmake-3.16.1-win32-x86.msi</a></td><td align="right">2019-12-10 10:42 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.1-win32-x86.zip">cmake-3.16.1-win32-x86.zip</a></td><td align="right">2019-12-10 10:42 </td><td align="right"> 28M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.16.1-win64-x64.msi">cmake-3.16.1-win64-x64.msi</a></td><td align="right">2019-12-10 10:42 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.1-win64-x64.zip">cmake-3.16.1-win64-x64.zip</a></td><td align="right">2019-12-10 10:42 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.1.tar.gz">cmake-3.16.1.tar.gz</a></td><td align="right">2019-12-10 10:42 </td><td align="right">8.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.16.1.zip">cmake-3.16.1.zip</a></td><td align="right">2019-12-10 10:42 </td><td align="right"> 14M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.2/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.2/index.html
new file mode 100644
index 0000000000..a8c6c7f266
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.2/index.html
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.2</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.2</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-1-src.tar.bz2">cmake-3.2.0-1-src.tar.bz2</a></td><td align="right">2015-03-10 09:02 </td><td align="right">4.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-1.tar.bz2">cmake-3.2.0-1.tar.bz2</a></td><td align="right">2015-03-10 09:02 </td><td align="right">9.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-Darwin-universal.dmg">cmake-3.2.0-Darwin-universal.dmg</a></td><td align="right">2015-03-10 09:02 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-Darwin-universal.tar.Z">cmake-3.2.0-Darwin-universal.tar.Z</a></td><td align="right">2015-03-10 09:02 </td><td align="right"> 66M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-Darwin-universal.tar.gz">cmake-3.2.0-Darwin-universal.tar.gz</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 46M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-Darwin-x86_64.dmg">cmake-3.2.0-Darwin-x86_64.dmg</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-Darwin-x86_64.tar.Z">cmake-3.2.0-Darwin-x86_64.tar.Z</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-Darwin-x86_64.tar.gz">cmake-3.2.0-Darwin-x86_64.tar.gz</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-Linux-i386.sh">cmake-3.2.0-Linux-i386.sh</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-Linux-i386.tar.Z">cmake-3.2.0-Linux-i386.tar.Z</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-Linux-i386.tar.gz">cmake-3.2.0-Linux-i386.tar.gz</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-Linux-x86_64.sh">cmake-3.2.0-Linux-x86_64.sh</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-Linux-x86_64.tar.Z">cmake-3.2.0-Linux-x86_64.tar.Z</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-Linux-x86_64.tar.gz">cmake-3.2.0-Linux-x86_64.tar.gz</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-SHA-256.txt">cmake-3.2.0-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-SHA-256.txt.asc">cmake-3.2.0-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-Darwin-universal.dmg">cmake-3.2.0-rc1-Darwin-universal.dmg</a></td><td align="right">2015-02-13 15:03 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-Darwin-universal.tar.Z">cmake-3.2.0-rc1-Darwin-universal.tar.Z</a></td><td align="right">2015-02-13 15:03 </td><td align="right"> 66M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-Darwin-universal.tar.gz">cmake-3.2.0-rc1-Darwin-universal.tar.gz</a></td><td align="right">2015-02-13 15:03 </td><td align="right"> 46M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-Darwin-x86_64.dmg">cmake-3.2.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2015-02-13 15:03 </td><td align="right"> 30M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-Darwin-x86_64.tar.Z">cmake-3.2.0-rc1-Darwin-x86_64.tar.Z</a></td><td align="right">2015-02-13 15:03 </td><td align="right"> 42M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-Darwin-x86_64.tar.gz">cmake-3.2.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2015-02-13 15:03 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-rc1-Linux-i386.sh">cmake-3.2.0-rc1-Linux-i386.sh</a></td><td align="right">2015-02-13 15:03 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-Linux-i386.tar.Z">cmake-3.2.0-rc1-Linux-i386.tar.Z</a></td><td align="right">2015-02-13 15:03 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-Linux-i386.tar.gz">cmake-3.2.0-rc1-Linux-i386.tar.gz</a></td><td align="right">2015-02-13 15:03 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-rc1-Linux-x86_64.sh">cmake-3.2.0-rc1-Linux-x86_64.sh</a></td><td align="right">2015-02-13 15:03 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-Linux-x86_64.tar.Z">cmake-3.2.0-rc1-Linux-x86_64.tar.Z</a></td><td align="right">2015-02-13 15:03 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-Linux-x86_64.tar.gz">cmake-3.2.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2015-02-13 15:02 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-rc1-SHA-256.txt">cmake-3.2.0-rc1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-rc1-SHA-256.txt.asc">cmake-3.2.0-rc1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-win32-x86.exe">cmake-3.2.0-rc1-win32-x86.exe</a></td><td align="right">2015-02-13 15:02 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1-win32-x86.zip">cmake-3.2.0-rc1-win32-x86.zip</a></td><td align="right">2015-02-13 15:02 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1.tar.Z">cmake-3.2.0-rc1.tar.Z</a></td><td align="right">2015-02-13 15:02 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1.tar.gz">cmake-3.2.0-rc1.tar.gz</a></td><td align="right">2015-02-13 15:02 </td><td align="right">6.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc1.zip">cmake-3.2.0-rc1.zip</a></td><td align="right">2015-02-13 15:02 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-Darwin-universal.dmg">cmake-3.2.0-rc2-Darwin-universal.dmg</a></td><td align="right">2015-02-24 08:51 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-Darwin-universal.tar.Z">cmake-3.2.0-rc2-Darwin-universal.tar.Z</a></td><td align="right">2015-02-24 08:51 </td><td align="right"> 66M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-Darwin-universal.tar.gz">cmake-3.2.0-rc2-Darwin-universal.tar.gz</a></td><td align="right">2015-02-24 08:51 </td><td align="right"> 46M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-Darwin-x86_64.dmg">cmake-3.2.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2015-02-24 08:51 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-Darwin-x86_64.tar.Z">cmake-3.2.0-rc2-Darwin-x86_64.tar.Z</a></td><td align="right">2015-02-24 08:51 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-Darwin-x86_64.tar.gz">cmake-3.2.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2015-02-24 08:51 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-rc2-Linux-i386.sh">cmake-3.2.0-rc2-Linux-i386.sh</a></td><td align="right">2015-02-24 08:50 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-Linux-i386.tar.Z">cmake-3.2.0-rc2-Linux-i386.tar.Z</a></td><td align="right">2015-02-24 08:50 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-Linux-i386.tar.gz">cmake-3.2.0-rc2-Linux-i386.tar.gz</a></td><td align="right">2015-02-24 08:50 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-rc2-Linux-x86_64.sh">cmake-3.2.0-rc2-Linux-x86_64.sh</a></td><td align="right">2015-02-24 08:50 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-Linux-x86_64.tar.Z">cmake-3.2.0-rc2-Linux-x86_64.tar.Z</a></td><td align="right">2015-02-24 08:50 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-Linux-x86_64.tar.gz">cmake-3.2.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2015-02-24 08:50 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-rc2-SHA-256.txt">cmake-3.2.0-rc2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.0-rc2-SHA-256.txt.asc">cmake-3.2.0-rc2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-win32-x86.exe">cmake-3.2.0-rc2-win32-x86.exe</a></td><td align="right">2015-02-24 08:50 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2-win32-x86.zip">cmake-3.2.0-rc2-win32-x86.zip</a></td><td align="right">2015-02-24 08:50 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2.tar.Z">cmake-3.2.0-rc2.tar.Z</a></td><td align="right">2015-02-24 08:50 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2.tar.gz">cmake-3.2.0-rc2.tar.gz</a></td><td align="right">2015-02-24 08:50 </td><td align="right">6.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-rc2.zip">cmake-3.2.0-rc2.zip</a></td><td align="right">2015-02-24 08:50 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-win32-x86.exe">cmake-3.2.0-win32-x86.exe</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0-win32-x86.zip">cmake-3.2.0-win32-x86.zip</a></td><td align="right">2015-03-10 09:01 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0.tar.Z">cmake-3.2.0.tar.Z</a></td><td align="right">2015-03-10 09:01 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0.tar.gz">cmake-3.2.0.tar.gz</a></td><td align="right">2015-03-10 09:01 </td><td align="right">6.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.0.zip">cmake-3.2.0.zip</a></td><td align="right">2015-03-10 09:01 </td><td align="right">9.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-1-src.tar.bz2">cmake-3.2.1-1-src.tar.bz2</a></td><td align="right">2015-03-11 09:10 </td><td align="right">4.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-1.tar.bz2">cmake-3.2.1-1.tar.bz2</a></td><td align="right">2015-03-11 09:10 </td><td align="right">9.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-Darwin-universal.dmg">cmake-3.2.1-Darwin-universal.dmg</a></td><td align="right">2015-03-11 09:10 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-Darwin-universal.tar.Z">cmake-3.2.1-Darwin-universal.tar.Z</a></td><td align="right">2015-03-11 09:10 </td><td align="right"> 66M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-Darwin-universal.tar.gz">cmake-3.2.1-Darwin-universal.tar.gz</a></td><td align="right">2015-03-11 09:10 </td><td align="right"> 46M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-Darwin-x86_64.dmg">cmake-3.2.1-Darwin-x86_64.dmg</a></td><td align="right">2015-03-11 09:10 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-Darwin-x86_64.tar.Z">cmake-3.2.1-Darwin-x86_64.tar.Z</a></td><td align="right">2015-03-11 09:10 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-Darwin-x86_64.tar.gz">cmake-3.2.1-Darwin-x86_64.tar.gz</a></td><td align="right">2015-03-11 09:10 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.1-Linux-i386.sh">cmake-3.2.1-Linux-i386.sh</a></td><td align="right">2015-03-11 09:10 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-Linux-i386.tar.Z">cmake-3.2.1-Linux-i386.tar.Z</a></td><td align="right">2015-03-11 09:09 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-Linux-i386.tar.gz">cmake-3.2.1-Linux-i386.tar.gz</a></td><td align="right">2015-03-11 09:09 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.1-Linux-x86_64.sh">cmake-3.2.1-Linux-x86_64.sh</a></td><td align="right">2015-03-11 09:09 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-Linux-x86_64.tar.Z">cmake-3.2.1-Linux-x86_64.tar.Z</a></td><td align="right">2015-03-11 09:09 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-Linux-x86_64.tar.gz">cmake-3.2.1-Linux-x86_64.tar.gz</a></td><td align="right">2015-03-11 09:09 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.1-SHA-256.txt">cmake-3.2.1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.1-SHA-256.txt.asc">cmake-3.2.1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-win32-x86.exe">cmake-3.2.1-win32-x86.exe</a></td><td align="right">2015-03-11 09:09 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1-win32-x86.zip">cmake-3.2.1-win32-x86.zip</a></td><td align="right">2015-03-11 09:09 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1.tar.Z">cmake-3.2.1.tar.Z</a></td><td align="right">2015-03-11 09:09 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1.tar.gz">cmake-3.2.1.tar.gz</a></td><td align="right">2015-03-11 09:09 </td><td align="right">6.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.1.zip">cmake-3.2.1.zip</a></td><td align="right">2015-03-11 09:09 </td><td align="right">9.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-Darwin-universal.dmg">cmake-3.2.2-Darwin-universal.dmg</a></td><td align="right">2015-04-14 13:45 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-Darwin-universal.tar.Z">cmake-3.2.2-Darwin-universal.tar.Z</a></td><td align="right">2015-04-14 13:45 </td><td align="right"> 66M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-Darwin-universal.tar.gz">cmake-3.2.2-Darwin-universal.tar.gz</a></td><td align="right">2015-04-14 13:45 </td><td align="right"> 46M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-Darwin-x86_64.dmg">cmake-3.2.2-Darwin-x86_64.dmg</a></td><td align="right">2015-04-14 13:45 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-Darwin-x86_64.tar.Z">cmake-3.2.2-Darwin-x86_64.tar.Z</a></td><td align="right">2015-04-14 13:45 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-Darwin-x86_64.tar.gz">cmake-3.2.2-Darwin-x86_64.tar.gz</a></td><td align="right">2015-04-14 13:45 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.2-Linux-i386.sh">cmake-3.2.2-Linux-i386.sh</a></td><td align="right">2015-04-14 13:44 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-Linux-i386.tar.Z">cmake-3.2.2-Linux-i386.tar.Z</a></td><td align="right">2015-04-14 13:44 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-Linux-i386.tar.gz">cmake-3.2.2-Linux-i386.tar.gz</a></td><td align="right">2015-04-14 13:44 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.2-Linux-x86_64.sh">cmake-3.2.2-Linux-x86_64.sh</a></td><td align="right">2015-04-14 13:44 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-Linux-x86_64.tar.Z">cmake-3.2.2-Linux-x86_64.tar.Z</a></td><td align="right">2015-04-14 13:44 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-Linux-x86_64.tar.gz">cmake-3.2.2-Linux-x86_64.tar.gz</a></td><td align="right">2015-04-14 13:44 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.2-SHA-256.txt">cmake-3.2.2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.2-SHA-256.txt.asc">cmake-3.2.2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-win32-x86.exe">cmake-3.2.2-win32-x86.exe</a></td><td align="right">2015-04-14 13:44 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2-win32-x86.zip">cmake-3.2.2-win32-x86.zip</a></td><td align="right">2015-04-14 13:44 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2.tar.Z">cmake-3.2.2.tar.Z</a></td><td align="right">2015-04-14 13:44 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2.tar.gz">cmake-3.2.2.tar.gz</a></td><td align="right">2015-04-14 13:44 </td><td align="right">6.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.2.zip">cmake-3.2.2.zip</a></td><td align="right">2015-04-14 13:44 </td><td align="right">9.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-Darwin-universal.dmg">cmake-3.2.3-Darwin-universal.dmg</a></td><td align="right">2015-06-01 17:04 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-Darwin-universal.tar.Z">cmake-3.2.3-Darwin-universal.tar.Z</a></td><td align="right">2015-06-01 17:04 </td><td align="right"> 66M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-Darwin-universal.tar.gz">cmake-3.2.3-Darwin-universal.tar.gz</a></td><td align="right">2015-06-01 17:04 </td><td align="right"> 46M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-Darwin-x86_64.dmg">cmake-3.2.3-Darwin-x86_64.dmg</a></td><td align="right">2015-06-01 17:04 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-Darwin-x86_64.tar.Z">cmake-3.2.3-Darwin-x86_64.tar.Z</a></td><td align="right">2015-06-01 17:04 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-Darwin-x86_64.tar.gz">cmake-3.2.3-Darwin-x86_64.tar.gz</a></td><td align="right">2015-06-01 17:04 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.3-Linux-i386.sh">cmake-3.2.3-Linux-i386.sh</a></td><td align="right">2015-06-01 17:04 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-Linux-i386.tar.Z">cmake-3.2.3-Linux-i386.tar.Z</a></td><td align="right">2015-06-01 17:03 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-Linux-i386.tar.gz">cmake-3.2.3-Linux-i386.tar.gz</a></td><td align="right">2015-06-01 17:03 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.3-Linux-x86_64.sh">cmake-3.2.3-Linux-x86_64.sh</a></td><td align="right">2015-06-01 17:03 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-Linux-x86_64.tar.Z">cmake-3.2.3-Linux-x86_64.tar.Z</a></td><td align="right">2015-06-01 17:03 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-Linux-x86_64.tar.gz">cmake-3.2.3-Linux-x86_64.tar.gz</a></td><td align="right">2015-06-01 17:03 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.3-SHA-256.txt">cmake-3.2.3-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.2.3-SHA-256.txt.asc">cmake-3.2.3-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-win32-x86.exe">cmake-3.2.3-win32-x86.exe</a></td><td align="right">2015-06-01 17:03 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3-win32-x86.zip">cmake-3.2.3-win32-x86.zip</a></td><td align="right">2015-06-01 17:03 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3.tar.Z">cmake-3.2.3.tar.Z</a></td><td align="right">2015-06-01 17:03 </td><td align="right">9.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3.tar.gz">cmake-3.2.3.tar.gz</a></td><td align="right">2015-06-01 17:03 </td><td align="right">6.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.2.3.zip">cmake-3.2.3.zip</a></td><td align="right">2015-06-01 17:03 </td><td align="right">9.7M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.3/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.3/index.html
new file mode 100644
index 0000000000..d053736514
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.3/index.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.3</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.3</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-1-src.tar.bz2">cmake-3.3.0-1-src.tar.bz2</a></td><td align="right">2015-07-23 16:39 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-1.tar.bz2">cmake-3.3.0-1.tar.bz2</a></td><td align="right">2015-07-23 16:39 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-Darwin-universal.dmg">cmake-3.3.0-Darwin-universal.dmg</a></td><td align="right">2015-07-23 16:39 </td><td align="right"> 48M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-Darwin-universal.tar.Z">cmake-3.3.0-Darwin-universal.tar.Z</a></td><td align="right">2015-07-23 16:39 </td><td align="right"> 68M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-Darwin-universal.tar.gz">cmake-3.3.0-Darwin-universal.tar.gz</a></td><td align="right">2015-07-23 16:39 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-Darwin-x86_64.dmg">cmake-3.3.0-Darwin-x86_64.dmg</a></td><td align="right">2015-07-23 16:39 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-Darwin-x86_64.tar.Z">cmake-3.3.0-Darwin-x86_64.tar.Z</a></td><td align="right">2015-07-23 16:39 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-Darwin-x86_64.tar.gz">cmake-3.3.0-Darwin-x86_64.tar.gz</a></td><td align="right">2015-07-23 16:38 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-Linux-i386.sh">cmake-3.3.0-Linux-i386.sh</a></td><td align="right">2015-07-23 16:38 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-Linux-i386.tar.Z">cmake-3.3.0-Linux-i386.tar.Z</a></td><td align="right">2015-07-23 16:38 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-Linux-i386.tar.gz">cmake-3.3.0-Linux-i386.tar.gz</a></td><td align="right">2015-07-23 16:38 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-Linux-x86_64.sh">cmake-3.3.0-Linux-x86_64.sh</a></td><td align="right">2015-07-23 16:38 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-Linux-x86_64.tar.Z">cmake-3.3.0-Linux-x86_64.tar.Z</a></td><td align="right">2015-07-23 16:38 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-Linux-x86_64.tar.gz">cmake-3.3.0-Linux-x86_64.tar.gz</a></td><td align="right">2015-07-23 16:38 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-SHA-256.txt">cmake-3.3.0-SHA-256.txt</a></td><td align="right">2015-08-13 14:42 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-SHA-256.txt.asc">cmake-3.3.0-SHA-256.txt.asc</a></td><td align="right">2015-08-13 14:42 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-1-src.tar.bz2">cmake-3.3.0-rc1-1-src.tar.bz2</a></td><td align="right">2015-06-05 09:01 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc1-1.patch">cmake-3.3.0-rc1-1.patch</a></td><td align="right">2015-06-05 09:01 </td><td align="right"> 0 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc1-1.sh">cmake-3.3.0-rc1-1.sh</a></td><td align="right">2015-06-05 09:01 </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-1.tar.bz2">cmake-3.3.0-rc1-1.tar.bz2</a></td><td align="right">2015-06-05 09:01 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-Darwin-universal.dmg">cmake-3.3.0-rc1-Darwin-universal.dmg</a></td><td align="right">2015-06-05 09:01 </td><td align="right"> 48M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-Darwin-universal.tar.Z">cmake-3.3.0-rc1-Darwin-universal.tar.Z</a></td><td align="right">2015-06-05 09:01 </td><td align="right"> 68M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-Darwin-universal.tar.gz">cmake-3.3.0-rc1-Darwin-universal.tar.gz</a></td><td align="right">2015-06-05 09:01 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-Darwin-x86_64.dmg">cmake-3.3.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2015-06-05 09:01 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-Darwin-x86_64.tar.Z">cmake-3.3.0-rc1-Darwin-x86_64.tar.Z</a></td><td align="right">2015-06-05 09:01 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-Darwin-x86_64.tar.gz">cmake-3.3.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2015-06-05 09:01 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc1-Linux-i386.sh">cmake-3.3.0-rc1-Linux-i386.sh</a></td><td align="right">2015-06-05 09:00 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-Linux-i386.tar.Z">cmake-3.3.0-rc1-Linux-i386.tar.Z</a></td><td align="right">2015-06-05 09:00 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-Linux-i386.tar.gz">cmake-3.3.0-rc1-Linux-i386.tar.gz</a></td><td align="right">2015-06-05 09:00 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc1-Linux-x86_64.sh">cmake-3.3.0-rc1-Linux-x86_64.sh</a></td><td align="right">2015-06-05 09:00 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-Linux-x86_64.tar.Z">cmake-3.3.0-rc1-Linux-x86_64.tar.Z</a></td><td align="right">2015-06-05 09:00 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-Linux-x86_64.tar.gz">cmake-3.3.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2015-06-05 09:00 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc1-SHA-256.txt">cmake-3.3.0-rc1-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc1-SHA-256.txt.asc">cmake-3.3.0-rc1-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-win32-x86.exe">cmake-3.3.0-rc1-win32-x86.exe</a></td><td align="right">2015-06-05 09:00 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1-win32-x86.zip">cmake-3.3.0-rc1-win32-x86.zip</a></td><td align="right">2015-06-05 09:00 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1.tar.Z">cmake-3.3.0-rc1.tar.Z</a></td><td align="right">2015-06-05 09:00 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1.tar.gz">cmake-3.3.0-rc1.tar.gz</a></td><td align="right">2015-06-05 09:00 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc1.zip">cmake-3.3.0-rc1.zip</a></td><td align="right">2015-06-05 09:00 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-1-src.tar.bz2">cmake-3.3.0-rc2-1-src.tar.bz2</a></td><td align="right">2015-06-10 15:27 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-1.tar.bz2">cmake-3.3.0-rc2-1.tar.bz2</a></td><td align="right">2015-06-10 15:27 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-Darwin-universal.dmg">cmake-3.3.0-rc2-Darwin-universal.dmg</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 48M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-Darwin-universal.tar.Z">cmake-3.3.0-rc2-Darwin-universal.tar.Z</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 68M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-Darwin-universal.tar.gz">cmake-3.3.0-rc2-Darwin-universal.tar.gz</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-Darwin-x86_64.dmg">cmake-3.3.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-Darwin-x86_64.tar.Z">cmake-3.3.0-rc2-Darwin-x86_64.tar.Z</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-Darwin-x86_64.tar.gz">cmake-3.3.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc2-Linux-i386.sh">cmake-3.3.0-rc2-Linux-i386.sh</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-Linux-i386.tar.Z">cmake-3.3.0-rc2-Linux-i386.tar.Z</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-Linux-i386.tar.gz">cmake-3.3.0-rc2-Linux-i386.tar.gz</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc2-Linux-x86_64.sh">cmake-3.3.0-rc2-Linux-x86_64.sh</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-Linux-x86_64.tar.Z">cmake-3.3.0-rc2-Linux-x86_64.tar.Z</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-Linux-x86_64.tar.gz">cmake-3.3.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc2-SHA-256.txt">cmake-3.3.0-rc2-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc2-SHA-256.txt.asc">cmake-3.3.0-rc2-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-win32-x86.exe">cmake-3.3.0-rc2-win32-x86.exe</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2-win32-x86.zip">cmake-3.3.0-rc2-win32-x86.zip</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2.tar.Z">cmake-3.3.0-rc2.tar.Z</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2.tar.gz">cmake-3.3.0-rc2.tar.gz</a></td><td align="right">2015-06-10 15:27 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc2.zip">cmake-3.3.0-rc2.zip</a></td><td align="right">2015-06-10 15:27 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-1-src.tar.bz2">cmake-3.3.0-rc3-1-src.tar.bz2</a></td><td align="right">2015-06-26 13:34 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-1.tar.bz2">cmake-3.3.0-rc3-1.tar.bz2</a></td><td align="right">2015-06-26 13:34 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-Darwin-universal.dmg">cmake-3.3.0-rc3-Darwin-universal.dmg</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 48M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-Darwin-universal.tar.Z">cmake-3.3.0-rc3-Darwin-universal.tar.Z</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 68M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-Darwin-universal.tar.gz">cmake-3.3.0-rc3-Darwin-universal.tar.gz</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-Darwin-x86_64.dmg">cmake-3.3.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-Darwin-x86_64.tar.Z">cmake-3.3.0-rc3-Darwin-x86_64.tar.Z</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-Darwin-x86_64.tar.gz">cmake-3.3.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc3-Linux-i386.sh">cmake-3.3.0-rc3-Linux-i386.sh</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-Linux-i386.tar.Z">cmake-3.3.0-rc3-Linux-i386.tar.Z</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-Linux-i386.tar.gz">cmake-3.3.0-rc3-Linux-i386.tar.gz</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc3-Linux-x86_64.sh">cmake-3.3.0-rc3-Linux-x86_64.sh</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-Linux-x86_64.tar.Z">cmake-3.3.0-rc3-Linux-x86_64.tar.Z</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-Linux-x86_64.tar.gz">cmake-3.3.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc3-SHA-256.txt">cmake-3.3.0-rc3-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc3-SHA-256.txt.asc">cmake-3.3.0-rc3-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-win32-x86.exe">cmake-3.3.0-rc3-win32-x86.exe</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3-win32-x86.zip">cmake-3.3.0-rc3-win32-x86.zip</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3.tar.Z">cmake-3.3.0-rc3.tar.Z</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3.tar.gz">cmake-3.3.0-rc3.tar.gz</a></td><td align="right">2015-06-26 13:34 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc3.zip">cmake-3.3.0-rc3.zip</a></td><td align="right">2015-06-26 13:34 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-1-src.tar.bz2">cmake-3.3.0-rc4-1-src.tar.bz2</a></td><td align="right">2015-07-13 15:56 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-1.tar.bz2">cmake-3.3.0-rc4-1.tar.bz2</a></td><td align="right">2015-07-13 15:56 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-Darwin-universal.dmg">cmake-3.3.0-rc4-Darwin-universal.dmg</a></td><td align="right">2015-07-13 15:56 </td><td align="right"> 48M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-Darwin-universal.tar.Z">cmake-3.3.0-rc4-Darwin-universal.tar.Z</a></td><td align="right">2015-07-13 15:56 </td><td align="right"> 68M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-Darwin-universal.tar.gz">cmake-3.3.0-rc4-Darwin-universal.tar.gz</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-Darwin-x86_64.dmg">cmake-3.3.0-rc4-Darwin-x86_64.dmg</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-Darwin-x86_64.tar.Z">cmake-3.3.0-rc4-Darwin-x86_64.tar.Z</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-Darwin-x86_64.tar.gz">cmake-3.3.0-rc4-Darwin-x86_64.tar.gz</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc4-Linux-i386.sh">cmake-3.3.0-rc4-Linux-i386.sh</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-Linux-i386.tar.Z">cmake-3.3.0-rc4-Linux-i386.tar.Z</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-Linux-i386.tar.gz">cmake-3.3.0-rc4-Linux-i386.tar.gz</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc4-Linux-x86_64.sh">cmake-3.3.0-rc4-Linux-x86_64.sh</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-Linux-x86_64.tar.Z">cmake-3.3.0-rc4-Linux-x86_64.tar.Z</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-Linux-x86_64.tar.gz">cmake-3.3.0-rc4-Linux-x86_64.tar.gz</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc4-SHA-256.txt">cmake-3.3.0-rc4-SHA-256.txt</a></td><td align="right">2016-04-13 12:48 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.0-rc4-SHA-256.txt.asc">cmake-3.3.0-rc4-SHA-256.txt.asc</a></td><td align="right">2016-04-13 12:48 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-win32-x86.exe">cmake-3.3.0-rc4-win32-x86.exe</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4-win32-x86.zip">cmake-3.3.0-rc4-win32-x86.zip</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4.tar.Z">cmake-3.3.0-rc4.tar.Z</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4.tar.gz">cmake-3.3.0-rc4.tar.gz</a></td><td align="right">2015-07-13 15:55 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-rc4.zip">cmake-3.3.0-rc4.zip</a></td><td align="right">2015-07-13 15:55 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-win32-x86.exe">cmake-3.3.0-win32-x86.exe</a></td><td align="right">2015-07-23 16:38 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0-win32-x86.zip">cmake-3.3.0-win32-x86.zip</a></td><td align="right">2015-07-23 16:38 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0.tar.Z">cmake-3.3.0.tar.Z</a></td><td align="right">2015-07-23 16:38 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0.tar.gz">cmake-3.3.0.tar.gz</a></td><td align="right">2015-07-23 16:38 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.0.zip">cmake-3.3.0.zip</a></td><td align="right">2015-07-23 16:38 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-1-src.tar.bz2">cmake-3.3.1-1-src.tar.bz2</a></td><td align="right">2015-08-13 15:55 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-1.tar.bz2">cmake-3.3.1-1.tar.bz2</a></td><td align="right">2015-08-13 15:55 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-Darwin-universal.dmg">cmake-3.3.1-Darwin-universal.dmg</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 48M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-Darwin-universal.tar.Z">cmake-3.3.1-Darwin-universal.tar.Z</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 68M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-Darwin-universal.tar.gz">cmake-3.3.1-Darwin-universal.tar.gz</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-Darwin-x86_64.dmg">cmake-3.3.1-Darwin-x86_64.dmg</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-Darwin-x86_64.tar.Z">cmake-3.3.1-Darwin-x86_64.tar.Z</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-Darwin-x86_64.tar.gz">cmake-3.3.1-Darwin-x86_64.tar.gz</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.1-Linux-i386.sh">cmake-3.3.1-Linux-i386.sh</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-Linux-i386.tar.Z">cmake-3.3.1-Linux-i386.tar.Z</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-Linux-i386.tar.gz">cmake-3.3.1-Linux-i386.tar.gz</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.1-Linux-x86_64.sh">cmake-3.3.1-Linux-x86_64.sh</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-Linux-x86_64.tar.Z">cmake-3.3.1-Linux-x86_64.tar.Z</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-Linux-x86_64.tar.gz">cmake-3.3.1-Linux-x86_64.tar.gz</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.1-SHA-256.txt">cmake-3.3.1-SHA-256.txt</a></td><td align="right">2015-08-13 15:55 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.1-SHA-256.txt.asc">cmake-3.3.1-SHA-256.txt.asc</a></td><td align="right">2015-08-13 15:55 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-win32-x86.exe">cmake-3.3.1-win32-x86.exe</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1-win32-x86.zip">cmake-3.3.1-win32-x86.zip</a></td><td align="right">2015-08-13 15:55 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1.tar.Z">cmake-3.3.1.tar.Z</a></td><td align="right">2015-08-13 15:54 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1.tar.gz">cmake-3.3.1.tar.gz</a></td><td align="right">2015-08-13 15:54 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.1.zip">cmake-3.3.1.zip</a></td><td align="right">2015-08-13 15:54 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-1-src.tar.bz2">cmake-3.3.2-1-src.tar.bz2</a></td><td align="right">2015-09-17 14:36 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-1.tar.bz2">cmake-3.3.2-1.tar.bz2</a></td><td align="right">2015-09-17 14:36 </td><td align="right">9.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-Darwin-universal.dmg">cmake-3.3.2-Darwin-universal.dmg</a></td><td align="right">2015-09-17 14:36 </td><td align="right"> 48M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-Darwin-universal.tar.Z">cmake-3.3.2-Darwin-universal.tar.Z</a></td><td align="right">2015-09-17 14:36 </td><td align="right"> 68M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-Darwin-universal.tar.gz">cmake-3.3.2-Darwin-universal.tar.gz</a></td><td align="right">2015-09-17 14:36 </td><td align="right"> 47M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-Darwin-x86_64.dmg">cmake-3.3.2-Darwin-x86_64.dmg</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-Darwin-x86_64.tar.Z">cmake-3.3.2-Darwin-x86_64.tar.Z</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-Darwin-x86_64.tar.gz">cmake-3.3.2-Darwin-x86_64.tar.gz</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.2-Linux-i386.sh">cmake-3.3.2-Linux-i386.sh</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-Linux-i386.tar.Z">cmake-3.3.2-Linux-i386.tar.Z</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-Linux-i386.tar.gz">cmake-3.3.2-Linux-i386.tar.gz</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.2-Linux-x86_64.sh">cmake-3.3.2-Linux-x86_64.sh</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-Linux-x86_64.tar.Z">cmake-3.3.2-Linux-x86_64.tar.Z</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-Linux-x86_64.tar.gz">cmake-3.3.2-Linux-x86_64.tar.gz</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.2-SHA-256.txt">cmake-3.3.2-SHA-256.txt</a></td><td align="right">2015-09-17 14:35 </td><td align="right">1.6K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.3.2-SHA-256.txt.asc">cmake-3.3.2-SHA-256.txt.asc</a></td><td align="right">2015-09-17 14:35 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-win32-x86.exe">cmake-3.3.2-win32-x86.exe</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2-win32-x86.zip">cmake-3.3.2-win32-x86.zip</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2.tar.Z">cmake-3.3.2.tar.Z</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2.tar.gz">cmake-3.3.2.tar.gz</a></td><td align="right">2015-09-17 14:35 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.3.2.zip">cmake-3.3.2.zip</a></td><td align="right">2015-09-17 14:35 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.4/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.4/index.html
new file mode 100644
index 0000000000..e7b56da758
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.4/index.html
@@ -0,0 +1,127 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.4</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.4</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-Darwin-x86_64.dmg">cmake-3.4.0-Darwin-x86_64.dmg</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-Darwin-x86_64.tar.Z">cmake-3.4.0-Darwin-x86_64.tar.Z</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-Darwin-x86_64.tar.gz">cmake-3.4.0-Darwin-x86_64.tar.gz</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-Linux-i386.sh">cmake-3.4.0-Linux-i386.sh</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-Linux-i386.tar.Z">cmake-3.4.0-Linux-i386.tar.Z</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-Linux-i386.tar.gz">cmake-3.4.0-Linux-i386.tar.gz</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-Linux-x86_64.sh">cmake-3.4.0-Linux-x86_64.sh</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-Linux-x86_64.tar.Z">cmake-3.4.0-Linux-x86_64.tar.Z</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-Linux-x86_64.tar.gz">cmake-3.4.0-Linux-x86_64.tar.gz</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-SHA-256.txt">cmake-3.4.0-SHA-256.txt</a></td><td align="right">2015-11-12 13:42 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-SHA-256.txt.asc">cmake-3.4.0-SHA-256.txt.asc</a></td><td align="right">2015-11-12 13:42 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1-Darwin-x86_64.dmg">cmake-3.4.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2015-10-06 11:02 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1-Darwin-x86_64.tar.Z">cmake-3.4.0-rc1-Darwin-x86_64.tar.Z</a></td><td align="right">2015-10-06 11:02 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1-Darwin-x86_64.tar.gz">cmake-3.4.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2015-10-06 11:02 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc1-Linux-i386.sh">cmake-3.4.0-rc1-Linux-i386.sh</a></td><td align="right">2015-10-06 11:02 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1-Linux-i386.tar.Z">cmake-3.4.0-rc1-Linux-i386.tar.Z</a></td><td align="right">2015-10-06 11:02 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1-Linux-i386.tar.gz">cmake-3.4.0-rc1-Linux-i386.tar.gz</a></td><td align="right">2015-10-06 11:01 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc1-Linux-x86_64.sh">cmake-3.4.0-rc1-Linux-x86_64.sh</a></td><td align="right">2015-10-06 11:01 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1-Linux-x86_64.tar.Z">cmake-3.4.0-rc1-Linux-x86_64.tar.Z</a></td><td align="right">2015-10-06 11:01 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1-Linux-x86_64.tar.gz">cmake-3.4.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2015-10-06 11:01 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc1-SHA-256.txt">cmake-3.4.0-rc1-SHA-256.txt</a></td><td align="right">2015-10-06 11:01 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc1-SHA-256.txt.asc">cmake-3.4.0-rc1-SHA-256.txt.asc</a></td><td align="right">2015-10-06 11:01 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1-win32-x86.exe">cmake-3.4.0-rc1-win32-x86.exe</a></td><td align="right">2015-10-06 11:01 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1-win32-x86.zip">cmake-3.4.0-rc1-win32-x86.zip</a></td><td align="right">2015-10-06 11:01 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1.tar.Z">cmake-3.4.0-rc1.tar.Z</a></td><td align="right">2015-10-06 11:01 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1.tar.gz">cmake-3.4.0-rc1.tar.gz</a></td><td align="right">2015-10-06 11:01 </td><td align="right">6.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc1.zip">cmake-3.4.0-rc1.zip</a></td><td align="right">2015-10-06 11:01 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2-Darwin-x86_64.dmg">cmake-3.4.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2015-10-21 16:27 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2-Darwin-x86_64.tar.Z">cmake-3.4.0-rc2-Darwin-x86_64.tar.Z</a></td><td align="right">2015-10-21 16:27 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2-Darwin-x86_64.tar.gz">cmake-3.4.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2015-10-21 16:27 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc2-Linux-i386.sh">cmake-3.4.0-rc2-Linux-i386.sh</a></td><td align="right">2015-10-21 16:27 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2-Linux-i386.tar.Z">cmake-3.4.0-rc2-Linux-i386.tar.Z</a></td><td align="right">2015-10-21 16:27 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2-Linux-i386.tar.gz">cmake-3.4.0-rc2-Linux-i386.tar.gz</a></td><td align="right">2015-10-21 16:27 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc2-Linux-x86_64.sh">cmake-3.4.0-rc2-Linux-x86_64.sh</a></td><td align="right">2015-10-21 16:27 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2-Linux-x86_64.tar.Z">cmake-3.4.0-rc2-Linux-x86_64.tar.Z</a></td><td align="right">2015-10-21 16:27 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2-Linux-x86_64.tar.gz">cmake-3.4.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2015-10-21 16:27 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc2-SHA-256.txt">cmake-3.4.0-rc2-SHA-256.txt</a></td><td align="right">2015-10-21 16:26 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc2-SHA-256.txt.asc">cmake-3.4.0-rc2-SHA-256.txt.asc</a></td><td align="right">2015-10-21 16:26 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2-win32-x86.exe">cmake-3.4.0-rc2-win32-x86.exe</a></td><td align="right">2015-10-21 16:26 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2-win32-x86.zip">cmake-3.4.0-rc2-win32-x86.zip</a></td><td align="right">2015-10-21 16:26 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2.tar.Z">cmake-3.4.0-rc2.tar.Z</a></td><td align="right">2015-10-21 16:26 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2.tar.gz">cmake-3.4.0-rc2.tar.gz</a></td><td align="right">2015-10-21 16:26 </td><td align="right">6.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc2.zip">cmake-3.4.0-rc2.zip</a></td><td align="right">2015-10-21 16:26 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3-Darwin-x86_64.dmg">cmake-3.4.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3-Darwin-x86_64.tar.Z">cmake-3.4.0-rc3-Darwin-x86_64.tar.Z</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3-Darwin-x86_64.tar.gz">cmake-3.4.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc3-Linux-i386.sh">cmake-3.4.0-rc3-Linux-i386.sh</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3-Linux-i386.tar.Z">cmake-3.4.0-rc3-Linux-i386.tar.Z</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3-Linux-i386.tar.gz">cmake-3.4.0-rc3-Linux-i386.tar.gz</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc3-Linux-x86_64.sh">cmake-3.4.0-rc3-Linux-x86_64.sh</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3-Linux-x86_64.tar.Z">cmake-3.4.0-rc3-Linux-x86_64.tar.Z</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3-Linux-x86_64.tar.gz">cmake-3.4.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc3-SHA-256.txt">cmake-3.4.0-rc3-SHA-256.txt</a></td><td align="right">2015-11-03 11:09 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.0-rc3-SHA-256.txt.asc">cmake-3.4.0-rc3-SHA-256.txt.asc</a></td><td align="right">2015-11-03 11:09 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3-win32-x86.exe">cmake-3.4.0-rc3-win32-x86.exe</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3-win32-x86.zip">cmake-3.4.0-rc3-win32-x86.zip</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3.tar.Z">cmake-3.4.0-rc3.tar.Z</a></td><td align="right">2015-11-03 11:09 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3.tar.gz">cmake-3.4.0-rc3.tar.gz</a></td><td align="right">2015-11-03 11:08 </td><td align="right">6.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-rc3.zip">cmake-3.4.0-rc3.zip</a></td><td align="right">2015-11-03 11:08 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-win32-x86.exe">cmake-3.4.0-win32-x86.exe</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0-win32-x86.zip">cmake-3.4.0-win32-x86.zip</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0.tar.Z">cmake-3.4.0.tar.Z</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0.tar.gz">cmake-3.4.0.tar.gz</a></td><td align="right">2015-11-12 13:42 </td><td align="right">6.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.0.zip">cmake-3.4.0.zip</a></td><td align="right">2015-11-12 13:42 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.4.1-Darwin-x86_64.dmg">cmake-3.4.1-Darwin-x86_64.dmg</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.1-Darwin-x86_64.tar.Z">cmake-3.4.1-Darwin-x86_64.tar.Z</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.1-Darwin-x86_64.tar.gz">cmake-3.4.1-Darwin-x86_64.tar.gz</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.1-Linux-i386.sh">cmake-3.4.1-Linux-i386.sh</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.1-Linux-i386.tar.Z">cmake-3.4.1-Linux-i386.tar.Z</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.1-Linux-i386.tar.gz">cmake-3.4.1-Linux-i386.tar.gz</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.1-Linux-x86_64.sh">cmake-3.4.1-Linux-x86_64.sh</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.1-Linux-x86_64.tar.Z">cmake-3.4.1-Linux-x86_64.tar.Z</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.1-Linux-x86_64.tar.gz">cmake-3.4.1-Linux-x86_64.tar.gz</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.1-SHA-256.txt">cmake-3.4.1-SHA-256.txt</a></td><td align="right">2015-12-02 14:42 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.1-SHA-256.txt.asc">cmake-3.4.1-SHA-256.txt.asc</a></td><td align="right">2015-12-02 14:42 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.4.1-win32-x86.exe">cmake-3.4.1-win32-x86.exe</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.1-win32-x86.zip">cmake-3.4.1-win32-x86.zip</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.1.tar.Z">cmake-3.4.1.tar.Z</a></td><td align="right">2015-12-02 14:42 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.1.tar.gz">cmake-3.4.1.tar.gz</a></td><td align="right">2015-12-02 14:42 </td><td align="right">6.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.1.zip">cmake-3.4.1.zip</a></td><td align="right">2015-12-02 14:41 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.4.2-Darwin-x86_64.dmg">cmake-3.4.2-Darwin-x86_64.dmg</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.2-Darwin-x86_64.tar.Z">cmake-3.4.2-Darwin-x86_64.tar.Z</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.2-Darwin-x86_64.tar.gz">cmake-3.4.2-Darwin-x86_64.tar.gz</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.2-Linux-i386.sh">cmake-3.4.2-Linux-i386.sh</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.2-Linux-i386.tar.Z">cmake-3.4.2-Linux-i386.tar.Z</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.2-Linux-i386.tar.gz">cmake-3.4.2-Linux-i386.tar.gz</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.2-Linux-x86_64.sh">cmake-3.4.2-Linux-x86_64.sh</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.2-Linux-x86_64.tar.Z">cmake-3.4.2-Linux-x86_64.tar.Z</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.2-Linux-x86_64.tar.gz">cmake-3.4.2-Linux-x86_64.tar.gz</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.2-SHA-256.txt">cmake-3.4.2-SHA-256.txt</a></td><td align="right">2016-01-19 14:58 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.2-SHA-256.txt.asc">cmake-3.4.2-SHA-256.txt.asc</a></td><td align="right">2016-01-19 14:58 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.4.2-win32-x86.exe">cmake-3.4.2-win32-x86.exe</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.2-win32-x86.zip">cmake-3.4.2-win32-x86.zip</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.2.tar.Z">cmake-3.4.2.tar.Z</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.2.tar.gz">cmake-3.4.2.tar.gz</a></td><td align="right">2016-01-19 14:58 </td><td align="right">6.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.2.zip">cmake-3.4.2.zip</a></td><td align="right">2016-01-19 14:58 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.4.3-Darwin-x86_64.dmg">cmake-3.4.3-Darwin-x86_64.dmg</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.3-Darwin-x86_64.tar.Z">cmake-3.4.3-Darwin-x86_64.tar.Z</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.3-Darwin-x86_64.tar.gz">cmake-3.4.3-Darwin-x86_64.tar.gz</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.3-Linux-i386.sh">cmake-3.4.3-Linux-i386.sh</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.3-Linux-i386.tar.Z">cmake-3.4.3-Linux-i386.tar.Z</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 37M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.3-Linux-i386.tar.gz">cmake-3.4.3-Linux-i386.tar.gz</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.3-Linux-x86_64.sh">cmake-3.4.3-Linux-x86_64.sh</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.3-Linux-x86_64.tar.Z">cmake-3.4.3-Linux-x86_64.tar.Z</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.3-Linux-x86_64.tar.gz">cmake-3.4.3-Linux-x86_64.tar.gz</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.3-SHA-256.txt">cmake-3.4.3-SHA-256.txt</a></td><td align="right">2016-01-25 14:29 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.4.3-SHA-256.txt.asc">cmake-3.4.3-SHA-256.txt.asc</a></td><td align="right">2016-01-25 14:29 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/binary.gif" alt="[ ]"></td><td><a href="cmake-3.4.3-win32-x86.exe">cmake-3.4.3-win32-x86.exe</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 13M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.3-win32-x86.zip">cmake-3.4.3-win32-x86.zip</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.3.tar.Z">cmake-3.4.3.tar.Z</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.3.tar.gz">cmake-3.4.3.tar.gz</a></td><td align="right">2016-01-25 14:29 </td><td align="right">6.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.4.3.zip">cmake-3.4.3.zip</a></td><td align="right">2016-01-25 14:29 </td><td align="right"> 10M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="cygwin/">cygwin/</a></td><td align="right">2016-01-25 14:34 </td><td align="right"> - </td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.5/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.5/index.html
new file mode 100644
index 0000000000..03d4f7c151
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.5/index.html
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.5</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.5</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-Darwin-x86_64.dmg">cmake-3.5.0-Darwin-x86_64.dmg</a></td><td align="right">2016-03-08 11:17 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-Darwin-x86_64.tar.Z">cmake-3.5.0-Darwin-x86_64.tar.Z</a></td><td align="right">2016-03-08 11:17 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-Darwin-x86_64.tar.gz">cmake-3.5.0-Darwin-x86_64.tar.gz</a></td><td align="right">2016-03-08 11:17 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-Linux-i386.sh">cmake-3.5.0-Linux-i386.sh</a></td><td align="right">2016-03-08 11:17 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-Linux-i386.tar.Z">cmake-3.5.0-Linux-i386.tar.Z</a></td><td align="right">2016-03-08 11:17 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-Linux-i386.tar.gz">cmake-3.5.0-Linux-i386.tar.gz</a></td><td align="right">2016-03-08 11:17 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-Linux-x86_64.sh">cmake-3.5.0-Linux-x86_64.sh</a></td><td align="right">2016-03-08 11:17 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-Linux-x86_64.tar.Z">cmake-3.5.0-Linux-x86_64.tar.Z</a></td><td align="right">2016-03-08 11:17 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-Linux-x86_64.tar.gz">cmake-3.5.0-Linux-x86_64.tar.gz</a></td><td align="right">2016-03-08 11:17 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-SHA-256.txt">cmake-3.5.0-SHA-256.txt</a></td><td align="right">2016-03-08 11:17 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-SHA-256.txt.asc">cmake-3.5.0-SHA-256.txt.asc</a></td><td align="right">2016-03-08 11:16 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1-Darwin-x86_64.dmg">cmake-3.5.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2016-02-02 15:51 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1-Darwin-x86_64.tar.Z">cmake-3.5.0-rc1-Darwin-x86_64.tar.Z</a></td><td align="right">2016-02-02 15:51 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1-Darwin-x86_64.tar.gz">cmake-3.5.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2016-02-02 15:51 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc1-Linux-i386.sh">cmake-3.5.0-rc1-Linux-i386.sh</a></td><td align="right">2016-02-02 15:51 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1-Linux-i386.tar.Z">cmake-3.5.0-rc1-Linux-i386.tar.Z</a></td><td align="right">2016-02-02 15:51 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1-Linux-i386.tar.gz">cmake-3.5.0-rc1-Linux-i386.tar.gz</a></td><td align="right">2016-02-02 15:51 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc1-Linux-x86_64.sh">cmake-3.5.0-rc1-Linux-x86_64.sh</a></td><td align="right">2016-02-02 15:51 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1-Linux-x86_64.tar.Z">cmake-3.5.0-rc1-Linux-x86_64.tar.Z</a></td><td align="right">2016-02-02 15:51 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1-Linux-x86_64.tar.gz">cmake-3.5.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2016-02-02 15:51 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc1-SHA-256.txt">cmake-3.5.0-rc1-SHA-256.txt</a></td><td align="right">2016-02-03 13:29 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc1-SHA-256.txt.asc">cmake-3.5.0-rc1-SHA-256.txt.asc</a></td><td align="right">2016-02-03 13:29 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1-win32-x86.msi">cmake-3.5.0-rc1-win32-x86.msi</a></td><td align="right">2016-02-03 13:29 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1-win32-x86.zip">cmake-3.5.0-rc1-win32-x86.zip</a></td><td align="right">2016-02-03 13:29 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1.tar.Z">cmake-3.5.0-rc1.tar.Z</a></td><td align="right">2016-02-02 15:51 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1.tar.gz">cmake-3.5.0-rc1.tar.gz</a></td><td align="right">2016-02-02 15:51 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc1.zip">cmake-3.5.0-rc1.zip</a></td><td align="right">2016-02-02 15:51 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2-Darwin-x86_64.dmg">cmake-3.5.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2016-02-10 15:03 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2-Darwin-x86_64.tar.Z">cmake-3.5.0-rc2-Darwin-x86_64.tar.Z</a></td><td align="right">2016-02-10 15:03 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2-Darwin-x86_64.tar.gz">cmake-3.5.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2016-02-10 15:03 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc2-Linux-i386.sh">cmake-3.5.0-rc2-Linux-i386.sh</a></td><td align="right">2016-02-10 15:03 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2-Linux-i386.tar.Z">cmake-3.5.0-rc2-Linux-i386.tar.Z</a></td><td align="right">2016-02-10 15:03 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2-Linux-i386.tar.gz">cmake-3.5.0-rc2-Linux-i386.tar.gz</a></td><td align="right">2016-02-10 15:03 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc2-Linux-x86_64.sh">cmake-3.5.0-rc2-Linux-x86_64.sh</a></td><td align="right">2016-02-10 15:03 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2-Linux-x86_64.tar.Z">cmake-3.5.0-rc2-Linux-x86_64.tar.Z</a></td><td align="right">2016-02-10 15:03 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2-Linux-x86_64.tar.gz">cmake-3.5.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2016-02-10 15:03 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc2-SHA-256.txt">cmake-3.5.0-rc2-SHA-256.txt</a></td><td align="right">2016-02-10 15:03 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc2-SHA-256.txt.asc">cmake-3.5.0-rc2-SHA-256.txt.asc</a></td><td align="right">2016-02-10 15:03 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2-win32-x86.msi">cmake-3.5.0-rc2-win32-x86.msi</a></td><td align="right">2016-02-10 15:03 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2-win32-x86.zip">cmake-3.5.0-rc2-win32-x86.zip</a></td><td align="right">2016-02-10 15:03 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2.tar.Z">cmake-3.5.0-rc2.tar.Z</a></td><td align="right">2016-02-10 15:02 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2.tar.gz">cmake-3.5.0-rc2.tar.gz</a></td><td align="right">2016-02-10 15:02 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc2.zip">cmake-3.5.0-rc2.zip</a></td><td align="right">2016-02-10 15:02 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3-Darwin-x86_64.dmg">cmake-3.5.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3-Darwin-x86_64.tar.Z">cmake-3.5.0-rc3-Darwin-x86_64.tar.Z</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3-Darwin-x86_64.tar.gz">cmake-3.5.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc3-Linux-i386.sh">cmake-3.5.0-rc3-Linux-i386.sh</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3-Linux-i386.tar.Z">cmake-3.5.0-rc3-Linux-i386.tar.Z</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3-Linux-i386.tar.gz">cmake-3.5.0-rc3-Linux-i386.tar.gz</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc3-Linux-x86_64.sh">cmake-3.5.0-rc3-Linux-x86_64.sh</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3-Linux-x86_64.tar.Z">cmake-3.5.0-rc3-Linux-x86_64.tar.Z</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3-Linux-x86_64.tar.gz">cmake-3.5.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc3-SHA-256.txt">cmake-3.5.0-rc3-SHA-256.txt</a></td><td align="right">2016-02-18 15:41 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.0-rc3-SHA-256.txt.asc">cmake-3.5.0-rc3-SHA-256.txt.asc</a></td><td align="right">2016-02-18 15:41 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3-win32-x86.msi">cmake-3.5.0-rc3-win32-x86.msi</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3-win32-x86.zip">cmake-3.5.0-rc3-win32-x86.zip</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3.tar.Z">cmake-3.5.0-rc3.tar.Z</a></td><td align="right">2016-02-18 15:41 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3.tar.gz">cmake-3.5.0-rc3.tar.gz</a></td><td align="right">2016-02-18 15:40 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-rc3.zip">cmake-3.5.0-rc3.zip</a></td><td align="right">2016-02-18 15:40 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-win32-x86.msi">cmake-3.5.0-win32-x86.msi</a></td><td align="right">2016-03-08 11:16 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0-win32-x86.zip">cmake-3.5.0-win32-x86.zip</a></td><td align="right">2016-03-08 11:16 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0.tar.Z">cmake-3.5.0.tar.Z</a></td><td align="right">2016-03-08 11:16 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0.tar.gz">cmake-3.5.0.tar.gz</a></td><td align="right">2016-03-08 11:16 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.0.zip">cmake-3.5.0.zip</a></td><td align="right">2016-03-08 11:16 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.1-Darwin-x86_64.dmg">cmake-3.5.1-Darwin-x86_64.dmg</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.1-Darwin-x86_64.tar.Z">cmake-3.5.1-Darwin-x86_64.tar.Z</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.1-Darwin-x86_64.tar.gz">cmake-3.5.1-Darwin-x86_64.tar.gz</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.1-Linux-i386.sh">cmake-3.5.1-Linux-i386.sh</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.1-Linux-i386.tar.Z">cmake-3.5.1-Linux-i386.tar.Z</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.1-Linux-i386.tar.gz">cmake-3.5.1-Linux-i386.tar.gz</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.1-Linux-x86_64.sh">cmake-3.5.1-Linux-x86_64.sh</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.1-Linux-x86_64.tar.Z">cmake-3.5.1-Linux-x86_64.tar.Z</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.1-Linux-x86_64.tar.gz">cmake-3.5.1-Linux-x86_64.tar.gz</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.1-SHA-256.txt">cmake-3.5.1-SHA-256.txt</a></td><td align="right">2016-03-24 16:00 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.1-SHA-256.txt.asc">cmake-3.5.1-SHA-256.txt.asc</a></td><td align="right">2016-03-24 16:00 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.1-win32-x86.msi">cmake-3.5.1-win32-x86.msi</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.1-win32-x86.zip">cmake-3.5.1-win32-x86.zip</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.1.tar.Z">cmake-3.5.1.tar.Z</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.1.tar.gz">cmake-3.5.1.tar.gz</a></td><td align="right">2016-03-24 16:00 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.1.zip">cmake-3.5.1.zip</a></td><td align="right">2016-03-24 16:00 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.2-Darwin-x86_64.dmg">cmake-3.5.2-Darwin-x86_64.dmg</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.2-Darwin-x86_64.tar.Z">cmake-3.5.2-Darwin-x86_64.tar.Z</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.2-Darwin-x86_64.tar.gz">cmake-3.5.2-Darwin-x86_64.tar.gz</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.2-Linux-i386.sh">cmake-3.5.2-Linux-i386.sh</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.2-Linux-i386.tar.Z">cmake-3.5.2-Linux-i386.tar.Z</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.2-Linux-i386.tar.gz">cmake-3.5.2-Linux-i386.tar.gz</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.2-Linux-x86_64.sh">cmake-3.5.2-Linux-x86_64.sh</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.2-Linux-x86_64.tar.Z">cmake-3.5.2-Linux-x86_64.tar.Z</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.2-Linux-x86_64.tar.gz">cmake-3.5.2-Linux-x86_64.tar.gz</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.2-SHA-256.txt">cmake-3.5.2-SHA-256.txt</a></td><td align="right">2016-04-15 13:40 </td><td align="right">1.3K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.5.2-SHA-256.txt.asc">cmake-3.5.2-SHA-256.txt.asc</a></td><td align="right">2016-04-15 13:40 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.5.2-win32-x86.msi">cmake-3.5.2-win32-x86.msi</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.2-win32-x86.zip">cmake-3.5.2-win32-x86.zip</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.2.tar.Z">cmake-3.5.2.tar.Z</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.2.tar.gz">cmake-3.5.2.tar.gz</a></td><td align="right">2016-04-15 13:40 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.5.2.zip">cmake-3.5.2.zip</a></td><td align="right">2016-04-15 13:40 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="cygwin/">cygwin/</a></td><td align="right">2016-04-15 13:42 </td><td align="right"> - </td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.6/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.6/index.html
new file mode 100644
index 0000000000..4fca3a5fcd
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.6/index.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.6</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.6</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-Darwin-x86_64.dmg">cmake-3.6.0-Darwin-x86_64.dmg</a></td><td align="right">2016-07-07 13:05 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-Darwin-x86_64.tar.Z">cmake-3.6.0-Darwin-x86_64.tar.Z</a></td><td align="right">2016-07-07 13:05 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-Darwin-x86_64.tar.gz">cmake-3.6.0-Darwin-x86_64.tar.gz</a></td><td align="right">2016-07-07 13:05 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-Linux-i386.sh">cmake-3.6.0-Linux-i386.sh</a></td><td align="right">2016-07-07 13:05 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-Linux-i386.tar.Z">cmake-3.6.0-Linux-i386.tar.Z</a></td><td align="right">2016-07-07 13:05 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-Linux-i386.tar.gz">cmake-3.6.0-Linux-i386.tar.gz</a></td><td align="right">2016-07-07 13:05 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-Linux-x86_64.sh">cmake-3.6.0-Linux-x86_64.sh</a></td><td align="right">2016-07-07 13:05 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-Linux-x86_64.tar.Z">cmake-3.6.0-Linux-x86_64.tar.Z</a></td><td align="right">2016-07-07 13:05 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-Linux-x86_64.tar.gz">cmake-3.6.0-Linux-x86_64.tar.gz</a></td><td align="right">2016-07-07 13:05 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-SHA-256.txt">cmake-3.6.0-SHA-256.txt</a></td><td align="right">2016-07-07 13:05 </td><td align="right">1.4K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-SHA-256.txt.asc">cmake-3.6.0-SHA-256.txt.asc</a></td><td align="right">2016-07-07 13:05 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1-Darwin-x86_64.dmg">cmake-3.6.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2016-06-03 14:50 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1-Darwin-x86_64.tar.Z">cmake-3.6.0-rc1-Darwin-x86_64.tar.Z</a></td><td align="right">2016-06-03 14:50 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1-Darwin-x86_64.tar.gz">cmake-3.6.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2016-06-03 14:50 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc1-Linux-i386.sh">cmake-3.6.0-rc1-Linux-i386.sh</a></td><td align="right">2016-06-03 14:50 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1-Linux-i386.tar.Z">cmake-3.6.0-rc1-Linux-i386.tar.Z</a></td><td align="right">2016-06-03 14:50 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1-Linux-i386.tar.gz">cmake-3.6.0-rc1-Linux-i386.tar.gz</a></td><td align="right">2016-06-03 14:50 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc1-Linux-x86_64.sh">cmake-3.6.0-rc1-Linux-x86_64.sh</a></td><td align="right">2016-06-03 14:50 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1-Linux-x86_64.tar.Z">cmake-3.6.0-rc1-Linux-x86_64.tar.Z</a></td><td align="right">2016-06-03 14:50 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1-Linux-x86_64.tar.gz">cmake-3.6.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2016-06-03 14:49 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc1-SHA-256.txt">cmake-3.6.0-rc1-SHA-256.txt</a></td><td align="right">2016-06-03 14:49 </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc1-SHA-256.txt.asc">cmake-3.6.0-rc1-SHA-256.txt.asc</a></td><td align="right">2016-06-03 14:49 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1-win32-x86.msi">cmake-3.6.0-rc1-win32-x86.msi</a></td><td align="right">2016-06-03 14:49 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1-win32-x86.zip">cmake-3.6.0-rc1-win32-x86.zip</a></td><td align="right">2016-06-03 14:49 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1-win64-x64.msi">cmake-3.6.0-rc1-win64-x64.msi</a></td><td align="right">2016-06-03 14:49 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1-win64-x64.zip">cmake-3.6.0-rc1-win64-x64.zip</a></td><td align="right">2016-06-03 14:49 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1.tar.Z">cmake-3.6.0-rc1.tar.Z</a></td><td align="right">2016-06-03 14:49 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1.tar.gz">cmake-3.6.0-rc1.tar.gz</a></td><td align="right">2016-06-03 14:49 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc1.zip">cmake-3.6.0-rc1.zip</a></td><td align="right">2016-06-03 14:49 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2-Darwin-x86_64.dmg">cmake-3.6.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2-Darwin-x86_64.tar.Z">cmake-3.6.0-rc2-Darwin-x86_64.tar.Z</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2-Darwin-x86_64.tar.gz">cmake-3.6.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc2-Linux-i386.sh">cmake-3.6.0-rc2-Linux-i386.sh</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2-Linux-i386.tar.Z">cmake-3.6.0-rc2-Linux-i386.tar.Z</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2-Linux-i386.tar.gz">cmake-3.6.0-rc2-Linux-i386.tar.gz</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc2-Linux-x86_64.sh">cmake-3.6.0-rc2-Linux-x86_64.sh</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2-Linux-x86_64.tar.Z">cmake-3.6.0-rc2-Linux-x86_64.tar.Z</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2-Linux-x86_64.tar.gz">cmake-3.6.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc2-SHA-256.txt">cmake-3.6.0-rc2-SHA-256.txt</a></td><td align="right">2016-06-13 14:29 </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc2-SHA-256.txt.asc">cmake-3.6.0-rc2-SHA-256.txt.asc</a></td><td align="right">2016-06-13 14:29 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2-win32-x86.msi">cmake-3.6.0-rc2-win32-x86.msi</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2-win32-x86.zip">cmake-3.6.0-rc2-win32-x86.zip</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2-win64-x64.msi">cmake-3.6.0-rc2-win64-x64.msi</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2-win64-x64.zip">cmake-3.6.0-rc2-win64-x64.zip</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2.tar.Z">cmake-3.6.0-rc2.tar.Z</a></td><td align="right">2016-06-13 14:29 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2.tar.gz">cmake-3.6.0-rc2.tar.gz</a></td><td align="right">2016-06-13 14:28 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc2.zip">cmake-3.6.0-rc2.zip</a></td><td align="right">2016-06-13 14:28 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3-Darwin-x86_64.dmg">cmake-3.6.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2016-06-22 13:58 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3-Darwin-x86_64.tar.Z">cmake-3.6.0-rc3-Darwin-x86_64.tar.Z</a></td><td align="right">2016-06-22 13:58 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3-Darwin-x86_64.tar.gz">cmake-3.6.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc3-Linux-i386.sh">cmake-3.6.0-rc3-Linux-i386.sh</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3-Linux-i386.tar.Z">cmake-3.6.0-rc3-Linux-i386.tar.Z</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3-Linux-i386.tar.gz">cmake-3.6.0-rc3-Linux-i386.tar.gz</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc3-Linux-x86_64.sh">cmake-3.6.0-rc3-Linux-x86_64.sh</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3-Linux-x86_64.tar.Z">cmake-3.6.0-rc3-Linux-x86_64.tar.Z</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3-Linux-x86_64.tar.gz">cmake-3.6.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc3-SHA-256.txt">cmake-3.6.0-rc3-SHA-256.txt</a></td><td align="right">2016-06-22 13:57 </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc3-SHA-256.txt.asc">cmake-3.6.0-rc3-SHA-256.txt.asc</a></td><td align="right">2016-06-22 13:57 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3-win32-x86.msi">cmake-3.6.0-rc3-win32-x86.msi</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3-win32-x86.zip">cmake-3.6.0-rc3-win32-x86.zip</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3-win64-x64.msi">cmake-3.6.0-rc3-win64-x64.msi</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3-win64-x64.zip">cmake-3.6.0-rc3-win64-x64.zip</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3.tar.Z">cmake-3.6.0-rc3.tar.Z</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3.tar.gz">cmake-3.6.0-rc3.tar.gz</a></td><td align="right">2016-06-22 13:57 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc3.zip">cmake-3.6.0-rc3.zip</a></td><td align="right">2016-06-22 13:57 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4-Darwin-x86_64.dmg">cmake-3.6.0-rc4-Darwin-x86_64.dmg</a></td><td align="right">2016-06-29 14:50 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4-Darwin-x86_64.tar.Z">cmake-3.6.0-rc4-Darwin-x86_64.tar.Z</a></td><td align="right">2016-06-29 14:50 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4-Darwin-x86_64.tar.gz">cmake-3.6.0-rc4-Darwin-x86_64.tar.gz</a></td><td align="right">2016-06-29 14:50 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc4-Linux-i386.sh">cmake-3.6.0-rc4-Linux-i386.sh</a></td><td align="right">2016-06-29 14:50 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4-Linux-i386.tar.Z">cmake-3.6.0-rc4-Linux-i386.tar.Z</a></td><td align="right">2016-06-29 14:50 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4-Linux-i386.tar.gz">cmake-3.6.0-rc4-Linux-i386.tar.gz</a></td><td align="right">2016-06-29 14:50 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc4-Linux-x86_64.sh">cmake-3.6.0-rc4-Linux-x86_64.sh</a></td><td align="right">2016-06-29 14:50 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4-Linux-x86_64.tar.Z">cmake-3.6.0-rc4-Linux-x86_64.tar.Z</a></td><td align="right">2016-06-29 14:49 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4-Linux-x86_64.tar.gz">cmake-3.6.0-rc4-Linux-x86_64.tar.gz</a></td><td align="right">2016-06-29 14:49 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc4-SHA-256.txt">cmake-3.6.0-rc4-SHA-256.txt</a></td><td align="right">2016-06-29 14:49 </td><td align="right">1.5K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.0-rc4-SHA-256.txt.asc">cmake-3.6.0-rc4-SHA-256.txt.asc</a></td><td align="right">2016-06-29 14:49 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4-win32-x86.msi">cmake-3.6.0-rc4-win32-x86.msi</a></td><td align="right">2016-06-29 14:49 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4-win32-x86.zip">cmake-3.6.0-rc4-win32-x86.zip</a></td><td align="right">2016-06-29 14:49 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4-win64-x64.msi">cmake-3.6.0-rc4-win64-x64.msi</a></td><td align="right">2016-06-29 14:49 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4-win64-x64.zip">cmake-3.6.0-rc4-win64-x64.zip</a></td><td align="right">2016-06-29 14:49 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4.tar.Z">cmake-3.6.0-rc4.tar.Z</a></td><td align="right">2016-06-29 14:49 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4.tar.gz">cmake-3.6.0-rc4.tar.gz</a></td><td align="right">2016-06-29 14:49 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-rc4.zip">cmake-3.6.0-rc4.zip</a></td><td align="right">2016-06-29 14:49 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-win32-x86.msi">cmake-3.6.0-win32-x86.msi</a></td><td align="right">2016-07-07 13:04 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-win32-x86.zip">cmake-3.6.0-win32-x86.zip</a></td><td align="right">2016-07-07 13:04 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-win64-x64.msi">cmake-3.6.0-win64-x64.msi</a></td><td align="right">2016-07-07 13:04 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0-win64-x64.zip">cmake-3.6.0-win64-x64.zip</a></td><td align="right">2016-07-07 13:04 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0.tar.Z">cmake-3.6.0.tar.Z</a></td><td align="right">2016-07-07 13:04 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0.tar.gz">cmake-3.6.0.tar.gz</a></td><td align="right">2016-07-07 13:04 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.0.zip">cmake-3.6.0.zip</a></td><td align="right">2016-07-07 13:04 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.1-Darwin-x86_64.dmg">cmake-3.6.1-Darwin-x86_64.dmg</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.1-Darwin-x86_64.tar.Z">cmake-3.6.1-Darwin-x86_64.tar.Z</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.1-Darwin-x86_64.tar.gz">cmake-3.6.1-Darwin-x86_64.tar.gz</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.1-Linux-i386.sh">cmake-3.6.1-Linux-i386.sh</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.1-Linux-i386.tar.Z">cmake-3.6.1-Linux-i386.tar.Z</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.1-Linux-i386.tar.gz">cmake-3.6.1-Linux-i386.tar.gz</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.1-Linux-x86_64.sh">cmake-3.6.1-Linux-x86_64.sh</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.1-Linux-x86_64.tar.Z">cmake-3.6.1-Linux-x86_64.tar.Z</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.1-Linux-x86_64.tar.gz">cmake-3.6.1-Linux-x86_64.tar.gz</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.1-SHA-256.txt">cmake-3.6.1-SHA-256.txt</a></td><td align="right">2016-07-22 10:58 </td><td align="right">1.4K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.1-SHA-256.txt.asc">cmake-3.6.1-SHA-256.txt.asc</a></td><td align="right">2016-07-22 10:58 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.1-win32-x86.msi">cmake-3.6.1-win32-x86.msi</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.1-win32-x86.zip">cmake-3.6.1-win32-x86.zip</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.1-win64-x64.msi">cmake-3.6.1-win64-x64.msi</a></td><td align="right">2016-07-22 10:58 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.1-win64-x64.zip">cmake-3.6.1-win64-x64.zip</a></td><td align="right">2016-07-22 10:57 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.1.tar.Z">cmake-3.6.1.tar.Z</a></td><td align="right">2016-07-22 10:57 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.1.tar.gz">cmake-3.6.1.tar.gz</a></td><td align="right">2016-07-22 10:57 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.1.zip">cmake-3.6.1.zip</a></td><td align="right">2016-07-22 10:57 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.2-Darwin-x86_64.dmg">cmake-3.6.2-Darwin-x86_64.dmg</a></td><td align="right">2016-09-07 14:29 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.2-Darwin-x86_64.tar.Z">cmake-3.6.2-Darwin-x86_64.tar.Z</a></td><td align="right">2016-09-07 14:29 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.2-Darwin-x86_64.tar.gz">cmake-3.6.2-Darwin-x86_64.tar.gz</a></td><td align="right">2016-09-07 14:29 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.2-Linux-i386.sh">cmake-3.6.2-Linux-i386.sh</a></td><td align="right">2016-09-07 14:29 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.2-Linux-i386.tar.Z">cmake-3.6.2-Linux-i386.tar.Z</a></td><td align="right">2016-09-07 14:29 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.2-Linux-i386.tar.gz">cmake-3.6.2-Linux-i386.tar.gz</a></td><td align="right">2016-09-07 14:28 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.2-Linux-x86_64.sh">cmake-3.6.2-Linux-x86_64.sh</a></td><td align="right">2016-09-07 14:28 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.2-Linux-x86_64.tar.Z">cmake-3.6.2-Linux-x86_64.tar.Z</a></td><td align="right">2016-09-07 14:28 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.2-Linux-x86_64.tar.gz">cmake-3.6.2-Linux-x86_64.tar.gz</a></td><td align="right">2016-09-07 14:28 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.2-SHA-256.txt">cmake-3.6.2-SHA-256.txt</a></td><td align="right">2016-09-07 14:28 </td><td align="right">1.4K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.2-SHA-256.txt.asc">cmake-3.6.2-SHA-256.txt.asc</a></td><td align="right">2016-09-07 14:28 </td><td align="right">819 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.2-win32-x86.msi">cmake-3.6.2-win32-x86.msi</a></td><td align="right">2016-09-07 14:28 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.2-win32-x86.zip">cmake-3.6.2-win32-x86.zip</a></td><td align="right">2016-09-07 14:28 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.2-win64-x64.msi">cmake-3.6.2-win64-x64.msi</a></td><td align="right">2016-09-07 14:28 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.2-win64-x64.zip">cmake-3.6.2-win64-x64.zip</a></td><td align="right">2016-09-07 14:28 </td><td align="right"> 19M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.2.tar.Z">cmake-3.6.2.tar.Z</a></td><td align="right">2016-09-07 14:28 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.2.tar.gz">cmake-3.6.2.tar.gz</a></td><td align="right">2016-09-07 14:28 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.2.zip">cmake-3.6.2.zip</a></td><td align="right">2016-09-07 14:28 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.3-Darwin-x86_64.dmg">cmake-3.6.3-Darwin-x86_64.dmg</a></td><td align="right">2016-11-03 12:13 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.3-Darwin-x86_64.tar.Z">cmake-3.6.3-Darwin-x86_64.tar.Z</a></td><td align="right">2016-11-03 12:13 </td><td align="right"> 36M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.3-Darwin-x86_64.tar.gz">cmake-3.6.3-Darwin-x86_64.tar.gz</a></td><td align="right">2016-11-03 12:13 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.3-Linux-i386.sh">cmake-3.6.3-Linux-i386.sh</a></td><td align="right">2016-11-03 12:13 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.3-Linux-i386.tar.Z">cmake-3.6.3-Linux-i386.tar.Z</a></td><td align="right">2016-11-03 12:13 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.3-Linux-i386.tar.gz">cmake-3.6.3-Linux-i386.tar.gz</a></td><td align="right">2016-11-03 12:13 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.3-Linux-x86_64.sh">cmake-3.6.3-Linux-x86_64.sh</a></td><td align="right">2016-11-03 12:13 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.3-Linux-x86_64.tar.Z">cmake-3.6.3-Linux-x86_64.tar.Z</a></td><td align="right">2016-11-03 12:13 </td><td align="right"> 38M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.3-Linux-x86_64.tar.gz">cmake-3.6.3-Linux-x86_64.tar.gz</a></td><td align="right">2016-11-03 12:13 </td><td align="right"> 27M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.3-SHA-256.txt">cmake-3.6.3-SHA-256.txt</a></td><td align="right">2016-11-03 12:13 </td><td align="right">1.4K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.6.3-SHA-256.txt.asc">cmake-3.6.3-SHA-256.txt.asc</a></td><td align="right">2016-11-03 12:13 </td><td align="right">801 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.3-win32-x86.msi">cmake-3.6.3-win32-x86.msi</a></td><td align="right">2016-11-03 12:13 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.3-win32-x86.zip">cmake-3.6.3-win32-x86.zip</a></td><td align="right">2016-11-03 12:13 </td><td align="right"> 20M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.6.3-win64-x64.msi">cmake-3.6.3-win64-x64.msi</a></td><td align="right">2016-11-03 12:12 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.3-win64-x64.zip">cmake-3.6.3-win64-x64.zip</a></td><td align="right">2016-11-03 12:12 </td><td align="right"> 23M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.3.tar.Z">cmake-3.6.3.tar.Z</a></td><td align="right">2016-11-03 12:12 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.3.tar.gz">cmake-3.6.3.tar.gz</a></td><td align="right">2016-11-03 12:12 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.6.3.zip">cmake-3.6.3.zip</a></td><td align="right">2016-11-03 12:12 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="cygwin/">cygwin/</a></td><td align="right">2016-09-07 14:44 </td><td align="right"> - </td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.7/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.7/index.html
new file mode 100644
index 0000000000..4812f93f9f
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.7/index.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.7</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.7</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-Darwin-x86_64.dmg">cmake-3.7.0-Darwin-x86_64.dmg</a></td><td align="right">2016-11-11 14:01 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-Darwin-x86_64.tar.gz">cmake-3.7.0-Darwin-x86_64.tar.gz</a></td><td align="right">2016-11-11 14:01 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-Linux-x86_64.sh">cmake-3.7.0-Linux-x86_64.sh</a></td><td align="right">2016-11-11 14:01 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-Linux-x86_64.tar.gz">cmake-3.7.0-Linux-x86_64.tar.gz</a></td><td align="right">2016-11-11 14:01 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-SHA-256.txt">cmake-3.7.0-SHA-256.txt</a></td><td align="right">2016-11-11 14:01 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-SHA-256.txt.asc">cmake-3.7.0-SHA-256.txt.asc</a></td><td align="right">2016-11-11 14:01 </td><td align="right">801 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc1-Darwin-x86_64.dmg">cmake-3.7.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2016-10-04 15:23 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc1-Darwin-x86_64.tar.gz">cmake-3.7.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2016-10-04 15:23 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-rc1-Linux-x86_64.sh">cmake-3.7.0-rc1-Linux-x86_64.sh</a></td><td align="right">2016-10-04 15:23 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc1-Linux-x86_64.tar.gz">cmake-3.7.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2016-10-04 15:23 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-rc1-SHA-256.txt">cmake-3.7.0-rc1-SHA-256.txt</a></td><td align="right">2016-10-04 15:23 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-rc1-SHA-256.txt.asc">cmake-3.7.0-rc1-SHA-256.txt.asc</a></td><td align="right">2016-10-04 15:23 </td><td align="right">801 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc1-win32-x86.msi">cmake-3.7.0-rc1-win32-x86.msi</a></td><td align="right">2016-10-04 15:23 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc1-win32-x86.zip">cmake-3.7.0-rc1-win32-x86.zip</a></td><td align="right">2016-10-04 15:23 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc1-win64-x64.msi">cmake-3.7.0-rc1-win64-x64.msi</a></td><td align="right">2016-10-04 15:23 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc1-win64-x64.zip">cmake-3.7.0-rc1-win64-x64.zip</a></td><td align="right">2016-10-04 15:23 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc1.tar.Z">cmake-3.7.0-rc1.tar.Z</a></td><td align="right">2016-10-04 15:23 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc1.tar.gz">cmake-3.7.0-rc1.tar.gz</a></td><td align="right">2016-10-04 15:23 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc1.zip">cmake-3.7.0-rc1.zip</a></td><td align="right">2016-10-04 15:23 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc2-Darwin-x86_64.dmg">cmake-3.7.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2016-10-19 15:24 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc2-Darwin-x86_64.tar.gz">cmake-3.7.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2016-10-19 15:24 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-rc2-Linux-x86_64.sh">cmake-3.7.0-rc2-Linux-x86_64.sh</a></td><td align="right">2016-10-19 15:24 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc2-Linux-x86_64.tar.gz">cmake-3.7.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2016-10-19 15:24 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-rc2-SHA-256.txt">cmake-3.7.0-rc2-SHA-256.txt</a></td><td align="right">2016-10-19 15:24 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-rc2-SHA-256.txt.asc">cmake-3.7.0-rc2-SHA-256.txt.asc</a></td><td align="right">2016-10-19 15:24 </td><td align="right">801 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc2-win32-x86.msi">cmake-3.7.0-rc2-win32-x86.msi</a></td><td align="right">2016-10-19 15:23 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc2-win32-x86.zip">cmake-3.7.0-rc2-win32-x86.zip</a></td><td align="right">2016-10-19 15:23 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc2-win64-x64.msi">cmake-3.7.0-rc2-win64-x64.msi</a></td><td align="right">2016-10-19 15:23 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc2-win64-x64.zip">cmake-3.7.0-rc2-win64-x64.zip</a></td><td align="right">2016-10-19 15:23 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc2.tar.Z">cmake-3.7.0-rc2.tar.Z</a></td><td align="right">2016-10-19 15:23 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc2.tar.gz">cmake-3.7.0-rc2.tar.gz</a></td><td align="right">2016-10-19 15:23 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc2.zip">cmake-3.7.0-rc2.zip</a></td><td align="right">2016-10-19 15:23 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc3-Darwin-x86_64.dmg">cmake-3.7.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2016-11-04 15:26 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc3-Darwin-x86_64.tar.gz">cmake-3.7.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2016-11-04 15:26 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-rc3-Linux-x86_64.sh">cmake-3.7.0-rc3-Linux-x86_64.sh</a></td><td align="right">2016-11-04 15:26 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc3-Linux-x86_64.tar.gz">cmake-3.7.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2016-11-04 15:26 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-rc3-SHA-256.txt">cmake-3.7.0-rc3-SHA-256.txt</a></td><td align="right">2016-11-04 15:26 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.0-rc3-SHA-256.txt.asc">cmake-3.7.0-rc3-SHA-256.txt.asc</a></td><td align="right">2016-11-04 15:26 </td><td align="right">801 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc3-win32-x86.msi">cmake-3.7.0-rc3-win32-x86.msi</a></td><td align="right">2016-11-04 15:26 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc3-win32-x86.zip">cmake-3.7.0-rc3-win32-x86.zip</a></td><td align="right">2016-11-04 15:26 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc3-win64-x64.msi">cmake-3.7.0-rc3-win64-x64.msi</a></td><td align="right">2016-11-04 15:26 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc3-win64-x64.zip">cmake-3.7.0-rc3-win64-x64.zip</a></td><td align="right">2016-11-04 15:26 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc3.tar.Z">cmake-3.7.0-rc3.tar.Z</a></td><td align="right">2016-11-04 15:26 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc3.tar.gz">cmake-3.7.0-rc3.tar.gz</a></td><td align="right">2016-11-04 15:26 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-rc3.zip">cmake-3.7.0-rc3.zip</a></td><td align="right">2016-11-04 15:26 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-win32-x86.msi">cmake-3.7.0-win32-x86.msi</a></td><td align="right">2016-11-11 14:01 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-win32-x86.zip">cmake-3.7.0-win32-x86.zip</a></td><td align="right">2016-11-11 14:01 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-win64-x64.msi">cmake-3.7.0-win64-x64.msi</a></td><td align="right">2016-11-11 14:01 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0-win64-x64.zip">cmake-3.7.0-win64-x64.zip</a></td><td align="right">2016-11-11 14:00 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0.tar.Z">cmake-3.7.0.tar.Z</a></td><td align="right">2016-11-11 14:00 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0.tar.gz">cmake-3.7.0.tar.gz</a></td><td align="right">2016-11-11 14:00 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.0.zip">cmake-3.7.0.zip</a></td><td align="right">2016-11-11 14:00 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.1-Darwin-x86_64.dmg">cmake-3.7.1-Darwin-x86_64.dmg</a></td><td align="right">2016-11-30 14:25 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.1-Darwin-x86_64.tar.gz">cmake-3.7.1-Darwin-x86_64.tar.gz</a></td><td align="right">2016-11-30 14:25 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.1-Linux-x86_64.sh">cmake-3.7.1-Linux-x86_64.sh</a></td><td align="right">2016-11-30 14:25 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.1-Linux-x86_64.tar.gz">cmake-3.7.1-Linux-x86_64.tar.gz</a></td><td align="right">2016-11-30 14:25 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.1-SHA-256.txt">cmake-3.7.1-SHA-256.txt</a></td><td align="right">2016-11-30 14:25 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.1-SHA-256.txt.asc">cmake-3.7.1-SHA-256.txt.asc</a></td><td align="right">2016-11-30 14:25 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.1-win32-x86.msi">cmake-3.7.1-win32-x86.msi</a></td><td align="right">2016-11-30 14:25 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.1-win32-x86.zip">cmake-3.7.1-win32-x86.zip</a></td><td align="right">2016-11-30 14:25 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.1-win64-x64.msi">cmake-3.7.1-win64-x64.msi</a></td><td align="right">2016-11-30 14:24 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.1-win64-x64.zip">cmake-3.7.1-win64-x64.zip</a></td><td align="right">2016-11-30 14:24 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.1.tar.Z">cmake-3.7.1.tar.Z</a></td><td align="right">2016-11-30 14:24 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.1.tar.gz">cmake-3.7.1.tar.gz</a></td><td align="right">2016-11-30 14:24 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.1.zip">cmake-3.7.1.zip</a></td><td align="right">2016-11-30 14:24 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.2-Darwin-x86_64.dmg">cmake-3.7.2-Darwin-x86_64.dmg</a></td><td align="right">2017-01-13 14:13 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.2-Darwin-x86_64.tar.gz">cmake-3.7.2-Darwin-x86_64.tar.gz</a></td><td align="right">2017-01-13 14:13 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.2-Linux-x86_64.sh">cmake-3.7.2-Linux-x86_64.sh</a></td><td align="right">2017-01-13 14:13 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.2-Linux-x86_64.tar.gz">cmake-3.7.2-Linux-x86_64.tar.gz</a></td><td align="right">2017-01-13 14:13 </td><td align="right"> 29M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.2-SHA-256.txt">cmake-3.7.2-SHA-256.txt</a></td><td align="right">2017-01-13 14:13 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.7.2-SHA-256.txt.asc">cmake-3.7.2-SHA-256.txt.asc</a></td><td align="right">2017-01-13 14:13 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.2-win32-x86.msi">cmake-3.7.2-win32-x86.msi</a></td><td align="right">2017-01-13 14:13 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.2-win32-x86.zip">cmake-3.7.2-win32-x86.zip</a></td><td align="right">2017-01-13 14:12 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.7.2-win64-x64.msi">cmake-3.7.2-win64-x64.msi</a></td><td align="right">2017-01-13 14:12 </td><td align="right"> 17M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.2-win64-x64.zip">cmake-3.7.2-win64-x64.zip</a></td><td align="right">2017-01-13 14:12 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.2.tar.Z">cmake-3.7.2.tar.Z</a></td><td align="right">2017-01-13 14:12 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.2.tar.gz">cmake-3.7.2.tar.gz</a></td><td align="right">2017-01-13 14:12 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.7.2.zip">cmake-3.7.2.zip</a></td><td align="right">2017-01-13 14:12 </td><td align="right"> 11M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.8/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.8/index.html
new file mode 100644
index 0000000000..5fc8caa1d5
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.8/index.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.8</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.8</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-Darwin-x86_64.dmg">cmake-3.8.0-Darwin-x86_64.dmg</a></td><td align="right">2017-04-10 13:39 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-Darwin-x86_64.tar.gz">cmake-3.8.0-Darwin-x86_64.tar.gz</a></td><td align="right">2017-04-10 13:39 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-Linux-x86_64.sh">cmake-3.8.0-Linux-x86_64.sh</a></td><td align="right">2017-04-10 13:39 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-Linux-x86_64.tar.gz">cmake-3.8.0-Linux-x86_64.tar.gz</a></td><td align="right">2017-04-10 13:39 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-SHA-256.txt">cmake-3.8.0-SHA-256.txt</a></td><td align="right">2017-04-10 13:39 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-SHA-256.txt.asc">cmake-3.8.0-SHA-256.txt.asc</a></td><td align="right">2017-04-10 13:39 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc1-Darwin-x86_64.dmg">cmake-3.8.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2017-02-07 12:54 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc1-Darwin-x86_64.tar.gz">cmake-3.8.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2017-02-07 12:54 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc1-Linux-x86_64.sh">cmake-3.8.0-rc1-Linux-x86_64.sh</a></td><td align="right">2017-02-07 12:54 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc1-Linux-x86_64.tar.gz">cmake-3.8.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2017-02-07 12:54 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc1-SHA-256.txt">cmake-3.8.0-rc1-SHA-256.txt</a></td><td align="right">2017-02-07 12:54 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc1-SHA-256.txt.asc">cmake-3.8.0-rc1-SHA-256.txt.asc</a></td><td align="right">2017-02-07 12:54 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc1-win32-x86.msi">cmake-3.8.0-rc1-win32-x86.msi</a></td><td align="right">2017-02-07 12:54 </td><td align="right"> 15M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc1-win32-x86.zip">cmake-3.8.0-rc1-win32-x86.zip</a></td><td align="right">2017-02-07 12:54 </td><td align="right"> 21M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc1-win64-x64.msi">cmake-3.8.0-rc1-win64-x64.msi</a></td><td align="right">2017-02-07 12:54 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc1-win64-x64.zip">cmake-3.8.0-rc1-win64-x64.zip</a></td><td align="right">2017-02-07 12:54 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc1.tar.Z">cmake-3.8.0-rc1.tar.Z</a></td><td align="right">2017-02-07 12:54 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc1.tar.gz">cmake-3.8.0-rc1.tar.gz</a></td><td align="right">2017-02-07 12:54 </td><td align="right">7.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc1.zip">cmake-3.8.0-rc1.zip</a></td><td align="right">2017-02-07 12:54 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc2-Darwin-x86_64.dmg">cmake-3.8.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2017-03-03 10:00 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc2-Darwin-x86_64.tar.gz">cmake-3.8.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2017-03-03 10:00 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc2-Linux-x86_64.sh">cmake-3.8.0-rc2-Linux-x86_64.sh</a></td><td align="right">2017-03-03 10:00 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc2-Linux-x86_64.tar.gz">cmake-3.8.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2017-03-03 09:59 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc2-SHA-256.txt">cmake-3.8.0-rc2-SHA-256.txt</a></td><td align="right">2017-03-03 09:59 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc2-SHA-256.txt.asc">cmake-3.8.0-rc2-SHA-256.txt.asc</a></td><td align="right">2017-03-03 09:59 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc2-win32-x86.msi">cmake-3.8.0-rc2-win32-x86.msi</a></td><td align="right">2017-03-03 09:59 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc2-win32-x86.zip">cmake-3.8.0-rc2-win32-x86.zip</a></td><td align="right">2017-03-03 09:59 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc2-win64-x64.msi">cmake-3.8.0-rc2-win64-x64.msi</a></td><td align="right">2017-03-03 09:59 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc2-win64-x64.zip">cmake-3.8.0-rc2-win64-x64.zip</a></td><td align="right">2017-03-03 09:59 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc2.tar.Z">cmake-3.8.0-rc2.tar.Z</a></td><td align="right">2017-03-03 09:59 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc2.tar.gz">cmake-3.8.0-rc2.tar.gz</a></td><td align="right">2017-03-03 09:59 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc2.zip">cmake-3.8.0-rc2.zip</a></td><td align="right">2017-03-03 09:59 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc3-Darwin-x86_64.dmg">cmake-3.8.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2017-03-24 13:52 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc3-Darwin-x86_64.tar.gz">cmake-3.8.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2017-03-24 13:52 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc3-Linux-x86_64.sh">cmake-3.8.0-rc3-Linux-x86_64.sh</a></td><td align="right">2017-03-24 13:52 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc3-Linux-x86_64.tar.gz">cmake-3.8.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2017-03-24 13:52 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc3-SHA-256.txt">cmake-3.8.0-rc3-SHA-256.txt</a></td><td align="right">2017-03-24 13:52 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc3-SHA-256.txt.asc">cmake-3.8.0-rc3-SHA-256.txt.asc</a></td><td align="right">2017-03-24 13:52 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc3-win32-x86.msi">cmake-3.8.0-rc3-win32-x86.msi</a></td><td align="right">2017-03-24 13:52 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc3-win32-x86.zip">cmake-3.8.0-rc3-win32-x86.zip</a></td><td align="right">2017-03-24 13:52 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc3-win64-x64.msi">cmake-3.8.0-rc3-win64-x64.msi</a></td><td align="right">2017-03-24 13:52 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc3-win64-x64.zip">cmake-3.8.0-rc3-win64-x64.zip</a></td><td align="right">2017-03-24 13:52 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc3.tar.Z">cmake-3.8.0-rc3.tar.Z</a></td><td align="right">2017-03-24 13:52 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc3.tar.gz">cmake-3.8.0-rc3.tar.gz</a></td><td align="right">2017-03-24 13:52 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc3.zip">cmake-3.8.0-rc3.zip</a></td><td align="right">2017-03-24 13:52 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc4-Darwin-x86_64.dmg">cmake-3.8.0-rc4-Darwin-x86_64.dmg</a></td><td align="right">2017-03-30 11:38 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc4-Darwin-x86_64.tar.gz">cmake-3.8.0-rc4-Darwin-x86_64.tar.gz</a></td><td align="right">2017-03-30 11:38 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc4-Linux-x86_64.sh">cmake-3.8.0-rc4-Linux-x86_64.sh</a></td><td align="right">2017-03-30 11:38 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc4-Linux-x86_64.tar.gz">cmake-3.8.0-rc4-Linux-x86_64.tar.gz</a></td><td align="right">2017-03-30 11:38 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc4-SHA-256.txt">cmake-3.8.0-rc4-SHA-256.txt</a></td><td align="right">2017-03-30 11:38 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.0-rc4-SHA-256.txt.asc">cmake-3.8.0-rc4-SHA-256.txt.asc</a></td><td align="right">2017-03-30 11:38 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc4-win32-x86.msi">cmake-3.8.0-rc4-win32-x86.msi</a></td><td align="right">2017-03-30 11:38 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc4-win32-x86.zip">cmake-3.8.0-rc4-win32-x86.zip</a></td><td align="right">2017-03-30 11:38 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc4-win64-x64.msi">cmake-3.8.0-rc4-win64-x64.msi</a></td><td align="right">2017-03-30 11:38 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc4-win64-x64.zip">cmake-3.8.0-rc4-win64-x64.zip</a></td><td align="right">2017-03-30 11:38 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc4.tar.Z">cmake-3.8.0-rc4.tar.Z</a></td><td align="right">2017-03-30 11:38 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc4.tar.gz">cmake-3.8.0-rc4.tar.gz</a></td><td align="right">2017-03-30 11:38 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-rc4.zip">cmake-3.8.0-rc4.zip</a></td><td align="right">2017-03-30 11:38 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-win32-x86.msi">cmake-3.8.0-win32-x86.msi</a></td><td align="right">2017-04-10 13:39 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-win32-x86.zip">cmake-3.8.0-win32-x86.zip</a></td><td align="right">2017-04-10 13:39 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-win64-x64.msi">cmake-3.8.0-win64-x64.msi</a></td><td align="right">2017-04-10 13:39 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0-win64-x64.zip">cmake-3.8.0-win64-x64.zip</a></td><td align="right">2017-04-10 13:38 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0.tar.Z">cmake-3.8.0.tar.Z</a></td><td align="right">2017-04-10 13:38 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0.tar.gz">cmake-3.8.0.tar.gz</a></td><td align="right">2017-04-10 13:38 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.0.zip">cmake-3.8.0.zip</a></td><td align="right">2017-04-10 13:38 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.1-Darwin-x86_64.dmg">cmake-3.8.1-Darwin-x86_64.dmg</a></td><td align="right">2017-05-02 11:06 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.1-Darwin-x86_64.tar.gz">cmake-3.8.1-Darwin-x86_64.tar.gz</a></td><td align="right">2017-05-02 11:06 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.1-Linux-x86_64.sh">cmake-3.8.1-Linux-x86_64.sh</a></td><td align="right">2017-05-02 11:06 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.1-Linux-x86_64.tar.gz">cmake-3.8.1-Linux-x86_64.tar.gz</a></td><td align="right">2017-05-02 11:05 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.1-SHA-256.txt">cmake-3.8.1-SHA-256.txt</a></td><td align="right">2017-05-02 11:05 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.1-SHA-256.txt.asc">cmake-3.8.1-SHA-256.txt.asc</a></td><td align="right">2017-05-02 11:05 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.1-win32-x86.msi">cmake-3.8.1-win32-x86.msi</a></td><td align="right">2017-05-02 11:05 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.1-win32-x86.zip">cmake-3.8.1-win32-x86.zip</a></td><td align="right">2017-05-02 11:05 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.1-win64-x64.msi">cmake-3.8.1-win64-x64.msi</a></td><td align="right">2017-05-02 11:05 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.1-win64-x64.zip">cmake-3.8.1-win64-x64.zip</a></td><td align="right">2017-05-02 11:05 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.1.tar.Z">cmake-3.8.1.tar.Z</a></td><td align="right">2017-05-02 11:05 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.1.tar.gz">cmake-3.8.1.tar.gz</a></td><td align="right">2017-05-02 11:05 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.1.zip">cmake-3.8.1.zip</a></td><td align="right">2017-05-02 11:05 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.2-Darwin-x86_64.dmg">cmake-3.8.2-Darwin-x86_64.dmg</a></td><td align="right">2017-05-31 12:26 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.2-Darwin-x86_64.tar.gz">cmake-3.8.2-Darwin-x86_64.tar.gz</a></td><td align="right">2017-05-31 12:26 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.2-Linux-x86_64.sh">cmake-3.8.2-Linux-x86_64.sh</a></td><td align="right">2017-05-31 12:26 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.2-Linux-x86_64.tar.gz">cmake-3.8.2-Linux-x86_64.tar.gz</a></td><td align="right">2017-05-31 12:26 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.2-SHA-256.txt">cmake-3.8.2-SHA-256.txt</a></td><td align="right">2017-05-31 12:26 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.8.2-SHA-256.txt.asc">cmake-3.8.2-SHA-256.txt.asc</a></td><td align="right">2017-05-31 12:26 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.2-win32-x86.msi">cmake-3.8.2-win32-x86.msi</a></td><td align="right">2017-05-31 12:26 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.2-win32-x86.zip">cmake-3.8.2-win32-x86.zip</a></td><td align="right">2017-05-31 12:26 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.8.2-win64-x64.msi">cmake-3.8.2-win64-x64.msi</a></td><td align="right">2017-05-31 12:25 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.2-win64-x64.zip">cmake-3.8.2-win64-x64.zip</a></td><td align="right">2017-05-31 12:25 </td><td align="right"> 24M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.2.tar.Z">cmake-3.8.2.tar.Z</a></td><td align="right">2017-05-31 12:25 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.2.tar.gz">cmake-3.8.2.tar.gz</a></td><td align="right">2017-05-31 12:25 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.8.2.zip">cmake-3.8.2.zip</a></td><td align="right">2017-05-31 12:25 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/files/v3.9/index.html b/bitbake/lib/bb/tests/fetch-testdata/files/v3.9/index.html
new file mode 100644
index 0000000000..54182afa05
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/files/v3.9/index.html
@@ -0,0 +1,183 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /files/v3.9</title>
+ </head>
+ <body>
+<h1>Index of /files/v3.9</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/files/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-Darwin-x86_64.dmg">cmake-3.9.0-Darwin-x86_64.dmg</a></td><td align="right">2017-07-18 13:32 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-Darwin-x86_64.tar.gz">cmake-3.9.0-Darwin-x86_64.tar.gz</a></td><td align="right">2017-07-18 13:32 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-Linux-x86_64.sh">cmake-3.9.0-Linux-x86_64.sh</a></td><td align="right">2017-07-18 13:32 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-Linux-x86_64.tar.gz">cmake-3.9.0-Linux-x86_64.tar.gz</a></td><td align="right">2017-07-18 13:32 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-SHA-256.txt">cmake-3.9.0-SHA-256.txt</a></td><td align="right">2017-07-18 13:32 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-SHA-256.txt.asc">cmake-3.9.0-SHA-256.txt.asc</a></td><td align="right">2017-07-18 13:32 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc1-Darwin-x86_64.dmg">cmake-3.9.0-rc1-Darwin-x86_64.dmg</a></td><td align="right">2017-06-05 14:48 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc1-Darwin-x86_64.tar.gz">cmake-3.9.0-rc1-Darwin-x86_64.tar.gz</a></td><td align="right">2017-06-05 14:48 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc1-Linux-x86_64.sh">cmake-3.9.0-rc1-Linux-x86_64.sh</a></td><td align="right">2017-06-05 14:48 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc1-Linux-x86_64.tar.gz">cmake-3.9.0-rc1-Linux-x86_64.tar.gz</a></td><td align="right">2017-06-05 14:48 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc1-SHA-256.txt">cmake-3.9.0-rc1-SHA-256.txt</a></td><td align="right">2017-06-05 14:48 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc1-SHA-256.txt.asc">cmake-3.9.0-rc1-SHA-256.txt.asc</a></td><td align="right">2017-06-05 14:47 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc1-win32-x86.msi">cmake-3.9.0-rc1-win32-x86.msi</a></td><td align="right">2017-06-05 14:47 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc1-win32-x86.zip">cmake-3.9.0-rc1-win32-x86.zip</a></td><td align="right">2017-06-05 14:47 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc1-win64-x64.msi">cmake-3.9.0-rc1-win64-x64.msi</a></td><td align="right">2017-06-05 14:47 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc1-win64-x64.zip">cmake-3.9.0-rc1-win64-x64.zip</a></td><td align="right">2017-06-05 14:47 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc1.tar.Z">cmake-3.9.0-rc1.tar.Z</a></td><td align="right">2017-06-05 14:47 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc1.tar.gz">cmake-3.9.0-rc1.tar.gz</a></td><td align="right">2017-06-05 14:47 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc1.zip">cmake-3.9.0-rc1.zip</a></td><td align="right">2017-06-05 14:47 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc2-Darwin-x86_64.dmg">cmake-3.9.0-rc2-Darwin-x86_64.dmg</a></td><td align="right">2017-06-07 14:46 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc2-Darwin-x86_64.tar.gz">cmake-3.9.0-rc2-Darwin-x86_64.tar.gz</a></td><td align="right">2017-06-07 14:46 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc2-Linux-x86_64.sh">cmake-3.9.0-rc2-Linux-x86_64.sh</a></td><td align="right">2017-06-07 14:46 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc2-Linux-x86_64.tar.gz">cmake-3.9.0-rc2-Linux-x86_64.tar.gz</a></td><td align="right">2017-06-07 14:46 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc2-SHA-256.txt">cmake-3.9.0-rc2-SHA-256.txt</a></td><td align="right">2017-06-07 14:46 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc2-SHA-256.txt.asc">cmake-3.9.0-rc2-SHA-256.txt.asc</a></td><td align="right">2017-06-07 14:46 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc2-win32-x86.msi">cmake-3.9.0-rc2-win32-x86.msi</a></td><td align="right">2017-06-07 14:46 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc2-win32-x86.zip">cmake-3.9.0-rc2-win32-x86.zip</a></td><td align="right">2017-06-07 14:46 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc2-win64-x64.msi">cmake-3.9.0-rc2-win64-x64.msi</a></td><td align="right">2017-06-07 14:46 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc2-win64-x64.zip">cmake-3.9.0-rc2-win64-x64.zip</a></td><td align="right">2017-06-07 14:46 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc2.tar.Z">cmake-3.9.0-rc2.tar.Z</a></td><td align="right">2017-06-07 14:46 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc2.tar.gz">cmake-3.9.0-rc2.tar.gz</a></td><td align="right">2017-06-07 14:46 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc2.zip">cmake-3.9.0-rc2.zip</a></td><td align="right">2017-06-07 14:46 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc3-Darwin-x86_64.dmg">cmake-3.9.0-rc3-Darwin-x86_64.dmg</a></td><td align="right">2017-06-13 14:02 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc3-Darwin-x86_64.tar.gz">cmake-3.9.0-rc3-Darwin-x86_64.tar.gz</a></td><td align="right">2017-06-13 14:02 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc3-Linux-x86_64.sh">cmake-3.9.0-rc3-Linux-x86_64.sh</a></td><td align="right">2017-06-13 14:02 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc3-Linux-x86_64.tar.gz">cmake-3.9.0-rc3-Linux-x86_64.tar.gz</a></td><td align="right">2017-06-13 14:02 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc3-SHA-256.txt">cmake-3.9.0-rc3-SHA-256.txt</a></td><td align="right">2017-06-13 14:02 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc3-SHA-256.txt.asc">cmake-3.9.0-rc3-SHA-256.txt.asc</a></td><td align="right">2017-06-13 14:02 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc3-win32-x86.msi">cmake-3.9.0-rc3-win32-x86.msi</a></td><td align="right">2017-06-13 14:02 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc3-win32-x86.zip">cmake-3.9.0-rc3-win32-x86.zip</a></td><td align="right">2017-06-13 14:02 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc3-win64-x64.msi">cmake-3.9.0-rc3-win64-x64.msi</a></td><td align="right">2017-06-13 14:01 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc3-win64-x64.zip">cmake-3.9.0-rc3-win64-x64.zip</a></td><td align="right">2017-06-13 14:01 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc3.tar.Z">cmake-3.9.0-rc3.tar.Z</a></td><td align="right">2017-06-13 14:01 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc3.tar.gz">cmake-3.9.0-rc3.tar.gz</a></td><td align="right">2017-06-13 14:01 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc3.zip">cmake-3.9.0-rc3.zip</a></td><td align="right">2017-06-13 14:01 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc4-Darwin-x86_64.dmg">cmake-3.9.0-rc4-Darwin-x86_64.dmg</a></td><td align="right">2017-06-22 13:27 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc4-Darwin-x86_64.tar.gz">cmake-3.9.0-rc4-Darwin-x86_64.tar.gz</a></td><td align="right">2017-06-22 13:27 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc4-Linux-x86_64.sh">cmake-3.9.0-rc4-Linux-x86_64.sh</a></td><td align="right">2017-06-22 13:27 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc4-Linux-x86_64.tar.gz">cmake-3.9.0-rc4-Linux-x86_64.tar.gz</a></td><td align="right">2017-06-22 13:27 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc4-SHA-256.txt">cmake-3.9.0-rc4-SHA-256.txt</a></td><td align="right">2017-06-22 13:27 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc4-SHA-256.txt.asc">cmake-3.9.0-rc4-SHA-256.txt.asc</a></td><td align="right">2017-06-22 13:26 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc4-win32-x86.msi">cmake-3.9.0-rc4-win32-x86.msi</a></td><td align="right">2017-06-22 13:26 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc4-win32-x86.zip">cmake-3.9.0-rc4-win32-x86.zip</a></td><td align="right">2017-06-22 13:26 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc4-win64-x64.msi">cmake-3.9.0-rc4-win64-x64.msi</a></td><td align="right">2017-06-22 13:26 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc4-win64-x64.zip">cmake-3.9.0-rc4-win64-x64.zip</a></td><td align="right">2017-06-22 13:26 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc4.tar.Z">cmake-3.9.0-rc4.tar.Z</a></td><td align="right">2017-06-22 13:26 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc4.tar.gz">cmake-3.9.0-rc4.tar.gz</a></td><td align="right">2017-06-22 13:26 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc4.zip">cmake-3.9.0-rc4.zip</a></td><td align="right">2017-06-22 13:26 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc5-Darwin-x86_64.dmg">cmake-3.9.0-rc5-Darwin-x86_64.dmg</a></td><td align="right">2017-06-27 13:56 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc5-Darwin-x86_64.tar.gz">cmake-3.9.0-rc5-Darwin-x86_64.tar.gz</a></td><td align="right">2017-06-27 13:56 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc5-Linux-x86_64.sh">cmake-3.9.0-rc5-Linux-x86_64.sh</a></td><td align="right">2017-06-27 13:56 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc5-Linux-x86_64.tar.gz">cmake-3.9.0-rc5-Linux-x86_64.tar.gz</a></td><td align="right">2017-06-27 13:56 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc5-SHA-256.txt">cmake-3.9.0-rc5-SHA-256.txt</a></td><td align="right">2017-06-27 13:56 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc5-SHA-256.txt.asc">cmake-3.9.0-rc5-SHA-256.txt.asc</a></td><td align="right">2017-06-27 13:56 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc5-win32-x86.msi">cmake-3.9.0-rc5-win32-x86.msi</a></td><td align="right">2017-06-27 13:56 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc5-win32-x86.zip">cmake-3.9.0-rc5-win32-x86.zip</a></td><td align="right">2017-06-27 13:56 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc5-win64-x64.msi">cmake-3.9.0-rc5-win64-x64.msi</a></td><td align="right">2017-06-27 13:56 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc5-win64-x64.zip">cmake-3.9.0-rc5-win64-x64.zip</a></td><td align="right">2017-06-27 13:56 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc5.tar.Z">cmake-3.9.0-rc5.tar.Z</a></td><td align="right">2017-06-27 13:55 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc5.tar.gz">cmake-3.9.0-rc5.tar.gz</a></td><td align="right">2017-06-27 13:55 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc5.zip">cmake-3.9.0-rc5.zip</a></td><td align="right">2017-06-27 13:55 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc6-Darwin-x86_64.dmg">cmake-3.9.0-rc6-Darwin-x86_64.dmg</a></td><td align="right">2017-07-12 11:46 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc6-Darwin-x86_64.tar.gz">cmake-3.9.0-rc6-Darwin-x86_64.tar.gz</a></td><td align="right">2017-07-12 11:46 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc6-Linux-x86_64.sh">cmake-3.9.0-rc6-Linux-x86_64.sh</a></td><td align="right">2017-07-12 11:46 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc6-Linux-x86_64.tar.gz">cmake-3.9.0-rc6-Linux-x86_64.tar.gz</a></td><td align="right">2017-07-12 11:46 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc6-SHA-256.txt">cmake-3.9.0-rc6-SHA-256.txt</a></td><td align="right">2017-07-12 11:46 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.0-rc6-SHA-256.txt.asc">cmake-3.9.0-rc6-SHA-256.txt.asc</a></td><td align="right">2017-07-12 11:46 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc6-win32-x86.msi">cmake-3.9.0-rc6-win32-x86.msi</a></td><td align="right">2017-07-12 11:46 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc6-win32-x86.zip">cmake-3.9.0-rc6-win32-x86.zip</a></td><td align="right">2017-07-12 11:45 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc6-win64-x64.msi">cmake-3.9.0-rc6-win64-x64.msi</a></td><td align="right">2017-07-12 11:45 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc6-win64-x64.zip">cmake-3.9.0-rc6-win64-x64.zip</a></td><td align="right">2017-07-12 11:45 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc6.tar.Z">cmake-3.9.0-rc6.tar.Z</a></td><td align="right">2017-07-12 11:45 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc6.tar.gz">cmake-3.9.0-rc6.tar.gz</a></td><td align="right">2017-07-12 11:45 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-rc6.zip">cmake-3.9.0-rc6.zip</a></td><td align="right">2017-07-12 11:45 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-win32-x86.msi">cmake-3.9.0-win32-x86.msi</a></td><td align="right">2017-07-18 13:32 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-win32-x86.zip">cmake-3.9.0-win32-x86.zip</a></td><td align="right">2017-07-18 13:32 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-win64-x64.msi">cmake-3.9.0-win64-x64.msi</a></td><td align="right">2017-07-18 13:32 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0-win64-x64.zip">cmake-3.9.0-win64-x64.zip</a></td><td align="right">2017-07-18 13:31 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0.tar.Z">cmake-3.9.0.tar.Z</a></td><td align="right">2017-07-18 13:31 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0.tar.gz">cmake-3.9.0.tar.gz</a></td><td align="right">2017-07-18 13:31 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.0.zip">cmake-3.9.0.zip</a></td><td align="right">2017-07-18 13:31 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.1-Darwin-x86_64.dmg">cmake-3.9.1-Darwin-x86_64.dmg</a></td><td align="right">2017-08-10 11:49 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.1-Darwin-x86_64.tar.gz">cmake-3.9.1-Darwin-x86_64.tar.gz</a></td><td align="right">2017-08-10 11:49 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.1-Linux-x86_64.sh">cmake-3.9.1-Linux-x86_64.sh</a></td><td align="right">2017-08-10 11:49 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.1-Linux-x86_64.tar.gz">cmake-3.9.1-Linux-x86_64.tar.gz</a></td><td align="right">2017-08-10 11:49 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.1-SHA-256.txt">cmake-3.9.1-SHA-256.txt</a></td><td align="right">2017-08-10 11:49 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.1-SHA-256.txt.asc">cmake-3.9.1-SHA-256.txt.asc</a></td><td align="right">2017-08-10 11:49 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.1-win32-x86.msi">cmake-3.9.1-win32-x86.msi</a></td><td align="right">2017-08-10 11:49 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.1-win32-x86.zip">cmake-3.9.1-win32-x86.zip</a></td><td align="right">2017-08-10 11:49 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.1-win64-x64.msi">cmake-3.9.1-win64-x64.msi</a></td><td align="right">2017-08-10 11:49 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.1-win64-x64.zip">cmake-3.9.1-win64-x64.zip</a></td><td align="right">2017-08-10 11:49 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.1.tar.Z">cmake-3.9.1.tar.Z</a></td><td align="right">2017-08-10 11:49 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.1.tar.gz">cmake-3.9.1.tar.gz</a></td><td align="right">2017-08-10 11:49 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.1.zip">cmake-3.9.1.zip</a></td><td align="right">2017-08-10 11:49 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.2-Darwin-x86_64.dmg">cmake-3.9.2-Darwin-x86_64.dmg</a></td><td align="right">2017-09-07 15:55 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.2-Darwin-x86_64.tar.gz">cmake-3.9.2-Darwin-x86_64.tar.gz</a></td><td align="right">2017-09-07 15:54 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.2-Linux-x86_64.sh">cmake-3.9.2-Linux-x86_64.sh</a></td><td align="right">2017-09-07 15:54 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.2-Linux-x86_64.tar.gz">cmake-3.9.2-Linux-x86_64.tar.gz</a></td><td align="right">2017-09-07 15:54 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.2-SHA-256.txt">cmake-3.9.2-SHA-256.txt</a></td><td align="right">2017-09-07 15:54 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.2-SHA-256.txt.asc">cmake-3.9.2-SHA-256.txt.asc</a></td><td align="right">2017-09-07 15:54 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.2-win32-x86.msi">cmake-3.9.2-win32-x86.msi</a></td><td align="right">2017-09-07 15:54 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.2-win32-x86.zip">cmake-3.9.2-win32-x86.zip</a></td><td align="right">2017-09-07 15:54 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.2-win64-x64.msi">cmake-3.9.2-win64-x64.msi</a></td><td align="right">2017-09-07 15:54 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.2-win64-x64.zip">cmake-3.9.2-win64-x64.zip</a></td><td align="right">2017-09-07 15:54 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.2.tar.Z">cmake-3.9.2.tar.Z</a></td><td align="right">2017-09-07 15:54 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.2.tar.gz">cmake-3.9.2.tar.gz</a></td><td align="right">2017-09-07 15:54 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.2.zip">cmake-3.9.2.zip</a></td><td align="right">2017-09-07 15:54 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.3-Darwin-x86_64.dmg">cmake-3.9.3-Darwin-x86_64.dmg</a></td><td align="right">2017-09-20 11:59 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.3-Darwin-x86_64.tar.gz">cmake-3.9.3-Darwin-x86_64.tar.gz</a></td><td align="right">2017-09-20 11:59 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.3-Linux-x86_64.sh">cmake-3.9.3-Linux-x86_64.sh</a></td><td align="right">2017-09-20 11:59 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.3-Linux-x86_64.tar.gz">cmake-3.9.3-Linux-x86_64.tar.gz</a></td><td align="right">2017-09-20 11:59 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.3-SHA-256.txt">cmake-3.9.3-SHA-256.txt</a></td><td align="right">2017-09-20 11:59 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.3-SHA-256.txt.asc">cmake-3.9.3-SHA-256.txt.asc</a></td><td align="right">2017-09-20 11:59 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.3-win32-x86.msi">cmake-3.9.3-win32-x86.msi</a></td><td align="right">2017-09-20 11:59 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.3-win32-x86.zip">cmake-3.9.3-win32-x86.zip</a></td><td align="right">2017-09-20 11:59 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.3-win64-x64.msi">cmake-3.9.3-win64-x64.msi</a></td><td align="right">2017-09-20 11:59 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.3-win64-x64.zip">cmake-3.9.3-win64-x64.zip</a></td><td align="right">2017-09-20 11:59 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.3.tar.Z">cmake-3.9.3.tar.Z</a></td><td align="right">2017-09-20 11:59 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.3.tar.gz">cmake-3.9.3.tar.gz</a></td><td align="right">2017-09-20 11:59 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.3.zip">cmake-3.9.3.zip</a></td><td align="right">2017-09-20 11:59 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.4-Darwin-x86_64.dmg">cmake-3.9.4-Darwin-x86_64.dmg</a></td><td align="right">2017-10-04 09:43 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.4-Darwin-x86_64.tar.gz">cmake-3.9.4-Darwin-x86_64.tar.gz</a></td><td align="right">2017-10-04 09:43 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.4-Linux-x86_64.sh">cmake-3.9.4-Linux-x86_64.sh</a></td><td align="right">2017-10-04 09:43 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.4-Linux-x86_64.tar.gz">cmake-3.9.4-Linux-x86_64.tar.gz</a></td><td align="right">2017-10-04 09:43 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.4-SHA-256.txt">cmake-3.9.4-SHA-256.txt</a></td><td align="right">2017-10-04 09:43 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.4-SHA-256.txt.asc">cmake-3.9.4-SHA-256.txt.asc</a></td><td align="right">2017-10-04 09:42 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.4-win32-x86.msi">cmake-3.9.4-win32-x86.msi</a></td><td align="right">2017-10-04 09:42 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.4-win32-x86.zip">cmake-3.9.4-win32-x86.zip</a></td><td align="right">2017-10-04 09:42 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.4-win64-x64.msi">cmake-3.9.4-win64-x64.msi</a></td><td align="right">2017-10-04 09:42 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.4-win64-x64.zip">cmake-3.9.4-win64-x64.zip</a></td><td align="right">2017-10-04 09:42 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.4.tar.Z">cmake-3.9.4.tar.Z</a></td><td align="right">2017-10-04 09:42 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.4.tar.gz">cmake-3.9.4.tar.gz</a></td><td align="right">2017-10-04 09:42 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.4.zip">cmake-3.9.4.zip</a></td><td align="right">2017-10-04 09:42 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.5-Darwin-x86_64.dmg">cmake-3.9.5-Darwin-x86_64.dmg</a></td><td align="right">2017-11-03 10:26 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.5-Darwin-x86_64.tar.gz">cmake-3.9.5-Darwin-x86_64.tar.gz</a></td><td align="right">2017-11-03 10:26 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.5-Linux-x86_64.sh">cmake-3.9.5-Linux-x86_64.sh</a></td><td align="right">2017-11-03 10:26 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.5-Linux-x86_64.tar.gz">cmake-3.9.5-Linux-x86_64.tar.gz</a></td><td align="right">2017-11-03 10:26 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.5-SHA-256.txt">cmake-3.9.5-SHA-256.txt</a></td><td align="right">2017-11-03 10:26 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.5-SHA-256.txt.asc">cmake-3.9.5-SHA-256.txt.asc</a></td><td align="right">2017-11-03 10:26 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.5-win32-x86.msi">cmake-3.9.5-win32-x86.msi</a></td><td align="right">2017-11-03 10:26 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.5-win32-x86.zip">cmake-3.9.5-win32-x86.zip</a></td><td align="right">2017-11-03 10:26 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.5-win64-x64.msi">cmake-3.9.5-win64-x64.msi</a></td><td align="right">2017-11-03 10:26 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.5-win64-x64.zip">cmake-3.9.5-win64-x64.zip</a></td><td align="right">2017-11-03 10:26 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.5.tar.Z">cmake-3.9.5.tar.Z</a></td><td align="right">2017-11-03 10:26 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.5.tar.gz">cmake-3.9.5.tar.gz</a></td><td align="right">2017-11-03 10:26 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.5.zip">cmake-3.9.5.zip</a></td><td align="right">2017-11-03 10:26 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.6-Darwin-x86_64.dmg">cmake-3.9.6-Darwin-x86_64.dmg</a></td><td align="right">2017-11-10 09:22 </td><td align="right"> 26M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.6-Darwin-x86_64.tar.gz">cmake-3.9.6-Darwin-x86_64.tar.gz</a></td><td align="right">2017-11-10 09:21 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.6-Linux-x86_64.sh">cmake-3.9.6-Linux-x86_64.sh</a></td><td align="right">2017-11-10 09:21 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.6-Linux-x86_64.tar.gz">cmake-3.9.6-Linux-x86_64.tar.gz</a></td><td align="right">2017-11-10 09:21 </td><td align="right"> 31M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.6-SHA-256.txt">cmake-3.9.6-SHA-256.txt</a></td><td align="right">2017-11-10 09:21 </td><td align="right">1.0K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="cmake-3.9.6-SHA-256.txt.asc">cmake-3.9.6-SHA-256.txt.asc</a></td><td align="right">2017-11-10 09:21 </td><td align="right">833 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.6-win32-x86.msi">cmake-3.9.6-win32-x86.msi</a></td><td align="right">2017-11-10 09:21 </td><td align="right"> 16M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.6-win32-x86.zip">cmake-3.9.6-win32-x86.zip</a></td><td align="right">2017-11-10 09:21 </td><td align="right"> 22M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="cmake-3.9.6-win64-x64.msi">cmake-3.9.6-win64-x64.msi</a></td><td align="right">2017-11-10 09:21 </td><td align="right"> 18M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.6-win64-x64.zip">cmake-3.9.6-win64-x64.zip</a></td><td align="right">2017-11-10 09:21 </td><td align="right"> 25M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.6.tar.Z">cmake-3.9.6.tar.Z</a></td><td align="right">2017-11-10 09:21 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.6.tar.gz">cmake-3.9.6.tar.gz</a></td><td align="right">2017-11-10 09:21 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="cmake-3.9.6.zip">cmake-3.9.6.zip</a></td><td align="right">2017-11-10 09:21 </td><td align="right"> 12M</td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.23/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.23/index.html
new file mode 100644
index 0000000000..b3d9244b09
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.23/index.html
@@ -0,0 +1,45 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.23/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.23/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 31-Jul-2013 12:35 -
+<a href="libmount-docs/">libmount-docs/</a> 31-Jul-2013 12:39 -
+<a href="sha256sums.asc">sha256sums.asc</a> 12-May-2017 10:53 2942
+<a href="util-linux-2.23-rc1.tar.bz2">util-linux-2.23-rc1.tar.bz2</a> 22-Mar-2013 12:48 5M
+<a href="util-linux-2.23-rc1.tar.gz">util-linux-2.23-rc1.tar.gz</a> 22-Mar-2013 12:48 7M
+<a href="util-linux-2.23-rc1.tar.sign">util-linux-2.23-rc1.tar.sign</a> 22-Mar-2013 12:48 836
+<a href="util-linux-2.23-rc1.tar.xz">util-linux-2.23-rc1.tar.xz</a> 22-Mar-2013 12:48 3M
+<a href="util-linux-2.23-rc2.tar.bz2">util-linux-2.23-rc2.tar.bz2</a> 10-Apr-2013 22:14 5M
+<a href="util-linux-2.23-rc2.tar.gz">util-linux-2.23-rc2.tar.gz</a> 10-Apr-2013 22:14 7M
+<a href="util-linux-2.23-rc2.tar.sign">util-linux-2.23-rc2.tar.sign</a> 10-Apr-2013 22:14 836
+<a href="util-linux-2.23-rc2.tar.xz">util-linux-2.23-rc2.tar.xz</a> 10-Apr-2013 22:14 3M
+<a href="util-linux-2.23.1.tar.bz2">util-linux-2.23.1.tar.bz2</a> 28-May-2013 09:57 5M
+<a href="util-linux-2.23.1.tar.gz">util-linux-2.23.1.tar.gz</a> 28-May-2013 09:57 7M
+<a href="util-linux-2.23.1.tar.sign">util-linux-2.23.1.tar.sign</a> 28-May-2013 09:57 836
+<a href="util-linux-2.23.1.tar.xz">util-linux-2.23.1.tar.xz</a> 28-May-2013 09:57 3M
+<a href="util-linux-2.23.2.tar.bz2">util-linux-2.23.2.tar.bz2</a> 31-Jul-2013 12:40 5M
+<a href="util-linux-2.23.2.tar.gz">util-linux-2.23.2.tar.gz</a> 31-Jul-2013 12:40 7M
+<a href="util-linux-2.23.2.tar.sign">util-linux-2.23.2.tar.sign</a> 31-Jul-2013 12:40 836
+<a href="util-linux-2.23.2.tar.xz">util-linux-2.23.2.tar.xz</a> 31-Jul-2013 12:40 3M
+<a href="util-linux-2.23.tar.bz2">util-linux-2.23.tar.bz2</a> 25-Apr-2013 10:48 5M
+<a href="util-linux-2.23.tar.gz">util-linux-2.23.tar.gz</a> 25-Apr-2013 10:48 7M
+<a href="util-linux-2.23.tar.sign">util-linux-2.23.tar.sign</a> 25-Apr-2013 10:48 836
+<a href="util-linux-2.23.tar.xz">util-linux-2.23.tar.xz</a> 25-Apr-2013 10:48 3M
+<a href="v2.23-ChangeLog">v2.23-ChangeLog</a> 25-Apr-2013 10:48 19K
+<a href="v2.23-ChangeLog.sign">v2.23-ChangeLog.sign</a> 25-Apr-2013 10:48 836
+<a href="v2.23-ReleaseNotes">v2.23-ReleaseNotes</a> 25-Apr-2013 10:48 53K
+<a href="v2.23-ReleaseNotes.sign">v2.23-ReleaseNotes.sign</a> 25-Apr-2013 10:48 836
+<a href="v2.23-rc1-ChangeLog">v2.23-rc1-ChangeLog</a> 22-Mar-2013 12:48 361K
+<a href="v2.23-rc1-ChangeLog.sign">v2.23-rc1-ChangeLog.sign</a> 22-Mar-2013 12:48 836
+<a href="v2.23-rc2-ChangeLog">v2.23-rc2-ChangeLog</a> 10-Apr-2013 22:14 80K
+<a href="v2.23-rc2-ChangeLog.sign">v2.23-rc2-ChangeLog.sign</a> 10-Apr-2013 22:14 836
+<a href="v2.23.1-ChangeLog">v2.23.1-ChangeLog</a> 28-May-2013 09:57 13K
+<a href="v2.23.1-ChangeLog.sign">v2.23.1-ChangeLog.sign</a> 28-May-2013 09:57 836
+<a href="v2.23.1-ReleaseNotes">v2.23.1-ReleaseNotes</a> 28-May-2013 09:58 1448
+<a href="v2.23.1-ReleaseNotes.sign">v2.23.1-ReleaseNotes.sign</a> 28-May-2013 09:58 836
+<a href="v2.23.2-ChangeLog">v2.23.2-ChangeLog</a> 31-Jul-2013 12:40 23K
+<a href="v2.23.2-ChangeLog.sign">v2.23.2-ChangeLog.sign</a> 31-Jul-2013 12:40 836
+<a href="v2.23.2-ReleaseNotes">v2.23.2-ReleaseNotes</a> 31-Jul-2013 12:40 2582
+<a href="v2.23.2-ReleaseNotes.sign">v2.23.2-ReleaseNotes.sign</a> 31-Jul-2013 12:40 836
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.24/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.24/index.html
new file mode 100644
index 0000000000..4afb4625a0
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.24/index.html
@@ -0,0 +1,43 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.24/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.24/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 24-Apr-2014 10:15 -
+<a href="libmount-docs/">libmount-docs/</a> 24-Apr-2014 10:17 -
+<a href="sha256sums.asc">sha256sums.asc</a> 12-May-2017 10:53 2758
+<a href="util-linux-2.24-rc1.tar.bz2">util-linux-2.24-rc1.tar.bz2</a> 27-Sep-2013 12:54 5M
+<a href="util-linux-2.24-rc1.tar.gz">util-linux-2.24-rc1.tar.gz</a> 27-Sep-2013 12:54 7M
+<a href="util-linux-2.24-rc1.tar.sign">util-linux-2.24-rc1.tar.sign</a> 27-Sep-2013 12:54 836
+<a href="util-linux-2.24-rc1.tar.xz">util-linux-2.24-rc1.tar.xz</a> 27-Sep-2013 12:54 3M
+<a href="util-linux-2.24-rc2.tar.bz2">util-linux-2.24-rc2.tar.bz2</a> 11-Oct-2013 11:37 5M
+<a href="util-linux-2.24-rc2.tar.gz">util-linux-2.24-rc2.tar.gz</a> 11-Oct-2013 11:37 7M
+<a href="util-linux-2.24-rc2.tar.sign">util-linux-2.24-rc2.tar.sign</a> 11-Oct-2013 11:37 836
+<a href="util-linux-2.24-rc2.tar.xz">util-linux-2.24-rc2.tar.xz</a> 11-Oct-2013 11:37 3M
+<a href="util-linux-2.24.1.tar.gz">util-linux-2.24.1.tar.gz</a> 20-Jan-2014 13:33 7M
+<a href="util-linux-2.24.1.tar.sign">util-linux-2.24.1.tar.sign</a> 20-Jan-2014 13:33 819
+<a href="util-linux-2.24.1.tar.xz">util-linux-2.24.1.tar.xz</a> 20-Jan-2014 13:33 3M
+<a href="util-linux-2.24.2.tar.gz">util-linux-2.24.2.tar.gz</a> 24-Apr-2014 10:17 7M
+<a href="util-linux-2.24.2.tar.sign">util-linux-2.24.2.tar.sign</a> 24-Apr-2014 10:17 819
+<a href="util-linux-2.24.2.tar.xz">util-linux-2.24.2.tar.xz</a> 24-Apr-2014 10:17 3M
+<a href="util-linux-2.24.tar.bz2">util-linux-2.24.tar.bz2</a> 21-Oct-2013 13:49 5M
+<a href="util-linux-2.24.tar.gz">util-linux-2.24.tar.gz</a> 21-Oct-2013 13:49 7M
+<a href="util-linux-2.24.tar.sign">util-linux-2.24.tar.sign</a> 21-Oct-2013 13:49 836
+<a href="util-linux-2.24.tar.xz">util-linux-2.24.tar.xz</a> 21-Oct-2013 13:49 3M
+<a href="v2.24-ChangeLog">v2.24-ChangeLog</a> 21-Oct-2013 13:49 22K
+<a href="v2.24-ChangeLog.sign">v2.24-ChangeLog.sign</a> 21-Oct-2013 13:49 836
+<a href="v2.24-ReleaseNotes">v2.24-ReleaseNotes</a> 21-Oct-2013 13:49 44K
+<a href="v2.24-ReleaseNotes.sign">v2.24-ReleaseNotes.sign</a> 21-Oct-2013 13:49 836
+<a href="v2.24-rc1-ChangeLog">v2.24-rc1-ChangeLog</a> 27-Sep-2013 12:54 292K
+<a href="v2.24-rc1-ChangeLog.sign">v2.24-rc1-ChangeLog.sign</a> 27-Sep-2013 12:54 836
+<a href="v2.24-rc2-ChangeLog">v2.24-rc2-ChangeLog</a> 11-Oct-2013 11:37 42K
+<a href="v2.24-rc2-ChangeLog.sign">v2.24-rc2-ChangeLog.sign</a> 11-Oct-2013 11:37 836
+<a href="v2.24.1-ChangeLog">v2.24.1-ChangeLog</a> 20-Jan-2014 13:33 38K
+<a href="v2.24.1-ChangeLog.sign">v2.24.1-ChangeLog.sign</a> 20-Jan-2014 13:33 819
+<a href="v2.24.1-ReleaseNotes">v2.24.1-ReleaseNotes</a> 20-Jan-2014 13:33 4449
+<a href="v2.24.1-ReleaseNotes.sign">v2.24.1-ReleaseNotes.sign</a> 20-Jan-2014 13:33 819
+<a href="v2.24.2-ChangeLog">v2.24.2-ChangeLog</a> 24-Apr-2014 10:17 47K
+<a href="v2.24.2-ChangeLog.sign">v2.24.2-ChangeLog.sign</a> 24-Apr-2014 10:17 819
+<a href="v2.24.2-ReleaseNotes">v2.24.2-ReleaseNotes</a> 24-Apr-2014 10:18 5748
+<a href="v2.24.2-ReleaseNotes.sign">v2.24.2-ReleaseNotes.sign</a> 24-Apr-2014 10:18 819
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.25/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.25/index.html
new file mode 100644
index 0000000000..9516c3b1ee
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.25/index.html
@@ -0,0 +1,46 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.25/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.25/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 24-Oct-2014 13:05 -
+<a href="libmount-docs/">libmount-docs/</a> 24-Oct-2014 13:06 -
+<a href="libsmartcols-docs/">libsmartcols-docs/</a> 24-Oct-2014 13:08 -
+<a href="sha256sums.asc">sha256sums.asc</a> 12-May-2017 10:53 2758
+<a href="util-linux-2.25-rc1.tar.gz">util-linux-2.25-rc1.tar.gz</a> 18-Jun-2014 13:33 7M
+<a href="util-linux-2.25-rc1.tar.sign">util-linux-2.25-rc1.tar.sign</a> 18-Jun-2014 13:33 819
+<a href="util-linux-2.25-rc1.tar.xz">util-linux-2.25-rc1.tar.xz</a> 18-Jun-2014 13:33 3M
+<a href="util-linux-2.25-rc2.tar.gz">util-linux-2.25-rc2.tar.gz</a> 02-Jul-2014 10:02 7M
+<a href="util-linux-2.25-rc2.tar.sign">util-linux-2.25-rc2.tar.sign</a> 02-Jul-2014 10:02 819
+<a href="util-linux-2.25-rc2.tar.xz">util-linux-2.25-rc2.tar.xz</a> 02-Jul-2014 10:02 3M
+<a href="util-linux-2.25.1-rc1.tar.gz">util-linux-2.25.1-rc1.tar.gz</a> 27-Aug-2014 13:18 8M
+<a href="util-linux-2.25.1-rc1.tar.sign">util-linux-2.25.1-rc1.tar.sign</a> 27-Aug-2014 13:18 819
+<a href="util-linux-2.25.1-rc1.tar.xz">util-linux-2.25.1-rc1.tar.xz</a> 27-Aug-2014 13:18 4M
+<a href="util-linux-2.25.1.tar.gz">util-linux-2.25.1.tar.gz</a> 03-Sep-2014 10:41 8M
+<a href="util-linux-2.25.1.tar.sign">util-linux-2.25.1.tar.sign</a> 03-Sep-2014 10:41 819
+<a href="util-linux-2.25.1.tar.xz">util-linux-2.25.1.tar.xz</a> 03-Sep-2014 10:41 4M
+<a href="util-linux-2.25.2.tar.gz">util-linux-2.25.2.tar.gz</a> 24-Oct-2014 13:08 8M
+<a href="util-linux-2.25.2.tar.sign">util-linux-2.25.2.tar.sign</a> 24-Oct-2014 13:08 819
+<a href="util-linux-2.25.2.tar.xz">util-linux-2.25.2.tar.xz</a> 24-Oct-2014 13:08 4M
+<a href="util-linux-2.25.tar.gz">util-linux-2.25.tar.gz</a> 22-Jul-2014 09:50 8M
+<a href="util-linux-2.25.tar.sign">util-linux-2.25.tar.sign</a> 22-Jul-2014 09:50 819
+<a href="util-linux-2.25.tar.xz">util-linux-2.25.tar.xz</a> 22-Jul-2014 09:50 4M
+<a href="v2.25-ChangeLog">v2.25-ChangeLog</a> 22-Jul-2014 09:50 41K
+<a href="v2.25-ChangeLog.sign">v2.25-ChangeLog.sign</a> 22-Jul-2014 09:50 819
+<a href="v2.25-ReleaseNotes">v2.25-ReleaseNotes</a> 22-Jul-2014 09:50 61K
+<a href="v2.25-ReleaseNotes.sign">v2.25-ReleaseNotes.sign</a> 22-Jul-2014 09:50 819
+<a href="v2.25-rc1-ChangeLog">v2.25-rc1-ChangeLog</a> 18-Jun-2014 13:33 489K
+<a href="v2.25-rc1-ChangeLog.sign">v2.25-rc1-ChangeLog.sign</a> 18-Jun-2014 13:33 819
+<a href="v2.25-rc2-ChangeLog">v2.25-rc2-ChangeLog</a> 02-Jul-2014 10:02 27K
+<a href="v2.25-rc2-ChangeLog.sign">v2.25-rc2-ChangeLog.sign</a> 02-Jul-2014 10:02 819
+<a href="v2.25.1-ChangeLog">v2.25.1-ChangeLog</a> 03-Sep-2014 10:41 5816
+<a href="v2.25.1-ChangeLog.sign">v2.25.1-ChangeLog.sign</a> 03-Sep-2014 10:41 819
+<a href="v2.25.1-ReleaseNotes">v2.25.1-ReleaseNotes</a> 03-Sep-2014 10:52 3220
+<a href="v2.25.1-ReleaseNotes.sign">v2.25.1-ReleaseNotes.sign</a> 03-Sep-2014 10:52 819
+<a href="v2.25.1-rc1-ChangeLog">v2.25.1-rc1-ChangeLog</a> 27-Aug-2014 13:18 22K
+<a href="v2.25.1-rc1-ChangeLog.sign">v2.25.1-rc1-ChangeLog.sign</a> 27-Aug-2014 13:18 819
+<a href="v2.25.2-ChangeLog">v2.25.2-ChangeLog</a> 24-Oct-2014 13:08 26K
+<a href="v2.25.2-ChangeLog.sign">v2.25.2-ChangeLog.sign</a> 24-Oct-2014 13:08 819
+<a href="v2.25.2-ReleaseNotes">v2.25.2-ReleaseNotes</a> 24-Oct-2014 13:08 3016
+<a href="v2.25.2-ReleaseNotes.sign">v2.25.2-ReleaseNotes.sign</a> 24-Oct-2014 13:08 819
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.26/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.26/index.html
new file mode 100644
index 0000000000..b991489577
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.26/index.html
@@ -0,0 +1,42 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.26/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.26/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 30-Apr-2015 10:38 -
+<a href="libfdisk-docs/">libfdisk-docs/</a> 30-Apr-2015 10:40 -
+<a href="libmount-docs/">libmount-docs/</a> 30-Apr-2015 10:42 -
+<a href="libsmartcols-docs/">libsmartcols-docs/</a> 30-Apr-2015 10:43 -
+<a href="sha256sums.asc">sha256sums.asc</a> 12-May-2017 10:54 2480
+<a href="util-linux-2.26-rc1.tar.gz">util-linux-2.26-rc1.tar.gz</a> 14-Jan-2015 13:14 8M
+<a href="util-linux-2.26-rc1.tar.sign">util-linux-2.26-rc1.tar.sign</a> 14-Jan-2015 13:14 819
+<a href="util-linux-2.26-rc1.tar.xz">util-linux-2.26-rc1.tar.xz</a> 14-Jan-2015 13:14 4M
+<a href="util-linux-2.26-rc2.tar.gz">util-linux-2.26-rc2.tar.gz</a> 04-Feb-2015 11:49 8M
+<a href="util-linux-2.26-rc2.tar.sign">util-linux-2.26-rc2.tar.sign</a> 04-Feb-2015 11:49 819
+<a href="util-linux-2.26-rc2.tar.xz">util-linux-2.26-rc2.tar.xz</a> 04-Feb-2015 11:49 4M
+<a href="util-linux-2.26.1.tar.gz">util-linux-2.26.1.tar.gz</a> 13-Mar-2015 14:23 8M
+<a href="util-linux-2.26.1.tar.sign">util-linux-2.26.1.tar.sign</a> 13-Mar-2015 14:23 819
+<a href="util-linux-2.26.1.tar.xz">util-linux-2.26.1.tar.xz</a> 13-Mar-2015 14:23 4M
+<a href="util-linux-2.26.2.tar.gz">util-linux-2.26.2.tar.gz</a> 30-Apr-2015 10:44 8M
+<a href="util-linux-2.26.2.tar.sign">util-linux-2.26.2.tar.sign</a> 30-Apr-2015 10:44 819
+<a href="util-linux-2.26.2.tar.xz">util-linux-2.26.2.tar.xz</a> 30-Apr-2015 10:44 4M
+<a href="util-linux-2.26.tar.gz">util-linux-2.26.tar.gz</a> 19-Feb-2015 12:47 8M
+<a href="util-linux-2.26.tar.sign">util-linux-2.26.tar.sign</a> 19-Feb-2015 12:47 819
+<a href="util-linux-2.26.tar.xz">util-linux-2.26.tar.xz</a> 19-Feb-2015 12:47 4M
+<a href="v2.26-ChangeLog">v2.26-ChangeLog</a> 19-Feb-2015 12:47 30K
+<a href="v2.26-ChangeLog.sign">v2.26-ChangeLog.sign</a> 19-Feb-2015 12:47 819
+<a href="v2.26-ReleaseNotes">v2.26-ReleaseNotes</a> 19-Feb-2015 12:47 51K
+<a href="v2.26-ReleaseNotes.sign">v2.26-ReleaseNotes.sign</a> 19-Feb-2015 12:47 819
+<a href="v2.26-rc1-ChangeLog">v2.26-rc1-ChangeLog</a> 14-Jan-2015 13:14 360K
+<a href="v2.26-rc1-ChangeLog.sign">v2.26-rc1-ChangeLog.sign</a> 14-Jan-2015 13:14 819
+<a href="v2.26-rc2-ChangeLog">v2.26-rc2-ChangeLog</a> 04-Feb-2015 11:50 51K
+<a href="v2.26-rc2-ChangeLog.sign">v2.26-rc2-ChangeLog.sign</a> 04-Feb-2015 11:50 819
+<a href="v2.26.1-ChangeLog">v2.26.1-ChangeLog</a> 13-Mar-2015 14:23 32K
+<a href="v2.26.1-ChangeLog.sign">v2.26.1-ChangeLog.sign</a> 13-Mar-2015 14:23 819
+<a href="v2.26.1-ReleaseNotes">v2.26.1-ReleaseNotes</a> 13-Mar-2015 14:23 2944
+<a href="v2.26.1-ReleaseNotes.sign">v2.26.1-ReleaseNotes.sign</a> 13-Mar-2015 14:23 819
+<a href="v2.26.2-ChangeLog">v2.26.2-ChangeLog</a> 30-Apr-2015 10:44 58K
+<a href="v2.26.2-ChangeLog.sign">v2.26.2-ChangeLog.sign</a> 30-Apr-2015 10:44 819
+<a href="v2.26.2-ReleaseNotes">v2.26.2-ReleaseNotes</a> 30-Apr-2015 10:44 5834
+<a href="v2.26.2-ReleaseNotes.sign">v2.26.2-ReleaseNotes.sign</a> 30-Apr-2015 10:44 819
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.27/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.27/index.html
new file mode 100644
index 0000000000..14eb368367
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.27/index.html
@@ -0,0 +1,35 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.27/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.27/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 02-Nov-2015 11:01 -
+<a href="libfdisk-docs/">libfdisk-docs/</a> 02-Nov-2015 11:03 -
+<a href="libmount-docs/">libmount-docs/</a> 02-Nov-2015 11:04 -
+<a href="libsmartcols-docs/">libsmartcols-docs/</a> 02-Nov-2015 11:06 -
+<a href="sha256sums.asc">sha256sums.asc</a> 12-May-2017 10:54 2127
+<a href="util-linux-2.27-rc1.tar.gz">util-linux-2.27-rc1.tar.gz</a> 31-Jul-2015 11:01 8M
+<a href="util-linux-2.27-rc1.tar.sign">util-linux-2.27-rc1.tar.sign</a> 31-Jul-2015 11:01 819
+<a href="util-linux-2.27-rc1.tar.xz">util-linux-2.27-rc1.tar.xz</a> 31-Jul-2015 11:01 4M
+<a href="util-linux-2.27-rc2.tar.gz">util-linux-2.27-rc2.tar.gz</a> 24-Aug-2015 11:04 8M
+<a href="util-linux-2.27-rc2.tar.sign">util-linux-2.27-rc2.tar.sign</a> 24-Aug-2015 11:04 819
+<a href="util-linux-2.27-rc2.tar.xz">util-linux-2.27-rc2.tar.xz</a> 24-Aug-2015 11:04 4M
+<a href="util-linux-2.27.1.tar.gz">util-linux-2.27.1.tar.gz</a> 02-Nov-2015 11:06 8M
+<a href="util-linux-2.27.1.tar.sign">util-linux-2.27.1.tar.sign</a> 02-Nov-2015 11:06 819
+<a href="util-linux-2.27.1.tar.xz">util-linux-2.27.1.tar.xz</a> 02-Nov-2015 11:06 4M
+<a href="util-linux-2.27.tar.gz">util-linux-2.27.tar.gz</a> 07-Sep-2015 08:17 8M
+<a href="util-linux-2.27.tar.sign">util-linux-2.27.tar.sign</a> 07-Sep-2015 08:17 819
+<a href="util-linux-2.27.tar.xz">util-linux-2.27.tar.xz</a> 07-Sep-2015 08:17 4M
+<a href="v2.27-ChangeLog">v2.27-ChangeLog</a> 07-Sep-2015 08:17 21K
+<a href="v2.27-ChangeLog.sign">v2.27-ChangeLog.sign</a> 07-Sep-2015 08:17 819
+<a href="v2.27-ReleaseNotes">v2.27-ReleaseNotes</a> 07-Sep-2015 08:17 35K
+<a href="v2.27-ReleaseNotes.sign">v2.27-ReleaseNotes.sign</a> 07-Sep-2015 08:17 819
+<a href="v2.27-rc1-ChangeLog">v2.27-rc1-ChangeLog</a> 31-Jul-2015 11:01 263K
+<a href="v2.27-rc1-ChangeLog.sign">v2.27-rc1-ChangeLog.sign</a> 31-Jul-2015 11:01 819
+<a href="v2.27-rc2-ChangeLog">v2.27-rc2-ChangeLog</a> 24-Aug-2015 11:04 38K
+<a href="v2.27-rc2-ChangeLog.sign">v2.27-rc2-ChangeLog.sign</a> 24-Aug-2015 11:04 819
+<a href="v2.27.1-ChangeLog">v2.27.1-ChangeLog</a> 02-Nov-2015 11:06 18K
+<a href="v2.27.1-ChangeLog.sign">v2.27.1-ChangeLog.sign</a> 02-Nov-2015 11:06 819
+<a href="v2.27.1-ReleaseNotes">v2.27.1-ReleaseNotes</a> 02-Nov-2015 11:06 2107
+<a href="v2.27.1-ReleaseNotes.sign">v2.27.1-ReleaseNotes.sign</a> 02-Nov-2015 11:06 819
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.28/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.28/index.html
new file mode 100644
index 0000000000..4bba6b4702
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.28/index.html
@@ -0,0 +1,42 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.28/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.28/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 07-Sep-2016 12:00 -
+<a href="libfdisk-docs/">libfdisk-docs/</a> 07-Sep-2016 12:02 -
+<a href="libmount-docs/">libmount-docs/</a> 07-Sep-2016 12:04 -
+<a href="libsmartcols-docs/">libsmartcols-docs/</a> 07-Sep-2016 12:06 -
+<a href="sha256sums.asc">sha256sums.asc</a> 12-May-2017 10:55 2480
+<a href="util-linux-2.28-rc1.tar.gz">util-linux-2.28-rc1.tar.gz</a> 11-Mar-2016 11:45 8M
+<a href="util-linux-2.28-rc1.tar.sign">util-linux-2.28-rc1.tar.sign</a> 11-Mar-2016 11:45 819
+<a href="util-linux-2.28-rc1.tar.xz">util-linux-2.28-rc1.tar.xz</a> 11-Mar-2016 11:45 4M
+<a href="util-linux-2.28-rc2.tar.gz">util-linux-2.28-rc2.tar.gz</a> 29-Mar-2016 09:04 8M
+<a href="util-linux-2.28-rc2.tar.sign">util-linux-2.28-rc2.tar.sign</a> 29-Mar-2016 09:04 819
+<a href="util-linux-2.28-rc2.tar.xz">util-linux-2.28-rc2.tar.xz</a> 29-Mar-2016 09:04 4M
+<a href="util-linux-2.28.1.tar.gz">util-linux-2.28.1.tar.gz</a> 11-Aug-2016 10:09 9M
+<a href="util-linux-2.28.1.tar.sign">util-linux-2.28.1.tar.sign</a> 11-Aug-2016 10:09 819
+<a href="util-linux-2.28.1.tar.xz">util-linux-2.28.1.tar.xz</a> 11-Aug-2016 10:09 4M
+<a href="util-linux-2.28.2.tar.gz">util-linux-2.28.2.tar.gz</a> 07-Sep-2016 12:06 9M
+<a href="util-linux-2.28.2.tar.sign">util-linux-2.28.2.tar.sign</a> 07-Sep-2016 12:06 819
+<a href="util-linux-2.28.2.tar.xz">util-linux-2.28.2.tar.xz</a> 07-Sep-2016 12:06 4M
+<a href="util-linux-2.28.tar.gz">util-linux-2.28.tar.gz</a> 12-Apr-2016 11:26 8M
+<a href="util-linux-2.28.tar.sign">util-linux-2.28.tar.sign</a> 12-Apr-2016 11:26 819
+<a href="util-linux-2.28.tar.xz">util-linux-2.28.tar.xz</a> 12-Apr-2016 11:26 4M
+<a href="v2.28-ChangeLog">v2.28-ChangeLog</a> 12-Apr-2016 11:26 13K
+<a href="v2.28-ChangeLog.sign">v2.28-ChangeLog.sign</a> 12-Apr-2016 11:26 819
+<a href="v2.28-ReleaseNotes">v2.28-ReleaseNotes</a> 12-Apr-2016 11:26 33K
+<a href="v2.28-ReleaseNotes.sign">v2.28-ReleaseNotes.sign</a> 12-Apr-2016 11:26 819
+<a href="v2.28-rc1-ChangeLog">v2.28-rc1-ChangeLog</a> 11-Mar-2016 11:45 269K
+<a href="v2.28-rc1-ChangeLog.sign">v2.28-rc1-ChangeLog.sign</a> 11-Mar-2016 11:45 819
+<a href="v2.28-rc2-ChangeLog">v2.28-rc2-ChangeLog</a> 29-Mar-2016 09:04 52K
+<a href="v2.28-rc2-ChangeLog.sign">v2.28-rc2-ChangeLog.sign</a> 29-Mar-2016 09:04 819
+<a href="v2.28.1-ChangeLog">v2.28.1-ChangeLog</a> 11-Aug-2016 10:09 37K
+<a href="v2.28.1-ChangeLog.sign">v2.28.1-ChangeLog.sign</a> 11-Aug-2016 10:09 819
+<a href="v2.28.1-ReleaseNotes">v2.28.1-ReleaseNotes</a> 11-Aug-2016 10:09 3748
+<a href="v2.28.1-ReleaseNotes.sign">v2.28.1-ReleaseNotes.sign</a> 11-Aug-2016 10:09 819
+<a href="v2.28.2-ChangeLog">v2.28.2-ChangeLog</a> 07-Sep-2016 12:06 8900
+<a href="v2.28.2-ChangeLog.sign">v2.28.2-ChangeLog.sign</a> 07-Sep-2016 12:06 819
+<a href="v2.28.2-ReleaseNotes">v2.28.2-ReleaseNotes</a> 07-Sep-2016 12:06 1161
+<a href="v2.28.2-ReleaseNotes.sign">v2.28.2-ReleaseNotes.sign</a> 07-Sep-2016 12:06 819
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.29/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.29/index.html
new file mode 100644
index 0000000000..916a255fa0
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.29/index.html
@@ -0,0 +1,42 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.29/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.29/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 22-Feb-2017 15:20 -
+<a href="libfdisk-docs/">libfdisk-docs/</a> 22-Feb-2017 15:22 -
+<a href="libmount-docs/">libmount-docs/</a> 22-Feb-2017 15:24 -
+<a href="libsmartcols-docs/">libsmartcols-docs/</a> 22-Feb-2017 15:26 -
+<a href="sha256sums.asc">sha256sums.asc</a> 12-May-2017 10:55 2480
+<a href="util-linux-2.29-rc1.tar.gz">util-linux-2.29-rc1.tar.gz</a> 30-Sep-2016 09:55 9M
+<a href="util-linux-2.29-rc1.tar.sign">util-linux-2.29-rc1.tar.sign</a> 30-Sep-2016 09:55 819
+<a href="util-linux-2.29-rc1.tar.xz">util-linux-2.29-rc1.tar.xz</a> 30-Sep-2016 09:55 4M
+<a href="util-linux-2.29-rc2.tar.gz">util-linux-2.29-rc2.tar.gz</a> 19-Oct-2016 13:13 9M
+<a href="util-linux-2.29-rc2.tar.sign">util-linux-2.29-rc2.tar.sign</a> 19-Oct-2016 13:13 819
+<a href="util-linux-2.29-rc2.tar.xz">util-linux-2.29-rc2.tar.xz</a> 19-Oct-2016 13:13 4M
+<a href="util-linux-2.29.1.tar.gz">util-linux-2.29.1.tar.gz</a> 20-Jan-2017 14:02 9M
+<a href="util-linux-2.29.1.tar.sign">util-linux-2.29.1.tar.sign</a> 20-Jan-2017 14:02 819
+<a href="util-linux-2.29.1.tar.xz">util-linux-2.29.1.tar.xz</a> 20-Jan-2017 14:02 4M
+<a href="util-linux-2.29.2.tar.gz">util-linux-2.29.2.tar.gz</a> 22-Feb-2017 15:26 9M
+<a href="util-linux-2.29.2.tar.sign">util-linux-2.29.2.tar.sign</a> 22-Feb-2017 15:26 819
+<a href="util-linux-2.29.2.tar.xz">util-linux-2.29.2.tar.xz</a> 22-Feb-2017 15:26 4M
+<a href="util-linux-2.29.tar.gz">util-linux-2.29.tar.gz</a> 08-Nov-2016 11:23 9M
+<a href="util-linux-2.29.tar.sign">util-linux-2.29.tar.sign</a> 08-Nov-2016 11:23 819
+<a href="util-linux-2.29.tar.xz">util-linux-2.29.tar.xz</a> 08-Nov-2016 11:23 4M
+<a href="v2.29-ChangeLog">v2.29-ChangeLog</a> 08-Nov-2016 11:23 28K
+<a href="v2.29-ChangeLog.sign">v2.29-ChangeLog.sign</a> 08-Nov-2016 11:23 819
+<a href="v2.29-ReleaseNotes">v2.29-ReleaseNotes</a> 08-Nov-2016 11:24 26K
+<a href="v2.29-ReleaseNotes.sign">v2.29-ReleaseNotes.sign</a> 08-Nov-2016 11:24 819
+<a href="v2.29-rc1-ChangeLog">v2.29-rc1-ChangeLog</a> 30-Sep-2016 09:55 219K
+<a href="v2.29-rc1-ChangeLog.sign">v2.29-rc1-ChangeLog.sign</a> 30-Sep-2016 09:55 819
+<a href="v2.29-rc2-ChangeLog">v2.29-rc2-ChangeLog</a> 19-Oct-2016 13:13 19K
+<a href="v2.29-rc2-ChangeLog.sign">v2.29-rc2-ChangeLog.sign</a> 19-Oct-2016 13:13 819
+<a href="v2.29.1-ChangeLog">v2.29.1-ChangeLog</a> 20-Jan-2017 14:02 47K
+<a href="v2.29.1-ChangeLog.sign">v2.29.1-ChangeLog.sign</a> 20-Jan-2017 14:02 819
+<a href="v2.29.1-ReleaseNotes">v2.29.1-ReleaseNotes</a> 20-Jan-2017 14:02 5067
+<a href="v2.29.1-ReleaseNotes.sign">v2.29.1-ReleaseNotes.sign</a> 20-Jan-2017 14:02 819
+<a href="v2.29.2-ChangeLog">v2.29.2-ChangeLog</a> 22-Feb-2017 15:26 14K
+<a href="v2.29.2-ChangeLog.sign">v2.29.2-ChangeLog.sign</a> 22-Feb-2017 15:26 819
+<a href="v2.29.2-ReleaseNotes">v2.29.2-ReleaseNotes</a> 22-Feb-2017 15:26 2012
+<a href="v2.29.2-ReleaseNotes.sign">v2.29.2-ReleaseNotes.sign</a> 22-Feb-2017 15:26 819
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.30/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.30/index.html
new file mode 100644
index 0000000000..0441bc0d20
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.30/index.html
@@ -0,0 +1,42 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.30/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.30/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 21-Sep-2017 09:49 -
+<a href="libfdisk-docs/">libfdisk-docs/</a> 21-Sep-2017 09:50 -
+<a href="libmount-docs/">libmount-docs/</a> 21-Sep-2017 09:50 -
+<a href="libsmartcols-docs/">libsmartcols-docs/</a> 21-Sep-2017 09:51 -
+<a href="sha256sums.asc">sha256sums.asc</a> 21-Sep-2017 09:52 2480
+<a href="util-linux-2.30-rc1.tar.gz">util-linux-2.30-rc1.tar.gz</a> 12-May-2017 12:02 9M
+<a href="util-linux-2.30-rc1.tar.sign">util-linux-2.30-rc1.tar.sign</a> 12-May-2017 12:02 819
+<a href="util-linux-2.30-rc1.tar.xz">util-linux-2.30-rc1.tar.xz</a> 12-May-2017 12:02 4M
+<a href="util-linux-2.30-rc2.tar.gz">util-linux-2.30-rc2.tar.gz</a> 23-May-2017 10:42 9M
+<a href="util-linux-2.30-rc2.tar.sign">util-linux-2.30-rc2.tar.sign</a> 23-May-2017 10:42 819
+<a href="util-linux-2.30-rc2.tar.xz">util-linux-2.30-rc2.tar.xz</a> 23-May-2017 10:42 4M
+<a href="util-linux-2.30.1.tar.gz">util-linux-2.30.1.tar.gz</a> 20-Jul-2017 09:33 9M
+<a href="util-linux-2.30.1.tar.sign">util-linux-2.30.1.tar.sign</a> 20-Jul-2017 09:33 819
+<a href="util-linux-2.30.1.tar.xz">util-linux-2.30.1.tar.xz</a> 20-Jul-2017 09:33 4M
+<a href="util-linux-2.30.2.tar.gz">util-linux-2.30.2.tar.gz</a> 21-Sep-2017 09:51 9M
+<a href="util-linux-2.30.2.tar.sign">util-linux-2.30.2.tar.sign</a> 21-Sep-2017 09:51 833
+<a href="util-linux-2.30.2.tar.xz">util-linux-2.30.2.tar.xz</a> 21-Sep-2017 09:51 4M
+<a href="util-linux-2.30.tar.gz">util-linux-2.30.tar.gz</a> 02-Jun-2017 10:44 9M
+<a href="util-linux-2.30.tar.sign">util-linux-2.30.tar.sign</a> 02-Jun-2017 10:44 819
+<a href="util-linux-2.30.tar.xz">util-linux-2.30.tar.xz</a> 02-Jun-2017 10:44 4M
+<a href="v2.30-ChangeLog">v2.30-ChangeLog</a> 02-Jun-2017 10:44 28K
+<a href="v2.30-ChangeLog.sign">v2.30-ChangeLog.sign</a> 02-Jun-2017 10:44 819
+<a href="v2.30-ReleaseNotes">v2.30-ReleaseNotes</a> 02-Jun-2017 10:44 34K
+<a href="v2.30-ReleaseNotes.sign">v2.30-ReleaseNotes.sign</a> 02-Jun-2017 10:44 819
+<a href="v2.30-rc1-ChangeLog">v2.30-rc1-ChangeLog</a> 23-May-2017 10:42 318K
+<a href="v2.30-rc1-ChangeLog.sign">v2.30-rc1-ChangeLog.sign</a> 23-May-2017 10:42 819
+<a href="v2.30-rc2-ChangeLog">v2.30-rc2-ChangeLog</a> 23-May-2017 10:42 19K
+<a href="v2.30-rc2-ChangeLog.sign">v2.30-rc2-ChangeLog.sign</a> 23-May-2017 10:42 819
+<a href="v2.30.1-ChangeLog">v2.30.1-ChangeLog</a> 20-Jul-2017 09:33 20K
+<a href="v2.30.1-ChangeLog.sign">v2.30.1-ChangeLog.sign</a> 20-Jul-2017 09:33 819
+<a href="v2.30.1-ReleaseNotes">v2.30.1-ReleaseNotes</a> 20-Jul-2017 09:33 1901
+<a href="v2.30.1-ReleaseNotes.sign">v2.30.1-ReleaseNotes.sign</a> 20-Jul-2017 09:33 819
+<a href="v2.30.2-ChangeLog">v2.30.2-ChangeLog</a> 21-Sep-2017 09:51 13K
+<a href="v2.30.2-ChangeLog.sign">v2.30.2-ChangeLog.sign</a> 21-Sep-2017 09:51 833
+<a href="v2.30.2-ReleaseNotes">v2.30.2-ReleaseNotes</a> 21-Sep-2017 09:51 1604
+<a href="v2.30.2-ReleaseNotes.sign">v2.30.2-ReleaseNotes.sign</a> 21-Sep-2017 09:51 833
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.31/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.31/index.html
new file mode 100644
index 0000000000..097e4e0e3c
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.31/index.html
@@ -0,0 +1,35 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.31/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.31/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 19-Dec-2017 15:16 -
+<a href="libfdisk-docs/">libfdisk-docs/</a> 19-Dec-2017 15:17 -
+<a href="libmount-docs/">libmount-docs/</a> 19-Dec-2017 15:17 -
+<a href="libsmartcols-docs/">libsmartcols-docs/</a> 19-Dec-2017 15:17 -
+<a href="sha256sums.asc">sha256sums.asc</a> 19-Dec-2017 15:20 2127
+<a href="util-linux-2.31-rc1.tar.gz">util-linux-2.31-rc1.tar.gz</a> 22-Sep-2017 10:39 9M
+<a href="util-linux-2.31-rc1.tar.sign">util-linux-2.31-rc1.tar.sign</a> 22-Sep-2017 10:39 833
+<a href="util-linux-2.31-rc1.tar.xz">util-linux-2.31-rc1.tar.xz</a> 22-Sep-2017 10:39 4M
+<a href="util-linux-2.31-rc2.tar.gz">util-linux-2.31-rc2.tar.gz</a> 03-Oct-2017 16:03 9M
+<a href="util-linux-2.31-rc2.tar.sign">util-linux-2.31-rc2.tar.sign</a> 03-Oct-2017 16:03 833
+<a href="util-linux-2.31-rc2.tar.xz">util-linux-2.31-rc2.tar.xz</a> 03-Oct-2017 16:03 4M
+<a href="util-linux-2.31.1.tar.gz">util-linux-2.31.1.tar.gz</a> 19-Dec-2017 15:18 9M
+<a href="util-linux-2.31.1.tar.sign">util-linux-2.31.1.tar.sign</a> 19-Dec-2017 15:18 833
+<a href="util-linux-2.31.1.tar.xz">util-linux-2.31.1.tar.xz</a> 19-Dec-2017 15:18 4M
+<a href="util-linux-2.31.tar.gz">util-linux-2.31.tar.gz</a> 19-Oct-2017 11:27 9M
+<a href="util-linux-2.31.tar.sign">util-linux-2.31.tar.sign</a> 19-Oct-2017 11:27 833
+<a href="util-linux-2.31.tar.xz">util-linux-2.31.tar.xz</a> 19-Oct-2017 11:27 4M
+<a href="v2.31-ChangeLog">v2.31-ChangeLog</a> 19-Oct-2017 11:27 15K
+<a href="v2.31-ChangeLog.sign">v2.31-ChangeLog.sign</a> 19-Oct-2017 11:27 833
+<a href="v2.31-ReleaseNotes">v2.31-ReleaseNotes</a> 19-Oct-2017 11:27 31K
+<a href="v2.31-ReleaseNotes.sign">v2.31-ReleaseNotes.sign</a> 19-Oct-2017 11:27 833
+<a href="v2.31-rc1-ChangeLog">v2.31-rc1-ChangeLog</a> 22-Sep-2017 10:39 290K
+<a href="v2.31-rc1-ChangeLog.sign">v2.31-rc1-ChangeLog.sign</a> 22-Sep-2017 10:39 833
+<a href="v2.31-rc2-ChangeLog">v2.31-rc2-ChangeLog</a> 03-Oct-2017 16:03 12K
+<a href="v2.31-rc2-ChangeLog.sign">v2.31-rc2-ChangeLog.sign</a> 03-Oct-2017 16:03 833
+<a href="v2.31.1-ChangeLog">v2.31.1-ChangeLog</a> 19-Dec-2017 15:18 27K
+<a href="v2.31.1-ChangeLog.sign">v2.31.1-ChangeLog.sign</a> 19-Dec-2017 15:18 833
+<a href="v2.31.1-ReleaseNotes">v2.31.1-ReleaseNotes</a> 19-Dec-2017 15:18 3175
+<a href="v2.31.1-ReleaseNotes.sign">v2.31.1-ReleaseNotes.sign</a> 19-Dec-2017 15:18 833
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.32/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.32/index.html
new file mode 100644
index 0000000000..d373e98109
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.32/index.html
@@ -0,0 +1,35 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.32/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.32/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 16-Jul-2018 11:27 -
+<a href="libfdisk-docs/">libfdisk-docs/</a> 16-Jul-2018 11:28 -
+<a href="libmount-docs/">libmount-docs/</a> 16-Jul-2018 11:28 -
+<a href="libsmartcols-docs/">libsmartcols-docs/</a> 16-Jul-2018 11:28 -
+<a href="sha256sums.asc">sha256sums.asc</a> 16-Jul-2018 11:30 2127
+<a href="util-linux-2.32-rc1.tar.gz">util-linux-2.32-rc1.tar.gz</a> 13-Feb-2018 12:25 9M
+<a href="util-linux-2.32-rc1.tar.sign">util-linux-2.32-rc1.tar.sign</a> 13-Feb-2018 12:25 833
+<a href="util-linux-2.32-rc1.tar.xz">util-linux-2.32-rc1.tar.xz</a> 13-Feb-2018 12:25 4M
+<a href="util-linux-2.32-rc2.tar.gz">util-linux-2.32-rc2.tar.gz</a> 01-Mar-2018 13:38 9M
+<a href="util-linux-2.32-rc2.tar.sign">util-linux-2.32-rc2.tar.sign</a> 01-Mar-2018 13:38 833
+<a href="util-linux-2.32-rc2.tar.xz">util-linux-2.32-rc2.tar.xz</a> 01-Mar-2018 13:38 4M
+<a href="util-linux-2.32.1.tar.gz">util-linux-2.32.1.tar.gz</a> 16-Jul-2018 11:29 9M
+<a href="util-linux-2.32.1.tar.sign">util-linux-2.32.1.tar.sign</a> 16-Jul-2018 11:29 833
+<a href="util-linux-2.32.1.tar.xz">util-linux-2.32.1.tar.xz</a> 16-Jul-2018 11:29 4M
+<a href="util-linux-2.32.tar.gz">util-linux-2.32.tar.gz</a> 21-Mar-2018 14:49 9M
+<a href="util-linux-2.32.tar.sign">util-linux-2.32.tar.sign</a> 21-Mar-2018 14:49 833
+<a href="util-linux-2.32.tar.xz">util-linux-2.32.tar.xz</a> 21-Mar-2018 14:49 4M
+<a href="v2.32-ChangeLog">v2.32-ChangeLog</a> 21-Mar-2018 14:49 36K
+<a href="v2.32-ChangeLog.sign">v2.32-ChangeLog.sign</a> 21-Mar-2018 14:49 833
+<a href="v2.32-ReleaseNotes">v2.32-ReleaseNotes</a> 21-Mar-2018 14:49 21K
+<a href="v2.32-ReleaseNotes.sign">v2.32-ReleaseNotes.sign</a> 21-Mar-2018 14:49 833
+<a href="v2.32-rc1-ChangeLog">v2.32-rc1-ChangeLog</a> 13-Feb-2018 12:25 174K
+<a href="v2.32-rc1-ChangeLog.sign">v2.32-rc1-ChangeLog.sign</a> 13-Feb-2018 12:25 833
+<a href="v2.32-rc2-ChangeLog">v2.32-rc2-ChangeLog</a> 01-Mar-2018 13:38 21K
+<a href="v2.32-rc2-ChangeLog.sign">v2.32-rc2-ChangeLog.sign</a> 01-Mar-2018 13:38 833
+<a href="v2.32.1-ChangeLog">v2.32.1-ChangeLog</a> 16-Jul-2018 11:29 31K
+<a href="v2.32.1-ChangeLog.sign">v2.32.1-ChangeLog.sign</a> 16-Jul-2018 11:29 833
+<a href="v2.32.1-ReleaseNotes">v2.32.1-ReleaseNotes</a> 16-Jul-2018 11:29 3425
+<a href="v2.32.1-ReleaseNotes.sign">v2.32.1-ReleaseNotes.sign</a> 16-Jul-2018 11:29 833
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.33/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.33/index.html
new file mode 100644
index 0000000000..5495305422
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.33/index.html
@@ -0,0 +1,42 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.33/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.33/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 09-Apr-2019 13:55 -
+<a href="libfdisk-docs/">libfdisk-docs/</a> 09-Apr-2019 13:56 -
+<a href="libmount-docs/">libmount-docs/</a> 09-Apr-2019 13:56 -
+<a href="libsmartcols-docs/">libsmartcols-docs/</a> 09-Apr-2019 13:56 -
+<a href="sha256sums.asc">sha256sums.asc</a> 09-Apr-2019 14:01 2480
+<a href="util-linux-2.33-rc1.tar.gz">util-linux-2.33-rc1.tar.gz</a> 25-Sep-2018 10:34 9M
+<a href="util-linux-2.33-rc1.tar.sign">util-linux-2.33-rc1.tar.sign</a> 25-Sep-2018 10:34 833
+<a href="util-linux-2.33-rc1.tar.xz">util-linux-2.33-rc1.tar.xz</a> 25-Sep-2018 10:34 4M
+<a href="util-linux-2.33-rc2.tar.gz">util-linux-2.33-rc2.tar.gz</a> 19-Oct-2018 11:44 9M
+<a href="util-linux-2.33-rc2.tar.sign">util-linux-2.33-rc2.tar.sign</a> 19-Oct-2018 11:44 833
+<a href="util-linux-2.33-rc2.tar.xz">util-linux-2.33-rc2.tar.xz</a> 19-Oct-2018 11:44 4M
+<a href="util-linux-2.33.1.tar.gz">util-linux-2.33.1.tar.gz</a> 09-Jan-2019 10:28 9M
+<a href="util-linux-2.33.1.tar.sign">util-linux-2.33.1.tar.sign</a> 09-Jan-2019 10:28 833
+<a href="util-linux-2.33.1.tar.xz">util-linux-2.33.1.tar.xz</a> 09-Jan-2019 10:28 4M
+<a href="util-linux-2.33.2.tar.gz">util-linux-2.33.2.tar.gz</a> 09-Apr-2019 13:57 10M
+<a href="util-linux-2.33.2.tar.sign">util-linux-2.33.2.tar.sign</a> 09-Apr-2019 13:57 833
+<a href="util-linux-2.33.2.tar.xz">util-linux-2.33.2.tar.xz</a> 09-Apr-2019 13:57 4M
+<a href="util-linux-2.33.tar.gz">util-linux-2.33.tar.gz</a> 06-Nov-2018 11:25 9M
+<a href="util-linux-2.33.tar.sign">util-linux-2.33.tar.sign</a> 06-Nov-2018 11:25 833
+<a href="util-linux-2.33.tar.xz">util-linux-2.33.tar.xz</a> 06-Nov-2018 11:25 4M
+<a href="v2.33-ChangeLog">v2.33-ChangeLog</a> 06-Nov-2018 11:25 7977
+<a href="v2.33-ChangeLog.sign">v2.33-ChangeLog.sign</a> 06-Nov-2018 11:25 833
+<a href="v2.33-ReleaseNotes">v2.33-ReleaseNotes</a> 06-Nov-2018 11:25 27K
+<a href="v2.33-ReleaseNotes.sign">v2.33-ReleaseNotes.sign</a> 06-Nov-2018 11:25 833
+<a href="v2.33-rc1-ChangeLog">v2.33-rc1-ChangeLog</a> 25-Sep-2018 10:34 210K
+<a href="v2.33-rc1-ChangeLog.sign">v2.33-rc1-ChangeLog.sign</a> 25-Sep-2018 10:34 833
+<a href="v2.33-rc2-ChangeLog">v2.33-rc2-ChangeLog</a> 19-Oct-2018 11:44 18K
+<a href="v2.33-rc2-ChangeLog.sign">v2.33-rc2-ChangeLog.sign</a> 19-Oct-2018 11:44 833
+<a href="v2.33.1-ChangeLog">v2.33.1-ChangeLog</a> 09-Jan-2019 10:28 17K
+<a href="v2.33.1-ChangeLog.sign">v2.33.1-ChangeLog.sign</a> 09-Jan-2019 10:28 833
+<a href="v2.33.1-ReleaseNotes">v2.33.1-ReleaseNotes</a> 09-Jan-2019 10:28 1899
+<a href="v2.33.1-ReleaseNotes.sign">v2.33.1-ReleaseNotes.sign</a> 09-Jan-2019 10:28 833
+<a href="v2.33.2-ChangeLog">v2.33.2-ChangeLog</a> 09-Apr-2019 13:57 21K
+<a href="v2.33.2-ChangeLog.sign">v2.33.2-ChangeLog.sign</a> 09-Apr-2019 13:57 833
+<a href="v2.33.2-ReleaseNotes">v2.33.2-ReleaseNotes</a> 09-Apr-2019 13:57 2566
+<a href="v2.33.2-ReleaseNotes.sign">v2.33.2-ReleaseNotes.sign</a> 09-Apr-2019 13:57 833
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.34/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.34/index.html
new file mode 100644
index 0000000000..bd9d9c87bb
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.34/index.html
@@ -0,0 +1,28 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.34/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.34/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 14-Jun-2019 10:45 -
+<a href="libfdisk-docs/">libfdisk-docs/</a> 14-Jun-2019 10:45 -
+<a href="libmount-docs/">libmount-docs/</a> 14-Jun-2019 10:45 -
+<a href="libsmartcols-docs/">libsmartcols-docs/</a> 14-Jun-2019 10:46 -
+<a href="sha256sums.asc">sha256sums.asc</a> 14-Jun-2019 10:51 1774
+<a href="util-linux-2.34-rc1.tar.gz">util-linux-2.34-rc1.tar.gz</a> 30-Apr-2019 10:24 10M
+<a href="util-linux-2.34-rc1.tar.sign">util-linux-2.34-rc1.tar.sign</a> 30-Apr-2019 10:24 833
+<a href="util-linux-2.34-rc1.tar.xz">util-linux-2.34-rc1.tar.xz</a> 30-Apr-2019 10:24 5M
+<a href="util-linux-2.34-rc2.tar.gz">util-linux-2.34-rc2.tar.gz</a> 30-May-2019 10:24 10M
+<a href="util-linux-2.34-rc2.tar.sign">util-linux-2.34-rc2.tar.sign</a> 30-May-2019 10:24 833
+<a href="util-linux-2.34-rc2.tar.xz">util-linux-2.34-rc2.tar.xz</a> 30-May-2019 10:24 5M
+<a href="util-linux-2.34.tar.gz">util-linux-2.34.tar.gz</a> 14-Jun-2019 10:46 10M
+<a href="util-linux-2.34.tar.sign">util-linux-2.34.tar.sign</a> 14-Jun-2019 10:46 833
+<a href="util-linux-2.34.tar.xz">util-linux-2.34.tar.xz</a> 14-Jun-2019 10:46 5M
+<a href="v2.34-ChangeLog">v2.34-ChangeLog</a> 14-Jun-2019 10:46 14K
+<a href="v2.34-ChangeLog.sign">v2.34-ChangeLog.sign</a> 14-Jun-2019 10:46 833
+<a href="v2.34-ReleaseNotes">v2.34-ReleaseNotes</a> 14-Jun-2019 10:46 27K
+<a href="v2.34-ReleaseNotes.sign">v2.34-ReleaseNotes.sign</a> 14-Jun-2019 10:46 833
+<a href="v2.34-rc1-ChangeLog">v2.34-rc1-ChangeLog</a> 30-Apr-2019 10:24 167K
+<a href="v2.34-rc1-ChangeLog.sign">v2.34-rc1-ChangeLog.sign</a> 30-Apr-2019 10:24 833
+<a href="v2.34-rc2-ChangeLog">v2.34-rc2-ChangeLog</a> 30-May-2019 10:24 57K
+<a href="v2.34-rc2-ChangeLog.sign">v2.34-rc2-ChangeLog.sign</a> 30-May-2019 10:24 833
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.35/index.html b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.35/index.html
new file mode 100644
index 0000000000..aa714d3918
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.35/index.html
@@ -0,0 +1,18 @@
+<html>
+<head><title>Index of /pub/linux/utils/util-linux/v2.35/</title></head>
+<body>
+<h1>Index of /pub/linux/utils/util-linux/v2.35/</h1><hr><pre><a href="../">../</a>
+<a href="libblkid-docs/">libblkid-docs/</a> 11-Dec-2019 10:04 -
+<a href="libfdisk-docs/">libfdisk-docs/</a> 11-Dec-2019 10:05 -
+<a href="libmount-docs/">libmount-docs/</a> 11-Dec-2019 10:05 -
+<a href="libsmartcols-docs/">libsmartcols-docs/</a> 11-Dec-2019 10:05 -
+<a href="sha256sums.asc">sha256sums.asc</a> 11-Dec-2019 10:11 1242
+<a href="util-linux-2.35-rc1.tar.gz">util-linux-2.35-rc1.tar.gz</a> 11-Dec-2019 10:06 10M
+<a href="util-linux-2.35-rc1.tar.sign">util-linux-2.35-rc1.tar.sign</a> 11-Dec-2019 10:06 833
+<a href="util-linux-2.35-rc1.tar.xz">util-linux-2.35-rc1.tar.xz</a> 11-Dec-2019 10:06 5M
+<a href="v2.35-ReleaseNotes">v2.35-ReleaseNotes</a> 11-Dec-2019 10:06 21K
+<a href="v2.35-ReleaseNotes.sign">v2.35-ReleaseNotes.sign</a> 11-Dec-2019 10:06 833
+<a href="v2.35-rc1-ChangeLog">v2.35-rc1-ChangeLog</a> 11-Dec-2019 10:06 228K
+<a href="v2.35-rc1-ChangeLog.sign">v2.35-rc1-ChangeLog.sign</a> 11-Dec-2019 10:06 833
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/releases/eglibc/index.html b/bitbake/lib/bb/tests/fetch-testdata/releases/eglibc/index.html
new file mode 100644
index 0000000000..b26794021d
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/releases/eglibc/index.html
@@ -0,0 +1,21 @@
+<html>
+<head><title>Index of /releases/eglibc/</title></head>
+<body bgcolor="white">
+<h1>Index of /releases/eglibc/</h1><hr><pre><a href="../">../</a>
+<a href="eglibc-2.16-svnr21224.tar.bz2">eglibc-2.16-svnr21224.tar.bz2</a> 17-Oct-2012 18:01 17310656
+<a href="eglibc-2.16-svnr21224.tar.bz2.md5">eglibc-2.16-svnr21224.tar.bz2.md5</a> 17-Oct-2012 21:53 64
+<a href="eglibc-2.16-svnr21224.tar.bz2.sha1">eglibc-2.16-svnr21224.tar.bz2.sha1</a> 17-Oct-2012 21:53 72
+<a href="eglibc-2.17-svnr22064.tar.bz2">eglibc-2.17-svnr22064.tar.bz2</a> 04-Jan-2013 05:44 17565519
+<a href="eglibc-2.17-svnr22064.tar.bz2.asc">eglibc-2.17-svnr22064.tar.bz2.asc</a> 04-Jan-2013 05:45 302
+<a href="eglibc-2.17-svnr22064.tar.bz2.md5">eglibc-2.17-svnr22064.tar.bz2.md5</a> 04-Jan-2013 05:44 64
+<a href="eglibc-2.17-svnr22064.tar.bz2.sha1">eglibc-2.17-svnr22064.tar.bz2.sha1</a> 04-Jan-2013 05:44 72
+<a href="eglibc-2.18-svnr23787.tar.bz2">eglibc-2.18-svnr23787.tar.bz2</a> 21-Aug-2013 05:36 17862773
+<a href="eglibc-2.18-svnr23787.tar.bz2.asc">eglibc-2.18-svnr23787.tar.bz2.asc</a> 21-Aug-2013 05:36 302
+<a href="eglibc-2.18-svnr23787.tar.bz2.md5">eglibc-2.18-svnr23787.tar.bz2.md5</a> 21-Aug-2013 05:36 64
+<a href="eglibc-2.18-svnr23787.tar.bz2.sha1">eglibc-2.18-svnr23787.tar.bz2.sha1</a> 21-Aug-2013 05:36 72
+<a href="eglibc-2.19-svnr25243.tar.bz2">eglibc-2.19-svnr25243.tar.bz2</a> 08-Feb-2014 10:06 18873620
+<a href="eglibc-2.19-svnr25243.tar.bz2.asc">eglibc-2.19-svnr25243.tar.bz2.asc</a> 08-Feb-2014 10:06 285
+<a href="eglibc-2.19-svnr25243.tar.bz2.md5">eglibc-2.19-svnr25243.tar.bz2.md5</a> 08-Feb-2014 10:06 64
+<a href="eglibc-2.19-svnr25243.tar.bz2.sha1">eglibc-2.19-svnr25243.tar.bz2.sha1</a> 08-Feb-2014 10:06 72
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/releases/gnu-config/index.html b/bitbake/lib/bb/tests/fetch-testdata/releases/gnu-config/index.html
new file mode 100644
index 0000000000..051aa4812f
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/releases/gnu-config/index.html
@@ -0,0 +1,9 @@
+<html>
+<head><title>Index of /releases/gnu-config/</title></head>
+<body bgcolor="white">
+<h1>Index of /releases/gnu-config/</h1><hr><pre><a href="../">../</a>
+<a href="SHA256SUM">SHA256SUM</a> 03-Oct-2012 17:23 190
+<a href="gnu-config-20120814.tar.bz2">gnu-config-20120814.tar.bz2</a> 18-Sep-2012 09:28 43026
+<a href="gnu-config-yocto-20111111.tgz">gnu-config-yocto-20111111.tgz</a> 08-May-2012 21:11 48762
+</pre><hr></body>
+</html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/releases/individual/xserver/index.html b/bitbake/lib/bb/tests/fetch-testdata/releases/individual/xserver/index.html
new file mode 100644
index 0000000000..72e0d65e02
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/releases/individual/xserver/index.html
@@ -0,0 +1,609 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /releases/individual/xserver</title>
+ </head>
+ <body>
+<h1>Index of /releases/individual/xserver</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/releases/individual/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.1.tar.bz2">xorg-server-1.0.1.tar.bz2</a></td><td align="right">2006-01-18 23:51 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.1.tar.gz">xorg-server-1.0.1.tar.gz</a></td><td align="right">2006-01-18 23:51 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.2.tar.bz2">xorg-server-1.0.2.tar.bz2</a></td><td align="right">2006-03-20 14:01 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.2.tar.gz">xorg-server-1.0.2.tar.gz</a></td><td align="right">2006-03-20 14:02 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.99.2.tar.bz2">xorg-server-1.0.99.2.tar.bz2</a></td><td align="right">2006-04-02 00:47 </td><td align="right">6.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.99.2.tar.gz">xorg-server-1.0.99.2.tar.gz</a></td><td align="right">2006-04-02 00:48 </td><td align="right">8.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.99.901.tar.bz2">xorg-server-1.0.99.901.tar.bz2</a></td><td align="right">2006-04-07 22:51 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.99.901.tar.gz">xorg-server-1.0.99.901.tar.gz</a></td><td align="right">2006-04-07 22:51 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.99.902.tar.bz2">xorg-server-1.0.99.902.tar.bz2</a></td><td align="right">2006-04-28 23:17 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.99.902.tar.gz">xorg-server-1.0.99.902.tar.gz</a></td><td align="right">2006-04-28 23:16 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.99.903.tar.bz2">xorg-server-1.0.99.903.tar.bz2</a></td><td align="right">2006-05-12 20:54 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.0.99.903.tar.gz">xorg-server-1.0.99.903.tar.gz</a></td><td align="right">2006-05-12 20:52 </td><td align="right">8.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.1.0.tar.bz2">xorg-server-1.1.0.tar.bz2</a></td><td align="right">2006-05-22 23:31 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.1.0.tar.gz">xorg-server-1.1.0.tar.gz</a></td><td align="right">2006-05-22 23:29 </td><td align="right">8.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.1.1.tar.bz2">xorg-server-1.1.1.tar.bz2</a></td><td align="right">2006-07-08 00:57 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.1.1.tar.gz">xorg-server-1.1.1.tar.gz</a></td><td align="right">2006-07-08 00:59 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.1.99.901.tar.bz2">xorg-server-1.1.99.901.tar.bz2</a></td><td align="right">2006-10-13 23:06 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.1.99.901.tar.gz">xorg-server-1.1.99.901.tar.gz</a></td><td align="right">2006-10-13 23:08 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.1.99.902.tar.bz2">xorg-server-1.1.99.902.tar.bz2</a></td><td align="right">2006-11-13 22:04 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.1.99.902.tar.gz">xorg-server-1.1.99.902.tar.gz</a></td><td align="right">2006-11-13 22:06 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.1.99.903.tar.bz2">xorg-server-1.1.99.903.tar.bz2</a></td><td align="right">2006-12-02 00:14 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.1.99.903.tar.gz">xorg-server-1.1.99.903.tar.gz</a></td><td align="right">2006-12-02 00:17 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.0.tar.bz2">xorg-server-1.2.0.tar.bz2</a></td><td align="right">2007-01-23 06:15 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.0.tar.gz">xorg-server-1.2.0.tar.gz</a></td><td align="right">2007-01-23 06:17 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.0.tar.bz2">xorg-server-1.2.99.0.tar.bz2</a></td><td align="right">2006-11-02 03:15 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.0.tar.gz">xorg-server-1.2.99.0.tar.gz</a></td><td align="right">2006-11-02 03:17 </td><td align="right">7.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.901.tar.bz2">xorg-server-1.2.99.901.tar.bz2</a></td><td align="right">2007-03-05 05:11 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.901.tar.gz">xorg-server-1.2.99.901.tar.gz</a></td><td align="right">2007-03-05 05:14 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.902.tar.bz2">xorg-server-1.2.99.902.tar.bz2</a></td><td align="right">2007-03-14 19:38 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.902.tar.gz">xorg-server-1.2.99.902.tar.gz</a></td><td align="right">2007-03-14 19:43 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.903.tar.bz2">xorg-server-1.2.99.903.tar.bz2</a></td><td align="right">2007-03-27 05:01 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.903.tar.gz">xorg-server-1.2.99.903.tar.gz</a></td><td align="right">2007-03-27 05:05 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.904.tar.bz2">xorg-server-1.2.99.904.tar.bz2</a></td><td align="right">2007-04-06 06:31 </td><td align="right">4.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.904.tar.gz">xorg-server-1.2.99.904.tar.gz</a></td><td align="right">2007-04-06 06:28 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.905.tar.bz2">xorg-server-1.2.99.905.tar.bz2</a></td><td align="right">2007-04-06 07:01 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.2.99.905.tar.gz">xorg-server-1.2.99.905.tar.gz</a></td><td align="right">2007-04-06 06:57 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.3.0.0.tar.bz2">xorg-server-1.3.0.0.tar.bz2</a></td><td align="right">2007-04-20 02:45 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.3.0.0.tar.gz">xorg-server-1.3.0.0.tar.gz</a></td><td align="right">2007-04-20 02:42 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.3.99.0.tar.bz2">xorg-server-1.3.99.0.tar.bz2</a></td><td align="right">2007-08-01 05:38 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.3.99.0.tar.gz">xorg-server-1.3.99.0.tar.gz</a></td><td align="right">2007-08-01 05:36 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.3.99.2.tar.bz2">xorg-server-1.3.99.2.tar.bz2</a></td><td align="right">2007-09-01 03:12 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.3.99.2.tar.gz">xorg-server-1.3.99.2.tar.gz</a></td><td align="right">2007-09-01 03:10 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.0.90.tar.bz2">xorg-server-1.4.0.90.tar.bz2</a></td><td align="right">2007-12-12 20:44 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.0.90.tar.gz">xorg-server-1.4.0.90.tar.gz</a></td><td align="right">2007-12-12 20:43 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.1.tar.bz2">xorg-server-1.4.1.tar.bz2</a></td><td align="right">2008-06-10 15:57 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.1.tar.gz">xorg-server-1.4.1.tar.gz</a></td><td align="right">2008-06-10 15:56 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.2.tar.bz2">xorg-server-1.4.2.tar.bz2</a></td><td align="right">2008-06-11 15:08 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.2.tar.gz">xorg-server-1.4.2.tar.gz</a></td><td align="right">2008-06-11 15:08 </td><td align="right">7.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.99.901.tar.bz2">xorg-server-1.4.99.901.tar.bz2</a></td><td align="right">2008-03-06 05:25 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.99.901.tar.gz">xorg-server-1.4.99.901.tar.gz</a></td><td align="right">2008-03-06 05:23 </td><td align="right">7.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.99.902.tar.bz2">xorg-server-1.4.99.902.tar.bz2</a></td><td align="right">2008-05-22 19:16 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.99.902.tar.gz">xorg-server-1.4.99.902.tar.gz</a></td><td align="right">2008-05-22 19:16 </td><td align="right">7.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.99.904.tar.bz2">xorg-server-1.4.99.904.tar.bz2</a></td><td align="right">2008-06-30 15:42 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.99.904.tar.gz">xorg-server-1.4.99.904.tar.gz</a></td><td align="right">2008-06-30 15:42 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.99.905.tar.bz2">xorg-server-1.4.99.905.tar.bz2</a></td><td align="right">2008-06-30 20:31 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.99.905.tar.gz">xorg-server-1.4.99.905.tar.gz</a></td><td align="right">2008-06-30 20:31 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.99.906.tar.bz2">xorg-server-1.4.99.906.tar.bz2</a></td><td align="right">2008-07-23 18:55 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.99.906.tar.gz">xorg-server-1.4.99.906.tar.gz</a></td><td align="right">2008-07-23 18:55 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.tar.bz2">xorg-server-1.4.tar.bz2</a></td><td align="right">2007-09-06 09:23 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.4.tar.gz">xorg-server-1.4.tar.gz</a></td><td align="right">2007-09-06 09:22 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.0.tar.bz2">xorg-server-1.5.0.tar.bz2</a></td><td align="right">2008-09-03 23:16 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.0.tar.gz">xorg-server-1.5.0.tar.gz</a></td><td align="right">2008-09-03 23:16 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.1.tar.bz2">xorg-server-1.5.1.tar.bz2</a></td><td align="right">2008-09-23 19:15 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.1.tar.gz">xorg-server-1.5.1.tar.gz</a></td><td align="right">2008-09-23 19:15 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.2.tar.bz2">xorg-server-1.5.2.tar.bz2</a></td><td align="right">2008-10-10 19:27 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.2.tar.gz">xorg-server-1.5.2.tar.gz</a></td><td align="right">2008-10-10 19:27 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.3.tar.bz2">xorg-server-1.5.3.tar.bz2</a></td><td align="right">2008-11-05 20:49 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.3.tar.gz">xorg-server-1.5.3.tar.gz</a></td><td align="right">2008-11-05 20:49 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.1.tar.bz2">xorg-server-1.5.99.1.tar.bz2</a></td><td align="right">2008-11-26 07:29 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.1.tar.gz">xorg-server-1.5.99.1.tar.gz</a></td><td align="right">2008-11-26 07:26 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.2.tar.bz2">xorg-server-1.5.99.2.tar.bz2</a></td><td align="right">2008-12-03 08:16 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.2.tar.gz">xorg-server-1.5.99.2.tar.gz</a></td><td align="right">2008-12-03 08:09 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.3.tar.bz2">xorg-server-1.5.99.3.tar.bz2</a></td><td align="right">2008-12-10 06:28 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.3.tar.gz">xorg-server-1.5.99.3.tar.gz</a></td><td align="right">2008-12-10 06:25 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.901.tar.bz2">xorg-server-1.5.99.901.tar.bz2</a></td><td align="right">2009-01-12 21:12 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.901.tar.gz">xorg-server-1.5.99.901.tar.gz</a></td><td align="right">2009-01-12 21:12 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.902.tar.bz2">xorg-server-1.5.99.902.tar.bz2</a></td><td align="right">2009-01-31 05:27 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.902.tar.gz">xorg-server-1.5.99.902.tar.gz</a></td><td align="right">2009-01-31 05:24 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.903.tar.bz2">xorg-server-1.5.99.903.tar.bz2</a></td><td align="right">2009-02-18 06:35 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.5.99.903.tar.gz">xorg-server-1.5.99.903.tar.gz</a></td><td align="right">2009-02-18 06:32 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.0.tar.bz2">xorg-server-1.6.0.tar.bz2</a></td><td align="right">2009-02-25 20:25 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.0.tar.gz">xorg-server-1.6.0.tar.gz</a></td><td align="right">2009-02-25 20:19 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.1.901.tar.bz2">xorg-server-1.6.1.901.tar.bz2</a></td><td align="right">2009-05-09 05:46 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.1.901.tar.gz">xorg-server-1.6.1.901.tar.gz</a></td><td align="right">2009-05-09 05:42 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.1.902.tar.bz2">xorg-server-1.6.1.902.tar.bz2</a></td><td align="right">2009-06-29 23:05 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.1.902.tar.gz">xorg-server-1.6.1.902.tar.gz</a></td><td align="right">2009-06-29 23:02 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.1.tar.bz2">xorg-server-1.6.1.tar.bz2</a></td><td align="right">2009-04-14 20:09 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.1.tar.gz">xorg-server-1.6.1.tar.gz</a></td><td align="right">2009-04-14 20:09 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.2.901.tar.bz2">xorg-server-1.6.2.901.tar.bz2</a></td><td align="right">2009-07-26 21:42 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.2.901.tar.gz">xorg-server-1.6.2.901.tar.gz</a></td><td align="right">2009-07-26 21:41 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.2.tar.bz2">xorg-server-1.6.2.tar.bz2</a></td><td align="right">2009-07-07 23:40 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.2.tar.gz">xorg-server-1.6.2.tar.gz</a></td><td align="right">2009-07-07 23:39 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.3.901.tar.bz2">xorg-server-1.6.3.901.tar.bz2</a></td><td align="right">2009-08-26 05:55 </td><td align="right">4.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.3.901.tar.gz">xorg-server-1.6.3.901.tar.gz</a></td><td align="right">2009-08-26 05:54 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.3.tar.bz2">xorg-server-1.6.3.tar.bz2</a></td><td align="right">2009-08-01 06:45 </td><td align="right">4.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.3.tar.gz">xorg-server-1.6.3.tar.gz</a></td><td align="right">2009-08-01 06:42 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.4.901.tar.bz2">xorg-server-1.6.4.901.tar.bz2</a></td><td align="right">2009-10-03 07:40 </td><td align="right">4.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.4.901.tar.gz">xorg-server-1.6.4.901.tar.gz</a></td><td align="right">2009-10-03 07:44 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.4.tar.bz2">xorg-server-1.6.4.tar.bz2</a></td><td align="right">2009-09-28 02:47 </td><td align="right">4.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.4.tar.gz">xorg-server-1.6.4.tar.gz</a></td><td align="right">2009-09-28 02:45 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.5.tar.bz2">xorg-server-1.6.5.tar.bz2</a></td><td align="right">2009-10-12 05:27 </td><td align="right">4.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.5.tar.gz">xorg-server-1.6.5.tar.gz</a></td><td align="right">2009-10-12 05:26 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.99.900.tar.bz2">xorg-server-1.6.99.900.tar.bz2</a></td><td align="right">2009-09-04 07:02 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.99.900.tar.gz">xorg-server-1.6.99.900.tar.gz</a></td><td align="right">2009-09-04 07:02 </td><td align="right">6.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.99.901.tar.bz2">xorg-server-1.6.99.901.tar.bz2</a></td><td align="right">2009-09-14 10:26 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.99.901.tar.gz">xorg-server-1.6.99.901.tar.gz</a></td><td align="right">2009-09-14 10:23 </td><td align="right">6.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.99.902.tar.bz2">xorg-server-1.6.99.902.tar.bz2</a></td><td align="right">2009-09-22 04:53 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.99.902.tar.gz">xorg-server-1.6.99.902.tar.gz</a></td><td align="right">2009-09-22 04:50 </td><td align="right">6.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.99.903.tar.bz2">xorg-server-1.6.99.903.tar.bz2</a></td><td align="right">2009-09-28 11:25 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.6.99.903.tar.gz">xorg-server-1.6.99.903.tar.gz</a></td><td align="right">2009-09-28 11:22 </td><td align="right">6.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.0.901.tar.bz2">xorg-server-1.7.0.901.tar.bz2</a></td><td align="right">2009-10-12 04:40 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.0.901.tar.gz">xorg-server-1.7.0.901.tar.gz</a></td><td align="right">2009-10-12 04:39 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.0.902.tar.bz2">xorg-server-1.7.0.902.tar.bz2</a></td><td align="right">2009-10-19 02:10 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.0.902.tar.gz">xorg-server-1.7.0.902.tar.gz</a></td><td align="right">2009-10-19 02:10 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.0.tar.bz2">xorg-server-1.7.0.tar.bz2</a></td><td align="right">2009-10-02 06:17 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.0.tar.gz">xorg-server-1.7.0.tar.gz</a></td><td align="right">2009-10-02 06:16 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.1.901.tar.bz2">xorg-server-1.7.1.901.tar.bz2</a></td><td align="right">2009-11-06 05:11 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.1.901.tar.gz">xorg-server-1.7.1.901.tar.gz</a></td><td align="right">2009-11-06 05:11 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.1.902.tar.bz2">xorg-server-1.7.1.902.tar.bz2</a></td><td align="right">2009-11-20 05:52 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.1.902.tar.gz">xorg-server-1.7.1.902.tar.gz</a></td><td align="right">2009-11-20 05:51 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.1.tar.bz2">xorg-server-1.7.1.tar.bz2</a></td><td align="right">2009-10-23 05:40 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.1.tar.gz">xorg-server-1.7.1.tar.gz</a></td><td align="right">2009-10-23 05:39 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.2.tar.bz2">xorg-server-1.7.2.tar.bz2</a></td><td align="right">2009-11-27 05:46 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.2.tar.gz">xorg-server-1.7.2.tar.gz</a></td><td align="right">2009-11-27 05:45 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.3.901.tar.bz2">xorg-server-1.7.3.901.tar.bz2</a></td><td align="right">2009-12-11 06:40 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.3.901.tar.gz">xorg-server-1.7.3.901.tar.gz</a></td><td align="right">2009-12-11 06:40 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.3.902.tar.bz2">xorg-server-1.7.3.902.tar.bz2</a></td><td align="right">2009-12-26 01:08 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.3.902.tar.gz">xorg-server-1.7.3.902.tar.gz</a></td><td align="right">2009-12-26 01:05 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.3.tar.bz2">xorg-server-1.7.3.tar.bz2</a></td><td align="right">2009-12-03 03:38 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.3.tar.gz">xorg-server-1.7.3.tar.gz</a></td><td align="right">2009-12-03 03:37 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.4.901.tar.bz2">xorg-server-1.7.4.901.tar.bz2</a></td><td align="right">2010-01-23 00:16 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.4.901.tar.gz">xorg-server-1.7.4.901.tar.gz</a></td><td align="right">2010-01-23 00:16 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.4.902.tar.bz2">xorg-server-1.7.4.902.tar.bz2</a></td><td align="right">2010-02-05 08:37 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.4.902.tar.gz">xorg-server-1.7.4.902.tar.gz</a></td><td align="right">2010-02-05 08:32 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.4.tar.bz2">xorg-server-1.7.4.tar.bz2</a></td><td align="right">2010-01-08 01:09 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.4.tar.gz">xorg-server-1.7.4.tar.gz</a></td><td align="right">2010-01-08 01:09 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.5.901.tar.bz2">xorg-server-1.7.5.901.tar.bz2</a></td><td align="right">2010-03-05 00:26 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.5.901.tar.gz">xorg-server-1.7.5.901.tar.gz</a></td><td align="right">2010-03-05 00:23 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.5.902.tar.bz2">xorg-server-1.7.5.902.tar.bz2</a></td><td align="right">2010-03-12 07:07 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.5.902.tar.gz">xorg-server-1.7.5.902.tar.gz</a></td><td align="right">2010-03-12 07:02 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.5.tar.bz2">xorg-server-1.7.5.tar.bz2</a></td><td align="right">2010-02-16 03:54 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.5.tar.gz">xorg-server-1.7.5.tar.gz</a></td><td align="right">2010-02-16 03:50 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.6.901.tar.bz2">xorg-server-1.7.6.901.tar.bz2</a></td><td align="right">2010-04-12 02:12 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.6.901.tar.gz">xorg-server-1.7.6.901.tar.gz</a></td><td align="right">2010-04-12 02:12 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.6.902.tar.bz2">xorg-server-1.7.6.902.tar.bz2</a></td><td align="right">2010-04-21 00:25 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.6.902.tar.gz">xorg-server-1.7.6.902.tar.gz</a></td><td align="right">2010-04-21 00:25 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.6.tar.bz2">xorg-server-1.7.6.tar.bz2</a></td><td align="right">2010-03-17 01:56 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.6.tar.gz">xorg-server-1.7.6.tar.gz</a></td><td align="right">2010-03-17 01:56 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.7.tar.bz2">xorg-server-1.7.7.tar.bz2</a></td><td align="right">2010-05-04 07:51 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.7.tar.gz">xorg-server-1.7.7.tar.gz</a></td><td align="right">2010-05-04 07:48 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.99.1.tar.bz2">xorg-server-1.7.99.1.tar.bz2</a></td><td align="right">2009-10-21 16:15 </td><td align="right">4.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.99.1.tar.gz">xorg-server-1.7.99.1.tar.gz</a></td><td align="right">2009-10-21 16:15 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.99.2.tar.bz2">xorg-server-1.7.99.2.tar.bz2</a></td><td align="right">2009-12-20 03:50 </td><td align="right">4.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.99.2.tar.gz">xorg-server-1.7.99.2.tar.gz</a></td><td align="right">2009-12-20 03:48 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.99.901.tar.bz2">xorg-server-1.7.99.901.tar.bz2</a></td><td align="right">2010-02-12 22:00 </td><td align="right">4.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.99.901.tar.gz">xorg-server-1.7.99.901.tar.gz</a></td><td align="right">2010-02-12 21:59 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.99.902.tar.bz2">xorg-server-1.7.99.902.tar.bz2</a></td><td align="right">2010-03-22 05:42 </td><td align="right">4.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.7.99.902.tar.gz">xorg-server-1.7.99.902.tar.gz</a></td><td align="right">2010-03-22 05:41 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.0.901.tar.bz2">xorg-server-1.8.0.901.tar.bz2</a></td><td align="right">2010-04-27 05:08 </td><td align="right">4.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.0.901.tar.gz">xorg-server-1.8.0.901.tar.gz</a></td><td align="right">2010-04-27 05:05 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.0.902.tar.bz2">xorg-server-1.8.0.902.tar.bz2</a></td><td align="right">2010-05-04 00:39 </td><td align="right">4.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.0.902.tar.gz">xorg-server-1.8.0.902.tar.gz</a></td><td align="right">2010-05-04 00:36 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.0.tar.bz2">xorg-server-1.8.0.tar.bz2</a></td><td align="right">2010-04-02 07:30 </td><td align="right">4.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.0.tar.gz">xorg-server-1.8.0.tar.gz</a></td><td align="right">2010-04-02 07:28 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.1.901.tar.bz2">xorg-server-1.8.1.901.tar.bz2</a></td><td align="right">2010-06-02 00:07 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.1.901.tar.gz">xorg-server-1.8.1.901.tar.gz</a></td><td align="right">2010-06-02 00:07 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.1.902.tar.bz2">xorg-server-1.8.1.902.tar.bz2</a></td><td align="right">2010-06-21 02:07 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.1.902.tar.gz">xorg-server-1.8.1.902.tar.gz</a></td><td align="right">2010-06-21 02:07 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.1.tar.bz2">xorg-server-1.8.1.tar.bz2</a></td><td align="right">2010-05-11 21:52 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.1.tar.gz">xorg-server-1.8.1.tar.gz</a></td><td align="right">2010-05-11 21:52 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.2.tar.bz2">xorg-server-1.8.2.tar.bz2</a></td><td align="right">2010-07-01 05:29 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.2.tar.gz">xorg-server-1.8.2.tar.gz</a></td><td align="right">2010-07-01 05:29 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.901.tar.bz2">xorg-server-1.8.99.901.tar.bz2</a></td><td align="right">2010-06-15 21:19 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.901.tar.gz">xorg-server-1.8.99.901.tar.gz</a></td><td align="right">2010-06-15 21:18 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.902.tar.bz2">xorg-server-1.8.99.902.tar.bz2</a></td><td align="right">2010-06-22 19:05 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.902.tar.gz">xorg-server-1.8.99.902.tar.gz</a></td><td align="right">2010-06-22 19:04 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.903.tar.bz2">xorg-server-1.8.99.903.tar.bz2</a></td><td align="right">2010-06-22 19:33 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.903.tar.gz">xorg-server-1.8.99.903.tar.gz</a></td><td align="right">2010-06-22 19:32 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.904.tar.bz2">xorg-server-1.8.99.904.tar.bz2</a></td><td align="right">2010-07-01 13:46 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.904.tar.gz">xorg-server-1.8.99.904.tar.gz</a></td><td align="right">2010-07-01 13:39 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.905.tar.bz2">xorg-server-1.8.99.905.tar.bz2</a></td><td align="right">2010-07-14 19:58 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.905.tar.gz">xorg-server-1.8.99.905.tar.gz</a></td><td align="right">2010-07-14 19:58 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.906.tar.bz2">xorg-server-1.8.99.906.tar.bz2</a></td><td align="right">2010-08-13 06:22 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.8.99.906.tar.gz">xorg-server-1.8.99.906.tar.gz</a></td><td align="right">2010-08-13 06:20 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.0.901.tar.bz2">xorg-server-1.9.0.901.tar.bz2</a></td><td align="right">2010-10-01 21:22 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.0.901.tar.gz">xorg-server-1.9.0.901.tar.gz</a></td><td align="right">2010-10-01 21:21 </td><td align="right">6.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.0.902.tar.bz2">xorg-server-1.9.0.902.tar.bz2</a></td><td align="right">2010-10-15 18:34 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.0.902.tar.gz">xorg-server-1.9.0.902.tar.gz</a></td><td align="right">2010-10-15 18:33 </td><td align="right">6.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.0.tar.bz2">xorg-server-1.9.0.tar.bz2</a></td><td align="right">2010-08-21 00:46 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.0.tar.gz">xorg-server-1.9.0.tar.gz</a></td><td align="right">2010-08-21 00:45 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.1.tar.bz2">xorg-server-1.9.1.tar.bz2</a></td><td align="right">2010-10-24 03:22 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.1.tar.gz">xorg-server-1.9.1.tar.gz</a></td><td align="right">2010-10-24 03:22 </td><td align="right">6.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.2.901.tar.bz2">xorg-server-1.9.2.901.tar.bz2</a></td><td align="right">2010-11-14 00:12 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.2.901.tar.gz">xorg-server-1.9.2.901.tar.gz</a></td><td align="right">2010-11-14 00:12 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.2.902.tar.bz2">xorg-server-1.9.2.902.tar.bz2</a></td><td align="right">2010-12-04 19:25 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.2.902.tar.gz">xorg-server-1.9.2.902.tar.gz</a></td><td align="right">2010-12-04 19:25 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.2.tar.bz2">xorg-server-1.9.2.tar.bz2</a></td><td align="right">2010-10-31 23:15 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.2.tar.gz">xorg-server-1.9.2.tar.gz</a></td><td align="right">2010-10-31 23:15 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.3.901.tar.bz2">xorg-server-1.9.3.901.tar.bz2</a></td><td align="right">2011-01-08 21:37 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.3.901.tar.gz">xorg-server-1.9.3.901.tar.gz</a></td><td align="right">2011-01-08 21:37 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.3.902.tar.bz2">xorg-server-1.9.3.902.tar.bz2</a></td><td align="right">2011-01-31 01:16 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.3.902.tar.gz">xorg-server-1.9.3.902.tar.gz</a></td><td align="right">2011-01-31 01:16 </td><td align="right">6.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.3.tar.bz2">xorg-server-1.9.3.tar.bz2</a></td><td align="right">2010-12-13 20:05 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.3.tar.gz">xorg-server-1.9.3.tar.gz</a></td><td align="right">2010-12-13 20:05 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.4.901.tar.bz2">xorg-server-1.9.4.901.tar.bz2</a></td><td align="right">2011-03-04 23:21 </td><td align="right">4.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.4.901.tar.gz">xorg-server-1.9.4.901.tar.gz</a></td><td align="right">2011-03-04 23:21 </td><td align="right">6.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.4.tar.bz2">xorg-server-1.9.4.tar.bz2</a></td><td align="right">2011-02-04 20:03 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.4.tar.gz">xorg-server-1.9.4.tar.gz</a></td><td align="right">2011-02-04 20:02 </td><td align="right">6.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.5.tar.bz2">xorg-server-1.9.5.tar.bz2</a></td><td align="right">2011-03-17 21:49 </td><td align="right">4.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.5.tar.gz">xorg-server-1.9.5.tar.gz</a></td><td align="right">2011-03-17 21:49 </td><td align="right">6.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.99.901.tar.bz2">xorg-server-1.9.99.901.tar.bz2</a></td><td align="right">2010-12-07 04:57 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.99.901.tar.gz">xorg-server-1.9.99.901.tar.gz</a></td><td align="right">2010-12-07 04:56 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.99.902.tar.bz2">xorg-server-1.9.99.902.tar.bz2</a></td><td align="right">2011-02-18 22:50 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.99.902.tar.gz">xorg-server-1.9.99.902.tar.gz</a></td><td align="right">2011-02-18 22:49 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.99.903.tar.bz2">xorg-server-1.9.99.903.tar.bz2</a></td><td align="right">2011-02-25 06:46 </td><td align="right">5.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.9.99.903.tar.gz">xorg-server-1.9.99.903.tar.gz</a></td><td align="right">2011-02-25 06:44 </td><td align="right">6.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.0.901.tar.bz2">xorg-server-1.10.0.901.tar.bz2</a></td><td align="right">2011-03-29 07:36 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.0.901.tar.gz">xorg-server-1.10.0.901.tar.gz</a></td><td align="right">2011-03-29 07:36 </td><td align="right">6.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.0.902.tar.bz2">xorg-server-1.10.0.902.tar.bz2</a></td><td align="right">2011-04-08 23:49 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.0.902.tar.gz">xorg-server-1.10.0.902.tar.gz</a></td><td align="right">2011-04-08 23:48 </td><td align="right">6.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.0.tar.bz2">xorg-server-1.10.0.tar.bz2</a></td><td align="right">2011-02-26 05:49 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.0.tar.gz">xorg-server-1.10.0.tar.gz</a></td><td align="right">2011-02-26 05:48 </td><td align="right">6.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.1.901.tar.bz2">xorg-server-1.10.1.901.tar.bz2</a></td><td align="right">2011-05-06 22:59 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.1.901.tar.gz">xorg-server-1.10.1.901.tar.gz</a></td><td align="right">2011-05-06 22:59 </td><td align="right">6.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.1.902.tar.bz2">xorg-server-1.10.1.902.tar.bz2</a></td><td align="right">2011-05-21 06:13 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.1.902.tar.gz">xorg-server-1.10.1.902.tar.gz</a></td><td align="right">2011-05-21 06:13 </td><td align="right">6.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.1.tar.bz2">xorg-server-1.10.1.tar.bz2</a></td><td align="right">2011-04-16 01:13 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.1.tar.gz">xorg-server-1.10.1.tar.gz</a></td><td align="right">2011-04-16 01:13 </td><td align="right">6.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.2.901.tar.bz2">xorg-server-1.10.2.901.tar.bz2</a></td><td align="right">2011-06-17 17:30 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.2.901.tar.gz">xorg-server-1.10.2.901.tar.gz</a></td><td align="right">2011-06-17 17:30 </td><td align="right">6.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.2.902.tar.bz2">xorg-server-1.10.2.902.tar.bz2</a></td><td align="right">2011-07-02 03:55 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.2.902.tar.gz">xorg-server-1.10.2.902.tar.gz</a></td><td align="right">2011-07-02 03:55 </td><td align="right">6.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.2.tar.bz2">xorg-server-1.10.2.tar.bz2</a></td><td align="right">2011-05-29 00:20 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.2.tar.gz">xorg-server-1.10.2.tar.gz</a></td><td align="right">2011-05-29 00:20 </td><td align="right">6.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.3.901.tar.bz2">xorg-server-1.10.3.901.tar.bz2</a></td><td align="right">2011-07-29 18:39 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.3.901.tar.gz">xorg-server-1.10.3.901.tar.gz</a></td><td align="right">2011-07-29 18:39 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.3.902.tar.bz2">xorg-server-1.10.3.902.tar.bz2</a></td><td align="right">2011-08-12 22:30 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.3.902.tar.gz">xorg-server-1.10.3.902.tar.gz</a></td><td align="right">2011-08-12 22:30 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.3.tar.bz2">xorg-server-1.10.3.tar.bz2</a></td><td align="right">2011-07-08 20:04 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.3.tar.gz">xorg-server-1.10.3.tar.gz</a></td><td align="right">2011-07-08 20:04 </td><td align="right">6.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.4.tar.bz2">xorg-server-1.10.4.tar.bz2</a></td><td align="right">2011-08-19 07:13 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.4.tar.gz">xorg-server-1.10.4.tar.gz</a></td><td align="right">2011-08-19 07:12 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.6.tar.bz2">xorg-server-1.10.6.tar.bz2</a></td><td align="right">2012-02-11 01:11 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.6.tar.gz">xorg-server-1.10.6.tar.gz</a></td><td align="right">2012-02-11 01:11 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.99.901.tar.bz2">xorg-server-1.10.99.901.tar.bz2</a></td><td align="right">2011-06-01 18:34 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.99.901.tar.gz">xorg-server-1.10.99.901.tar.gz</a></td><td align="right">2011-06-01 18:33 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.99.902.tar.bz2">xorg-server-1.10.99.902.tar.bz2</a></td><td align="right">2011-08-04 04:10 </td><td align="right">4.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.10.99.902.tar.gz">xorg-server-1.10.99.902.tar.gz</a></td><td align="right">2011-08-04 04:09 </td><td align="right">6.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.0.tar.bz2">xorg-server-1.11.0.tar.bz2</a></td><td align="right">2011-08-27 01:02 </td><td align="right">4.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.0.tar.gz">xorg-server-1.11.0.tar.gz</a></td><td align="right">2011-08-27 01:01 </td><td align="right">6.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.1.901.tar.bz2">xorg-server-1.11.1.901.tar.bz2</a></td><td align="right">2011-10-14 23:41 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.1.901.tar.gz">xorg-server-1.11.1.901.tar.gz</a></td><td align="right">2011-10-14 23:40 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.1.902.tar.bz2">xorg-server-1.11.1.902.tar.bz2</a></td><td align="right">2011-10-29 01:44 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.1.902.tar.gz">xorg-server-1.11.1.902.tar.gz</a></td><td align="right">2011-10-29 01:44 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.1.tar.bz2">xorg-server-1.11.1.tar.bz2</a></td><td align="right">2011-09-24 07:19 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.1.tar.gz">xorg-server-1.11.1.tar.gz</a></td><td align="right">2011-09-24 07:19 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.2.901.tar.bz2">xorg-server-1.11.2.901.tar.bz2</a></td><td align="right">2011-11-28 08:17 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.2.901.tar.gz">xorg-server-1.11.2.901.tar.gz</a></td><td align="right">2011-11-28 08:16 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.2.902.tar.bz2">xorg-server-1.11.2.902.tar.bz2</a></td><td align="right">2011-12-09 21:10 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.2.902.tar.gz">xorg-server-1.11.2.902.tar.gz</a></td><td align="right">2011-12-09 21:10 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.2.tar.bz2">xorg-server-1.11.2.tar.bz2</a></td><td align="right">2011-11-04 17:38 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.2.tar.gz">xorg-server-1.11.2.tar.gz</a></td><td align="right">2011-11-04 17:38 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.3.901.tar.bz2">xorg-server-1.11.3.901.tar.bz2</a></td><td align="right">2012-01-07 07:34 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.3.901.tar.gz">xorg-server-1.11.3.901.tar.gz</a></td><td align="right">2012-01-07 07:34 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.3.902.tar.bz2">xorg-server-1.11.3.902.tar.bz2</a></td><td align="right">2012-01-21 08:29 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.3.902.tar.gz">xorg-server-1.11.3.902.tar.gz</a></td><td align="right">2012-01-21 08:29 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.3.tar.bz2">xorg-server-1.11.3.tar.bz2</a></td><td align="right">2011-12-17 02:03 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.3.tar.gz">xorg-server-1.11.3.tar.gz</a></td><td align="right">2011-12-17 02:03 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.4.tar.bz2">xorg-server-1.11.4.tar.bz2</a></td><td align="right">2012-01-28 05:20 </td><td align="right">4.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.4.tar.gz">xorg-server-1.11.4.tar.gz</a></td><td align="right">2012-01-28 05:20 </td><td align="right">6.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.99.1.tar.bz2">xorg-server-1.11.99.1.tar.bz2</a></td><td align="right">2011-11-20 23:05 </td><td align="right">4.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.99.1.tar.gz">xorg-server-1.11.99.1.tar.gz</a></td><td align="right">2011-11-20 23:04 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.99.2.tar.bz2">xorg-server-1.11.99.2.tar.bz2</a></td><td align="right">2011-12-18 01:30 </td><td align="right">4.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.99.2.tar.gz">xorg-server-1.11.99.2.tar.gz</a></td><td align="right">2011-12-18 01:29 </td><td align="right">6.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.99.901.tar.bz2">xorg-server-1.11.99.901.tar.bz2</a></td><td align="right">2011-12-27 22:19 </td><td align="right">4.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.99.901.tar.gz">xorg-server-1.11.99.901.tar.gz</a></td><td align="right">2011-12-27 22:18 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.99.902.tar.bz2">xorg-server-1.11.99.902.tar.bz2</a></td><td align="right">2012-01-28 06:48 </td><td align="right">4.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.99.902.tar.gz">xorg-server-1.11.99.902.tar.gz</a></td><td align="right">2012-01-28 06:47 </td><td align="right">6.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.99.903.tar.bz2">xorg-server-1.11.99.903.tar.bz2</a></td><td align="right">2012-02-11 03:18 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.11.99.903.tar.gz">xorg-server-1.11.99.903.tar.gz</a></td><td align="right">2012-02-11 03:16 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.0.901.tar.bz2">xorg-server-1.12.0.901.tar.bz2</a></td><td align="right">2012-03-31 03:15 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.0.901.tar.gz">xorg-server-1.12.0.901.tar.gz</a></td><td align="right">2012-03-31 03:15 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.0.902.tar.bz2">xorg-server-1.12.0.902.tar.bz2</a></td><td align="right">2012-04-10 02:48 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.0.902.tar.gz">xorg-server-1.12.0.902.tar.gz</a></td><td align="right">2012-04-10 02:48 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.0.tar.bz2">xorg-server-1.12.0.tar.bz2</a></td><td align="right">2012-03-05 05:12 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.0.tar.gz">xorg-server-1.12.0.tar.gz</a></td><td align="right">2012-03-05 05:11 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.1.901.tar.bz2">xorg-server-1.12.1.901.tar.bz2</a></td><td align="right">2012-05-07 07:10 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.1.901.tar.gz">xorg-server-1.12.1.901.tar.gz</a></td><td align="right">2012-05-07 07:10 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.1.902.tar.bz2">xorg-server-1.12.1.902.tar.bz2</a></td><td align="right">2012-05-20 05:17 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.1.902.tar.gz">xorg-server-1.12.1.902.tar.gz</a></td><td align="right">2012-05-20 05:17 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.1.tar.bz2">xorg-server-1.12.1.tar.bz2</a></td><td align="right">2012-04-13 22:52 </td><td align="right">5.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.1.tar.gz">xorg-server-1.12.1.tar.gz</a></td><td align="right">2012-04-13 22:52 </td><td align="right">7.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.2.901.tar.bz2">xorg-server-1.12.2.901.tar.bz2</a></td><td align="right">2012-06-15 03:15 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.2.901.tar.gz">xorg-server-1.12.2.901.tar.gz</a></td><td align="right">2012-06-15 03:14 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.2.902.tar.bz2">xorg-server-1.12.2.902.tar.bz2</a></td><td align="right">2012-07-02 00:34 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.2.902.tar.gz">xorg-server-1.12.2.902.tar.gz</a></td><td align="right">2012-07-02 00:34 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.2.tar.bz2">xorg-server-1.12.2.tar.bz2</a></td><td align="right">2012-05-29 20:11 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.2.tar.gz">xorg-server-1.12.2.tar.gz</a></td><td align="right">2012-05-29 20:11 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.3.901.tar.bz2">xorg-server-1.12.3.901.tar.bz2</a></td><td align="right">2012-08-03 17:26 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.3.901.tar.gz">xorg-server-1.12.3.901.tar.gz</a></td><td align="right">2012-08-03 17:26 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.3.902.tar.bz2">xorg-server-1.12.3.902.tar.bz2</a></td><td align="right">2012-08-19 16:11 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.3.902.tar.gz">xorg-server-1.12.3.902.tar.gz</a></td><td align="right">2012-08-19 16:11 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.3.tar.bz2">xorg-server-1.12.3.tar.bz2</a></td><td align="right">2012-07-09 01:21 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.3.tar.gz">xorg-server-1.12.3.tar.gz</a></td><td align="right">2012-07-09 01:21 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.4.tar.bz2">xorg-server-1.12.4.tar.bz2</a></td><td align="right">2012-08-27 05:15 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.4.tar.gz">xorg-server-1.12.4.tar.gz</a></td><td align="right">2012-08-27 05:15 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.99.901.tar.bz2">xorg-server-1.12.99.901.tar.bz2</a></td><td align="right">2012-07-10 08:35 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.99.901.tar.gz">xorg-server-1.12.99.901.tar.gz</a></td><td align="right">2012-07-10 08:34 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.99.902.tar.bz2">xorg-server-1.12.99.902.tar.bz2</a></td><td align="right">2012-07-17 22:50 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.99.902.tar.gz">xorg-server-1.12.99.902.tar.gz</a></td><td align="right">2012-07-17 22:49 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.99.903.tar.bz2">xorg-server-1.12.99.903.tar.bz2</a></td><td align="right">2012-07-26 05:50 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.99.903.tar.gz">xorg-server-1.12.99.903.tar.gz</a></td><td align="right">2012-07-26 05:49 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.99.904.tar.bz2">xorg-server-1.12.99.904.tar.bz2</a></td><td align="right">2012-08-08 00:57 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.99.904.tar.gz">xorg-server-1.12.99.904.tar.gz</a></td><td align="right">2012-08-08 00:56 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.99.905.tar.bz2">xorg-server-1.12.99.905.tar.bz2</a></td><td align="right">2012-08-21 21:53 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.12.99.905.tar.gz">xorg-server-1.12.99.905.tar.gz</a></td><td align="right">2012-08-21 21:52 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.0.901.tar.bz2">xorg-server-1.13.0.901.tar.bz2</a></td><td align="right">2012-11-23 05:10 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.0.901.tar.gz">xorg-server-1.13.0.901.tar.gz</a></td><td align="right">2012-11-23 05:09 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.0.902.tar.bz2">xorg-server-1.13.0.902.tar.bz2</a></td><td align="right">2012-12-07 06:09 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.0.902.tar.gz">xorg-server-1.13.0.902.tar.gz</a></td><td align="right">2012-12-07 06:08 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.0.tar.bz2">xorg-server-1.13.0.tar.bz2</a></td><td align="right">2012-09-05 21:48 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.0.tar.gz">xorg-server-1.13.0.tar.gz</a></td><td align="right">2012-09-05 21:47 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.1.901.tar.bz2">xorg-server-1.13.1.901.tar.bz2</a></td><td align="right">2013-01-04 06:51 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.1.901.tar.gz">xorg-server-1.13.1.901.tar.gz</a></td><td align="right">2013-01-04 06:50 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.1.tar.bz2">xorg-server-1.13.1.tar.bz2</a></td><td align="right">2012-12-14 21:47 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.1.tar.bz2.old">xorg-server-1.13.1.tar.bz2.old</a></td><td align="right">2012-12-14 04:43 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.1.tar.gz">xorg-server-1.13.1.tar.gz</a></td><td align="right">2012-12-14 21:49 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.1.tar.gz.old">xorg-server-1.13.1.tar.gz.old</a></td><td align="right">2012-12-14 04:42 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.2.901.tar.bz2">xorg-server-1.13.2.901.tar.bz2</a></td><td align="right">2013-02-16 07:14 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.2.901.tar.gz">xorg-server-1.13.2.901.tar.gz</a></td><td align="right">2013-02-16 07:14 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.2.902.tar.bz2">xorg-server-1.13.2.902.tar.bz2</a></td><td align="right">2013-03-01 07:31 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.2.902.tar.gz">xorg-server-1.13.2.902.tar.gz</a></td><td align="right">2013-03-01 07:31 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.2.tar.bz2">xorg-server-1.13.2.tar.bz2</a></td><td align="right">2013-01-25 06:01 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.2.tar.gz">xorg-server-1.13.2.tar.gz</a></td><td align="right">2013-01-25 06:00 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.3.tar.bz2">xorg-server-1.13.3.tar.bz2</a></td><td align="right">2013-03-08 06:19 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.3.tar.gz">xorg-server-1.13.3.tar.gz</a></td><td align="right">2013-03-08 06:19 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.4.tar.bz2">xorg-server-1.13.4.tar.bz2</a></td><td align="right">2013-04-17 06:00 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.4.tar.gz">xorg-server-1.13.4.tar.gz</a></td><td align="right">2013-04-17 05:59 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.99.901.tar.bz2">xorg-server-1.13.99.901.tar.bz2</a></td><td align="right">2012-12-19 20:50 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.99.901.tar.gz">xorg-server-1.13.99.901.tar.gz</a></td><td align="right">2012-12-19 20:50 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.99.902.tar.bz2">xorg-server-1.13.99.902.tar.bz2</a></td><td align="right">2013-02-14 05:44 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.13.99.902.tar.gz">xorg-server-1.13.99.902.tar.gz</a></td><td align="right">2013-02-14 05:43 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.0.tar.bz2">xorg-server-1.14.0.tar.bz2</a></td><td align="right">2013-03-06 06:35 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.0.tar.gz">xorg-server-1.14.0.tar.gz</a></td><td align="right">2013-03-06 06:34 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.1.901.tar.bz2">xorg-server-1.14.1.901.tar.bz2</a></td><td align="right">2013-05-31 06:09 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.1.901.tar.gz">xorg-server-1.14.1.901.tar.gz</a></td><td align="right">2013-05-31 06:09 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.1.902.tar.bz2">xorg-server-1.14.1.902.tar.bz2</a></td><td align="right">2013-06-13 22:28 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.1.902.tar.gz">xorg-server-1.14.1.902.tar.gz</a></td><td align="right">2013-06-13 22:28 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.1.tar.bz2">xorg-server-1.14.1.tar.bz2</a></td><td align="right">2013-04-17 07:37 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.1.tar.gz">xorg-server-1.14.1.tar.gz</a></td><td align="right">2013-04-17 07:36 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.2-rc1.tar.bz2">xorg-server-1.14.2-rc1.tar.bz2</a></td><td align="right">2013-05-31 04:38 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.2-rc1.tar.gz">xorg-server-1.14.2-rc1.tar.gz</a></td><td align="right">2013-05-31 04:38 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.2.901.tar.bz2">xorg-server-1.14.2.901.tar.bz2</a></td><td align="right">2013-07-26 05:47 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.2.901.tar.bz2.old">xorg-server-1.14.2.901.tar.bz2.old</a></td><td align="right">2013-07-26 04:27 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.2.901.tar.gz">xorg-server-1.14.2.901.tar.gz</a></td><td align="right">2013-07-26 05:47 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.2.901.tar.gz.old">xorg-server-1.14.2.901.tar.gz.old</a></td><td align="right">2013-07-26 04:27 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.2.902.tar.bz2">xorg-server-1.14.2.902.tar.bz2</a></td><td align="right">2013-08-22 23:57 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.2.902.tar.gz">xorg-server-1.14.2.902.tar.gz</a></td><td align="right">2013-08-22 23:57 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.2.tar.bz2">xorg-server-1.14.2.tar.bz2</a></td><td align="right">2013-06-25 15:52 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.2.tar.gz">xorg-server-1.14.2.tar.gz</a></td><td align="right">2013-06-25 15:52 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.3-rc1.tar.bz2">xorg-server-1.14.3-rc1.tar.bz2</a></td><td align="right">2013-07-26 04:21 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.3-rc1.tar.gz">xorg-server-1.14.3-rc1.tar.gz</a></td><td align="right">2013-07-26 04:21 </td><td align="right">7.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.3.901.tar.bz2">xorg-server-1.14.3.901.tar.bz2</a></td><td align="right">2013-10-26 19:53 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.3.901.tar.gz">xorg-server-1.14.3.901.tar.gz</a></td><td align="right">2013-10-26 19:53 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.3.tar.bz2">xorg-server-1.14.3.tar.bz2</a></td><td align="right">2013-09-13 03:19 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.3.tar.gz">xorg-server-1.14.3.tar.gz</a></td><td align="right">2013-09-13 03:19 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.4.901.tar.bz2">xorg-server-1.14.4.901.tar.bz2</a></td><td align="right">2013-11-22 05:13 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.4.901.tar.gz">xorg-server-1.14.4.901.tar.gz</a></td><td align="right">2013-11-22 05:13 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.4.tar.bz2">xorg-server-1.14.4.tar.bz2</a></td><td align="right">2013-11-01 05:31 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.4.tar.gz">xorg-server-1.14.4.tar.gz</a></td><td align="right">2013-11-01 05:31 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.5.901.tar.bz2">xorg-server-1.14.5.901.tar.bz2</a></td><td align="right">2014-03-22 05:21 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.5.901.tar.gz">xorg-server-1.14.5.901.tar.gz</a></td><td align="right">2014-03-22 05:21 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.5.tar.bz2">xorg-server-1.14.5.tar.bz2</a></td><td align="right">2013-12-13 03:53 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.5.tar.gz">xorg-server-1.14.5.tar.gz</a></td><td align="right">2013-12-13 03:53 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.6.tar.bz2">xorg-server-1.14.6.tar.bz2</a></td><td align="right">2014-04-14 02:49 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.6.tar.gz">xorg-server-1.14.6.tar.gz</a></td><td align="right">2014-04-14 02:49 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.7.tar.bz2">xorg-server-1.14.7.tar.bz2</a></td><td align="right">2014-06-06 04:20 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.7.tar.gz">xorg-server-1.14.7.tar.gz</a></td><td align="right">2014-06-06 04:19 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.1.tar.bz2">xorg-server-1.14.99.1.tar.bz2</a></td><td align="right">2013-04-24 17:16 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.1.tar.gz">xorg-server-1.14.99.1.tar.gz</a></td><td align="right">2013-04-24 17:15 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.2.tar.bz2">xorg-server-1.14.99.2.tar.bz2</a></td><td align="right">2013-10-05 00:01 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.2.tar.gz">xorg-server-1.14.99.2.tar.gz</a></td><td align="right">2013-10-05 00:00 </td><td align="right">7.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.3.tar.bz2">xorg-server-1.14.99.3.tar.bz2</a></td><td align="right">2013-10-19 00:34 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.3.tar.gz">xorg-server-1.14.99.3.tar.gz</a></td><td align="right">2013-10-19 00:33 </td><td align="right">7.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.901.tar.bz2">xorg-server-1.14.99.901.tar.bz2</a></td><td align="right">2013-11-01 08:51 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.901.tar.gz">xorg-server-1.14.99.901.tar.gz</a></td><td align="right">2013-11-01 08:50 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.902.tar.bz2">xorg-server-1.14.99.902.tar.bz2</a></td><td align="right">2013-11-14 01:32 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.902.tar.gz">xorg-server-1.14.99.902.tar.gz</a></td><td align="right">2013-11-14 01:32 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.903.tar.bz2">xorg-server-1.14.99.903.tar.bz2</a></td><td align="right">2013-11-24 06:31 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.903.tar.gz">xorg-server-1.14.99.903.tar.gz</a></td><td align="right">2013-11-24 06:30 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.904.tar.bz2">xorg-server-1.14.99.904.tar.bz2</a></td><td align="right">2013-12-11 15:57 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.904.tar.gz">xorg-server-1.14.99.904.tar.gz</a></td><td align="right">2013-12-11 15:56 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.905.tar.bz2">xorg-server-1.14.99.905.tar.bz2</a></td><td align="right">2013-12-19 22:35 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.14.99.905.tar.gz">xorg-server-1.14.99.905.tar.gz</a></td><td align="right">2013-12-19 22:35 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.0.901.tar.bz2">xorg-server-1.15.0.901.tar.bz2</a></td><td align="right">2014-03-22 06:04 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.0.901.tar.gz">xorg-server-1.15.0.901.tar.gz</a></td><td align="right">2014-03-22 06:04 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.0.tar.bz2">xorg-server-1.15.0.tar.bz2</a></td><td align="right">2013-12-27 18:01 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.0.tar.gz">xorg-server-1.15.0.tar.gz</a></td><td align="right">2013-12-27 18:00 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.1.tar.bz2">xorg-server-1.15.1.tar.bz2</a></td><td align="right">2014-04-14 03:16 </td><td align="right">5.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.1.tar.gz">xorg-server-1.15.1.tar.gz</a></td><td align="right">2014-04-14 03:16 </td><td align="right">7.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.2.tar.bz2">xorg-server-1.15.2.tar.bz2</a></td><td align="right">2014-06-27 01:30 </td><td align="right">5.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.2.tar.bz2.sig">xorg-server-1.15.2.tar.bz2.sig</a></td><td align="right">2014-06-27 01:30 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.2.tar.gz">xorg-server-1.15.2.tar.gz</a></td><td align="right">2014-06-27 01:29 </td><td align="right">7.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.2.tar.gz.sig">xorg-server-1.15.2.tar.gz.sig</a></td><td align="right">2014-06-27 01:30 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.99.901.tar.bz2">xorg-server-1.15.99.901.tar.bz2</a></td><td align="right">2014-02-24 21:52 </td><td align="right">5.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.99.901.tar.gz">xorg-server-1.15.99.901.tar.gz</a></td><td align="right">2014-02-24 21:52 </td><td align="right">7.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.99.902.tar.bz2">xorg-server-1.15.99.902.tar.bz2</a></td><td align="right">2014-04-08 21:32 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.99.902.tar.gz">xorg-server-1.15.99.902.tar.gz</a></td><td align="right">2014-04-08 21:31 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.99.903.tar.bz2">xorg-server-1.15.99.903.tar.bz2</a></td><td align="right">2014-06-05 05:41 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.99.903.tar.gz">xorg-server-1.15.99.903.tar.gz</a></td><td align="right">2014-06-05 05:40 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.99.904.tar.bz2">xorg-server-1.15.99.904.tar.bz2</a></td><td align="right">2014-07-07 23:35 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.99.904.tar.bz2.sig">xorg-server-1.15.99.904.tar.bz2.sig</a></td><td align="right">2014-07-07 23:35 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.99.904.tar.gz">xorg-server-1.15.99.904.tar.gz</a></td><td align="right">2014-07-07 23:35 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.15.99.904.tar.gz.sig">xorg-server-1.15.99.904.tar.gz.sig</a></td><td align="right">2014-07-07 23:35 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.0.901.tar.bz2">xorg-server-1.16.0.901.tar.bz2</a></td><td align="right">2014-09-15 21:38 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.0.901.tar.bz2.sig">xorg-server-1.16.0.901.tar.bz2.sig</a></td><td align="right">2014-09-15 21:38 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.0.901.tar.gz">xorg-server-1.16.0.901.tar.gz</a></td><td align="right">2014-09-15 21:37 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.0.901.tar.gz.sig">xorg-server-1.16.0.901.tar.gz.sig</a></td><td align="right">2014-09-15 21:38 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.0.tar.bz2">xorg-server-1.16.0.tar.bz2</a></td><td align="right">2014-07-17 07:09 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.0.tar.bz2.sig">xorg-server-1.16.0.tar.bz2.sig</a></td><td align="right">2014-07-17 07:09 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.0.tar.gz">xorg-server-1.16.0.tar.gz</a></td><td align="right">2014-07-17 07:08 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.0.tar.gz.sig">xorg-server-1.16.0.tar.gz.sig</a></td><td align="right">2014-07-17 07:09 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.1.901.tar.bz2">xorg-server-1.16.1.901.tar.bz2</a></td><td align="right">2014-11-02 10:52 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.1.901.tar.bz2.sig">xorg-server-1.16.1.901.tar.bz2.sig</a></td><td align="right">2014-11-02 10:52 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.1.901.tar.gz">xorg-server-1.16.1.901.tar.gz</a></td><td align="right">2014-11-02 10:51 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.1.901.tar.gz.sig">xorg-server-1.16.1.901.tar.gz.sig</a></td><td align="right">2014-11-02 10:52 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.1.tar.bz2">xorg-server-1.16.1.tar.bz2</a></td><td align="right">2014-09-21 09:17 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.1.tar.bz2.sig">xorg-server-1.16.1.tar.bz2.sig</a></td><td align="right">2014-09-21 09:17 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.1.tar.gz">xorg-server-1.16.1.tar.gz</a></td><td align="right">2014-09-21 09:16 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.1.tar.gz.sig">xorg-server-1.16.1.tar.gz.sig</a></td><td align="right">2014-09-21 09:17 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.2.901.tar.bz2">xorg-server-1.16.2.901.tar.bz2</a></td><td align="right">2014-12-09 20:12 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.2.901.tar.bz2.sig">xorg-server-1.16.2.901.tar.bz2.sig</a></td><td align="right">2014-12-09 20:12 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.2.901.tar.gz">xorg-server-1.16.2.901.tar.gz</a></td><td align="right">2014-12-09 20:11 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.2.901.tar.gz.sig">xorg-server-1.16.2.901.tar.gz.sig</a></td><td align="right">2014-12-09 20:12 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.2.tar.bz2">xorg-server-1.16.2.tar.bz2</a></td><td align="right">2014-11-10 15:53 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.2.tar.bz2.sig">xorg-server-1.16.2.tar.bz2.sig</a></td><td align="right">2014-11-10 15:53 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.2.tar.gz">xorg-server-1.16.2.tar.gz</a></td><td align="right">2014-11-10 15:53 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.2.tar.gz.sig">xorg-server-1.16.2.tar.gz.sig</a></td><td align="right">2014-11-10 15:53 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.3.tar.bz2">xorg-server-1.16.3.tar.bz2</a></td><td align="right">2014-12-20 12:19 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.3.tar.bz2.sig">xorg-server-1.16.3.tar.bz2.sig</a></td><td align="right">2014-12-20 12:19 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.3.tar.gz">xorg-server-1.16.3.tar.gz</a></td><td align="right">2014-12-20 12:18 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.3.tar.gz.sig">xorg-server-1.16.3.tar.gz.sig</a></td><td align="right">2014-12-20 12:19 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.4.tar.bz2">xorg-server-1.16.4.tar.bz2</a></td><td align="right">2015-02-11 00:15 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.4.tar.bz2.sig">xorg-server-1.16.4.tar.bz2.sig</a></td><td align="right">2015-02-11 00:15 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.4.tar.gz">xorg-server-1.16.4.tar.gz</a></td><td align="right">2015-02-11 00:14 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.4.tar.gz.sig">xorg-server-1.16.4.tar.gz.sig</a></td><td align="right">2015-02-11 00:15 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.99.901.tar.bz2">xorg-server-1.16.99.901.tar.bz2</a></td><td align="right">2014-10-29 04:37 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.99.901.tar.bz2.sig">xorg-server-1.16.99.901.tar.bz2.sig</a></td><td align="right">2014-10-29 04:37 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.99.901.tar.gz">xorg-server-1.16.99.901.tar.gz</a></td><td align="right">2014-10-29 04:37 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.99.901.tar.gz.sig">xorg-server-1.16.99.901.tar.gz.sig</a></td><td align="right">2014-10-29 04:37 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.99.902.tar.bz2">xorg-server-1.16.99.902.tar.bz2</a></td><td align="right">2015-01-23 19:03 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.99.902.tar.bz2.sig">xorg-server-1.16.99.902.tar.bz2.sig</a></td><td align="right">2015-01-23 19:03 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.99.902.tar.gz">xorg-server-1.16.99.902.tar.gz</a></td><td align="right">2015-01-23 19:03 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.16.99.902.tar.gz.sig">xorg-server-1.16.99.902.tar.gz.sig</a></td><td align="right">2015-01-23 19:03 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.0.tar.bz2">xorg-server-1.17.0.tar.bz2</a></td><td align="right">2015-02-04 17:37 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.0.tar.bz2.sig">xorg-server-1.17.0.tar.bz2.sig</a></td><td align="right">2015-02-04 17:37 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.0.tar.gz">xorg-server-1.17.0.tar.gz</a></td><td align="right">2015-02-04 17:37 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.0.tar.gz.sig">xorg-server-1.17.0.tar.gz.sig</a></td><td align="right">2015-02-04 17:37 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.1.tar.bz2">xorg-server-1.17.1.tar.bz2</a></td><td align="right">2015-02-10 22:53 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.1.tar.bz2.sig">xorg-server-1.17.1.tar.bz2.sig</a></td><td align="right">2015-02-10 22:53 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.1.tar.gz">xorg-server-1.17.1.tar.gz</a></td><td align="right">2015-02-10 22:52 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.1.tar.gz.sig">xorg-server-1.17.1.tar.gz.sig</a></td><td align="right">2015-02-10 22:53 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.2.tar.bz2">xorg-server-1.17.2.tar.bz2</a></td><td align="right">2015-06-16 16:31 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.2.tar.bz2.sig">xorg-server-1.17.2.tar.bz2.sig</a></td><td align="right">2015-06-16 16:31 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.2.tar.gz">xorg-server-1.17.2.tar.gz</a></td><td align="right">2015-06-16 16:30 </td><td align="right">7.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.2.tar.gz.sig">xorg-server-1.17.2.tar.gz.sig</a></td><td align="right">2015-06-16 16:31 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.3.tar.bz2">xorg-server-1.17.3.tar.bz2</a></td><td align="right">2015-10-26 17:09 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.3.tar.bz2.sig">xorg-server-1.17.3.tar.bz2.sig</a></td><td align="right">2015-10-26 17:09 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.3.tar.gz">xorg-server-1.17.3.tar.gz</a></td><td align="right">2015-10-26 17:09 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.3.tar.gz.sig">xorg-server-1.17.3.tar.gz.sig</a></td><td align="right">2015-10-26 17:09 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.4.tar.bz2">xorg-server-1.17.4.tar.bz2</a></td><td align="right">2015-10-28 16:38 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.4.tar.bz2.sig">xorg-server-1.17.4.tar.bz2.sig</a></td><td align="right">2015-10-28 16:38 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.4.tar.gz">xorg-server-1.17.4.tar.gz</a></td><td align="right">2015-10-28 16:38 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.4.tar.gz.sig">xorg-server-1.17.4.tar.gz.sig</a></td><td align="right">2015-10-28 16:38 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.99.901.tar.bz2">xorg-server-1.17.99.901.tar.bz2</a></td><td align="right">2015-09-02 02:34 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.99.901.tar.bz2.sig">xorg-server-1.17.99.901.tar.bz2.sig</a></td><td align="right">2015-09-02 02:34 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.99.901.tar.gz">xorg-server-1.17.99.901.tar.gz</a></td><td align="right">2015-09-02 02:34 </td><td align="right">7.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.99.901.tar.gz.sig">xorg-server-1.17.99.901.tar.gz.sig</a></td><td align="right">2015-09-02 02:34 </td><td align="right">536 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.99.902.tar.bz2">xorg-server-1.17.99.902.tar.bz2</a></td><td align="right">2015-10-26 18:13 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.99.902.tar.bz2.sig">xorg-server-1.17.99.902.tar.bz2.sig</a></td><td align="right">2015-10-26 18:13 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.99.902.tar.gz">xorg-server-1.17.99.902.tar.gz</a></td><td align="right">2015-10-26 18:13 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.17.99.902.tar.gz.sig">xorg-server-1.17.99.902.tar.gz.sig</a></td><td align="right">2015-10-26 18:13 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.0.tar.bz2">xorg-server-1.18.0.tar.bz2</a></td><td align="right">2015-11-09 21:11 </td><td align="right">5.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.0.tar.bz2.sig">xorg-server-1.18.0.tar.bz2.sig</a></td><td align="right">2015-11-09 21:11 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.0.tar.gz">xorg-server-1.18.0.tar.gz</a></td><td align="right">2015-11-09 21:11 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.0.tar.gz.sig">xorg-server-1.18.0.tar.gz.sig</a></td><td align="right">2015-11-09 21:11 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.1.tar.bz2">xorg-server-1.18.1.tar.bz2</a></td><td align="right">2016-02-08 23:41 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.1.tar.bz2.sig">xorg-server-1.18.1.tar.bz2.sig</a></td><td align="right">2016-02-08 23:41 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.1.tar.gz">xorg-server-1.18.1.tar.gz</a></td><td align="right">2016-02-08 23:41 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.1.tar.gz.sig">xorg-server-1.18.1.tar.gz.sig</a></td><td align="right">2016-02-08 23:41 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.2.tar.bz2">xorg-server-1.18.2.tar.bz2</a></td><td align="right">2016-03-11 21:45 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.2.tar.bz2.sig">xorg-server-1.18.2.tar.bz2.sig</a></td><td align="right">2016-03-11 21:45 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.2.tar.gz">xorg-server-1.18.2.tar.gz</a></td><td align="right">2016-03-11 21:45 </td><td align="right">7.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.2.tar.gz.sig">xorg-server-1.18.2.tar.gz.sig</a></td><td align="right">2016-03-11 21:45 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.3.tar.bz2">xorg-server-1.18.3.tar.bz2</a></td><td align="right">2016-04-04 19:48 </td><td align="right">5.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.3.tar.bz2.sig">xorg-server-1.18.3.tar.bz2.sig</a></td><td align="right">2016-04-04 19:48 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.3.tar.gz">xorg-server-1.18.3.tar.gz</a></td><td align="right">2016-04-04 19:48 </td><td align="right">7.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.3.tar.gz.sig">xorg-server-1.18.3.tar.gz.sig</a></td><td align="right">2016-04-04 19:48 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.4.tar.bz2">xorg-server-1.18.4.tar.bz2</a></td><td align="right">2016-07-19 17:42 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.4.tar.bz2.sig">xorg-server-1.18.4.tar.bz2.sig</a></td><td align="right">2016-07-19 17:42 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.4.tar.gz">xorg-server-1.18.4.tar.gz</a></td><td align="right">2016-07-19 17:42 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.4.tar.gz.sig">xorg-server-1.18.4.tar.gz.sig</a></td><td align="right">2016-07-19 17:42 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.2.tar.bz2">xorg-server-1.18.99.2.tar.bz2</a></td><td align="right">2016-09-16 20:55 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.2.tar.bz2.sig">xorg-server-1.18.99.2.tar.bz2.sig</a></td><td align="right">2016-09-16 20:55 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.2.tar.gz">xorg-server-1.18.99.2.tar.gz</a></td><td align="right">2016-09-16 20:54 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.2.tar.gz.sig">xorg-server-1.18.99.2.tar.gz.sig</a></td><td align="right">2016-09-16 20:55 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.901.tar.bz2">xorg-server-1.18.99.901.tar.bz2</a></td><td align="right">2016-09-19 16:10 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.901.tar.bz2.sig">xorg-server-1.18.99.901.tar.bz2.sig</a></td><td align="right">2016-09-19 16:10 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.901.tar.gz">xorg-server-1.18.99.901.tar.gz</a></td><td align="right">2016-09-19 16:10 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.901.tar.gz.sig">xorg-server-1.18.99.901.tar.gz.sig</a></td><td align="right">2016-09-19 16:10 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.902.tar.bz2">xorg-server-1.18.99.902.tar.bz2</a></td><td align="right">2016-10-28 16:47 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.902.tar.bz2.sig">xorg-server-1.18.99.902.tar.bz2.sig</a></td><td align="right">2016-10-28 16:47 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.902.tar.gz">xorg-server-1.18.99.902.tar.gz</a></td><td align="right">2016-10-28 16:47 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.18.99.902.tar.gz.sig">xorg-server-1.18.99.902.tar.gz.sig</a></td><td align="right">2016-10-28 16:47 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.0.tar.bz2">xorg-server-1.19.0.tar.bz2</a></td><td align="right">2016-11-15 17:08 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.0.tar.bz2.sig">xorg-server-1.19.0.tar.bz2.sig</a></td><td align="right">2016-11-15 17:08 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.0.tar.gz">xorg-server-1.19.0.tar.gz</a></td><td align="right">2016-11-15 17:07 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.0.tar.gz.sig">xorg-server-1.19.0.tar.gz.sig</a></td><td align="right">2016-11-15 17:08 </td><td align="right">543 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.1.tar.bz2">xorg-server-1.19.1.tar.bz2</a></td><td align="right">2017-01-11 21:25 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.1.tar.bz2.sig">xorg-server-1.19.1.tar.bz2.sig</a></td><td align="right">2017-01-11 21:25 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.1.tar.gz">xorg-server-1.19.1.tar.gz</a></td><td align="right">2017-01-11 21:25 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.1.tar.gz.sig">xorg-server-1.19.1.tar.gz.sig</a></td><td align="right">2017-01-11 21:25 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.2.tar.bz2">xorg-server-1.19.2.tar.bz2</a></td><td align="right">2017-03-02 23:05 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.2.tar.bz2.sig">xorg-server-1.19.2.tar.bz2.sig</a></td><td align="right">2017-03-02 23:05 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.2.tar.gz">xorg-server-1.19.2.tar.gz</a></td><td align="right">2017-03-02 23:05 </td><td align="right">7.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.2.tar.gz.sig">xorg-server-1.19.2.tar.gz.sig</a></td><td align="right">2017-03-02 23:05 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.3.tar.bz2">xorg-server-1.19.3.tar.bz2</a></td><td align="right">2017-03-15 18:12 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.3.tar.bz2.sig">xorg-server-1.19.3.tar.bz2.sig</a></td><td align="right">2017-03-15 18:12 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.3.tar.gz">xorg-server-1.19.3.tar.gz</a></td><td align="right">2017-03-15 18:12 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.3.tar.gz.sig">xorg-server-1.19.3.tar.gz.sig</a></td><td align="right">2017-03-15 18:12 </td><td align="right"> 72 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.4.tar.bz2">xorg-server-1.19.4.tar.bz2</a></td><td align="right">2017-10-04 22:00 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.4.tar.bz2.sig">xorg-server-1.19.4.tar.bz2.sig</a></td><td align="right">2017-10-04 22:00 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.4.tar.gz">xorg-server-1.19.4.tar.gz</a></td><td align="right">2017-10-04 22:00 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.4.tar.gz.sig">xorg-server-1.19.4.tar.gz.sig</a></td><td align="right">2017-10-04 22:00 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.5.tar.bz2">xorg-server-1.19.5.tar.bz2</a></td><td align="right">2017-10-12 17:31 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.5.tar.bz2.sig">xorg-server-1.19.5.tar.bz2.sig</a></td><td align="right">2017-10-12 17:31 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.5.tar.gz">xorg-server-1.19.5.tar.gz</a></td><td align="right">2017-10-12 17:31 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.5.tar.gz.sig">xorg-server-1.19.5.tar.gz.sig</a></td><td align="right">2017-10-12 17:31 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.6.tar.bz2">xorg-server-1.19.6.tar.bz2</a></td><td align="right">2017-12-20 20:39 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.6.tar.bz2.sig">xorg-server-1.19.6.tar.bz2.sig</a></td><td align="right">2017-12-20 20:39 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.6.tar.gz">xorg-server-1.19.6.tar.gz</a></td><td align="right">2017-12-20 20:39 </td><td align="right">8.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.6.tar.gz.sig">xorg-server-1.19.6.tar.gz.sig</a></td><td align="right">2017-12-20 20:39 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.7.tar.bz2">xorg-server-1.19.7.tar.bz2</a></td><td align="right">2019-03-02 23:03 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.7.tar.bz2.sig">xorg-server-1.19.7.tar.bz2.sig</a></td><td align="right">2019-03-02 23:03 </td><td align="right">287 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.7.tar.gz">xorg-server-1.19.7.tar.gz</a></td><td align="right">2019-03-02 23:02 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.7.tar.gz.sig">xorg-server-1.19.7.tar.gz.sig</a></td><td align="right">2019-03-02 23:03 </td><td align="right">287 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.901.tar.bz2">xorg-server-1.19.99.901.tar.bz2</a></td><td align="right">2018-02-28 18:28 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.901.tar.bz2.sig">xorg-server-1.19.99.901.tar.bz2.sig</a></td><td align="right">2018-02-28 18:28 </td><td align="right"> 95 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.901.tar.gz">xorg-server-1.19.99.901.tar.gz</a></td><td align="right">2018-02-28 18:28 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.901.tar.gz.sig">xorg-server-1.19.99.901.tar.gz.sig</a></td><td align="right">2018-02-28 18:28 </td><td align="right"> 95 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.902.tar.bz2">xorg-server-1.19.99.902.tar.bz2</a></td><td align="right">2018-03-28 20:39 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.902.tar.bz2.sig">xorg-server-1.19.99.902.tar.bz2.sig</a></td><td align="right">2018-03-28 20:39 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.902.tar.gz">xorg-server-1.19.99.902.tar.gz</a></td><td align="right">2018-03-28 20:39 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.902.tar.gz.sig">xorg-server-1.19.99.902.tar.gz.sig</a></td><td align="right">2018-03-28 20:39 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.903.tar.bz2">xorg-server-1.19.99.903.tar.bz2</a></td><td align="right">2018-04-02 19:56 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.903.tar.bz2.sig">xorg-server-1.19.99.903.tar.bz2.sig</a></td><td align="right">2018-04-02 19:56 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.903.tar.gz">xorg-server-1.19.99.903.tar.gz</a></td><td align="right">2018-04-02 19:56 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.903.tar.gz.sig">xorg-server-1.19.99.903.tar.gz.sig</a></td><td align="right">2018-04-02 19:56 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.904.tar.bz2">xorg-server-1.19.99.904.tar.bz2</a></td><td align="right">2018-04-10 19:50 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.904.tar.bz2.sig">xorg-server-1.19.99.904.tar.bz2.sig</a></td><td align="right">2018-04-10 19:50 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.904.tar.gz">xorg-server-1.19.99.904.tar.gz</a></td><td align="right">2018-04-10 19:50 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.904.tar.gz.sig">xorg-server-1.19.99.904.tar.gz.sig</a></td><td align="right">2018-04-10 19:50 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.905.tar.bz2">xorg-server-1.19.99.905.tar.bz2</a></td><td align="right">2018-04-24 21:12 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.905.tar.bz2.sig">xorg-server-1.19.99.905.tar.bz2.sig</a></td><td align="right">2018-04-24 21:12 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.905.tar.gz">xorg-server-1.19.99.905.tar.gz</a></td><td align="right">2018-04-24 21:12 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.19.99.905.tar.gz.sig">xorg-server-1.19.99.905.tar.gz.sig</a></td><td align="right">2018-04-24 21:12 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.0.tar.bz2">xorg-server-1.20.0.tar.bz2</a></td><td align="right">2018-05-10 16:38 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.0.tar.bz2.sig">xorg-server-1.20.0.tar.bz2.sig</a></td><td align="right">2018-05-10 16:38 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.0.tar.gz">xorg-server-1.20.0.tar.gz</a></td><td align="right">2018-05-10 16:38 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.0.tar.gz.sig">xorg-server-1.20.0.tar.gz.sig</a></td><td align="right">2018-05-10 16:38 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.1.tar.bz2">xorg-server-1.20.1.tar.bz2</a></td><td align="right">2018-08-07 16:37 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.1.tar.bz2.sig">xorg-server-1.20.1.tar.bz2.sig</a></td><td align="right">2018-08-07 16:37 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.1.tar.gz">xorg-server-1.20.1.tar.gz</a></td><td align="right">2018-08-07 16:37 </td><td align="right">8.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.1.tar.gz.sig">xorg-server-1.20.1.tar.gz.sig</a></td><td align="right">2018-08-07 16:37 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.2.tar.bz2">xorg-server-1.20.2.tar.bz2</a></td><td align="right">2018-10-15 16:03 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.2.tar.bz2.sig">xorg-server-1.20.2.tar.bz2.sig</a></td><td align="right">2018-10-15 16:03 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.2.tar.gz">xorg-server-1.20.2.tar.gz</a></td><td align="right">2018-10-15 16:03 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.2.tar.gz.sig">xorg-server-1.20.2.tar.gz.sig</a></td><td align="right">2018-10-15 16:03 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.3.tar.bz2">xorg-server-1.20.3.tar.bz2</a></td><td align="right">2018-10-25 14:17 </td><td align="right">5.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.3.tar.bz2.sig">xorg-server-1.20.3.tar.bz2.sig</a></td><td align="right">2018-10-25 14:17 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.3.tar.gz">xorg-server-1.20.3.tar.gz</a></td><td align="right">2018-10-25 14:17 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.3.tar.gz.sig">xorg-server-1.20.3.tar.gz.sig</a></td><td align="right">2018-10-25 14:17 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.4.tar.bz2">xorg-server-1.20.4.tar.bz2</a></td><td align="right">2019-02-26 19:33 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.4.tar.bz2.sig">xorg-server-1.20.4.tar.bz2.sig</a></td><td align="right">2019-02-26 19:33 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.4.tar.gz">xorg-server-1.20.4.tar.gz</a></td><td align="right">2019-02-26 19:33 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.4.tar.gz.sig">xorg-server-1.20.4.tar.gz.sig</a></td><td align="right">2019-02-26 19:33 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.5.tar.bz2">xorg-server-1.20.5.tar.bz2</a></td><td align="right">2019-05-30 18:32 </td><td align="right">5.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.5.tar.bz2.sig">xorg-server-1.20.5.tar.bz2.sig</a></td><td align="right">2019-05-30 18:32 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.5.tar.gz">xorg-server-1.20.5.tar.gz</a></td><td align="right">2019-05-30 18:32 </td><td align="right">8.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.5.tar.gz.sig">xorg-server-1.20.5.tar.gz.sig</a></td><td align="right">2019-05-30 18:32 </td><td align="right">438 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.6.tar.bz2">xorg-server-1.20.6.tar.bz2</a></td><td align="right">2019-11-22 23:50 </td><td align="right">6.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.6.tar.bz2.sig">xorg-server-1.20.6.tar.bz2.sig</a></td><td align="right">2019-11-22 23:50 </td><td align="right">215 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.6.tar.gz">xorg-server-1.20.6.tar.gz</a></td><td align="right">2019-11-22 23:50 </td><td align="right">8.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="xorg-server-1.20.6.tar.gz.sig">xorg-server-1.20.6.tar.gz.sig</a></td><td align="right">2019-11-22 23:50 </td><td align="right">215 </td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+<address>Apache/2.4.38 (Debian) Server at www.x.org Port 443</address>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch-testdata/software/pulseaudio/releases/index.html b/bitbake/lib/bb/tests/fetch-testdata/software/pulseaudio/releases/index.html
new file mode 100644
index 0000000000..bf2d23cf9e
--- /dev/null
+++ b/bitbake/lib/bb/tests/fetch-testdata/software/pulseaudio/releases/index.html
@@ -0,0 +1,383 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>Index of /software/pulseaudio/releases</title>
+ </head>
+ <body>
+<h1>Index of /software/pulseaudio/releases</h1>
+ <table>
+ <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
+ <tr><th colspan="5"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/software/pulseaudio/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="bad/">bad/</a></td><td align="right">2014-01-26 17:50 </td><td align="right"> - </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.1.tar.gz">polypaudio-0.1.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">387K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.1.tar.gz.md5">polypaudio-0.1.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.1.tar.gz.sha1">polypaudio-0.1.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.2.tar.gz">polypaudio-0.2.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">460K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.2.tar.gz.md5">polypaudio-0.2.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.2.tar.gz.sha1">polypaudio-0.2.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.3.tar.gz">polypaudio-0.3.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">470K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.3.tar.gz.md5">polypaudio-0.3.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.3.tar.gz.sha1">polypaudio-0.3.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.4.tar.gz">polypaudio-0.4.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">486K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.4.tar.gz.md5">polypaudio-0.4.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.4.tar.gz.sha1">polypaudio-0.4.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.5.1.tar.gz">polypaudio-0.5.1.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">524K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.5.1.tar.gz.md5">polypaudio-0.5.1.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.5.1.tar.gz.sha1">polypaudio-0.5.1.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.5.tar.gz">polypaudio-0.5.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">518K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.5.tar.gz.md5">polypaudio-0.5.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.5.tar.gz.sha1">polypaudio-0.5.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.6.tar.gz">polypaudio-0.6.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">448K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.6.tar.gz.md5">polypaudio-0.6.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.6.tar.gz.sha1">polypaudio-0.6.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.7.tar.gz">polypaudio-0.7.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">924K</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.7.tar.gz.md5">polypaudio-0.7.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.7.tar.gz.sha1">polypaudio-0.7.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.8.1.tar.gz">polypaudio-0.8.1.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.8.1.tar.gz.md5">polypaudio-0.8.1.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.8.1.tar.gz.sha1">polypaudio-0.8.1.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.8.tar.gz">polypaudio-0.8.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.8.tar.gz.md5">polypaudio-0.8.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.8.tar.gz.sha1">polypaudio-0.8.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.9.0.tar.gz">polypaudio-0.9.0.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.9.0.tar.gz.md5">polypaudio-0.9.0.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.9.0.tar.gz.sha1">polypaudio-0.9.0.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="polypaudio-0.9.1.tar.gz">polypaudio-0.9.1.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.9.1.tar.gz.md5">polypaudio-0.9.1.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="polypaudio-0.9.1.tar.gz.sha1">polypaudio-0.9.1.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.2.tar.gz">pulseaudio-0.9.2.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.2.tar.gz.md5">pulseaudio-0.9.2.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.2.tar.gz.sha1">pulseaudio-0.9.2.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.3.tar.gz">pulseaudio-0.9.3.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.3.tar.gz.md5">pulseaudio-0.9.3.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.3.tar.gz.sha1">pulseaudio-0.9.3.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.4.tar.gz">pulseaudio-0.9.4.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.4.tar.gz.md5">pulseaudio-0.9.4.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.4.tar.gz.sha1">pulseaudio-0.9.4.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.5.tar.gz">pulseaudio-0.9.5.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.5.tar.gz.md5">pulseaudio-0.9.5.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.5.tar.gz.sha1">pulseaudio-0.9.5.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.6.tar.gz">pulseaudio-0.9.6.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.6.tar.gz.md5">pulseaudio-0.9.6.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.6.tar.gz.sha1">pulseaudio-0.9.6.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.7.tar.gz">pulseaudio-0.9.7.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.7.tar.gz.md5">pulseaudio-0.9.7.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.7.tar.gz.sha1">pulseaudio-0.9.7.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.8.tar.gz">pulseaudio-0.9.8.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.8.tar.gz.md5">pulseaudio-0.9.8.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.8.tar.gz.sha1">pulseaudio-0.9.8.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.9.tar.gz">pulseaudio-0.9.9.tar.gz</a></td><td align="right">2008-03-28 21:16 </td><td align="right">1.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.9.tar.gz.md5">pulseaudio-0.9.9.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 58 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.9.tar.gz.sha1">pulseaudio-0.9.9.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 66 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.10.tar.gz">pulseaudio-0.9.10.tar.gz</a></td><td align="right">2008-03-30 16:30 </td><td align="right">1.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.10.tar.gz.md5">pulseaudio-0.9.10.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.10.tar.gz.sha1">pulseaudio-0.9.10.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.11.tar.gz">pulseaudio-0.9.11.tar.gz</a></td><td align="right">2008-07-24 12:41 </td><td align="right">1.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.11.tar.gz.md5">pulseaudio-0.9.11.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.11.tar.gz.sha1">pulseaudio-0.9.11.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.12.tar.gz">pulseaudio-0.9.12.tar.gz</a></td><td align="right">2008-09-09 00:17 </td><td align="right">1.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.12.tar.gz.md5">pulseaudio-0.9.12.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.12.tar.gz.sha1">pulseaudio-0.9.12.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.13.tar.gz">pulseaudio-0.9.13.tar.gz</a></td><td align="right">2008-10-06 01:43 </td><td align="right">1.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.13.tar.gz.md5">pulseaudio-0.9.13.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.13.tar.gz.sha1">pulseaudio-0.9.13.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.14.tar.gz">pulseaudio-0.9.14.tar.gz</a></td><td align="right">2009-01-12 23:09 </td><td align="right">1.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.14.tar.gz.md5">pulseaudio-0.9.14.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.14.tar.gz.sha1">pulseaudio-0.9.14.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.15.tar.gz">pulseaudio-0.9.15.tar.gz</a></td><td align="right">2009-04-13 23:24 </td><td align="right">1.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.15.tar.gz.md5">pulseaudio-0.9.15.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.15.tar.gz.sha1">pulseaudio-0.9.15.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.16-test1.tar.gz">pulseaudio-0.9.16-test1.tar.gz</a></td><td align="right">2009-06-23 17:16 </td><td align="right">1.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.16-test1.tar.gz.md5">pulseaudio-0.9.16-test1.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 65 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.16-test1.tar.gz.sha1">pulseaudio-0.9.16-test1.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 73 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.16.tar.gz">pulseaudio-0.9.16.tar.gz</a></td><td align="right">2009-09-10 00:49 </td><td align="right">1.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.16.tar.gz.md5">pulseaudio-0.9.16.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.16.tar.gz.sha1">pulseaudio-0.9.16.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.17.tar.gz">pulseaudio-0.9.17.tar.gz</a></td><td align="right">2009-09-11 01:32 </td><td align="right">1.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.17.tar.gz.md5">pulseaudio-0.9.17.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.17.tar.gz.sha1">pulseaudio-0.9.17.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.18.tar.gz">pulseaudio-0.9.18.tar.gz</a></td><td align="right">2009-09-19 00:43 </td><td align="right">1.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.18.tar.gz.md5">pulseaudio-0.9.18.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.18.tar.gz.sha1">pulseaudio-0.9.18.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.19.tar.gz">pulseaudio-0.9.19.tar.gz</a></td><td align="right">2009-09-30 01:30 </td><td align="right">1.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.19.tar.gz.md5">pulseaudio-0.9.19.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.19.tar.gz.sha1">pulseaudio-0.9.19.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.20.tar.gz">pulseaudio-0.9.20.tar.gz</a></td><td align="right">2009-11-11 05:10 </td><td align="right">2.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.20.tar.gz.md5">pulseaudio-0.9.20.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.20.tar.gz.sha1">pulseaudio-0.9.20.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.21.tar.gz">pulseaudio-0.9.21.tar.gz</a></td><td align="right">2009-11-23 04:23 </td><td align="right">2.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.21.tar.gz.md5">pulseaudio-0.9.21.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.21.tar.gz.sha1">pulseaudio-0.9.21.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.22.tar.gz">pulseaudio-0.9.22.tar.gz</a></td><td align="right">2010-11-26 01:12 </td><td align="right">2.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.22.tar.gz.md5">pulseaudio-0.9.22.tar.gz.md5</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.22.tar.gz.sha1">pulseaudio-0.9.22.tar.gz.sha1</a></td><td align="right">2011-05-29 11:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.23.tar.gz">pulseaudio-0.9.23.tar.gz</a></td><td align="right">2011-06-23 21:13 </td><td align="right">2.0M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.23.tar.gz.md5">pulseaudio-0.9.23.tar.gz.md5</a></td><td align="right">2011-06-23 21:13 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.9.23.tar.gz.sha1">pulseaudio-0.9.23.tar.gz.sha1</a></td><td align="right">2011-06-23 21:13 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.1.tar.gz">pulseaudio-0.99.1.tar.gz</a></td><td align="right">2011-08-02 21:59 </td><td align="right">2.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.1.tar.gz.md5">pulseaudio-0.99.1.tar.gz.md5</a></td><td align="right">2011-08-02 21:59 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.1.tar.gz.sha1">pulseaudio-0.99.1.tar.gz.sha1</a></td><td align="right">2011-08-02 21:59 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.2.tar.gz">pulseaudio-0.99.2.tar.gz</a></td><td align="right">2011-08-16 10:19 </td><td align="right">2.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.2.tar.gz.md5">pulseaudio-0.99.2.tar.gz.md5</a></td><td align="right">2011-08-16 10:19 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.2.tar.gz.sha1">pulseaudio-0.99.2.tar.gz.sha1</a></td><td align="right">2011-08-16 10:19 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.3.tar.gz">pulseaudio-0.99.3.tar.gz</a></td><td align="right">2011-08-29 17:11 </td><td align="right">2.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.3.tar.gz.md5">pulseaudio-0.99.3.tar.gz.md5</a></td><td align="right">2011-08-29 17:11 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.3.tar.gz.sha1">pulseaudio-0.99.3.tar.gz.sha1</a></td><td align="right">2011-08-29 17:11 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.4.tar.gz">pulseaudio-0.99.4.tar.gz</a></td><td align="right">2011-09-15 11:04 </td><td align="right">2.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.4.tar.gz.md5">pulseaudio-0.99.4.tar.gz.md5</a></td><td align="right">2011-09-15 11:04 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-0.99.4.tar.gz.sha1">pulseaudio-0.99.4.tar.gz.sha1</a></td><td align="right">2011-09-15 11:04 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-1.0.tar.gz">pulseaudio-1.0.tar.gz</a></td><td align="right">2011-09-27 08:54 </td><td align="right">2.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.0.tar.gz.md5">pulseaudio-1.0.tar.gz.md5</a></td><td align="right">2011-09-27 08:54 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.0.tar.gz.sha1">pulseaudio-1.0.tar.gz.sha1</a></td><td align="right">2011-09-27 08:54 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.0.tar.xz">pulseaudio-1.0.tar.xz</a></td><td align="right">2011-09-27 08:54 </td><td align="right">1.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.0.tar.xz.md5">pulseaudio-1.0.tar.xz.md5</a></td><td align="right">2011-09-27 08:54 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.0.tar.xz.sha1">pulseaudio-1.0.tar.xz.sha1</a></td><td align="right">2011-09-27 08:54 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-1.1.tar.gz">pulseaudio-1.1.tar.gz</a></td><td align="right">2011-10-20 13:25 </td><td align="right">2.1M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.1.tar.gz.md5">pulseaudio-1.1.tar.gz.md5</a></td><td align="right">2011-10-20 13:25 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.1.tar.gz.sha1">pulseaudio-1.1.tar.gz.sha1</a></td><td align="right">2011-10-20 13:25 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.1.tar.xz">pulseaudio-1.1.tar.xz</a></td><td align="right">2011-10-20 13:25 </td><td align="right">1.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.1.tar.xz.md5">pulseaudio-1.1.tar.xz.md5</a></td><td align="right">2011-10-20 13:25 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.1.tar.xz.sha1">pulseaudio-1.1.tar.xz.sha1</a></td><td align="right">2011-10-20 13:25 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-1.99.1.tar.gz">pulseaudio-1.99.1.tar.gz</a></td><td align="right">2012-03-15 12:50 </td><td align="right">2.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.99.1.tar.gz.md5">pulseaudio-1.99.1.tar.gz.md5</a></td><td align="right">2012-03-15 12:50 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.99.1.tar.gz.sha1">pulseaudio-1.99.1.tar.gz.sha1</a></td><td align="right">2012-03-15 12:50 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.99.1.tar.xz">pulseaudio-1.99.1.tar.xz</a></td><td align="right">2012-03-15 12:50 </td><td align="right">1.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.99.1.tar.xz.md5">pulseaudio-1.99.1.tar.xz.md5</a></td><td align="right">2012-03-15 12:50 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-1.99.1.tar.xz.sha1">pulseaudio-1.99.1.tar.xz.sha1</a></td><td align="right">2012-03-15 12:50 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-2.0.tar.gz">pulseaudio-2.0.tar.gz</a></td><td align="right">2012-05-11 13:48 </td><td align="right">2.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.0.tar.gz.md5">pulseaudio-2.0.tar.gz.md5</a></td><td align="right">2012-05-11 13:48 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.0.tar.gz.sha1">pulseaudio-2.0.tar.gz.sha1</a></td><td align="right">2012-05-11 13:48 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.0.tar.xz">pulseaudio-2.0.tar.xz</a></td><td align="right">2012-05-11 13:48 </td><td align="right">1.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.0.tar.xz.md5">pulseaudio-2.0.tar.xz.md5</a></td><td align="right">2012-05-11 13:48 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.0.tar.xz.sha1">pulseaudio-2.0.tar.xz.sha1</a></td><td align="right">2012-05-11 13:48 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-2.1.tar.gz">pulseaudio-2.1.tar.gz</a></td><td align="right">2012-07-19 12:09 </td><td align="right">2.2M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.1.tar.gz.md5">pulseaudio-2.1.tar.gz.md5</a></td><td align="right">2012-07-19 12:09 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.1.tar.gz.sha1">pulseaudio-2.1.tar.gz.sha1</a></td><td align="right">2012-07-19 12:09 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.1.tar.xz">pulseaudio-2.1.tar.xz</a></td><td align="right">2012-07-19 12:09 </td><td align="right">1.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.1.tar.xz.md5">pulseaudio-2.1.tar.xz.md5</a></td><td align="right">2012-07-19 12:09 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.1.tar.xz.sha1">pulseaudio-2.1.tar.xz.sha1</a></td><td align="right">2012-07-19 12:09 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.1.tar.gz">pulseaudio-2.99.1.tar.gz</a></td><td align="right">2012-11-03 11:44 </td><td align="right">2.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.1.tar.gz.md5">pulseaudio-2.99.1.tar.gz.md5</a></td><td align="right">2012-11-03 11:45 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.1.tar.gz.sha1">pulseaudio-2.99.1.tar.gz.sha1</a></td><td align="right">2012-11-03 11:45 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.1.tar.xz">pulseaudio-2.99.1.tar.xz</a></td><td align="right">2012-11-03 11:44 </td><td align="right">1.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.1.tar.xz.md5">pulseaudio-2.99.1.tar.xz.md5</a></td><td align="right">2012-11-03 11:46 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.1.tar.xz.sha1">pulseaudio-2.99.1.tar.xz.sha1</a></td><td align="right">2012-11-03 11:46 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.2.tar.gz">pulseaudio-2.99.2.tar.gz</a></td><td align="right">2012-11-17 08:21 </td><td align="right">2.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.2.tar.gz.md5">pulseaudio-2.99.2.tar.gz.md5</a></td><td align="right">2012-11-17 08:22 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.2.tar.gz.sha1">pulseaudio-2.99.2.tar.gz.sha1</a></td><td align="right">2012-11-17 08:22 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.2.tar.xz">pulseaudio-2.99.2.tar.xz</a></td><td align="right">2012-11-17 08:21 </td><td align="right">1.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.2.tar.xz.md5">pulseaudio-2.99.2.tar.xz.md5</a></td><td align="right">2012-11-17 08:22 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.2.tar.xz.sha1">pulseaudio-2.99.2.tar.xz.sha1</a></td><td align="right">2012-11-17 08:22 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.3.tar.gz">pulseaudio-2.99.3.tar.gz</a></td><td align="right">2012-12-07 04:07 </td><td align="right">2.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.3.tar.gz.md5">pulseaudio-2.99.3.tar.gz.md5</a></td><td align="right">2012-12-07 04:07 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.3.tar.gz.sha1">pulseaudio-2.99.3.tar.gz.sha1</a></td><td align="right">2012-12-07 04:07 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.3.tar.xz">pulseaudio-2.99.3.tar.xz</a></td><td align="right">2012-12-07 04:07 </td><td align="right">1.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.3.tar.xz.md5">pulseaudio-2.99.3.tar.xz.md5</a></td><td align="right">2012-12-07 04:07 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-2.99.3.tar.xz.sha1">pulseaudio-2.99.3.tar.xz.sha1</a></td><td align="right">2012-12-07 04:07 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-3.0.tar.gz">pulseaudio-3.0.tar.gz</a></td><td align="right">2012-12-18 07:22 </td><td align="right">2.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.0.tar.gz.md5">pulseaudio-3.0.tar.gz.md5</a></td><td align="right">2012-12-18 07:22 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.0.tar.gz.sha1">pulseaudio-3.0.tar.gz.sha1</a></td><td align="right">2012-12-18 07:22 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.0.tar.xz">pulseaudio-3.0.tar.xz</a></td><td align="right">2012-12-18 07:22 </td><td align="right">1.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.0.tar.xz.md5">pulseaudio-3.0.tar.xz.md5</a></td><td align="right">2012-12-18 07:22 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.0.tar.xz.sha1">pulseaudio-3.0.tar.xz.sha1</a></td><td align="right">2012-12-18 07:22 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.1.tar.gz">pulseaudio-3.99.1.tar.gz</a></td><td align="right">2013-04-16 04:10 </td><td align="right">2.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.1.tar.gz.md5">pulseaudio-3.99.1.tar.gz.md5</a></td><td align="right">2013-04-16 04:10 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.1.tar.gz.sha1">pulseaudio-3.99.1.tar.gz.sha1</a></td><td align="right">2013-04-16 04:10 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.1.tar.xz">pulseaudio-3.99.1.tar.xz</a></td><td align="right">2013-04-16 04:10 </td><td align="right">1.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.1.tar.xz.md5">pulseaudio-3.99.1.tar.xz.md5</a></td><td align="right">2013-04-16 04:10 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.1.tar.xz.sha1">pulseaudio-3.99.1.tar.xz.sha1</a></td><td align="right">2013-04-16 04:10 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.2.tar.gz">pulseaudio-3.99.2.tar.gz</a></td><td align="right">2013-05-23 03:26 </td><td align="right">2.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.2.tar.gz.md5">pulseaudio-3.99.2.tar.gz.md5</a></td><td align="right">2013-05-23 03:26 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.2.tar.gz.sha1">pulseaudio-3.99.2.tar.gz.sha1</a></td><td align="right">2013-05-23 03:26 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.2.tar.xz">pulseaudio-3.99.2.tar.xz</a></td><td align="right">2013-05-23 03:26 </td><td align="right">1.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.2.tar.xz.md5">pulseaudio-3.99.2.tar.xz.md5</a></td><td align="right">2013-05-23 03:26 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-3.99.2.tar.xz.sha1">pulseaudio-3.99.2.tar.xz.sha1</a></td><td align="right">2013-05-23 03:26 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-4.0.tar.gz">pulseaudio-4.0.tar.gz</a></td><td align="right">2013-06-03 18:52 </td><td align="right">2.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.0.tar.gz.md5">pulseaudio-4.0.tar.gz.md5</a></td><td align="right">2013-06-03 18:52 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.0.tar.gz.sha1">pulseaudio-4.0.tar.gz.sha1</a></td><td align="right">2013-06-03 18:52 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.0.tar.xz">pulseaudio-4.0.tar.xz</a></td><td align="right">2013-06-03 18:52 </td><td align="right">1.3M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.0.tar.xz.md5">pulseaudio-4.0.tar.xz.md5</a></td><td align="right">2013-06-03 18:52 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.0.tar.xz.sha1">pulseaudio-4.0.tar.xz.sha1</a></td><td align="right">2013-06-03 18:52 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.2.tar.gz">pulseaudio-4.99.2.tar.gz</a></td><td align="right">2014-01-23 19:10 </td><td align="right">2.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.2.tar.gz.md5">pulseaudio-4.99.2.tar.gz.md5</a></td><td align="right">2014-01-23 19:10 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.2.tar.gz.sha1">pulseaudio-4.99.2.tar.gz.sha1</a></td><td align="right">2014-01-23 19:10 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.2.tar.xz">pulseaudio-4.99.2.tar.xz</a></td><td align="right">2014-01-23 19:10 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.2.tar.xz.md5">pulseaudio-4.99.2.tar.xz.md5</a></td><td align="right">2014-01-23 19:10 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.2.tar.xz.sha1">pulseaudio-4.99.2.tar.xz.sha1</a></td><td align="right">2014-01-23 19:10 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.3.tar.gz">pulseaudio-4.99.3.tar.gz</a></td><td align="right">2014-01-29 20:16 </td><td align="right">2.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.3.tar.gz.md5">pulseaudio-4.99.3.tar.gz.md5</a></td><td align="right">2014-01-29 20:16 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.3.tar.gz.sha1">pulseaudio-4.99.3.tar.gz.sha1</a></td><td align="right">2014-01-29 20:16 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.3.tar.xz">pulseaudio-4.99.3.tar.xz</a></td><td align="right">2014-01-29 20:16 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.3.tar.xz.md5">pulseaudio-4.99.3.tar.xz.md5</a></td><td align="right">2014-01-29 20:16 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.3.tar.xz.sha1">pulseaudio-4.99.3.tar.xz.sha1</a></td><td align="right">2014-01-29 20:16 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.4.tar.gz">pulseaudio-4.99.4.tar.gz</a></td><td align="right">2014-02-15 06:04 </td><td align="right">2.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.4.tar.gz.md5">pulseaudio-4.99.4.tar.gz.md5</a></td><td align="right">2014-02-15 06:04 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.4.tar.gz.sha1">pulseaudio-4.99.4.tar.gz.sha1</a></td><td align="right">2014-02-15 06:04 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.4.tar.xz">pulseaudio-4.99.4.tar.xz</a></td><td align="right">2014-02-15 06:04 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.4.tar.xz.md5">pulseaudio-4.99.4.tar.xz.md5</a></td><td align="right">2014-02-15 06:04 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-4.99.4.tar.xz.sha1">pulseaudio-4.99.4.tar.xz.sha1</a></td><td align="right">2014-02-15 06:04 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-5.0.tar.gz">pulseaudio-5.0.tar.gz</a></td><td align="right">2014-03-03 15:00 </td><td align="right">2.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.0.tar.gz.md5">pulseaudio-5.0.tar.gz.md5</a></td><td align="right">2014-03-03 15:00 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.0.tar.gz.sha1">pulseaudio-5.0.tar.gz.sha1</a></td><td align="right">2014-03-03 15:00 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.0.tar.xz">pulseaudio-5.0.tar.xz</a></td><td align="right">2014-03-03 15:00 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.0.tar.xz.md5">pulseaudio-5.0.tar.xz.md5</a></td><td align="right">2014-03-03 15:00 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.0.tar.xz.sha1">pulseaudio-5.0.tar.xz.sha1</a></td><td align="right">2014-03-03 15:00 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.1.tar.gz">pulseaudio-5.99.1.tar.gz</a></td><td align="right">2014-11-21 14:26 </td><td align="right">2.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.1.tar.gz.md5">pulseaudio-5.99.1.tar.gz.md5</a></td><td align="right">2014-11-21 14:26 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.1.tar.gz.sha1">pulseaudio-5.99.1.tar.gz.sha1</a></td><td align="right">2014-11-21 14:26 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.1.tar.xz">pulseaudio-5.99.1.tar.xz</a></td><td align="right">2014-11-21 14:27 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.1.tar.xz.md5">pulseaudio-5.99.1.tar.xz.md5</a></td><td align="right">2014-11-21 14:27 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.1.tar.xz.sha1">pulseaudio-5.99.1.tar.xz.sha1</a></td><td align="right">2014-11-21 14:27 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.2.tar.gz">pulseaudio-5.99.2.tar.gz</a></td><td align="right">2014-12-19 13:08 </td><td align="right">2.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.2.tar.gz.md5">pulseaudio-5.99.2.tar.gz.md5</a></td><td align="right">2014-12-19 13:08 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.2.tar.gz.sha1">pulseaudio-5.99.2.tar.gz.sha1</a></td><td align="right">2014-12-19 13:08 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.2.tar.xz">pulseaudio-5.99.2.tar.xz</a></td><td align="right">2014-12-19 13:08 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.2.tar.xz.md5">pulseaudio-5.99.2.tar.xz.md5</a></td><td align="right">2014-12-19 13:08 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.2.tar.xz.sha1">pulseaudio-5.99.2.tar.xz.sha1</a></td><td align="right">2014-12-19 13:08 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.3.tar.gz">pulseaudio-5.99.3.tar.gz</a></td><td align="right">2015-01-21 14:45 </td><td align="right">2.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.3.tar.gz.md5">pulseaudio-5.99.3.tar.gz.md5</a></td><td align="right">2015-01-21 14:45 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.3.tar.gz.sha1">pulseaudio-5.99.3.tar.gz.sha1</a></td><td align="right">2015-01-21 14:45 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.3.tar.xz">pulseaudio-5.99.3.tar.xz</a></td><td align="right">2015-01-21 14:45 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.3.tar.xz.md5">pulseaudio-5.99.3.tar.xz.md5</a></td><td align="right">2015-01-21 14:45 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-5.99.3.tar.xz.sha1">pulseaudio-5.99.3.tar.xz.sha1</a></td><td align="right">2015-01-21 14:45 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-6.0.tar.gz">pulseaudio-6.0.tar.gz</a></td><td align="right">2015-02-12 19:02 </td><td align="right">2.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.0.tar.gz.md5">pulseaudio-6.0.tar.gz.md5</a></td><td align="right">2015-02-12 19:02 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.0.tar.gz.sha1">pulseaudio-6.0.tar.gz.sha1</a></td><td align="right">2015-02-12 19:02 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.0.tar.xz">pulseaudio-6.0.tar.xz</a></td><td align="right">2015-02-12 19:02 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.0.tar.xz.md5">pulseaudio-6.0.tar.xz.md5</a></td><td align="right">2015-02-12 19:02 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.0.tar.xz.sha1">pulseaudio-6.0.tar.xz.sha1</a></td><td align="right">2015-02-12 19:02 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.1.tar.gz">pulseaudio-6.99.1.tar.gz</a></td><td align="right">2015-08-27 17:56 </td><td align="right">2.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.1.tar.gz.md5">pulseaudio-6.99.1.tar.gz.md5</a></td><td align="right">2015-08-27 17:56 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.1.tar.gz.sha1">pulseaudio-6.99.1.tar.gz.sha1</a></td><td align="right">2015-08-27 17:56 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.1.tar.xz">pulseaudio-6.99.1.tar.xz</a></td><td align="right">2015-08-27 17:56 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.1.tar.xz.md5">pulseaudio-6.99.1.tar.xz.md5</a></td><td align="right">2015-08-27 17:56 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.1.tar.xz.sha1">pulseaudio-6.99.1.tar.xz.sha1</a></td><td align="right">2015-08-27 17:56 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.2.tar.gz">pulseaudio-6.99.2.tar.gz</a></td><td align="right">2015-09-12 13:56 </td><td align="right">2.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.2.tar.gz.md5">pulseaudio-6.99.2.tar.gz.md5</a></td><td align="right">2015-09-12 13:56 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.2.tar.gz.sha1">pulseaudio-6.99.2.tar.gz.sha1</a></td><td align="right">2015-09-12 13:56 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.2.tar.xz">pulseaudio-6.99.2.tar.xz</a></td><td align="right">2015-09-12 13:56 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.2.tar.xz.md5">pulseaudio-6.99.2.tar.xz.md5</a></td><td align="right">2015-09-12 13:56 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-6.99.2.tar.xz.sha1">pulseaudio-6.99.2.tar.xz.sha1</a></td><td align="right">2015-09-12 13:56 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-7.0.tar.gz">pulseaudio-7.0.tar.gz</a></td><td align="right">2015-09-24 03:31 </td><td align="right">2.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.0.tar.gz.md5sum">pulseaudio-7.0.tar.gz.md5sum</a></td><td align="right">2015-09-24 03:31 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.0.tar.gz.sha1sum">pulseaudio-7.0.tar.gz.sha1sum</a></td><td align="right">2015-09-24 03:31 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.0.tar.xz">pulseaudio-7.0.tar.xz</a></td><td align="right">2015-09-24 03:31 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.0.tar.xz.md5">pulseaudio-7.0.tar.xz.md5</a></td><td align="right">2015-09-24 03:31 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.0.tar.xz.md5sum">pulseaudio-7.0.tar.xz.md5sum</a></td><td align="right">2015-09-24 03:31 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.0.tar.xz.sha1">pulseaudio-7.0.tar.xz.sha1</a></td><td align="right">2015-09-24 03:31 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.0.tar.xz.sha1sum">pulseaudio-7.0.tar.xz.sha1sum</a></td><td align="right">2015-09-24 03:31 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-7.1.tar.gz">pulseaudio-7.1.tar.gz</a></td><td align="right">2015-10-30 12:51 </td><td align="right">2.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.1.tar.gz.md5">pulseaudio-7.1.tar.gz.md5</a></td><td align="right">2015-10-30 12:51 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.1.tar.gz.sha1">pulseaudio-7.1.tar.gz.sha1</a></td><td align="right">2015-10-30 12:51 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.1.tar.xz">pulseaudio-7.1.tar.xz</a></td><td align="right">2015-10-30 12:51 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.1.tar.xz.md5">pulseaudio-7.1.tar.xz.md5</a></td><td align="right">2015-10-30 12:51 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.1.tar.xz.sha1">pulseaudio-7.1.tar.xz.sha1</a></td><td align="right">2015-10-30 12:51 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.1.tar.gz">pulseaudio-7.99.1.tar.gz</a></td><td align="right">2015-12-28 12:38 </td><td align="right">2.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.1.tar.gz.md5">pulseaudio-7.99.1.tar.gz.md5</a></td><td align="right">2015-12-28 12:38 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.1.tar.gz.sha1">pulseaudio-7.99.1.tar.gz.sha1</a></td><td align="right">2015-12-28 12:38 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.1.tar.xz">pulseaudio-7.99.1.tar.xz</a></td><td align="right">2015-12-28 12:39 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.1.tar.xz.md5">pulseaudio-7.99.1.tar.xz.md5</a></td><td align="right">2015-12-28 12:39 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.1.tar.xz.sha1">pulseaudio-7.99.1.tar.xz.sha1</a></td><td align="right">2015-12-28 12:39 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.2.tar.gz">pulseaudio-7.99.2.tar.gz</a></td><td align="right">2016-01-12 03:28 </td><td align="right">2.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.2.tar.gz.md5">pulseaudio-7.99.2.tar.gz.md5</a></td><td align="right">2016-01-12 03:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.2.tar.gz.sha1">pulseaudio-7.99.2.tar.gz.sha1</a></td><td align="right">2016-01-12 03:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.2.tar.xz">pulseaudio-7.99.2.tar.xz</a></td><td align="right">2016-01-12 03:28 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.2.tar.xz.md5">pulseaudio-7.99.2.tar.xz.md5</a></td><td align="right">2016-01-12 03:28 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-7.99.2.tar.xz.sha1">pulseaudio-7.99.2.tar.xz.sha1</a></td><td align="right">2016-01-12 03:28 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-8.0.tar.gz">pulseaudio-8.0.tar.gz</a></td><td align="right">2016-01-22 07:38 </td><td align="right">2.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.0.tar.gz.md5">pulseaudio-8.0.tar.gz.md5</a></td><td align="right">2016-01-22 07:38 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.0.tar.gz.sha1">pulseaudio-8.0.tar.gz.sha1</a></td><td align="right">2016-01-22 07:38 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.0.tar.xz">pulseaudio-8.0.tar.xz</a></td><td align="right">2016-01-22 07:38 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.0.tar.xz.md5">pulseaudio-8.0.tar.xz.md5</a></td><td align="right">2016-01-22 07:38 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.0.tar.xz.sha1">pulseaudio-8.0.tar.xz.sha1</a></td><td align="right">2016-01-22 07:38 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.1.tar.gz">pulseaudio-8.99.1.tar.gz</a></td><td align="right">2016-05-12 10:58 </td><td align="right">2.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.1.tar.gz.md5">pulseaudio-8.99.1.tar.gz.md5</a></td><td align="right">2016-05-12 10:58 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.1.tar.gz.sha1">pulseaudio-8.99.1.tar.gz.sha1</a></td><td align="right">2016-05-12 10:58 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.1.tar.xz">pulseaudio-8.99.1.tar.xz</a></td><td align="right">2016-05-12 10:58 </td><td align="right">1.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.1.tar.xz.md5">pulseaudio-8.99.1.tar.xz.md5</a></td><td align="right">2016-05-12 10:58 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.1.tar.xz.sha1">pulseaudio-8.99.1.tar.xz.sha1</a></td><td align="right">2016-05-12 10:58 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.2.tar.gz">pulseaudio-8.99.2.tar.gz</a></td><td align="right">2016-05-29 06:08 </td><td align="right">2.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.2.tar.gz.md5">pulseaudio-8.99.2.tar.gz.md5</a></td><td align="right">2016-05-29 06:08 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.2.tar.gz.sha1">pulseaudio-8.99.2.tar.gz.sha1</a></td><td align="right">2016-05-29 06:08 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.2.tar.xz">pulseaudio-8.99.2.tar.xz</a></td><td align="right">2016-05-29 06:08 </td><td align="right">1.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.2.tar.xz.md5">pulseaudio-8.99.2.tar.xz.md5</a></td><td align="right">2016-05-29 06:08 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-8.99.2.tar.xz.sha1">pulseaudio-8.99.2.tar.xz.sha1</a></td><td align="right">2016-05-29 06:08 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-9.0.tar.gz">pulseaudio-9.0.tar.gz</a></td><td align="right">2016-06-22 07:09 </td><td align="right">2.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-9.0.tar.gz.md5">pulseaudio-9.0.tar.gz.md5</a></td><td align="right">2016-06-22 07:09 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-9.0.tar.gz.sha1">pulseaudio-9.0.tar.gz.sha1</a></td><td align="right">2016-06-22 07:09 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-9.0.tar.xz">pulseaudio-9.0.tar.xz</a></td><td align="right">2016-06-22 07:09 </td><td align="right">1.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-9.0.tar.xz.md5">pulseaudio-9.0.tar.xz.md5</a></td><td align="right">2016-06-22 07:09 </td><td align="right"> 56 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-9.0.tar.xz.sha1">pulseaudio-9.0.tar.xz.sha1</a></td><td align="right">2016-06-22 07:09 </td><td align="right"> 64 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-9.99.1.tar.gz">pulseaudio-9.99.1.tar.gz</a></td><td align="right">2017-01-03 16:14 </td><td align="right">2.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-9.99.1.tar.gz.md5">pulseaudio-9.99.1.tar.gz.md5</a></td><td align="right">2017-01-03 16:14 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-9.99.1.tar.gz.sha1">pulseaudio-9.99.1.tar.gz.sha1</a></td><td align="right">2017-01-03 16:14 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-9.99.1.tar.xz">pulseaudio-9.99.1.tar.xz</a></td><td align="right">2017-01-03 16:14 </td><td align="right">1.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-9.99.1.tar.xz.md5">pulseaudio-9.99.1.tar.xz.md5</a></td><td align="right">2017-01-03 16:14 </td><td align="right"> 59 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-9.99.1.tar.xz.sha1">pulseaudio-9.99.1.tar.xz.sha1</a></td><td align="right">2017-01-03 16:14 </td><td align="right"> 67 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-10.0.tar.gz">pulseaudio-10.0.tar.gz</a></td><td align="right">2017-01-19 00:12 </td><td align="right">2.7M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-10.0.tar.gz.md5">pulseaudio-10.0.tar.gz.md5</a></td><td align="right">2017-01-19 00:12 </td><td align="right"> 57 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-10.0.tar.gz.sha1">pulseaudio-10.0.tar.gz.sha1</a></td><td align="right">2017-01-19 00:12 </td><td align="right"> 65 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-10.0.tar.xz">pulseaudio-10.0.tar.xz</a></td><td align="right">2017-01-19 00:12 </td><td align="right">1.5M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-10.0.tar.xz.md5">pulseaudio-10.0.tar.xz.md5</a></td><td align="right">2017-01-19 00:12 </td><td align="right"> 57 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-10.0.tar.xz.sha1">pulseaudio-10.0.tar.xz.sha1</a></td><td align="right">2017-01-19 00:12 </td><td align="right"> 65 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-10.99.1.tar.gz">pulseaudio-10.99.1.tar.gz</a></td><td align="right">2017-07-24 23:52 </td><td align="right">2.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-10.99.1.tar.gz.md5">pulseaudio-10.99.1.tar.gz.md5</a></td><td align="right">2017-07-24 23:52 </td><td align="right"> 60 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-10.99.1.tar.gz.sha1">pulseaudio-10.99.1.tar.gz.sha1</a></td><td align="right">2017-07-24 23:52 </td><td align="right"> 68 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-10.99.1.tar.xz">pulseaudio-10.99.1.tar.xz</a></td><td align="right">2017-07-24 23:52 </td><td align="right">1.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-10.99.1.tar.xz.md5">pulseaudio-10.99.1.tar.xz.md5</a></td><td align="right">2017-07-24 23:52 </td><td align="right"> 60 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-10.99.1.tar.xz.sha1">pulseaudio-10.99.1.tar.xz.sha1</a></td><td align="right">2017-07-24 23:52 </td><td align="right"> 68 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-11.0.tar.gz">pulseaudio-11.0.tar.gz</a></td><td align="right">2017-09-05 09:49 </td><td align="right">2.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.0.tar.gz.md5">pulseaudio-11.0.tar.gz.md5</a></td><td align="right">2017-09-05 09:49 </td><td align="right"> 57 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.0.tar.gz.sha1">pulseaudio-11.0.tar.gz.sha1</a></td><td align="right">2017-09-05 09:49 </td><td align="right"> 65 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.0.tar.xz">pulseaudio-11.0.tar.xz</a></td><td align="right">2017-09-05 09:49 </td><td align="right">1.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.0.tar.xz.md5">pulseaudio-11.0.tar.xz.md5</a></td><td align="right">2017-09-05 09:49 </td><td align="right"> 57 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.0.tar.xz.sha1">pulseaudio-11.0.tar.xz.sha1</a></td><td align="right">2017-09-05 09:49 </td><td align="right"> 65 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-11.1.tar.gz">pulseaudio-11.1.tar.gz</a></td><td align="right">2017-09-18 15:23 </td><td align="right">2.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.1.tar.gz.md5">pulseaudio-11.1.tar.gz.md5</a></td><td align="right">2017-09-18 15:23 </td><td align="right"> 57 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.1.tar.gz.sha1">pulseaudio-11.1.tar.gz.sha1</a></td><td align="right">2017-09-18 15:23 </td><td align="right"> 65 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.1.tar.xz">pulseaudio-11.1.tar.xz</a></td><td align="right">2017-09-18 15:23 </td><td align="right">1.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.1.tar.xz.md5">pulseaudio-11.1.tar.xz.md5</a></td><td align="right">2017-09-18 15:23 </td><td align="right"> 57 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.1.tar.xz.sha1">pulseaudio-11.1.tar.xz.sha1</a></td><td align="right">2017-09-18 15:23 </td><td align="right"> 65 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-11.99.1.tar.gz">pulseaudio-11.99.1.tar.gz</a></td><td align="right">2018-05-13 06:57 </td><td align="right">2.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.99.1.tar.gz.md5">pulseaudio-11.99.1.tar.gz.md5</a></td><td align="right">2018-05-13 06:57 </td><td align="right"> 60 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.99.1.tar.gz.sha1">pulseaudio-11.99.1.tar.gz.sha1</a></td><td align="right">2018-05-13 06:57 </td><td align="right"> 68 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.99.1.tar.xz">pulseaudio-11.99.1.tar.xz</a></td><td align="right">2018-05-13 06:57 </td><td align="right">1.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.99.1.tar.xz.md5">pulseaudio-11.99.1.tar.xz.md5</a></td><td align="right">2018-05-13 06:57 </td><td align="right"> 60 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-11.99.1.tar.xz.sha1">pulseaudio-11.99.1.tar.xz.sha1</a></td><td align="right">2018-05-13 06:57 </td><td align="right"> 68 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-12.0.tar.gz">pulseaudio-12.0.tar.gz</a></td><td align="right">2018-06-20 20:33 </td><td align="right">2.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.0.tar.gz.md5">pulseaudio-12.0.tar.gz.md5</a></td><td align="right">2018-06-20 20:33 </td><td align="right"> 57 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.0.tar.gz.sha1">pulseaudio-12.0.tar.gz.sha1</a></td><td align="right">2018-06-20 20:33 </td><td align="right"> 65 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.0.tar.xz">pulseaudio-12.0.tar.xz</a></td><td align="right">2018-06-20 20:33 </td><td align="right">1.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.0.tar.xz.md5">pulseaudio-12.0.tar.xz.md5</a></td><td align="right">2018-06-20 20:33 </td><td align="right"> 57 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.0.tar.xz.sha1">pulseaudio-12.0.tar.xz.sha1</a></td><td align="right">2018-06-20 20:33 </td><td align="right"> 65 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-12.1.tar.gz">pulseaudio-12.1.tar.gz</a></td><td align="right">2018-07-14 16:43 </td><td align="right">2.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.1.tar.gz.md5">pulseaudio-12.1.tar.gz.md5</a></td><td align="right">2018-07-14 16:43 </td><td align="right"> 57 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.1.tar.gz.sha1">pulseaudio-12.1.tar.gz.sha1</a></td><td align="right">2018-07-14 16:43 </td><td align="right"> 65 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.1.tar.xz">pulseaudio-12.1.tar.xz</a></td><td align="right">2018-07-14 16:43 </td><td align="right">1.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.1.tar.xz.md5">pulseaudio-12.1.tar.xz.md5</a></td><td align="right">2018-07-14 16:43 </td><td align="right"> 57 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.1.tar.xz.sha1">pulseaudio-12.1.tar.xz.sha1</a></td><td align="right">2018-07-14 16:43 </td><td align="right"> 65 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-12.2.tar.gz">pulseaudio-12.2.tar.gz</a></td><td align="right">2018-07-16 16:12 </td><td align="right">2.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.2.tar.gz.sha256">pulseaudio-12.2.tar.gz.sha256</a></td><td align="right">2018-07-16 16:13 </td><td align="right"> 89 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.2.tar.xz">pulseaudio-12.2.tar.xz</a></td><td align="right">2018-07-16 16:12 </td><td align="right">1.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.2.tar.xz.sha256">pulseaudio-12.2.tar.xz.sha256</a></td><td align="right">2018-07-16 16:13 </td><td align="right"> 89 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.1.tar.gz">pulseaudio-12.99.1.tar.gz</a></td><td align="right">2019-07-09 03:16 </td><td align="right">3.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.1.tar.gz.sha256">pulseaudio-12.99.1.tar.gz.sha256</a></td><td align="right">2019-07-09 03:16 </td><td align="right"> 92 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.1.tar.xz">pulseaudio-12.99.1.tar.xz</a></td><td align="right">2019-07-09 03:16 </td><td align="right">1.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.1.tar.xz.sha256">pulseaudio-12.99.1.tar.xz.sha256</a></td><td align="right">2019-07-09 03:16 </td><td align="right"> 92 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.2.tar.gz">pulseaudio-12.99.2.tar.gz</a></td><td align="right">2019-08-06 17:47 </td><td align="right">3.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.2.tar.gz.sha256">pulseaudio-12.99.2.tar.gz.sha256</a></td><td align="right">2019-08-06 17:47 </td><td align="right"> 92 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.2.tar.xz">pulseaudio-12.99.2.tar.xz</a></td><td align="right">2019-08-06 17:47 </td><td align="right">1.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.2.tar.xz.sha256">pulseaudio-12.99.2.tar.xz.sha256</a></td><td align="right">2019-08-06 17:47 </td><td align="right"> 92 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.3.tar.gz">pulseaudio-12.99.3.tar.gz</a></td><td align="right">2019-09-01 07:44 </td><td align="right">3.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.3.tar.gz.sha256">pulseaudio-12.99.3.tar.gz.sha256</a></td><td align="right">2019-09-01 07:44 </td><td align="right"> 92 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.3.tar.xz">pulseaudio-12.99.3.tar.xz</a></td><td align="right">2019-09-01 07:44 </td><td align="right">1.9M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-12.99.3.tar.xz.sha256">pulseaudio-12.99.3.tar.xz.sha256</a></td><td align="right">2019-09-01 07:44 </td><td align="right"> 92 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[ ]"></td><td><a href="pulseaudio-13.0.tar.gz">pulseaudio-13.0.tar.gz</a></td><td align="right">2019-09-13 13:34 </td><td align="right">3.6M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-13.0.tar.gz.sha256">pulseaudio-13.0.tar.gz.sha256</a></td><td align="right">2019-09-13 13:34 </td><td align="right"> 89 </td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-13.0.tar.xz">pulseaudio-13.0.tar.xz</a></td><td align="right">2019-09-13 13:34 </td><td align="right">1.8M</td><td>&nbsp;</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="pulseaudio-13.0.tar.xz.sha256">pulseaudio-13.0.tar.xz.sha256</a></td><td align="right">2019-09-13 13:34 </td><td align="right"> 89 </td><td>&nbsp;</td></tr>
+ <tr><th colspan="5"><hr></th></tr>
+</table>
+<address>Apache/2.4.38 (Debian) Server at freedesktop.org Port 443</address>
+</body></html>
diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py
index a0b656b610..44a4ff7442 100644
--- a/bitbake/lib/bb/tests/fetch.py
+++ b/bitbake/lib/bb/tests/fetch.py
@@ -15,6 +15,7 @@ import os
from bb.fetch2 import URI
from bb.fetch2 import FetchMethod
import bb
+from bb.tests.support.httpserver import HTTPService
def skipIfNoNetwork():
if os.environ.get("BB_SKIP_NETTESTS") == "yes":
@@ -1152,7 +1153,8 @@ class FetchLatestVersionTest(FetcherTest):
("mx-1.0", "git://github.com/clutter-project/mx.git;branch=mx-1.4", "9b1db6b8060bd00b121a692f942404a24ae2960f", "")
: "1.99.4",
# version pattern "vX.Y"
- ("mtd-utils", "git://git.infradead.org/mtd-utils.git", "ca39eb1d98e736109c64ff9c1aa2a6ecca222d8f", "")
+ # mirror of git.infradead.org since network issues interfered with testing
+ ("mtd-utils", "git://git.yoctoproject.org/mtd-utils.git", "ca39eb1d98e736109c64ff9c1aa2a6ecca222d8f", "")
: "1.5.0",
# version pattern "pkg_name-X.Y"
("presentproto", "git://anongit.freedesktop.org/git/xorg/proto/presentproto", "24f3a56e541b0a9e6c6ee76081f441221a120ef9", "")
@@ -1180,27 +1182,46 @@ class FetchLatestVersionTest(FetcherTest):
}
test_wget_uris = {
+ #
# packages with versions inside directory name
- ("util-linux", "http://kernel.org/pub/linux/utils/util-linux/v2.23/util-linux-2.24.2.tar.bz2", "", "")
+ #
+ # http://kernel.org/pub/linux/utils/util-linux/v2.23/util-linux-2.24.2.tar.bz2
+ ("util-linux", "/pub/linux/utils/util-linux/v2.23/util-linux-2.24.2.tar.bz2", "", "")
: "2.24.2",
- ("enchant", "http://www.abisource.com/downloads/enchant/1.6.0/enchant-1.6.0.tar.gz", "", "")
+ # http://www.abisource.com/downloads/enchant/1.6.0/enchant-1.6.0.tar.gz
+ ("enchant", "/downloads/enchant/1.6.0/enchant-1.6.0.tar.gz", "", "")
: "1.6.0",
- ("cmake", "http://www.cmake.org/files/v2.8/cmake-2.8.12.1.tar.gz", "", "")
+ # http://www.cmake.org/files/v2.8/cmake-2.8.12.1.tar.gz
+ ("cmake", "/files/v2.8/cmake-2.8.12.1.tar.gz", "", "")
: "2.8.12.1",
+ #
# packages with versions only in current directory
- ("eglic", "http://downloads.yoctoproject.org/releases/eglibc/eglibc-2.18-svnr23787.tar.bz2", "", "")
+ #
+ # http://downloads.yoctoproject.org/releases/eglibc/eglibc-2.18-svnr23787.tar.bz2
+ ("eglic", "/releases/eglibc/eglibc-2.18-svnr23787.tar.bz2", "", "")
: "2.19",
- ("gnu-config", "http://downloads.yoctoproject.org/releases/gnu-config/gnu-config-20120814.tar.bz2", "", "")
+ # http://downloads.yoctoproject.org/releases/gnu-config/gnu-config-20120814.tar.bz2
+ ("gnu-config", "/releases/gnu-config/gnu-config-20120814.tar.bz2", "", "")
: "20120814",
+ #
# packages with "99" in the name of possible version
- ("pulseaudio", "http://freedesktop.org/software/pulseaudio/releases/pulseaudio-4.0.tar.xz", "", "")
+ #
+ # http://freedesktop.org/software/pulseaudio/releases/pulseaudio-4.0.tar.xz
+ ("pulseaudio", "/software/pulseaudio/releases/pulseaudio-4.0.tar.xz", "", "")
: "5.0",
- ("xserver-xorg", "http://xorg.freedesktop.org/releases/individual/xserver/xorg-server-1.15.1.tar.bz2", "", "")
+ # http://xorg.freedesktop.org/releases/individual/xserver/xorg-server-1.15.1.tar.bz2
+ ("xserver-xorg", "/releases/individual/xserver/xorg-server-1.15.1.tar.bz2", "", "")
: "1.15.1",
+ #
# packages with valid UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
- ("cups", "http://www.cups.org/software/1.7.2/cups-1.7.2-source.tar.bz2", "https://github.com/apple/cups/releases", "(?P<name>cups\-)(?P<pver>((\d+[\.\-_]*)+))\-source\.tar\.gz")
+ #
+ # http://www.cups.org/software/1.7.2/cups-1.7.2-source.tar.bz2
+ # https://github.com/apple/cups/releases
+ ("cups", "/software/1.7.2/cups-1.7.2-source.tar.bz2", "/apple/cups/releases", "(?P<name>cups\-)(?P<pver>((\d+[\.\-_]*)+))\-source\.tar\.gz")
: "2.0.0",
- ("db", "http://download.oracle.com/berkeley-db/db-5.3.21.tar.gz", "http://ftp.debian.org/debian/pool/main/d/db5.3/", "(?P<name>db5\.3_)(?P<pver>\d+(\.\d+)+).+\.orig\.tar\.xz")
+ # http://download.oracle.com/berkeley-db/db-5.3.21.tar.gz
+ # http://ftp.debian.org/debian/pool/main/d/db5.3/
+ ("db", "/berkeley-db/db-5.3.21.tar.gz", "/debian/pool/main/d/db5.3/", "(?P<name>db5\.3_)(?P<pver>\d+(\.\d+)+).+\.orig\.tar\.xz")
: "5.3.10",
}
@@ -1217,18 +1238,28 @@ class FetchLatestVersionTest(FetcherTest):
r = bb.utils.vercmp_string(v, verstring)
self.assertTrue(r == -1 or r == 0, msg="Package %s, version: %s <= %s" % (k[0], v, verstring))
- @skipIfNoNetwork()
def test_wget_latest_versionstring(self):
- for k, v in self.test_wget_uris.items():
- self.d.setVar("PN", k[0])
- self.d.setVar("UPSTREAM_CHECK_URI", k[2])
- self.d.setVar("UPSTREAM_CHECK_REGEX", k[3])
- ud = bb.fetch2.FetchData(k[1], self.d)
- pupver = ud.method.latest_versionstring(ud, self.d)
- verstring = pupver[0]
- self.assertTrue(verstring, msg="Could not find upstream version for %s" % k[0])
- r = bb.utils.vercmp_string(v, verstring)
- self.assertTrue(r == -1 or r == 0, msg="Package %s, version: %s <= %s" % (k[0], v, verstring))
+ testdata = os.path.dirname(os.path.abspath(__file__)) + "/fetch-testdata"
+ server = HTTPService(testdata)
+ server.start()
+ port = server.port
+ try:
+ for k, v in self.test_wget_uris.items():
+ self.d.setVar("PN", k[0])
+ checkuri = ""
+ if k[2]:
+ checkuri = "http://localhost:%s/" % port + k[2]
+ self.d.setVar("UPSTREAM_CHECK_URI", checkuri)
+ self.d.setVar("UPSTREAM_CHECK_REGEX", k[3])
+ url = "http://localhost:%s/" % port + k[1]
+ ud = bb.fetch2.FetchData(url, self.d)
+ pupver = ud.method.latest_versionstring(ud, self.d)
+ verstring = pupver[0]
+ self.assertTrue(verstring, msg="Could not find upstream version for %s" % k[0])
+ r = bb.utils.vercmp_string(v, verstring)
+ self.assertTrue(r == -1 or r == 0, msg="Package %s, version: %s <= %s" % (k[0], v, verstring))
+ finally:
+ server.stop()
class FetchCheckStatusTest(FetcherTest):
@@ -1863,6 +1894,26 @@ class GitShallowTest(FetcherTest):
with self.assertRaises(bb.fetch2.FetchError):
self.fetch()
+ def test_shallow_fetch_missing_revs(self):
+ self.add_empty_file('a')
+ self.add_empty_file('b')
+ fetcher, ud = self.fetch(self.d.getVar('SRC_URI'))
+ self.git('tag v0.0 master', cwd=self.srcdir)
+ self.d.setVar('BB_GIT_SHALLOW_DEPTH', '0')
+ self.d.setVar('BB_GIT_SHALLOW_REVS', 'v0.0')
+ self.fetch_shallow()
+
+ def test_shallow_fetch_missing_revs_fails(self):
+ self.add_empty_file('a')
+ self.add_empty_file('b')
+ fetcher, ud = self.fetch(self.d.getVar('SRC_URI'))
+ self.d.setVar('BB_GIT_SHALLOW_DEPTH', '0')
+ self.d.setVar('BB_GIT_SHALLOW_REVS', 'v0.0')
+
+ with self.assertRaises(bb.fetch2.FetchError), self.assertLogs("BitBake.Fetcher", level="ERROR") as cm:
+ self.fetch_shallow()
+ self.assertIn("Unable to find revision v0.0 even from upstream", cm.output[0])
+
@skipIfNoNetwork()
def test_bitbake(self):
self.git('remote add --mirror=fetch origin git://github.com/openembedded/bitbake', cwd=self.srcdir)
diff --git a/bitbake/lib/bb/tests/runqueue.py b/bitbake/lib/bb/tests/runqueue.py
index 5e6439156d..20c88ac3d5 100644
--- a/bitbake/lib/bb/tests/runqueue.py
+++ b/bitbake/lib/bb/tests/runqueue.py
@@ -255,7 +255,7 @@ class RunQueueTests(unittest.TestCase):
cmd = ["bitbake", "a1", "b1"]
tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True)
expected = ['a1:populate_sysroot', 'a1:package', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene',
- 'a1:package_write_ipk_setscene', 'a1:package_qa_setscene']
+ 'a1:package_write_ipk_setscene', 'a1:package_qa_setscene', 'a1:build']
self.assertEqual(set(tasks), set(expected))
self.shutdown(tempdir)
diff --git a/bitbake/lib/bb/tests/support/httpserver.py b/bitbake/lib/bb/tests/support/httpserver.py
new file mode 100644
index 0000000000..78f7660053
--- /dev/null
+++ b/bitbake/lib/bb/tests/support/httpserver.py
@@ -0,0 +1,65 @@
+#
+# SPDX-License-Identifier: MIT
+#
+
+import http.server
+import multiprocessing
+import os
+import traceback
+import signal
+import logging
+from socketserver import ThreadingMixIn
+
+class HTTPServer(ThreadingMixIn, http.server.HTTPServer):
+
+ def server_start(self, root_dir, logger):
+ os.chdir(root_dir)
+ self.serve_forever()
+
+class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
+
+ def log_message(self, format_str, *args):
+ pass
+
+class HTTPService(object):
+
+ def __init__(self, root_dir, host='', port=0, logger=None):
+ self.root_dir = root_dir
+ self.host = host
+ self.port = port
+ if not logger:
+ logger = logging.getLogger()
+ self.logger = logger
+
+ def start(self):
+ print(self.root_dir)
+ if not os.path.exists(self.root_dir):
+ self.logger.info("Not starting HTTPService for directory %s which doesn't exist" % (self.root_dir))
+ return
+
+ self.server = HTTPServer((self.host, self.port), HTTPRequestHandler)
+ if self.port == 0:
+ self.port = self.server.server_port
+ self.process = multiprocessing.Process(target=self.server.server_start, args=[self.root_dir, self.logger])
+
+ # The signal handler from testimage.bbclass can cause deadlocks here
+ # if the HTTPServer is terminated before it can restore the standard
+ #signal behaviour
+ orig = signal.getsignal(signal.SIGTERM)
+ signal.signal(signal.SIGTERM, signal.SIG_DFL)
+ self.process.start()
+ signal.signal(signal.SIGTERM, orig)
+
+ if self.logger:
+ self.logger.info("Started HTTPService on %s:%s" % (self.host, self.port))
+
+
+ def stop(self):
+ if hasattr(self, "server"):
+ self.server.server_close()
+ if hasattr(self, "process"):
+ self.process.terminate()
+ self.process.join()
+ if self.logger:
+ self.logger.info("Stopped HTTPService on %s:%s" % (self.host, self.port))
+
diff --git a/bitbake/lib/bb/tests/utils.py b/bitbake/lib/bb/tests/utils.py
index f4adf1d44b..5c910b4b8e 100644
--- a/bitbake/lib/bb/tests/utils.py
+++ b/bitbake/lib/bb/tests/utils.py
@@ -103,6 +103,32 @@ class Path(unittest.TestCase):
result = bb.utils._check_unsafe_delete_path(arg1)
self.assertEqual(result, correctresult, '_check_unsafe_delete_path("%s") != %s' % (arg1, correctresult))
+class Checksum(unittest.TestCase):
+ filler = b"Shiver me timbers square-rigged spike Gold Road galleon bilge water boatswain wherry jack pirate. Mizzenmast rum lad Privateer jack salmagundi hang the jib piracy Pieces of Eight Corsair. Parrel marooned black spot yawl provost quarterdeck cable no prey, no pay spirits lateen sail."
+
+ def test_md5(self):
+ import hashlib
+ with tempfile.NamedTemporaryFile() as f:
+ f.write(self.filler)
+ f.flush()
+ checksum = bb.utils.md5_file(f.name)
+ self.assertEqual(checksum, "bd572cd5de30a785f4efcb6eaf5089e3")
+
+ def test_sha1(self):
+ import hashlib
+ with tempfile.NamedTemporaryFile() as f:
+ f.write(self.filler)
+ f.flush()
+ checksum = bb.utils.sha1_file(f.name)
+ self.assertEqual(checksum, "249eb8fd654732ea836d5e702d7aa567898eca71")
+
+ def test_sha256(self):
+ import hashlib
+ with tempfile.NamedTemporaryFile() as f:
+ f.write(self.filler)
+ f.flush()
+ checksum = bb.utils.sha256_file(f.name)
+ self.assertEqual(checksum, "fcfbae8bf6b721dbb9d2dc6a9334a58f2031a9a9b302999243f99da4d7f12d0f")
class EditMetadataFile(unittest.TestCase):
_origfile = """
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py
index 35736ade03..c6abb2a114 100644
--- a/bitbake/lib/bb/ui/knotty.py
+++ b/bitbake/lib/bb/ui/knotty.py
@@ -35,15 +35,15 @@ class BBProgress(progressbar.ProgressBar):
self.msg = msg
self.extrapos = extrapos
if not widgets:
- widgets = [progressbar.Percentage(), ' ', progressbar.Bar(), ' ',
- progressbar.ETA()]
- self.extrapos = 4
+ widgets = [': ', progressbar.Percentage(), ' ', progressbar.Bar(),
+ ' ', progressbar.ETA()]
+ self.extrapos = 5
if resize_handler:
self._resize_default = resize_handler
else:
self._resize_default = signal.getsignal(signal.SIGWINCH)
- progressbar.ProgressBar.__init__(self, maxval, [self.msg + ": "] + widgets, fd=sys.stdout)
+ progressbar.ProgressBar.__init__(self, maxval, [self.msg] + widgets, fd=sys.stdout)
def _handle_resize(self, signum=None, frame=None):
progressbar.ProgressBar._handle_resize(self, signum, frame)
@@ -255,19 +255,19 @@ class TerminalFilter(object):
start_time = activetasks[t].get("starttime", None)
if not pbar or pbar.bouncing != (progress < 0):
if progress < 0:
- pbar = BBProgress("0: %s (pid %s) " % (activetasks[t]["title"], t), 100, widgets=[progressbar.BouncingSlider(), ''], extrapos=2, resize_handler=self.sigwinch_handle)
+ pbar = BBProgress("0: %s (pid %s)" % (activetasks[t]["title"], activetasks[t]["pid"]), 100, widgets=[' ', progressbar.BouncingSlider(), ''], extrapos=3, resize_handler=self.sigwinch_handle)
pbar.bouncing = True
else:
- pbar = BBProgress("0: %s (pid %s) " % (activetasks[t]["title"], t), 100, widgets=[progressbar.Percentage(), ' ', progressbar.Bar(), ''], extrapos=4, resize_handler=self.sigwinch_handle)
+ pbar = BBProgress("0: %s (pid %s)" % (activetasks[t]["title"], activetasks[t]["pid"]), 100, widgets=[' ', progressbar.Percentage(), ' ', progressbar.Bar(), ''], extrapos=5, resize_handler=self.sigwinch_handle)
pbar.bouncing = False
activetasks[t]["progressbar"] = pbar
tasks.append((pbar, progress, rate, start_time))
else:
start_time = activetasks[t].get("starttime", None)
if start_time:
- tasks.append("%s - %s (pid %s)" % (activetasks[t]["title"], self.elapsed(currenttime - start_time), t))
+ tasks.append("%s - %s (pid %s)" % (activetasks[t]["title"], self.elapsed(currenttime - start_time), activetasks[t]["pid"]))
else:
- tasks.append("%s (pid %s)" % (activetasks[t]["title"], t))
+ tasks.append("%s (pid %s)" % (activetasks[t]["title"], activetasks[t]["pid"]))
if self.main.shutdown:
content = "Waiting for %s running tasks to finish:" % len(activetasks)
@@ -477,7 +477,8 @@ def main(server, eventHandler, params, tf = TerminalFilter):
if event is None:
if main.shutdown > 1:
break
- termfilter.updateFooter()
+ if not parseprogress:
+ termfilter.updateFooter()
event = eventHandler.waitEvent(0.25)
if event is None:
continue
@@ -517,8 +518,8 @@ def main(server, eventHandler, params, tf = TerminalFilter):
continue
# Prefix task messages with recipe/task
- if event.taskpid in helper.running_tasks and event.levelno != format.PLAIN:
- taskinfo = helper.running_tasks[event.taskpid]
+ if event.taskpid in helper.pidmap and event.levelno != format.PLAIN:
+ taskinfo = helper.running_tasks[helper.pidmap[event.taskpid]]
event.msg = taskinfo['title'] + ': ' + event.msg
if hasattr(event, 'fn'):
event.msg = event.fn + ': ' + event.msg
@@ -539,6 +540,7 @@ def main(server, eventHandler, params, tf = TerminalFilter):
continue
if event.total == 0:
continue
+ termfilter.clearFooter()
parseprogress = new_progress("Parsing recipes", event.total).start()
continue
if isinstance(event, bb.event.ParseProgress):
@@ -638,6 +640,7 @@ def main(server, eventHandler, params, tf = TerminalFilter):
if isinstance(event, bb.event.ProcessStarted):
if params.options.quiet > 1:
continue
+ termfilter.clearFooter()
parseprogress = new_progress(event.processname, event.total)
parseprogress.start(False)
continue
diff --git a/bitbake/lib/bb/ui/uihelper.py b/bitbake/lib/bb/ui/uihelper.py
index c8dd7df087..48d808ae28 100644
--- a/bitbake/lib/bb/ui/uihelper.py
+++ b/bitbake/lib/bb/ui/uihelper.py
@@ -15,39 +15,48 @@ class BBUIHelper:
# Running PIDs preserves the order tasks were executed in
self.running_pids = []
self.failed_tasks = []
+ self.pidmap = {}
self.tasknumber_current = 0
self.tasknumber_total = 0
def eventHandler(self, event):
+ # PIDs are a bad idea as they can be reused before we process all UI events.
+ # We maintain a 'fuzzy' match for TaskProgress since there is no other way to match
+ def removetid(pid, tid):
+ self.running_pids.remove(tid)
+ del self.running_tasks[tid]
+ if self.pidmap[pid] == tid:
+ del self.pidmap[pid]
+ self.needUpdate = True
+
if isinstance(event, bb.build.TaskStarted):
+ tid = event._fn + ":" + event._task
if event._mc != "default":
- self.running_tasks[event.pid] = { 'title' : "mc:%s:%s %s" % (event._mc, event._package, event._task), 'starttime' : time.time() }
+ self.running_tasks[tid] = { 'title' : "mc:%s:%s %s" % (event._mc, event._package, event._task), 'starttime' : time.time(), 'pid' : event.pid }
else:
- self.running_tasks[event.pid] = { 'title' : "%s %s" % (event._package, event._task), 'starttime' : time.time() }
- self.running_pids.append(event.pid)
+ self.running_tasks[tid] = { 'title' : "%s %s" % (event._package, event._task), 'starttime' : time.time(), 'pid' : event.pid }
+ self.running_pids.append(tid)
+ self.pidmap[event.pid] = tid
self.needUpdate = True
elif isinstance(event, bb.build.TaskSucceeded):
- del self.running_tasks[event.pid]
- self.running_pids.remove(event.pid)
- self.needUpdate = True
+ tid = event._fn + ":" + event._task
+ removetid(event.pid, tid)
elif isinstance(event, bb.build.TaskFailedSilent):
- del self.running_tasks[event.pid]
- self.running_pids.remove(event.pid)
+ tid = event._fn + ":" + event._task
+ removetid(event.pid, tid)
# Don't add to the failed tasks list since this is e.g. a setscene task failure
- self.needUpdate = True
elif isinstance(event, bb.build.TaskFailed):
- del self.running_tasks[event.pid]
- self.running_pids.remove(event.pid)
+ tid = event._fn + ":" + event._task
+ removetid(event.pid, tid)
self.failed_tasks.append( { 'title' : "%s %s" % (event._package, event._task)})
- self.needUpdate = True
elif isinstance(event, bb.runqueue.runQueueTaskStarted):
self.tasknumber_current = event.stats.completed + event.stats.active + event.stats.failed + 1
self.tasknumber_total = event.stats.total
self.needUpdate = True
elif isinstance(event, bb.build.TaskProgress):
- if event.pid > 0:
- self.running_tasks[event.pid]['progress'] = event.progress
- self.running_tasks[event.pid]['rate'] = event.rate
+ if event.pid > 0 and event.pid in self.pidmap:
+ self.running_tasks[self.pidmap[event.pid]]['progress'] = event.progress
+ self.running_tasks[self.pidmap[event.pid]]['rate'] = event.rate
self.needUpdate = True
else:
return False
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py
index d035949b3d..0b6bb0454c 100644
--- a/bitbake/lib/bb/utils.py
+++ b/bitbake/lib/bb/utils.py
@@ -428,10 +428,11 @@ def fileslocked(files):
for lockfile in files:
locks.append(bb.utils.lockfile(lockfile))
- yield
-
- for lock in locks:
- bb.utils.unlockfile(lock)
+ try:
+ yield
+ finally:
+ for lock in locks:
+ bb.utils.unlockfile(lock)
@contextmanager
def timeout(seconds):
@@ -520,22 +521,26 @@ def unlockfile(lf):
fcntl.flock(lf.fileno(), fcntl.LOCK_UN)
lf.close()
-def md5_file(filename):
- """
- Return the hex string representation of the MD5 checksum of filename.
- """
- import hashlib, mmap
+def _hasher(method, filename):
+ import mmap
with open(filename, "rb") as f:
- m = hashlib.md5()
try:
with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm:
for chunk in iter(lambda: mm.read(8192), b''):
- m.update(chunk)
+ method.update(chunk)
except ValueError:
# You can't mmap() an empty file so silence this exception
pass
- return m.hexdigest()
+ return method.hexdigest()
+
+
+def md5_file(filename):
+ """
+ Return the hex string representation of the MD5 checksum of filename.
+ """
+ import hashlib
+ return _hasher(hashlib.md5(), filename)
def sha256_file(filename):
"""
@@ -543,24 +548,14 @@ def sha256_file(filename):
filename.
"""
import hashlib
-
- s = hashlib.sha256()
- with open(filename, "rb") as f:
- for line in f:
- s.update(line)
- return s.hexdigest()
+ return _hasher(hashlib.sha256(), filename)
def sha1_file(filename):
"""
Return the hex string representation of the SHA1 checksum of the filename
"""
import hashlib
-
- s = hashlib.sha1()
- with open(filename, "rb") as f:
- for line in f:
- s.update(line)
- return s.hexdigest()
+ return _hasher(hashlib.sha1(), filename)
def preserved_envvars_exported():
"""Variables which are taken from the environment and placed in and exported
@@ -856,7 +851,7 @@ def copyfile(src, dest, newmtime = None, sstat = None):
if destexists and not stat.S_ISDIR(dstat[stat.ST_MODE]):
os.unlink(dest)
os.symlink(target, dest)
- #os.lchown(dest,sstat[stat.ST_UID],sstat[stat.ST_GID])
+ os.lchown(dest,sstat[stat.ST_UID],sstat[stat.ST_GID])
return os.lstat(dest)
except Exception as e:
logger.warning("copyfile: failed to create symlink %s to %s (%s)" % (dest, target, e))
diff --git a/bitbake/lib/hashserv/client.py b/bitbake/lib/hashserv/client.py
index f65956617b..ae0cce9df4 100644
--- a/bitbake/lib/hashserv/client.py
+++ b/bitbake/lib/hashserv/client.py
@@ -148,6 +148,14 @@ class Client(object):
m['unihash'] = unihash
return self.send_message({'report': m})
+ def report_unihash_equiv(self, taskhash, method, unihash, extra={}):
+ self._set_mode(self.MODE_NORMAL)
+ m = extra.copy()
+ m['taskhash'] = taskhash
+ m['method'] = method
+ m['unihash'] = unihash
+ return self.send_message({'report-equiv': m})
+
def get_stats(self):
self._set_mode(self.MODE_NORMAL)
return self.send_message({'get-stats': None})
diff --git a/bitbake/lib/hashserv/server.py b/bitbake/lib/hashserv/server.py
index 0aff77688e..cc7e48233b 100644
--- a/bitbake/lib/hashserv/server.py
+++ b/bitbake/lib/hashserv/server.py
@@ -143,6 +143,7 @@ class ServerClient(object):
handlers = {
'get': self.handle_get,
'report': self.handle_report,
+ 'report-equiv': self.handle_equivreport,
'get-stream': self.handle_get_stream,
'get-stats': self.handle_get_stats,
'reset-stats': self.handle_reset_stats,
@@ -303,6 +304,41 @@ class ServerClient(object):
self.write_message(d)
+ async def handle_equivreport(self, data):
+ with closing(self.db.cursor()) as cursor:
+ insert_data = {
+ 'method': data['method'],
+ 'outhash': "",
+ 'taskhash': data['taskhash'],
+ 'unihash': data['unihash'],
+ 'created': datetime.now()
+ }
+
+ for k in ('owner', 'PN', 'PV', 'PR', 'task', 'outhash_siginfo'):
+ if k in data:
+ insert_data[k] = data[k]
+
+ cursor.execute('''INSERT OR IGNORE INTO tasks_v2 (%s) VALUES (%s)''' % (
+ ', '.join(sorted(insert_data.keys())),
+ ', '.join(':' + k for k in sorted(insert_data.keys()))),
+ insert_data)
+
+ self.db.commit()
+
+ # Fetch the unihash that will be reported for the taskhash. If the
+ # unihash matches, it means this row was inserted (or the mapping
+ # was already valid)
+ row = self.query_equivalent(data['method'], data['taskhash'])
+
+ if row['unihash'] == data['unihash']:
+ logger.info('Adding taskhash equivalence for %s with unihash %s',
+ data['taskhash'], row['unihash'])
+
+ d = {k: row[k] for k in ('taskhash', 'method', 'unihash')}
+
+ self.write_message(d)
+
+
async def handle_get_stats(self, request):
d = {
'requests': self.request_stats.todict(),
diff --git a/bitbake/lib/prserv/serv.py b/bitbake/lib/prserv/serv.py
index be3acec36a..446e1fe127 100644
--- a/bitbake/lib/prserv/serv.py
+++ b/bitbake/lib/prserv/serv.py
@@ -243,6 +243,7 @@ class PRServer(SimpleXMLRPCServer):
try:
pid = os.fork()
if pid > 0:
+ self.socket.close() # avoid ResourceWarning in parent
return pid
except OSError as e:
raise Exception("%s [%d]" % (e.strerror, e.errno))
@@ -291,10 +292,9 @@ class PRServer(SimpleXMLRPCServer):
logger.addHandler(streamhandler)
# write pidfile
- pid = str(os.getpid())
- pf = open(self.pidfile, 'w')
- pf.write("%s\n" % pid)
- pf.close()
+ pid = str(os.getpid())
+ with open(self.pidfile, 'w') as pf:
+ pf.write("%s\n" % pid)
self.work_forever()
self.delpid()
@@ -352,9 +352,8 @@ def start_daemon(dbfile, host, port, logfile):
ip = socket.gethostbyname(host)
pidfile = PIDPREFIX % (ip, port)
try:
- pf = open(pidfile,'r')
- pid = int(pf.readline().strip())
- pf.close()
+ with open(pidfile) as pf:
+ pid = int(pf.readline().strip())
except IOError:
pid = None
@@ -449,29 +448,35 @@ class PRServiceConfigError(Exception):
def auto_start(d):
global singleton
- # Shutdown any existing PR Server
- auto_shutdown()
-
host_params = list(filter(None, (d.getVar('PRSERV_HOST') or '').split(':')))
if not host_params:
+ # Shutdown any existing PR Server
+ auto_shutdown()
return None
if len(host_params) != 2:
+ # Shutdown any existing PR Server
+ auto_shutdown()
logger.critical('\n'.join(['PRSERV_HOST: incorrect format',
'Usage: PRSERV_HOST = "<hostname>:<port>"']))
raise PRServiceConfigError
- if is_local_special(host_params[0], int(host_params[1])) and not singleton:
+ if is_local_special(host_params[0], int(host_params[1])):
import bb.utils
cachedir = (d.getVar("PERSISTENT_DIR") or d.getVar("CACHE"))
if not cachedir:
logger.critical("Please set the 'PERSISTENT_DIR' or 'CACHE' variable")
raise PRServiceConfigError
- bb.utils.mkdirhier(cachedir)
dbfile = os.path.join(cachedir, "prserv.sqlite3")
logfile = os.path.join(cachedir, "prserv.log")
- singleton = PRServSingleton(os.path.abspath(dbfile), os.path.abspath(logfile), ("localhost",0))
- singleton.start()
+ if singleton:
+ if singleton.dbfile != dbfile:
+ # Shutdown any existing PR Server as doesn't match config
+ auto_shutdown()
+ if not singleton:
+ bb.utils.mkdirhier(cachedir)
+ singleton = PRServSingleton(os.path.abspath(dbfile), os.path.abspath(logfile), ("localhost",0))
+ singleton.start()
if singleton:
host, port = singleton.getinfo()
else:
diff --git a/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py b/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py
index 50ec409860..19f659ec41 100644
--- a/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py
+++ b/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py
@@ -168,17 +168,17 @@ class Command(BaseCommand):
try:
self.cleanup()
except Exception as e:
- logger.warn("runbuilds: cleanup exception %s" % str(e))
+ logger.warning("runbuilds: cleanup exception %s" % str(e))
try:
self.archive()
except Exception as e:
- logger.warn("runbuilds: archive exception %s" % str(e))
+ logger.warning("runbuilds: archive exception %s" % str(e))
try:
self.schedule()
except Exception as e:
- logger.warn("runbuilds: schedule exception %s" % str(e))
+ logger.warning("runbuilds: schedule exception %s" % str(e))
def handle(self, **options):
pidfile_path = os.path.join(os.environ.get("BUILDDIR", "."),
diff --git a/documentation/Makefile b/documentation/Makefile
index 525a7309aa..1a33c771f2 100644
--- a/documentation/Makefile
+++ b/documentation/Makefile
@@ -76,6 +76,11 @@
# example publishes the 1.2 version of the PDF and HTML YP Development Tasks Manual
# for the 'denzil' branch.
#
+# IN MEMORIAM: This comment is to remember Scott Rifenbark (scottrif), whom we lost
+# in January, 2020. Scott was the primary technical writer for the Yocto Project for
+# over 9 years. In that time, he contributed many thousands of patches, built this
+# documentation tree, and enabled tens of thousands of developers to succeed with
+# embedded Linux. He ran this Makefile many thousands of times. Godspeed, Dude.
ifeq ($(DOC),brief-yoctoprojectqs)
XSLTOPTS = --stringparam html.stylesheet brief-yoctoprojectqs-style.css \
diff --git a/documentation/bsp-guide/bsp-guide.xml b/documentation/bsp-guide/bsp-guide.xml
index dd0c76addc..db68bed3de 100644..100755
--- a/documentation/bsp-guide/bsp-guide.xml
+++ b/documentation/bsp-guide/bsp-guide.xml
@@ -133,9 +133,29 @@
</revision>
<revision>
<revnumber>3.0</revnumber>
- <date>&REL_MONTH_YEAR;</date>
+ <date>October 2019</date>
<revremark>Released with the Yocto Project 3.0 Release.</revremark>
</revision>
+ <revision>
+ <revnumber>3.0.1</revnumber>
+ <date>December 2019;</date>
+ <revremark>Released with the Yocto Project 3.0.1 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.2</revnumber>
+ <date>FEBURARY 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.2 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.3</revnumber>
+ <date>May 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.3 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.4</revnumber>
+ <date>&REL_MONTH_YEAR;</date>
+ <revremark>Released with the Yocto Project 3.0.4 Release.</revremark>
+ </revision>
</revhistory>
<copyright>
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml
index 00741ee456..1e6addde4f 100644
--- a/documentation/dev-manual/dev-manual-common-tasks.xml
+++ b/documentation/dev-manual/dev-manual-common-tasks.xml
@@ -10845,15 +10845,6 @@
</para>
<para>
- By default, the Yocto Project uses SysVinit as the initialization
- manager.
- However, support also exists for systemd,
- which is a full replacement for init with
- parallel starting of services, reduced shell overhead and other
- features that are used by many distributions.
- </para>
-
- <para>
Within the system, SysVinit treats system components as services.
These services are maintained as shell scripts stored in the
<filename>/etc/init.d/</filename> directory.
diff --git a/documentation/dev-manual/dev-manual.xml b/documentation/dev-manual/dev-manual.xml
index 04fa1e4f9a..4d2d738daf 100644..100755
--- a/documentation/dev-manual/dev-manual.xml
+++ b/documentation/dev-manual/dev-manual.xml
@@ -118,9 +118,29 @@
</revision>
<revision>
<revnumber>3.0</revnumber>
- <date>&REL_MONTH_YEAR;</date>
+ <date>October 2019</date>
<revremark>Released with the Yocto Project 3.0 Release.</revremark>
</revision>
+ <revision>
+ <revnumber>3.0.1</revnumber>
+ <date>December 2019;</date>
+ <revremark>Released with the Yocto Project 3.0.1 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.2</revnumber>
+ <date>FEBURARY 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.2 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.3</revnumber>
+ <date>May 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.3 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.4</revnumber>
+ <date>&REL_MONTH_YEAR;</date>
+ <revremark>Released with the Yocto Project 3.0.4 Release.</revremark>
+ </revision>
</revhistory>
<copyright>
diff --git a/documentation/kernel-dev/kernel-dev.xml b/documentation/kernel-dev/kernel-dev.xml
index 4c5881b071..94abe06c5a 100644..100755
--- a/documentation/kernel-dev/kernel-dev.xml
+++ b/documentation/kernel-dev/kernel-dev.xml
@@ -103,9 +103,19 @@
</revision>
<revision>
<revnumber>3.0</revnumber>
- <date>&REL_MONTH_YEAR;</date>
+ <date>October 2019</date>
<revremark>Released with the Yocto Project 3.0 Release.</revremark>
</revision>
+ <revision>
+ <revnumber>3.0.1</revnumber>
+ <date>December 2019;</date>
+ <revremark>Released with the Yocto Project 3.0.1 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.2</revnumber>
+ <date>&REL_MONTH_YEAR;</date>
+ <revremark>Released with the Yocto Project 3.0.2 Release.</revremark>
+ </revision>
</revhistory>
<copyright>
diff --git a/documentation/mega-manual/mega-manual.xml b/documentation/mega-manual/mega-manual.xml
index eac5ea7be9..dc7521a2ae 100644..100755
--- a/documentation/mega-manual/mega-manual.xml
+++ b/documentation/mega-manual/mega-manual.xml
@@ -89,9 +89,29 @@
</revision>
<revision>
<revnumber>3.0</revnumber>
- <date>&REL_MONTH_YEAR;</date>
+ <date>October 2019</date>
<revremark>Released with the Yocto Project 3.0 Release.</revremark>
</revision>
+ <revision>
+ <revnumber>3.0.1</revnumber>
+ <date>December 2019</date>
+ <revremark>Released with the Yocto Project 3.0.1 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.2</revnumber>
+ <date>FEBURARY 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.2 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.3</revnumber>
+ <date>May 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.3 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.4</revnumber>
+ <date>&REL_MONTH_YEAR;</date>
+ <revremark>Released with the Yocto Project 3.0.4 Release.</revremark>
+ </revision>
</revhistory>
<copyright>
@@ -332,22 +352,22 @@
</para>
<xi:include
- xmlns:xi="http://www.w3.org/2003/XInclude" href="../../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml"/>
+ xmlns:xi="http://www.w3.org/2003/XInclude" href="../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml"/>
<xi:include
- xmlns:xi="http://www.w3.org/2003/XInclude" href="../../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-execution.xml"/>
+ xmlns:xi="http://www.w3.org/2003/XInclude" href="../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-execution.xml"/>
<xi:include
- xmlns:xi="http://www.w3.org/2003/XInclude" href="../../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml"/>
+ xmlns:xi="http://www.w3.org/2003/XInclude" href="../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml"/>
<xi:include
- xmlns:xi="http://www.w3.org/2003/XInclude" href="../../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.xml"/>
+ xmlns:xi="http://www.w3.org/2003/XInclude" href="../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.xml"/>
<xi:include
- xmlns:xi="http://www.w3.org/2003/XInclude" href="../../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml"/>
+ xmlns:xi="http://www.w3.org/2003/XInclude" href="../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml"/>
<xi:include
- xmlns:xi="http://www.w3.org/2003/XInclude" href="../../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.xml"/>
+ xmlns:xi="http://www.w3.org/2003/XInclude" href="../../bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.xml"/>
</book>
diff --git a/documentation/overview-manual/overview-manual.xml b/documentation/overview-manual/overview-manual.xml
index c7716e460b..1e01b73fdb 100644..100755
--- a/documentation/overview-manual/overview-manual.xml
+++ b/documentation/overview-manual/overview-manual.xml
@@ -48,9 +48,29 @@
</revision>
<revision>
<revnumber>3.0</revnumber>
- <date>&REL_MONTH_YEAR;</date>
+ <date>October 2019</date>
<revremark>Released with the Yocto Project 3.0 Release.</revremark>
</revision>
+ <revision>
+ <revnumber>3.0.1</revnumber>
+ <date>December 2019</date>
+ <revremark>Released with the Yocto Project 3.0.1 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.2</revnumber>
+ <date>FEBURARY 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.2 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.3</revnumber>
+ <date>May 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.3 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.4</revnumber>
+ <date>&REL_MONTH_YEAR;</date>
+ <revremark>Released with the Yocto Project 3.0.4 Release.</revremark>
+ </revision>
</revhistory>
<copyright>
diff --git a/documentation/poky.ent b/documentation/poky.ent
index 7af47df72f..ed43ece64d 100644..100755
--- a/documentation/poky.ent
+++ b/documentation/poky.ent
@@ -1,19 +1,19 @@
-<!ENTITY DISTRO "3.0">
-<!ENTITY DISTRO_COMPRESSED "30">
+<!ENTITY DISTRO "3.0.4">
+<!ENTITY DISTRO_COMPRESSED "304">
<!ENTITY DISTRO_NAME_NO_CAP "zeus">
<!ENTITY DISTRO_NAME "Zeus">
<!ENTITY DISTRO_NAME_NO_CAP_MINUS_ONE "warrior">
<!ENTITY DISTRO_NAME_MINUS_ONE "Warrior">
-<!ENTITY YOCTO_DOC_VERSION "3.0">
-<!ENTITY YOCTO_DOC_VERSION_MINUS_ONE "2.7">
-<!ENTITY DISTRO_REL_TAG "yocto-3.0">
-<!ENTITY METAINTELVERSION "9.0">
-<!ENTITY REL_MONTH_YEAR "October 2019">
+<!ENTITY YOCTO_DOC_VERSION "3.0.4">
+<!ENTITY YOCTO_DOC_VERSION_MINUS_ONE "2.7.3">
+<!ENTITY DISTRO_REL_TAG "yocto-3.0.4">
+<!ENTITY METAINTELVERSION "12.0">
+<!ENTITY REL_MONTH_YEAR "Aug 2020">
<!ENTITY META_INTEL_REL_TAG "&METAINTELVERSION;-&DISTRO_NAME_NO_CAP;-&YOCTO_DOC_VERSION;">
-<!ENTITY POKYVERSION "22.0.0">
-<!ENTITY POKYVERSION_COMPRESSED "2200">
+<!ENTITY POKYVERSION "22.0.4">
+<!ENTITY POKYVERSION_COMPRESSED "2204">
<!ENTITY YOCTO_POKY "poky-&DISTRO_NAME_NO_CAP;-&POKYVERSION;">
-<!ENTITY COPYRIGHT_YEAR "2010-2019">
+<!ENTITY COPYRIGHT_YEAR "2010-2020">
<!ENTITY YOCTO_DL_URL "http://downloads.yoctoproject.org">
<!ENTITY YOCTO_HOME_URL "http://www.yoctoproject.org">
<!ENTITY YOCTO_LISTS_URL "http://lists.yoctoproject.org">
diff --git a/documentation/profile-manual/profile-manual.xml b/documentation/profile-manual/profile-manual.xml
index c1f461f43a..4e10978cad 100644..100755
--- a/documentation/profile-manual/profile-manual.xml
+++ b/documentation/profile-manual/profile-manual.xml
@@ -103,9 +103,19 @@
</revision>
<revision>
<revnumber>3.0</revnumber>
- <date>&REL_MONTH_YEAR;</date>
+ <date>October 2019</date>
<revremark>Released with the Yocto Project 3.0 Release.</revremark>
</revision>
+ <revision>
+ <revnumber>3.0.1</revnumber>
+ <date>December 2019</date>
+ <revremark>Released with the Yocto Project 3.0.1 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.2</revnumber>
+ <date>&REL_MONTH_YEAR;</date>
+ <revremark>Released with the Yocto Project 3.0.2 Release.</revremark>
+ </revision>
</revhistory>
<copyright>
diff --git a/documentation/ref-manual/ref-manual.xml b/documentation/ref-manual/ref-manual.xml
index b442f709a6..e10256bf31 100644..100755
--- a/documentation/ref-manual/ref-manual.xml
+++ b/documentation/ref-manual/ref-manual.xml
@@ -134,9 +134,29 @@
</revision>
<revision>
<revnumber>3.0</revnumber>
- <date>&REL_MONTH_YEAR;</date>
+ <date>October 2019</date>
<revremark>Released with the Yocto Project 3.0 Release.</revremark>
</revision>
+ <revision>
+ <revnumber>3.0.1</revnumber>
+ <date>December 2019</date>
+ <revremark>Released with the Yocto Project 3.0.1 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.2</revnumber>
+ <date>FEBURARY 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.2 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.3</revnumber>
+ <date>May 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.3 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.4</revnumber>
+ <date>&REL_MONTH_YEAR;</date>
+ <revremark>Released with the Yocto Project 3.0.4 Release.</revremark>
+ </revision>
</revhistory>
<copyright>
diff --git a/documentation/sdk-manual/sdk-manual.xml b/documentation/sdk-manual/sdk-manual.xml
index 8d5f6ec4d6..a1d3e0c088 100644..100755
--- a/documentation/sdk-manual/sdk-manual.xml
+++ b/documentation/sdk-manual/sdk-manual.xml
@@ -68,9 +68,29 @@
</revision>
<revision>
<revnumber>3.0</revnumber>
- <date>&REL_MONTH_YEAR;</date>
+ <date>October 2019</date>
<revremark>Released with the Yocto Project 3.0 Release.</revremark>
</revision>
+ <revision>
+ <revnumber>3.0.1</revnumber>
+ <date>December 2019</date>
+ <revremark>Released with the Yocto Project 3.0.1 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.2</revnumber>
+ <date>FEBURARY 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.2 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.3</revnumber>
+ <date>May 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.3 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.4</revnumber>
+ <date>&REL_MONTH_YEAR;</date>
+ <revremark>Released with the Yocto Project 3.0.4 Release.</revremark>
+ </revision>
</revhistory>
<copyright>
diff --git a/documentation/toaster-manual/toaster-manual.xml b/documentation/toaster-manual/toaster-manual.xml
index d7b4bcee61..d1977a5446 100644..100755
--- a/documentation/toaster-manual/toaster-manual.xml
+++ b/documentation/toaster-manual/toaster-manual.xml
@@ -78,9 +78,29 @@
</revision>
<revision>
<revnumber>3.0</revnumber>
- <date>&REL_MONTH_YEAR;</date>
+ <date>October 2019</date>
<revremark>Released with the Yocto Project 3.0 Release.</revremark>
</revision>
+ <revision>
+ <revnumber>3.0.1</revnumber>
+ <date>December 2019</date>
+ <revremark>Released with the Yocto Project 3.0.1 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.2</revnumber>
+ <date>FEBURARY 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.2 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.3</revnumber>
+ <date>May 2020;</date>
+ <revremark>Released with the Yocto Project 3.0.3 Release.</revremark>
+ </revision>
+ <revision>
+ <revnumber>3.0.4</revnumber>
+ <date>&REL_MONTH_YEAR;</date>
+ <revremark>Released with the Yocto Project 3.0.4 Release.</revremark>
+ </revision>
</revhistory>
<copyright>
diff --git a/documentation/tools/mega-manual.sed b/documentation/tools/mega-manual.sed
index 374d8e7b00..654996d087 100644..100755
--- a/documentation/tools/mega-manual.sed
+++ b/documentation/tools/mega-manual.sed
@@ -1,36 +1,36 @@
# Processes bitbake-user-manual (<word>-<word>-<word> style).
# This style is for manual three-word folders, which currently is only the BitBake User Manual.
# We used to have the "yocto-project-qs" and "poky-ref-manual" folders but no longer do.
-# s@"ulink" href="http://www.yoctoproject.org/docs/3.0/[a-z]*-[a-z]*-[a-z]*/[a-z]*-[a-z]*-[a-z]*.html#@"link" href="#@g
-s@"ulink" href="http://www.yoctoproject.org/docs/3.0/bitbake-user-manual/bitbake-user-manual.html#@"link" href="#@g
+# s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/[a-z]*-[a-z]*-[a-z]*/[a-z]*-[a-z]*-[a-z]*.html#@"link" href="#@g
+s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/bitbake-user-manual/bitbake-user-manual.html#@"link" href="#@g
# Processes all other manuals (<word>-<word> style).
# This style is for manual folders that use two word, which is the standard now (e.g. "ref-manual").
# Here is the one-liner:
-# s@"ulink" href="http://www.yoctoproject.org/docs/3.0/[a-z]*-[a-z]*/[a-z]*-[a-z]*.html#@"link" href="#@g
+# s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/[a-z]*-[a-z]*/[a-z]*-[a-z]*.html#@"link" href="#@g
-s@"ulink" href="http://www.yoctoproject.org/docs/3.0/sdk-manual/sdk-manual.html#@"link" href="#@g
-s@"ulink" href="http://www.yoctoproject.org/docs/3.0/bsp-guide/bsp-guide.html#@"link" href="#@g
-s@"ulink" href="http://www.yoctoproject.org/docs/3.0/dev-manual/dev-manual.html#@"link" href="#@g
-s@"ulink" href="http://www.yoctoproject.org/docs/3.0/overview-manual/overview-manual.html#@"link" href="#@g
-s@"ulink" href="http://www.yoctoproject.org/docs/3.0/brief-yoctoprojectqs/brief-yoctoprojectqs.html#@"link" href="#@g
-s@"ulink" href="http://www.yoctoproject.org/docs/3.0/kernel-dev/kernel-dev.html#@"link" href="#@g
-s@"ulink" href="http://www.yoctoproject.org/docs/3.0/profile-manual/profile-manual.html#@"link" href="#@g
-s@"ulink" href="http://www.yoctoproject.org/docs/3.0/ref-manual/ref-manual.html#@"link" href="#@g
-s@"ulink" href="http://www.yoctoproject.org/docs/3.0/toaster-manual/toaster-manual.html#@"link" href="#@g
+s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/sdk-manual/sdk-manual.html#@"link" href="#@g
+s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/bsp-guide/bsp-guide.html#@"link" href="#@g
+s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/dev-manual/dev-manual.html#@"link" href="#@g
+s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/overview-manual/overview-manual.html#@"link" href="#@g
+s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/brief-yoctoprojectqs/brief-yoctoprojectqs.html#@"link" href="#@g
+s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/kernel-dev/kernel-dev.html#@"link" href="#@g
+s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/profile-manual/profile-manual.html#@"link" href="#@g
+s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/ref-manual/ref-manual.html#@"link" href="#@g
+s@"ulink" href="http://www.yoctoproject.org/docs/3.0.4/toaster-manual/toaster-manual.html#@"link" href="#@g
# Process cases where just an external manual is referenced without an id anchor
-s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0/brief-yoctoprojectqs/brief-yoctoprojectqs.html" target="_top">Yocto Project Quick Build</a>@Yocto Project Quick Build@g
-s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0/bitbake-user-manual/bitbake-user-manual.html" target="_top">BitBake User Manual</a>@BitBake User Manual@g
-s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0/dev-manual/dev-manual.html" target="_top">Yocto Project Development Tasks Manual</a>@Yocto Project Development Tasks Manual@g
-s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0/overview-manual/overview-manual.html" target="_top">Yocto Project Overview and Concepts Manual</a>@Yocto project Overview and Concepts Manual@g
-s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0/sdk-manual/sdk-manual.html" target="_top">Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</a>@Yocto Project Application Development and the Extensible Software Development Kit (eSDK)@g
-s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0/bsp-guide/bsp-guide.html" target="_top">Yocto Project Board Support Package (BSP) Developer's Guide</a>@Yocto Project Board Support Package (BSP) Developer's Guide@g
-s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0/profile-manual/profile-manual.html" target="_top">Yocto Project Profiling and Tracing Manual</a>@Yocto Project Profiling and Tracing Manual@g
-s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0/kernel-dev/kernel-dev.html" target="_top">Yocto Project Linux Kernel Development Manual</a>@Yocto Project Linux Kernel Development Manual@g
-s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0/ref-manual/ref-manual.html" target="_top">Yocto Project Reference Manual</a>@Yocto Project Reference Manual@g
-s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0/toaster-manual/toaster-manual.html" target="_top">Toaster User Manual</a>@Toaster User Manual@g
+s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0.4/brief-yoctoprojectqs/brief-yoctoprojectqs.html" target="_top">Yocto Project Quick Build</a>@Yocto Project Quick Build@g
+s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0.4/bitbake-user-manual/bitbake-user-manual.html" target="_top">BitBake User Manual</a>@BitBake User Manual@g
+s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0.4/dev-manual/dev-manual.html" target="_top">Yocto Project Development Tasks Manual</a>@Yocto Project Development Tasks Manual@g
+s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0.4/overview-manual/overview-manual.html" target="_top">Yocto Project Overview and Concepts Manual</a>@Yocto project Overview and Concepts Manual@g
+s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0.4/sdk-manual/sdk-manual.html" target="_top">Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</a>@Yocto Project Application Development and the Extensible Software Development Kit (eSDK)@g
+s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0.4/bsp-guide/bsp-guide.html" target="_top">Yocto Project Board Support Package (BSP) Developer's Guide</a>@Yocto Project Board Support Package (BSP) Developer's Guide@g
+s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0.4/profile-manual/profile-manual.html" target="_top">Yocto Project Profiling and Tracing Manual</a>@Yocto Project Profiling and Tracing Manual@g
+s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0.4/kernel-dev/kernel-dev.html" target="_top">Yocto Project Linux Kernel Development Manual</a>@Yocto Project Linux Kernel Development Manual@g
+s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0.4/ref-manual/ref-manual.html" target="_top">Yocto Project Reference Manual</a>@Yocto Project Reference Manual@g
+s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0.4/toaster-manual/toaster-manual.html" target="_top">Toaster User Manual</a>@Toaster User Manual@g
# Process a single, rouge occurrence of a linked reference to the Mega-Manual.
-s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0/mega-manual/mega-manual.html" target="_top">Yocto Project Mega-Manual</a>@Yocto Project Mega-Manual@g
+s@<a class="ulink" href="http://www.yoctoproject.org/docs/3.0.4/mega-manual/mega-manual.html" target="_top">Yocto Project Mega-Manual</a>@Yocto Project Mega-Manual@g
diff --git a/meta-poky/conf/distro/poky.conf b/meta-poky/conf/distro/poky.conf
index 619414295b..ffaf85a389 100644
--- a/meta-poky/conf/distro/poky.conf
+++ b/meta-poky/conf/distro/poky.conf
@@ -1,6 +1,6 @@
DISTRO = "poky"
DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
-DISTRO_VERSION = "3.0"
+DISTRO_VERSION = "3.0.4"
DISTRO_CODENAME = "zeus"
SDK_VENDOR = "-pokysdk"
SDK_VERSION = "${@d.getVar('DISTRO_VERSION').replace('snapshot-${DATE}', 'snapshot')}"
diff --git a/meta-selftest/lib/oeqa/runtime/cases/virgl.py b/meta-selftest/lib/oeqa/runtime/cases/virgl.py
index d301a19fa4..c0abfd1b16 100644
--- a/meta-selftest/lib/oeqa/runtime/cases/virgl.py
+++ b/meta-selftest/lib/oeqa/runtime/cases/virgl.py
@@ -13,11 +13,6 @@ class VirglTest(OERuntimeTestCase):
@OETestDepends(['virgl.VirglTest.test_kernel_driver'])
def test_kmscube(self):
-
- distro = oe.lsb.distro_identifier()
- if distro and distro == 'centos-7':
- self.skipTest('kmscube is not working when centos 7 is the host OS')
-
status, output = self.target.run('kmscube', timeout=30)
self.assertEqual(status, 0, "kmscube exited with non-zero status %d and output:\n%s" %(status, output))
self.assertIn('renderer: "virgl"', output, "kmscube does not seem to use virgl:\n%s" %(output))
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test1-1.5.3/backported.patch b/meta-selftest/recipes-test/devtool/devtool-upgrade-test1-1.5.3/backported.patch
new file mode 100644
index 0000000000..c4f3f12666
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test1-1.5.3/backported.patch
@@ -0,0 +1,37 @@
+commit ced2ec32b657a7f52604b2e16e5d5881041c517a
+Author: OpenEmbedded <oe.patch@oe>
+Date: Mon Nov 18 18:43:15 2019 +0100
+
+ Backport of the NEWS file from version 1.6.0
+
+diff --git a/doc/NEWS b/doc/NEWS
+index 69793fc..fd49b1c 100644
+--- a/doc/NEWS
++++ b/doc/NEWS
+@@ -1,3 +1,26 @@
++1.6.0 - 15 March 2015
++ - fix lstat64 support when unavailable - separate patches supplied by
++ Ganael Laplanche and Peter Korsgaard
++ - (#1506) new option "-D" / "--delay-start" to only show bar after N
++ seconds (Damon Harper)
++ - new option "--fineta" / "-I" to show ETA as time of day rather than time
++ remaining - patch supplied by Erkki Seppälä (r147)
++ - (#1509) change ETA (--eta / -e) so that days are given if the hours
++ remaining are 24 or more (Jacek Wielemborek)
++ - (#1499) repeat read and write attempts on partial buffer fill/empty to
++ work around post-signal transfer rate drop reported by Ralf Ramsauer
++ - (#1507) do not try to calculate total size in line mode, due to bug
++ reported by Jacek Wielemborek and Michiel Van Herwegen
++ - cleanup: removed defunct RATS comments and unnecessary copyright notices
++ - clean up displayed lines when using --watchfd PID, when PID exits
++ - output errors on a new line to avoid overwriting transfer bar
++
++1.5.7 - 26 August 2014
++ - show KiB instead of incorrect kiB (Debian bug #706175)
++ - (#1284) do not gzip man page, for non-Linux OSes (Bob Friesenhahn)
++ - work around "awk" bug in tests/016-numeric-timer in decimal "," locales
++ - fix "make rpm" and "make srpm", extend "make release" to sign releases
++
+ 1.5.3 - 4 May 2014
+ - remove SPLICE_F_NONBLOCK to fix problem with slow splice() (Jan Seda)
+
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test1_1.5.3.bb b/meta-selftest/recipes-test/devtool/devtool-upgrade-test1_1.5.3.bb
index 333ecac7ed..fee5bee739 100644
--- a/meta-selftest/recipes-test/devtool/devtool-upgrade-test1_1.5.3.bb
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test1_1.5.3.bb
@@ -3,7 +3,9 @@ LICENSE = "Artistic-2.0"
LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz \
- file://0001-Add-a-note-line-to-the-quick-reference.patch"
+ file://0001-Add-a-note-line-to-the-quick-reference.patch \
+ file://backported.patch \
+ "
UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml"
RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test1_1.5.3.bb.upgraded b/meta-selftest/recipes-test/devtool/devtool-upgrade-test1_1.5.3.bb.upgraded
index 9d94f671db..66e45c7e84 100644
--- a/meta-selftest/recipes-test/devtool/devtool-upgrade-test1_1.5.3.bb.upgraded
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test1_1.5.3.bb.upgraded
@@ -3,7 +3,9 @@ LICENSE = "Artistic-2.0"
LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz \
- file://0001-Add-a-note-line-to-the-quick-reference.patch"
+ file://0001-Add-a-note-line-to-the-quick-reference.patch \
+ file://backported.patch \
+ "
UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml"
RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
diff --git a/meta-selftest/recipes-test/recipeutils/recipeutils-test_1.2.bb b/meta-selftest/recipes-test/recipeutils/recipeutils-test_1.2.bb
index 7c20d9a683..0cd0494da8 100644
--- a/meta-selftest/recipes-test/recipeutils/recipeutils-test_1.2.bb
+++ b/meta-selftest/recipes-test/recipeutils/recipeutils-test_1.2.bb
@@ -4,7 +4,7 @@ require recipeutils-test.inc
LICENSE = "Proprietary"
LIC_FILES_CHKSUM = "file://${WORKDIR}/somefile;md5=d41d8cd98f00b204e9800998ecf8427e"
-DEPENDS += "virtual/libx11"
+DEPENDS += "zlib"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index d3184ecf7b..1cea3a2213 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -482,6 +482,7 @@ python () {
# If we're building a target package we need to use fakeroot (pseudo)
# in order to capture permissions, owners, groups and special files
if not bb.data.inherits_class('native', d) and not bb.data.inherits_class('cross', d):
+ d.appendVarFlag('do_prepare_recipe_sysroot', 'depends', ' virtual/fakeroot-native:do_populate_sysroot')
d.setVarFlag('do_unpack', 'umask', '022')
d.setVarFlag('do_configure', 'umask', '022')
d.setVarFlag('do_compile', 'umask', '022')
diff --git a/meta/classes/cross.bbclass b/meta/classes/cross.bbclass
index f832561daf..6dcddd6f2e 100644
--- a/meta/classes/cross.bbclass
+++ b/meta/classes/cross.bbclass
@@ -97,3 +97,4 @@ python do_addto_recipe_sysroot () {
bb.build.exec_func("extend_recipe_sysroot", d)
}
addtask addto_recipe_sysroot after do_populate_sysroot
+do_addto_recipe_sysroot[deptask] = "do_populate_sysroot"
diff --git a/meta/classes/cve-check.bbclass b/meta/classes/cve-check.bbclass
index c00d2910be..514897e8b8 100644
--- a/meta/classes/cve-check.bbclass
+++ b/meta/classes/cve-check.bbclass
@@ -26,7 +26,7 @@ CVE_PRODUCT ??= "${BPN}"
CVE_VERSION ??= "${PV}"
CVE_CHECK_DB_DIR ?= "${DL_DIR}/CVE_CHECK"
-CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/nvdcve_1.0.db"
+CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/nvdcve_1.1.db"
CVE_CHECK_LOG ?= "${T}/cve.log"
CVE_CHECK_TMP_FILE ?= "${TMPDIR}/cve_check"
@@ -52,17 +52,20 @@ python do_cve_check () {
"""
if os.path.exists(d.getVar("CVE_CHECK_DB_FILE")):
- patched_cves = get_patches_cves(d)
- patched, unpatched = check_cves(d, patched_cves)
+ try:
+ patched_cves = get_patches_cves(d)
+ except FileNotFoundError:
+ bb.fatal("Failure in searching patches")
+ whitelisted, patched, unpatched = check_cves(d, patched_cves)
if patched or unpatched:
cve_data = get_cve_info(d, patched + unpatched)
- cve_write_data(d, patched, unpatched, cve_data)
+ cve_write_data(d, patched, unpatched, whitelisted, cve_data)
else:
bb.note("No CVE database found, skipping CVE check")
}
-addtask cve_check after do_unpack before do_build
+addtask cve_check before do_build after do_fetch
do_cve_check[depends] = "cve-update-db-native:do_populate_cve_db"
do_cve_check[nostamp] = "1"
@@ -70,7 +73,6 @@ python cve_check_cleanup () {
"""
Delete the file used to gather all the CVE information.
"""
-
bb.utils.remove(e.data.getVar("CVE_CHECK_TMP_FILE"))
}
@@ -130,6 +132,10 @@ def get_patches_cves(d):
for url in src_patches(d):
patch_file = bb.fetch.decodeurl(url)[2]
+ if not os.path.isfile(patch_file):
+ bb.error("File Not found: %s" % patch_file)
+ raise FileNotFoundError
+
# Check patch file name for CVE ID
fname_match = cve_file_name_match.search(patch_file)
if fname_match:
@@ -166,7 +172,6 @@ def check_cves(d, patched_cves):
"""
Connect to the NVD database and find unpatched cves.
"""
- import ast, csv, tempfile, subprocess, io
from distutils.version import LooseVersion
cves_unpatched = []
@@ -174,13 +179,13 @@ def check_cves(d, patched_cves):
products = d.getVar("CVE_PRODUCT").split()
# If this has been unset then we're not scanning for CVEs here (for example, image recipes)
if not products:
- return ([], [])
+ return ([], [], [])
pv = d.getVar("CVE_VERSION").split("+git")[0]
# If the recipe has been whitlisted we return empty lists
if d.getVar("PN") in d.getVar("CVE_CHECK_PN_WHITELIST").split():
bb.note("Recipe has been whitelisted, skipping check")
- return ([], [])
+ return ([], [], [])
old_cve_whitelist = d.getVar("CVE_CHECK_CVE_WHITELIST")
if old_cve_whitelist:
@@ -188,98 +193,101 @@ def check_cves(d, patched_cves):
cve_whitelist = d.getVar("CVE_CHECK_WHITELIST").split()
import sqlite3
- db_file = d.getVar("CVE_CHECK_DB_FILE")
- conn = sqlite3.connect(db_file)
+ db_file = d.expand("file:${CVE_CHECK_DB_FILE}?mode=ro")
+ conn = sqlite3.connect(db_file, uri=True)
+ # For each of the known product names (e.g. curl has CPEs using curl and libcurl)...
for product in products:
- c = conn.cursor()
if ":" in product:
vendor, product = product.split(":", 1)
- c.execute("SELECT * FROM PRODUCTS WHERE PRODUCT IS ? AND VENDOR IS ?", (product, vendor))
else:
- c.execute("SELECT * FROM PRODUCTS WHERE PRODUCT IS ?", (product,))
+ vendor = "%"
- for row in c:
- cve = row[0]
- version_start = row[3]
- operator_start = row[4]
- version_end = row[5]
- operator_end = row[6]
+ # Find all relevant CVE IDs.
+ for cverow in conn.execute("SELECT DISTINCT ID FROM PRODUCTS WHERE PRODUCT IS ? AND VENDOR LIKE ?", (product, vendor)):
+ cve = cverow[0]
if cve in cve_whitelist:
bb.note("%s-%s has been whitelisted for %s" % (product, pv, cve))
+ # TODO: this should be in the report as 'whitelisted'
+ patched_cves.add(cve)
+ continue
elif cve in patched_cves:
bb.note("%s has been patched" % (cve))
- else:
- to_append = False
- if (operator_start == '=' and pv == version_start):
- cves_unpatched.append(cve)
+ continue
+
+ vulnerable = False
+ for row in conn.execute("SELECT * FROM PRODUCTS WHERE ID IS ? AND PRODUCT IS ? AND VENDOR LIKE ?", (cve, product, vendor)):
+ (_, _, _, version_start, operator_start, version_end, operator_end) = row
+ #bb.debug(2, "Evaluating row " + str(row))
+
+ if (operator_start == '=' and pv == version_start) or version_start == '-':
+ vulnerable = True
else:
if operator_start:
try:
- to_append_start = (operator_start == '>=' and LooseVersion(pv) >= LooseVersion(version_start))
- to_append_start |= (operator_start == '>' and LooseVersion(pv) > LooseVersion(version_start))
+ vulnerable_start = (operator_start == '>=' and LooseVersion(pv) >= LooseVersion(version_start))
+ vulnerable_start |= (operator_start == '>' and LooseVersion(pv) > LooseVersion(version_start))
except:
- bb.note("%s: Failed to compare %s %s %s for %s" %
+ bb.warn("%s: Failed to compare %s %s %s for %s" %
(product, pv, operator_start, version_start, cve))
- to_append_start = False
+ vulnerable_start = False
else:
- to_append_start = False
+ vulnerable_start = False
if operator_end:
try:
- to_append_end = (operator_end == '<=' and LooseVersion(pv) <= LooseVersion(version_end))
- to_append_end |= (operator_end == '<' and LooseVersion(pv) < LooseVersion(version_end))
+ vulnerable_end = (operator_end == '<=' and LooseVersion(pv) <= LooseVersion(version_end))
+ vulnerable_end |= (operator_end == '<' and LooseVersion(pv) < LooseVersion(version_end))
except:
- bb.note("%s: Failed to compare %s %s %s for %s" %
+ bb.warn("%s: Failed to compare %s %s %s for %s" %
(product, pv, operator_end, version_end, cve))
- to_append_end = False
+ vulnerable_end = False
else:
- to_append_end = False
+ vulnerable_end = False
if operator_start and operator_end:
- to_append = to_append_start and to_append_end
+ vulnerable = vulnerable_start and vulnerable_end
else:
- to_append = to_append_start or to_append_end
+ vulnerable = vulnerable_start or vulnerable_end
- if to_append:
+ if vulnerable:
+ bb.note("%s-%s is vulnerable to %s" % (product, pv, cve))
cves_unpatched.append(cve)
- bb.debug(2, "%s-%s is not patched for %s" % (product, pv, cve))
+ break
+
+ if not vulnerable:
+ bb.note("%s-%s is not vulnerable to %s" % (product, pv, cve))
+ # TODO: not patched but not vulnerable
+ patched_cves.add(cve)
+
conn.close()
- return (list(patched_cves), cves_unpatched)
+ return (list(cve_whitelist), list(patched_cves), cves_unpatched)
def get_cve_info(d, cves):
"""
Get CVE information from the database.
-
- Unfortunately the only way to get CVE info is set the output to
- html (hard to parse) or query directly the database.
"""
- try:
- import sqlite3
- except ImportError:
- from pysqlite2 import dbapi2 as sqlite3
+ import sqlite3
cve_data = {}
- db_file = d.getVar("CVE_CHECK_DB_FILE")
- placeholder = ",".join("?" * len(cves))
- query = "SELECT * FROM NVD WHERE id IN (%s)" % placeholder
- conn = sqlite3.connect(db_file)
- cur = conn.cursor()
- for row in cur.execute(query, tuple(cves)):
- cve_data[row[0]] = {}
- cve_data[row[0]]["summary"] = row[1]
- cve_data[row[0]]["scorev2"] = row[2]
- cve_data[row[0]]["scorev3"] = row[3]
- cve_data[row[0]]["modified"] = row[4]
- cve_data[row[0]]["vector"] = row[5]
- conn.close()
+ conn = sqlite3.connect(d.getVar("CVE_CHECK_DB_FILE"))
+
+ for cve in cves:
+ for row in conn.execute("SELECT * FROM NVD WHERE ID IS ?", (cve,)):
+ cve_data[row[0]] = {}
+ cve_data[row[0]]["summary"] = row[1]
+ cve_data[row[0]]["scorev2"] = row[2]
+ cve_data[row[0]]["scorev3"] = row[3]
+ cve_data[row[0]]["modified"] = row[4]
+ cve_data[row[0]]["vector"] = row[5]
+ conn.close()
return cve_data
-def cve_write_data(d, patched, unpatched, cve_data):
+def cve_write_data(d, patched, unpatched, whitelisted, cve_data):
"""
Write CVE information in WORKDIR; and to CVE_CHECK_DIR, and
CVE manifest if enabled.
@@ -293,9 +301,11 @@ def cve_write_data(d, patched, unpatched, cve_data):
for cve in sorted(cve_data):
write_string += "PACKAGE NAME: %s\n" % d.getVar("PN")
- write_string += "PACKAGE VERSION: %s\n" % d.getVar("PV")
+ write_string += "PACKAGE VERSION: %s%s\n" % (d.getVar("EXTENDPE"), d.getVar("PV"))
write_string += "CVE: %s\n" % cve
- if cve in patched:
+ if cve in whitelisted:
+ write_string += "CVE STATUS: Whitelisted\n"
+ elif cve in patched:
write_string += "CVE STATUS: Patched\n"
else:
unpatched_cves.append(cve)
diff --git a/meta/classes/kernel-fitimage.bbclass b/meta/classes/kernel-fitimage.bbclass
index 1bcb09c598..6cd1b76fde 100644
--- a/meta/classes/kernel-fitimage.bbclass
+++ b/meta/classes/kernel-fitimage.bbclass
@@ -53,6 +53,9 @@ UBOOT_MKIMAGE_DTCOPTS ??= ""
# fitImage Hash Algo
FIT_HASH_ALG ?= "sha256"
+# fitImage Signature Algo
+FIT_SIGN_ALG ?= "rsa2048"
+
#
# Emit the fitImage ITS header
#
@@ -246,6 +249,7 @@ EOF
fitimage_emit_section_config() {
conf_csum="${FIT_HASH_ALG}"
+ conf_sign_algo="${FIT_SIGN_ALG}"
if [ -n "${UBOOT_SIGN_ENABLE}" ] ; then
conf_sign_keyname="${UBOOT_SIGN_KEYNAME}"
fi
@@ -327,7 +331,7 @@ EOF
cat << EOF >> ${1}
signature@1 {
- algo = "${conf_csum},rsa2048";
+ algo = "${conf_csum},${conf_sign_algo}";
key-name-hint = "${conf_sign_keyname}";
${sign_line}
};
diff --git a/meta/classes/kernel-yocto.bbclass b/meta/classes/kernel-yocto.bbclass
index ed9bcfa57c..ab05ac91f4 100644
--- a/meta/classes/kernel-yocto.bbclass
+++ b/meta/classes/kernel-yocto.bbclass
@@ -1,5 +1,5 @@
# remove tasks that modify the source tree in case externalsrc is inherited
-SRCTREECOVEREDTASKS += "do_kernel_configme do_validate_branches do_kernel_configcheck do_kernel_checkout do_fetch do_unpack do_patch"
+SRCTREECOVEREDTASKS += "do_validate_branches do_kernel_configcheck do_kernel_checkout do_fetch do_unpack do_patch"
PATCH_GIT_USER_EMAIL ?= "kernel-yocto@oe"
PATCH_GIT_USER_NAME ?= "OpenEmbedded"
@@ -301,6 +301,7 @@ do_validate_branches[depends] = "kern-tools-native:do_populate_sysroot"
do_kernel_configme[depends] += "virtual/${TARGET_PREFIX}binutils:do_populate_sysroot"
do_kernel_configme[depends] += "virtual/${TARGET_PREFIX}gcc:do_populate_sysroot"
do_kernel_configme[depends] += "bc-native:do_populate_sysroot bison-native:do_populate_sysroot"
+do_kernel_configme[depends] += "kern-tools-native:do_populate_sysroot"
do_kernel_configme[dirs] += "${S} ${B}"
do_kernel_configme() {
set +e
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index ebcb79a528..9ace74564c 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -452,7 +452,7 @@ do_shared_workdir () {
# Copy files required for module builds
cp System.map $kerneldir/System.map-${KERNEL_VERSION}
- cp Module.symvers $kerneldir/
+ [ -e Module.symvers ] && cp Module.symvers $kerneldir/
cp .config $kerneldir/
mkdir -p $kerneldir/include/config
cp include/config/kernel.release $kerneldir/include/config/kernel.release
@@ -613,6 +613,9 @@ do_kernel_link_images() {
if [ -f ../../../vmlinuz.bin ]; then
ln -sf ../../../vmlinuz.bin
fi
+ if [ -f ../../../vmlinux.64 ]; then
+ ln -sf ../../../vmlinux.64
+ fi
}
addtask kernel_link_images after do_compile before do_strip
diff --git a/meta/classes/kernelsrc.bbclass b/meta/classes/kernelsrc.bbclass
index 675d40ec9a..a951ba3325 100644
--- a/meta/classes/kernelsrc.bbclass
+++ b/meta/classes/kernelsrc.bbclass
@@ -1,7 +1,7 @@
S = "${STAGING_KERNEL_DIR}"
deltask do_fetch
deltask do_unpack
-do_patch[depends] += "virtual/kernel:do_patch"
+do_patch[depends] += "virtual/kernel:do_shared_workdir"
do_patch[noexec] = "1"
do_package[depends] += "virtual/kernel:do_populate_sysroot"
KERNEL_VERSION = "${@get_kernelversion_file("${STAGING_KERNEL_BUILDDIR}")}"
diff --git a/meta/classes/license.bbclass b/meta/classes/license.bbclass
index adca881c85..b0d37b119c 100644
--- a/meta/classes/license.bbclass
+++ b/meta/classes/license.bbclass
@@ -252,7 +252,7 @@ def canonical_license(d, license):
"""
Return the canonical (SPDX) form of the license if available (so GPLv3
becomes GPL-3.0), for the license named 'X+', return canonical form of
- 'X' if availabel and the tailing '+' (so GPLv3+ becomes GPL-3.0+),
+ 'X' if available and the tailing '+' (so GPLv3+ becomes GPL-3.0+),
or the passed license if there is no canonical form.
"""
lic = d.getVarFlag('SPDXLICENSEMAP', license) or ""
@@ -262,10 +262,29 @@ def canonical_license(d, license):
lic += '+'
return lic or license
+def available_licenses(d):
+ """
+ Return the available licenses by searching the directories specified by
+ COMMON_LICENSE_DIR and LICENSE_PATH.
+ """
+ lic_dirs = ((d.getVar('COMMON_LICENSE_DIR') or '') + ' ' +
+ (d.getVar('LICENSE_PATH') or '')).split()
+
+ licenses = []
+ for lic_dir in lic_dirs:
+ licenses += os.listdir(lic_dir)
+
+ licenses = sorted(licenses)
+ return licenses
+
+# Only determine the list of all available licenses once. This assumes that any
+# additions to LICENSE_PATH have been done before this file is parsed.
+AVAILABLE_LICENSES := "${@' '.join(available_licenses(d))}"
+
def expand_wildcard_licenses(d, wildcard_licenses):
"""
- Return actual spdx format license names if wildcard used. We expand
- wildcards from SPDXLICENSEMAP flags and SRC_DISTRIBUTE_LICENSES values.
+ Return actual spdx format license names if wildcards are used. We expand
+ wildcards from SPDXLICENSEMAP flags and AVAILABLE_LICENSES.
"""
import fnmatch
licenses = wildcard_licenses[:]
@@ -274,7 +293,7 @@ def expand_wildcard_licenses(d, wildcard_licenses):
spdxflags = fnmatch.filter(spdxmapkeys, wld_lic)
licenses += [d.getVarFlag('SPDXLICENSEMAP', flag) for flag in spdxflags]
- spdx_lics = (d.getVar('SRC_DISTRIBUTE_LICENSES', False) or '').split()
+ spdx_lics = d.getVar('AVAILABLE_LICENSES').split()
for wld_lic in wildcard_licenses:
licenses += fnmatch.filter(spdx_lics, wld_lic)
diff --git a/meta/classes/linuxloader.bbclass b/meta/classes/linuxloader.bbclass
index c0fbf26836..e2876cec7a 100644
--- a/meta/classes/linuxloader.bbclass
+++ b/meta/classes/linuxloader.bbclass
@@ -41,7 +41,7 @@ def get_glibc_loader(d):
elif re.search("i.86", targetarch):
dynamic_loader = "${base_libdir}/ld-linux.so.2"
elif targetarch == "arm":
- dynamic_loader = "${base_libdir}/ld-linux.so.3"
+ dynamic_loader = "${base_libdir}/ld-linux${@['-armhf', ''][d.getVar('TARGET_FPU') == 'soft']}.so.3"
elif targetarch.startswith("aarch64"):
dynamic_loader = "${base_libdir}/ld-linux-aarch64${ARMPKGSFX_ENDIAN_64}.so.1"
elif targetarch.startswith("riscv64"):
diff --git a/meta/classes/meson.bbclass b/meta/classes/meson.bbclass
index efa6234078..dc8c28963c 100644
--- a/meta/classes/meson.bbclass
+++ b/meta/classes/meson.bbclass
@@ -24,7 +24,8 @@ MESONOPTS = " --prefix ${prefix} \
--infodir ${@noprefix('infodir', d)} \
--sysconfdir ${sysconfdir} \
--localstatedir ${localstatedir} \
- --sharedstatedir ${sharedstatedir} "
+ --sharedstatedir ${sharedstatedir} \
+ --wrap-mode nodownload"
EXTRA_OEMESON_append = " ${PACKAGECONFIG_CONFARGS}"
diff --git a/meta/classes/native.bbclass b/meta/classes/native.bbclass
index d5b6f6af8b..3a4f572552 100644
--- a/meta/classes/native.bbclass
+++ b/meta/classes/native.bbclass
@@ -186,6 +186,7 @@ python do_addto_recipe_sysroot () {
bb.build.exec_func("extend_recipe_sysroot", d)
}
addtask addto_recipe_sysroot after do_populate_sysroot
+do_addto_recipe_sysroot[deptask] = "do_populate_sysroot"
inherit nopackages
diff --git a/meta/classes/patch.bbclass b/meta/classes/patch.bbclass
index cd241f1c84..25ec089ae1 100644
--- a/meta/classes/patch.bbclass
+++ b/meta/classes/patch.bbclass
@@ -5,6 +5,13 @@ QUILTRCFILE ?= "${STAGING_ETCDIR_NATIVE}/quiltrc"
PATCHDEPENDENCY = "${PATCHTOOL}-native:do_populate_sysroot"
+# There is a bug in patch 2.7.3 and earlier where index lines
+# in patches can change file modes when they shouldn't:
+# http://git.savannah.gnu.org/cgit/patch.git/patch/?id=82b800c9552a088a241457948219d25ce0a407a4
+# This leaks into debug sources in particular. Add the dependency
+# to target recipes to avoid this problem until we can rely on 2.7.4 or later.
+PATCHDEPENDENCY_append_class-target = " patch-replacement-native:do_populate_sysroot"
+
PATCH_GIT_USER_NAME ?= "OpenEmbedded"
PATCH_GIT_USER_EMAIL ?= "oe.patch@oe"
diff --git a/meta/classes/podfix.bbclass b/meta/classes/podfix.bbclass
new file mode 100644
index 0000000000..cc8210a27e
--- /dev/null
+++ b/meta/classes/podfix.bbclass
@@ -0,0 +1,35 @@
+python pod_strip_version() {
+ import re
+
+ def opener(filename, mode):
+ if filename.endswith(".gz"):
+ import gzip
+ return gzip.open(filename, mode)
+ elif filename.endswith(".bz2"):
+ import bz2
+ return bz2.open(filename, mode)
+ else:
+ return open(filename, mode)
+
+ bad_re = re.compile(rb"Automatically generated by Pod::Man( [0-9]+.+)")
+
+ for root, dirs, files in os.walk(d.expand("${D}${mandir}")):
+ for filename in files:
+ filename = os.path.join(root, filename)
+ if not os.path.isfile(filename):
+ continue
+
+ with opener(filename, "rb") as manfile:
+ manpage = manfile.read()
+ m = bad_re.search(manpage)
+ if not m:
+ continue
+
+ bb.note("podfix: stripping version from %s" % filename)
+ os.unlink(filename)
+ with opener(filename, "wb") as manfile:
+ manfile.write(manpage[:m.start(1)])
+ manfile.write(manpage[m.end(1):])
+}
+
+do_install[postfuncs] += "pod_strip_version"
diff --git a/meta/classes/populate_sdk_ext.bbclass b/meta/classes/populate_sdk_ext.bbclass
index 9fda1c9e78..5657af4b6a 100644
--- a/meta/classes/populate_sdk_ext.bbclass
+++ b/meta/classes/populate_sdk_ext.bbclass
@@ -122,7 +122,7 @@ SDK_TITLE_task-populate-sdk-ext = "${@d.getVar('DISTRO_NAME') or d.getVar('DISTR
def clean_esdk_builddir(d, sdkbasepath):
"""Clean up traces of the fake build for create_filtered_tasklist()"""
import shutil
- cleanpaths = 'cache conf/sanity_info tmp'.split()
+ cleanpaths = ['cache', 'tmp']
for pth in cleanpaths:
fullpth = os.path.join(sdkbasepath, pth)
if os.path.isdir(fullpth):
diff --git a/meta/classes/pypi.bbclass b/meta/classes/pypi.bbclass
index e5d7ab3ce1..87b4c85fc0 100644
--- a/meta/classes/pypi.bbclass
+++ b/meta/classes/pypi.bbclass
@@ -22,5 +22,5 @@ SECTION = "devel/python"
SRC_URI += "${PYPI_SRC_URI}"
S = "${WORKDIR}/${PYPI_PACKAGE}-${PV}"
-UPSTREAM_CHECK_URI ?= "https://pypi.python.org/pypi/${PYPI_PACKAGE}/"
-UPSTREAM_CHECK_REGEX ?= "/${PYPI_PACKAGE}/(?P<pver>(\d+[\.\-_]*)+)"
+UPSTREAM_CHECK_URI ?= "https://pypi.org/project/${PYPI_PACKAGE}/"
+UPSTREAM_CHECK_REGEX ?= "/${PYPI_PACKAGE}/(?P<pver>(\d+[\.\-_]*)+)/"
diff --git a/meta/classes/relocatable.bbclass b/meta/classes/relocatable.bbclass
index 582812c1cf..af04be5cca 100644
--- a/meta/classes/relocatable.bbclass
+++ b/meta/classes/relocatable.bbclass
@@ -6,13 +6,15 @@ python relocatable_binaries_preprocess() {
rpath_replace(d.expand('${SYSROOT_DESTDIR}'), d)
}
-relocatable_native_pcfiles () {
- if [ -d ${SYSROOT_DESTDIR}${libdir}/pkgconfig ]; then
- rel=${@os.path.relpath(d.getVar('base_prefix'), d.getVar('libdir') + "/pkgconfig")}
- sed -i -e "s:${base_prefix}:\${pcfiledir}/$rel:g" ${SYSROOT_DESTDIR}${libdir}/pkgconfig/*.pc
- fi
- if [ -d ${SYSROOT_DESTDIR}${datadir}/pkgconfig ]; then
- rel=${@os.path.relpath(d.getVar('base_prefix'), d.getVar('datadir') + "/pkgconfig")}
- sed -i -e "s:${base_prefix}:\${pcfiledir}/$rel:g" ${SYSROOT_DESTDIR}${datadir}/pkgconfig/*.pc
- fi
+relocatable_native_pcfiles() {
+ for dir in ${libdir}/pkgconfig ${datadir}/pkgconfig; do
+ files_template=${SYSROOT_DESTDIR}$dir/*.pc
+ # Expand to any files matching $files_template
+ files=$(echo $files_template)
+ # $files_template and $files will differ if any files were found
+ if [ "$files_template" != "$files" ]; then
+ rel=$(realpath -m --relative-to=$dir ${base_prefix})
+ sed -i -e "s:${base_prefix}:\${pcfiledir}/$rel:g" $files
+ fi
+ done
}
diff --git a/meta/classes/reproducible_build.bbclass b/meta/classes/reproducible_build.bbclass
index 39b6e40cac..750eb950f2 100644
--- a/meta/classes/reproducible_build.bbclass
+++ b/meta/classes/reproducible_build.bbclass
@@ -44,10 +44,12 @@ SDE_DEPLOYDIR = "${WORKDIR}/deploy-source-date-epoch"
SSTATETASKS += "do_deploy_source_date_epoch"
do_deploy_source_date_epoch () {
- echo "Deploying SDE to ${SDE_DIR}."
mkdir -p ${SDE_DEPLOYDIR}
if [ -e ${SDE_FILE} ]; then
+ echo "Deploying SDE from ${SDE_FILE} -> ${SDE_DEPLOYDIR}."
cp -p ${SDE_FILE} ${SDE_DEPLOYDIR}/__source_date_epoch.txt
+ else
+ echo "${SDE_FILE} not found!"
fi
}
@@ -56,7 +58,11 @@ python do_deploy_source_date_epoch_setscene () {
bb.utils.mkdirhier(d.getVar('SDE_DIR'))
sde_file = os.path.join(d.getVar('SDE_DEPLOYDIR'), '__source_date_epoch.txt')
if os.path.exists(sde_file):
- os.rename(sde_file, d.getVar('SDE_FILE'))
+ target = d.getVar('SDE_FILE')
+ bb.debug(1, "Moving setscene SDE file %s -> %s" % (sde_file, target))
+ os.rename(sde_file, target)
+ else:
+ bb.debug(1, "%s not found!" % sde_file)
}
do_deploy_source_date_epoch[dirs] = "${SDE_DEPLOYDIR}"
@@ -164,16 +170,32 @@ python do_create_source_date_epoch_stamp() {
f.write(str(source_date_epoch))
}
+def get_source_date_epoch_value(d):
+ cached = d.getVar('__CACHED_SOURCE_DATE_EPOCH')
+ if cached:
+ return cached
+
+ epochfile = d.getVar('SDE_FILE')
+ source_date_epoch = 0
+ if os.path.isfile(epochfile):
+ with open(epochfile, 'r') as f:
+ s = f.read()
+ try:
+ source_date_epoch = int(s)
+ except ValueError:
+ bb.warn("SOURCE_DATE_EPOCH value '%s' is invalid. Reverting to 0" % s)
+ source_date_epoch = 0
+ bb.debug(1, "SOURCE_DATE_EPOCH: %d" % source_date_epoch)
+ else:
+ bb.debug(1, "Cannot find %s. SOURCE_DATE_EPOCH will default to %d" % (epochfile, source_date_epoch))
+
+ d.setVar('__CACHED_SOURCE_DATE_EPOCH', str(source_date_epoch))
+ return str(source_date_epoch)
+
+export SOURCE_DATE_EPOCH ?= "${@get_source_date_epoch_value(d)}"
BB_HASHBASE_WHITELIST += "SOURCE_DATE_EPOCH"
python () {
if d.getVar('BUILD_REPRODUCIBLE_BINARIES') == '1':
d.appendVarFlag("do_unpack", "postfuncs", " do_create_source_date_epoch_stamp")
- epochfile = d.getVar('SDE_FILE')
- source_date_epoch = "0"
- if os.path.isfile(epochfile):
- with open(epochfile, 'r') as f:
- source_date_epoch = f.read()
- bb.debug(1, "SOURCE_DATE_EPOCH: %s" % source_date_epoch)
- d.setVar('SOURCE_DATE_EPOCH', source_date_epoch)
}
diff --git a/meta/classes/reproducible_build_simple.bbclass b/meta/classes/reproducible_build_simple.bbclass
index 8a60deef3d..d0842f0f90 100644
--- a/meta/classes/reproducible_build_simple.bbclass
+++ b/meta/classes/reproducible_build_simple.bbclass
@@ -8,3 +8,4 @@ export SOURCE_DATE_EPOCH ??= "1520598896"
REPRODUCIBLE_TIMESTAMP_ROOTFS ??= "1520598896"
+inherit podfix
diff --git a/meta/classes/rm_work.bbclass b/meta/classes/rm_work.bbclass
index a6bd3f719f..0bbc450100 100644
--- a/meta/classes/rm_work.bbclass
+++ b/meta/classes/rm_work.bbclass
@@ -64,6 +64,15 @@ do_rm_work () {
mv $i `echo $i | sed -e "s#do_image_complete#do_image_complete_setscene#"`
i=dummy
;;
+ *do_image_qa_setscene*)
+ # Ensure we don't 'stack' setscene extensions to this stamp with the section below
+ i=dummy
+ ;;
+ *do_image_qa*)
+ # Promote do_image_qa stamps to setscene versions (ahead of *do_image* below)
+ mv $i `echo $i | sed -e "s#do_image_qa#do_image_qa_setscene#"`
+ i=dummy
+ ;;
*do_package_write*|*do_rootfs*|*do_image*|*do_bootimg*|*do_write_qemuboot_conf*|*do_build*)
i=dummy
;;
diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
index 705062bc86..5c2f8f9d75 100644
--- a/meta/classes/sanity.bbclass
+++ b/meta/classes/sanity.bbclass
@@ -523,6 +523,7 @@ def check_wsl(d):
# Tar version 1.24 and onwards handle overwriting symlinks correctly
# but earlier versions do not; this needs to work properly for sstate
+# Version 1.28 is needed so opkg-build works correctly when reproducibile builds are enabled
def check_tar_version(sanity_data):
from distutils.version import LooseVersion
import subprocess
@@ -532,7 +533,9 @@ def check_tar_version(sanity_data):
return "Unable to execute tar --version, exit code %d\n%s\n" % (e.returncode, e.output)
version = result.split()[3]
if LooseVersion(version) < LooseVersion("1.24"):
- return "Your version of tar is older than 1.24 and has bugs which will break builds. Please install a newer version of tar.\n"
+ return "Your version of tar is older than 1.24 and has bugs which will break builds. Please install a newer version of tar (1.28+).\n"
+ if LooseVersion(version) < LooseVersion("1.28"):
+ return "Your version of tar is older than 1.28 and does not have the support needed to enable reproducible builds. Please install a newer version of tar (you could use the projects buildtools-tarball from our last release).\n"
return None
# We use git parameters and functionality only found in 1.7.8 or later
@@ -622,13 +625,14 @@ def check_sanity_version_change(status, d):
# In other words, these tests run once in a given build directory and then
# never again until the sanity version or host distrubution id/version changes.
- # Check the python install is complete. glib-2.0-natives requries
- # xml.parsers.expat
+ # Check the python install is complete. Examples that are often removed in
+ # minimal installations: glib-2.0-natives requries # xml.parsers.expat and icu
+ # requires distutils.sysconfig.
try:
import xml.parsers.expat
- except ImportError:
- status.addresult('Your python is not a full install. Please install the module xml.parsers.expat (python-xml on openSUSE and SUSE Linux).\n')
- import stat
+ import distutils.sysconfig
+ except ImportError as e:
+ status.addresult('Your Python 3 is not a full install. Please install the module %s (see the Getting Started guide for further information).\n' % e.name)
status.addresult(check_make_version(d))
status.addresult(check_patch_version(d))
@@ -664,6 +668,7 @@ def check_sanity_version_change(status, d):
status.addresult('Please use ASSUME_PROVIDED +=, not ASSUME_PROVIDED = in your local.conf\n')
# Check that TMPDIR isn't on a filesystem with limited filename length (eg. eCryptFS)
+ import stat
tmpdir = d.getVar('TMPDIR')
status.addresult(check_create_long_filename(tmpdir, "TMPDIR"))
tmpdirmode = os.stat(tmpdir).st_mode
@@ -924,7 +929,7 @@ def check_sanity(sanity_data):
last_tmpdir = ""
last_sstate_dir = ""
last_nativelsbstr = ""
- sanityverfile = sanity_data.expand("${TOPDIR}/conf/sanity_info")
+ sanityverfile = sanity_data.expand("${TOPDIR}/cache/sanity_info")
if os.path.exists(sanityverfile):
with open(sanityverfile, 'r') as f:
for line in f:
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index b47b9c23bf..c0329cd5d1 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -318,7 +318,8 @@ def sstate_installpkg(ss, d):
sstateinst = d.expand("${WORKDIR}/sstate-install-%s/" % ss['task'])
sstatefetch = d.getVar('SSTATE_PKGNAME') + '_' + ss['task'] + ".tgz"
- sstatepkg = d.getVar('SSTATE_PKG') + '_' + ss['task'] + ".tgz"
+ d.appendVar('SSTATE_PKG', '_'+ ss['task'] + ".tgz")
+ sstatepkg = d.getVar('SSTATE_PKG')
if not os.path.exists(sstatepkg):
pstaging_fetch(sstatefetch, d)
@@ -330,7 +331,6 @@ def sstate_installpkg(ss, d):
sstate_clean(ss, d)
d.setVar('SSTATE_INSTDIR', sstateinst)
- d.setVar('SSTATE_PKG', sstatepkg)
if bb.utils.to_boolean(d.getVar("SSTATE_VERIFY_SIG"), False):
signer = get_signer(d, 'local')
@@ -612,10 +612,9 @@ def sstate_package(ss, d):
tmpdir = d.getVar('TMPDIR')
sstatebuild = d.expand("${WORKDIR}/sstate-build-%s/" % ss['task'])
- sstatepkg = d.getVar('SSTATE_PKG') + '_'+ ss['task'] + ".tgz"
+ d.appendVar('SSTATE_PKG', '_'+ ss['task'] + ".tgz")
bb.utils.remove(sstatebuild, recurse=True)
bb.utils.mkdirhier(sstatebuild)
- bb.utils.mkdirhier(os.path.dirname(sstatepkg))
for state in ss['dirs']:
if not os.path.exists(state[1]):
continue
@@ -648,7 +647,6 @@ def sstate_package(ss, d):
os.rename(plain, pdir)
d.setVar('SSTATE_BUILDDIR', sstatebuild)
- d.setVar('SSTATE_PKG', sstatepkg)
d.setVar('SSTATE_INSTDIR', sstatebuild)
if d.getVar('SSTATE_SKIP_CREATION') == '1':
@@ -664,7 +662,8 @@ def sstate_package(ss, d):
# All hooks should run in SSTATE_BUILDDIR.
bb.build.exec_func(f, d, (sstatebuild,))
- bb.siggen.dump_this_task(sstatepkg + ".siginfo", d)
+ # SSTATE_PKG may have been changed by sstate_report_unihash
+ bb.siggen.dump_this_task(d.getVar('SSTATE_PKG') + ".siginfo", d)
return
@@ -748,18 +747,19 @@ sstate_task_postfunc[dirs] = "${WORKDIR}"
# set as SSTATE_BUILDDIR. Will be run from within SSTATE_BUILDDIR.
#
sstate_create_package () {
- TFILE=`mktemp ${SSTATE_PKG}.XXXXXXXX`
-
- # Exit earlu if it already exists
+ # Exit early if it already exists
if [ -e ${SSTATE_PKG} ]; then
return
fi
- # Use pigz if available
- OPT="-czS"
- if [ -x "$(command -v pigz)" ]; then
- OPT="-I pigz -cS"
- fi
+ mkdir -p `dirname ${SSTATE_PKG}`
+ TFILE=`mktemp ${SSTATE_PKG}.XXXXXXXX`
+
+ # Use pigz if available
+ OPT="-czS"
+ if [ -x "$(command -v pigz)" ]; then
+ OPT="-I pigz -cS"
+ fi
# Need to handle empty directories
if [ "$(ls -A)" ]; then
@@ -818,7 +818,7 @@ sstate_unpack_package () {
BB_HASHCHECK_FUNCTION = "sstate_checkhashes"
-def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, **kwargs):
+def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, **kwargs):
found = set()
missed = set()
extension = ".tgz"
@@ -951,16 +951,17 @@ def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, **kwargs):
evdata['found'].append((bb.runqueue.fn_from_tid(tid), bb.runqueue.taskname_from_tid(tid), gethash(tid), sstatefile ) )
bb.event.fire(bb.event.MetadataEvent("MissedSstate", evdata), d)
- # Print some summary statistics about the current task completion and how much sstate
- # reuse there was. Avoid divide by zero errors.
- total = len(sq_data['hash'])
- complete = 0
- if currentcount:
- complete = (len(found) + currentcount) / (total + currentcount) * 100
- match = 0
- if total:
- match = len(found) / total * 100
- bb.plain("Sstate summary: Wanted %d Found %d Missed %d Current %d (%d%% match, %d%% complete)" % (total, len(found), len(missed), currentcount, match, complete))
+ if summary:
+ # Print some summary statistics about the current task completion and how much sstate
+ # reuse there was. Avoid divide by zero errors.
+ total = len(sq_data['hash'])
+ complete = 0
+ if currentcount:
+ complete = (len(found) + currentcount) / (total + currentcount) * 100
+ match = 0
+ if total:
+ match = len(found) / total * 100
+ bb.plain("Sstate summary: Wanted %d Found %d Missed %d Current %d (%d%% match, %d%% complete)" % (total, len(found), len(missed), currentcount, match, complete))
if hasattr(bb.parse.siggen, "checkhashes"):
bb.parse.siggen.checkhashes(sq_data, missed, found, d)
diff --git a/meta/classes/toaster.bbclass b/meta/classes/toaster.bbclass
index 6cef0b8f6e..6a65ecb957 100644
--- a/meta/classes/toaster.bbclass
+++ b/meta/classes/toaster.bbclass
@@ -113,7 +113,7 @@ def _toaster_load_pkgdatafile(dirpath, filepath):
pass # ignore lines without valid key: value pairs
return pkgdata
-python toaster_package_dumpdata() {
+def _toaster_dumpdata(pkgdatadir, d):
"""
Dumps the data about the packages created by a recipe
"""
@@ -122,7 +122,6 @@ python toaster_package_dumpdata() {
if not d.getVar('PACKAGES'):
return
- pkgdatadir = d.getVar('PKGDESTWORK')
lpkgdata = {}
datadir = os.path.join(pkgdatadir, 'runtime')
@@ -132,6 +131,14 @@ python toaster_package_dumpdata() {
lpkgdata = _toaster_load_pkgdatafile(datadir, datafile)
# Fire an event containing the pkg data
bb.event.fire(bb.event.MetadataEvent("SinglePackageInfo", lpkgdata), d)
+
+python toaster_package_dumpdata() {
+ _toaster_dumpdata(d.getVar('PKGDESTWORK'), d)
+}
+
+python toaster_packagedata_dumpdata() {
+ # This path needs to match do_packagedata[sstate-inputdirs]
+ _toaster_dumpdata(os.path.join(d.getVar('WORKDIR'), 'pkgdata-pdata-input'), d)
}
# 2. Dump output image files information
@@ -366,8 +373,8 @@ toaster_buildhistory_dump[eventmask] = "bb.event.BuildCompleted"
addhandler toaster_artifacts
toaster_artifacts[eventmask] = "bb.runqueue.runQueueTaskSkipped bb.runqueue.runQueueTaskCompleted"
-do_packagedata_setscene[postfuncs] += "toaster_package_dumpdata "
-do_packagedata_setscene[vardepsexclude] += "toaster_package_dumpdata "
+do_packagedata_setscene[postfuncs] += "toaster_packagedata_dumpdata "
+do_packagedata_setscene[vardepsexclude] += "toaster_packagedata_dumpdata "
do_package[postfuncs] += "toaster_package_dumpdata "
do_package[vardepsexclude] += "toaster_package_dumpdata "
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index ab0c6c5541..7494873190 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -82,6 +82,7 @@ RECIPE_MAINTAINER_pn-build-appliance-image = "Richard Purdie <richard.purdie@lin
RECIPE_MAINTAINER_pn-build-compare = "Paul Eggleton <paul.eggleton@linux.intel.com>"
RECIPE_MAINTAINER_pn-build-sysroots = "Richard Purdie <richard.purdie@linuxfoundation.org>"
RECIPE_MAINTAINER_pn-builder = "Richard Purdie <richard.purdie@linuxfoundation.org>"
+RECIPE_MAINTAINER_pn-buildtools-extended-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
RECIPE_MAINTAINER_pn-buildtools-tarball = "Richard Purdie <richard.purdie@linuxfoundation.org>"
RECIPE_MAINTAINER_pn-busybox = "Andrej Valek <andrej.valek@siemens.com>"
RECIPE_MAINTAINER_pn-busybox-inittab = "Denys Dmytriyenko <denys@ti.com>"
diff --git a/meta/conf/distro/include/no-static-libs.inc b/meta/conf/distro/include/no-static-libs.inc
index 4141ecb765..a3a865cac4 100644
--- a/meta/conf/distro/include/no-static-libs.inc
+++ b/meta/conf/distro/include/no-static-libs.inc
@@ -15,10 +15,6 @@ DISABLE_STATIC_pn-nativesdk-libcap = ""
DISABLE_STATIC_pn-libpcap = ""
# needed by gdb
DISABLE_STATIC_pn-readline = ""
-# needed by pseudo
-DISABLE_STATIC_pn-sqlite3 = ""
-DISABLE_STATIC_pn-sqlite3-native = ""
-DISABLE_STATIC_pn-nativesdk-sqlite3 = ""
# openjade/sgml-common have build issues without static libs
DISABLE_STATIC_pn-sgml-common-native = ""
DISABLE_STATIC_pn-openjade-native = ""
diff --git a/meta/conf/distro/include/security_flags.inc b/meta/conf/distro/include/security_flags.inc
index aaf04e9e59..568d03693c 100644
--- a/meta/conf/distro/include/security_flags.inc
+++ b/meta/conf/distro/include/security_flags.inc
@@ -57,6 +57,8 @@ SECURITY_STRINGFORMAT_pn-gcc = ""
TARGET_CC_ARCH_append_class-target = " ${SECURITY_CFLAGS}"
TARGET_LDFLAGS_append_class-target = " ${SECURITY_LDFLAGS}"
+TARGET_CC_ARCH_append_class-cross-canadian = " ${SECURITY_CFLAGS}"
+TARGET_LDFLAGS_append_class-cross-canadian = " ${SECURITY_LDFLAGS}"
SECURITY_STACK_PROTECTOR_pn-gcc-runtime = ""
SECURITY_STACK_PROTECTOR_pn-glibc = ""
diff --git a/meta/conf/distro/include/yocto-uninative.inc b/meta/conf/distro/include/yocto-uninative.inc
index ad75d3e2a3..69b6edee5f 100644
--- a/meta/conf/distro/include/yocto-uninative.inc
+++ b/meta/conf/distro/include/yocto-uninative.inc
@@ -6,9 +6,9 @@
# to the distro running on the build machine.
#
-UNINATIVE_MAXGLIBCVERSION = "2.30"
+UNINATIVE_MAXGLIBCVERSION = "2.32"
-UNINATIVE_URL ?= "http://downloads.yoctoproject.org/releases/uninative/2.7/"
-UNINATIVE_CHECKSUM[aarch64] ?= "e76a45886ee8a0b3904b761c17ac8ff91edf9811ee455f1832d10763ba794dfc"
-UNINATIVE_CHECKSUM[i686] ?= "810d027dfb1c7675226afbcec07808770516c969ee7378f6d8240281083f8924"
-UNINATIVE_CHECKSUM[x86_64] ?= "9498d8bba047499999a7310ac2576d0796461184965351a56f6d32c888a1f216"
+UNINATIVE_URL ?= "http://downloads.yoctoproject.org/releases/uninative/2.9/"
+UNINATIVE_CHECKSUM[aarch64] ?= "9f25a667aee225b1dd65c4aea73e01983e825b1cb9b56937932a1ee328b45f81"
+UNINATIVE_CHECKSUM[i686] ?= "cae5d73245d95b07cf133b780ba3f6c8d0adca3ffc4e7e7fab999961d5e24d36"
+UNINATIVE_CHECKSUM[x86_64] ?= "d07916b95c419c81541a19c8ef0ed8cbd78ae18437ff28a4c8a60ef40518e423"
diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
index 550df20b0f..ce2a37e0e5 100644
--- a/meta/conf/documentation.conf
+++ b/meta/conf/documentation.conf
@@ -69,6 +69,7 @@ ASSUME_SHLIBS[doc] = "List of shlib:package[_version] mappings. Useful for lib p
AUTHOR[doc] = "Email address used to contact the original author(s) in order to send patches and forward bugs."
AUTO_SYSLINUXMENU[doc] = "Enables creating an automatic menu for the syslinux bootloader."
AUTOREV[doc] = "When SRCREV is set to the value of this variable, it specifies to use the latest source revision in the repository."
+AVAILABLE_LICENSES[doc] = "List of licenses found in the directories specified by COMMON_LICENSE_DIR and LICENSE_PATH."
#B
diff --git a/meta/conf/licenses.conf b/meta/conf/licenses.conf
index 7b01c57632..1c586a3bc6 100644
--- a/meta/conf/licenses.conf
+++ b/meta/conf/licenses.conf
@@ -1,44 +1,3 @@
-# These aren't actually used anywhere that I can tell
-# They may be in the future (or are used by someone else
-# For completion sake, I've updated them
-SRC_DISTRIBUTE_LICENSES += "AAL Adobe AFL-1.2 AFL-2.0 AFL-2.1 AFL-3.0"
-SRC_DISTRIBUTE_LICENSES += "AGPL-3.0 ANTLR-PD Apache-1.0 Apache-1.1 Apache-2.0"
-SRC_DISTRIBUTE_LICENSES += "APL-1.0 APSL-1.0 APSL-1.1 APSL-1.2 APSL-2.0"
-SRC_DISTRIBUTE_LICENSES += "Artistic-1.0 Artistic-2.0 BitstreamVera BSD"
-SRC_DISTRIBUTE_LICENSES += "BSD-2-Clause BSD-3-Clause BSD-4-Clause BSL-1.0"
-SRC_DISTRIBUTE_LICENSES += "CATOSL-1.1 CC0-1.0 CC-BY-1.0 CC-BY-2.0 CC-BY-2.5"
-SRC_DISTRIBUTE_LICENSES += "CC-BY-3.0 CC-BY-NC-1.0 CC-BY-NC-2.0 CC-BY-NC-2.5"
-SRC_DISTRIBUTE_LICENSES += "CC-BY-NC-3.0 CC-BY-NC-ND-1.0 CC-BY-NC-ND-2.0"
-SRC_DISTRIBUTE_LICENSES += "CC-BY-NC-ND-2.5 CC-BY-NC-ND-3.0 CC-BY-NC-SA-1.0"
-SRC_DISTRIBUTE_LICENSES += "CC-BY-NC-SA-2.0 CC-BY-NC-SA-2.5 CC-BY-NC-SA-3.0"
-SRC_DISTRIBUTE_LICENSES += "CC-BY-ND-1.0 CC-BY-ND-2.0 CC-BY-ND-2.5 CC-BY-ND-3.0"
-SRC_DISTRIBUTE_LICENSES += "CC-BY-SA-1.0 CC-BY-SA-2.0 CC-BY-SA-2.5 CC-BY-SA-3.0 CC-BY-SA-4.0"
-SRC_DISTRIBUTE_LICENSES += "CDDL-1.0 CECILL-1.0 CECILL-2.0 CECILL-B CECILL-C"
-SRC_DISTRIBUTE_LICENSES += "ClArtistic CPAL-1.0 CPL-1.0 CUA-OPL-1.0 DSSSL"
-SRC_DISTRIBUTE_LICENSES += "ECL-1.0 ECL-2.0 eCos-2.0 EDL-1.0 EFL-1.0 EFL-2.0"
-SRC_DISTRIBUTE_LICENSES += "Entessa EPL-1.0 EPL-2.0 ErlPL-1.1"
-SRC_DISTRIBUTE_LICENSES += "EUDatagrid EUPL-1.0 EUPL-1.1 Fair Frameworx-1.0"
-SRC_DISTRIBUTE_LICENSES += "FreeType GFDL-1.1 GFDL-1.2 GFDL-1.3 GPL-1.0"
-SRC_DISTRIBUTE_LICENSES += "GPL-2.0 GPL-2.0-with-autoconf-exception"
-SRC_DISTRIBUTE_LICENSES += "GPL-2.0-with-classpath-exception"
-SRC_DISTRIBUTE_LICENSES += "GPL-2.0-with-font-exception"
-SRC_DISTRIBUTE_LICENSES += "GPL-2.0-with-GCC-exception"
-SRC_DISTRIBUTE_LICENSES += "GPL-2-with-bison-exception GPL-3.0"
-SRC_DISTRIBUTE_LICENSES += "GPL-3.0-with-autoconf-exception"
-SRC_DISTRIBUTE_LICENSES += "GPL-3.0-with-GCC-exception"
-SRC_DISTRIBUTE_LICENSES += "gSOAP-1 gSOAP-1.3b HPND IPA IPL-1.0 ISC LGPL-2.0"
-SRC_DISTRIBUTE_LICENSES += "LGPL-2.1 LGPL-3.0 Libpng LPL-1.02 LPPL-1.0 LPPL-1.1"
-SRC_DISTRIBUTE_LICENSES += "LPPL-1.2 LPPL-1.3c MirOS MIT Motosoto MPL-1.0"
-SRC_DISTRIBUTE_LICENSES += "MPL-1.1 MS-PL MS-RL Multics NASA-1.3 Nauman NCSA"
-SRC_DISTRIBUTE_LICENSES += "NGPL Nokia NPOSL-3.0 NTP OASIS OCLC-2.0 ODbL-1.0"
-SRC_DISTRIBUTE_LICENSES += "OFL-1.1 OGTSL OLDAP-2.8 OpenSSL OSL-1.0 OSL-2.0"
-SRC_DISTRIBUTE_LICENSES += "OSL-3.0 PD PHP-3.0 PostgreSQL Proprietary"
-SRC_DISTRIBUTE_LICENSES += "Python-2.0 QPL-1.0 RHeCos-1 RHeCos-1.1 RPL-1.5"
-SRC_DISTRIBUTE_LICENSES += "RPSL-1.0 RSCPL Ruby SAX-PD SGI-1 Simple-2.0 Sleepycat"
-SRC_DISTRIBUTE_LICENSES += "SPL-1.0 SugarCRM-1 SugarCRM-1.1.3 UCB VSL-1.0 W3C"
-SRC_DISTRIBUTE_LICENSES += "Watcom-1.0 WXwindows XFree86-1.0 XFree86-1.1 Xnet XSL YPL-1.1"
-SRC_DISTRIBUTE_LICENSES += "Zimbra-1.3 Zlib ZPL-1.1 ZPL-2.0 ZPL-2.1"
-
# Standards are great! Everyone has their own. In an effort to standardize licensing
# names, common-licenses will use the SPDX standard license names. In order to not
# break the non-standardized license names that we find in LICENSE, we'll set
@@ -188,5 +147,3 @@ FOSS_BASE_URL = "http://localhost/repo/?mod=spdx_license_once"
FOSS_SERVER = "${FOSS_BASE_URL}&fullSPDXFlag=${FOSS_FULL_SPDX}&noCopyright=${FOSS_NO_COPYRIGHT}&recursiveUnpack=${FOSS_RECURSIVE_UNPACK}"
FOSS_WGET_FLAGS = "-qO - --no-check-certificate --timeout=0"
-
-
diff --git a/meta/conf/multilib.conf b/meta/conf/multilib.conf
index cfed3fbbd0..58f2ac5c86 100644
--- a/meta/conf/multilib.conf
+++ b/meta/conf/multilib.conf
@@ -9,6 +9,7 @@ MULTILIBS ??= "multilib:lib32"
STAGING_DIR_HOST = "${WORKDIR}/${MLPREFIX}recipe-sysroot"
STAGING_DIR_TARGET = "${WORKDIR}/${MLPREFIX}recipe-sysroot"
RECIPE_SYSROOT = "${WORKDIR}/${MLPREFIX}recipe-sysroot"
+RECIPE_SYSROOT_class-native = "${WORKDIR}/recipe-sysroot"
INHERIT += "multilib_global"
diff --git a/meta/files/toolchain-shar-extract.sh b/meta/files/toolchain-shar-extract.sh
index ccc4f4e1ac..2e0fe94963 100644
--- a/meta/files/toolchain-shar-extract.sh
+++ b/meta/files/toolchain-shar-extract.sh
@@ -1,13 +1,8 @@
#!/bin/sh
-[ -z "$ENVCLEANED" ] && exec /usr/bin/env -i ENVCLEANED=1 HOME="$HOME" \
- LC_ALL=en_US.UTF-8 \
- TERM=$TERM \
- ICECC_PATH="$ICECC_PATH" \
- http_proxy="$http_proxy" https_proxy="$https_proxy" ftp_proxy="$ftp_proxy" \
- no_proxy="$no_proxy" all_proxy="$all_proxy" GIT_PROXY_COMMAND="$GIT_PROXY_COMMAND" "$0" "$@"
-[ -f /etc/environment ] && . /etc/environment
-export PATH=`echo "$PATH" | sed -e 's/:\.//' -e 's/::/:/'`
+export LC_ALL=en_US.UTF-8
+# Remove invalid PATH elements first (maybe from a previously setup toolchain now deleted
+PATH=`python3 -c 'import os; print(":".join(e for e in os.environ["PATH"].split(":") if os.path.exists(e)))'`
tweakpath () {
case ":${PATH}:" in
@@ -249,7 +244,7 @@ if [ @SDK_ARCHIVE_TYPE@ = "zip" ]; then
rm sdk.zip && exit 1
fi
else
- tail -n +$payload_offset $0| $SUDO_EXEC tar xJ -C $target_sdk_dir --checkpoint=.2500 $EXTRA_TAR_OPTIONS || exit 1
+ tail -n +$payload_offset $0| $SUDO_EXEC tar mxJ -C $target_sdk_dir --checkpoint=.2500 $EXTRA_TAR_OPTIONS || exit 1
fi
echo "done"
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index 7c373715ad..e0b15dc9b4 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -40,8 +40,9 @@ def opkg_query(cmd_output):
ver = ""
filename = ""
dep = []
+ prov = []
pkgarch = ""
- for line in cmd_output.splitlines():
+ for line in cmd_output.splitlines()+['']:
line = line.rstrip()
if ':' in line:
if line.startswith("Package: "):
@@ -64,6 +65,10 @@ def opkg_query(cmd_output):
dep.append("%s [REC]" % recommend)
elif line.startswith("PackageArch: "):
pkgarch = line.split(": ")[1]
+ elif line.startswith("Provides: "):
+ provides = verregex.sub('', line.split(": ")[1])
+ for provide in provides.split(", "):
+ prov.append(provide)
# When there is a blank line save the package information
elif not line:
@@ -72,20 +77,15 @@ def opkg_query(cmd_output):
filename = "%s_%s_%s.ipk" % (pkg, ver, arch)
if pkg:
output[pkg] = {"arch":arch, "ver":ver,
- "filename":filename, "deps": dep, "pkgarch":pkgarch }
+ "filename":filename, "deps": dep, "pkgarch":pkgarch, "provs": prov}
pkg = ""
arch = ""
ver = ""
filename = ""
dep = []
+ prov = []
pkgarch = ""
- if pkg:
- if not filename:
- filename = "%s_%s_%s.ipk" % (pkg, ver, arch)
- output[pkg] = {"arch":arch, "ver":ver,
- "filename":filename, "deps": dep }
-
return output
def failed_postinsts_abort(pkgs, log_path):
@@ -360,7 +360,7 @@ class DpkgPkgsList(PkgsList):
"--admindir=%s/var/lib/dpkg" % self.rootfs_dir,
"-W"]
- cmd.append("-f=Package: ${Package}\nArchitecture: ${PackageArch}\nVersion: ${Version}\nFile: ${Package}_${Version}_${Architecture}.deb\nDepends: ${Depends}\nRecommends: ${Recommends}\n\n")
+ cmd.append("-f=Package: ${Package}\nArchitecture: ${PackageArch}\nVersion: ${Version}\nFile: ${Package}_${Version}_${Architecture}.deb\nDepends: ${Depends}\nRecommends: ${Recommends}\nProvides: ${Provides}\n\n")
try:
cmd_output = subprocess.check_output(cmd, stderr=subprocess.STDOUT).strip().decode("utf-8")
@@ -578,6 +578,11 @@ class PackageManager(object, metaclass=ABCMeta):
# oe-pkgdata-util reads it from a file
with tempfile.NamedTemporaryFile(mode="w+", prefix="installed-pkgs") as installed_pkgs:
pkgs = self.list_installed()
+
+ provided_pkgs = set()
+ for pkg in pkgs.values():
+ provided_pkgs |= set(pkg.get('provs', []))
+
output = oe.utils.format_pkg_list(pkgs, "arch")
installed_pkgs.write(output)
installed_pkgs.flush()
@@ -589,10 +594,15 @@ class PackageManager(object, metaclass=ABCMeta):
if exclude:
cmd.extend(['--exclude=' + '|'.join(exclude.split())])
try:
- bb.note("Installing complementary packages ...")
bb.note('Running %s' % cmd)
complementary_pkgs = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode("utf-8")
- self.install(complementary_pkgs.split(), attempt_only=True)
+ complementary_pkgs = set(complementary_pkgs.split())
+ skip_pkgs = sorted(complementary_pkgs & provided_pkgs)
+ install_pkgs = sorted(complementary_pkgs - provided_pkgs)
+ bb.note("Installing complementary packages ... %s (skipped already provided packages %s)" % (
+ ' '.join(install_pkgs),
+ ' '.join(skip_pkgs)))
+ self.install(install_pkgs, attempt_only=True)
except subprocess.CalledProcessError as e:
bb.fatal("Could not compute complementary packages list. Command "
"'%s' returned %d:\n%s" %
@@ -1619,7 +1629,7 @@ class DpkgPM(OpkgDpkgPM):
os.environ['APT_CONFIG'] = self.apt_conf_file
- cmd = "%s %s install --force-yes --allow-unauthenticated %s" % \
+ cmd = "%s %s install --force-yes --allow-unauthenticated --no-remove %s" % \
(self.apt_get_cmd, self.apt_args, ' '.join(pkgs))
try:
@@ -1781,8 +1791,7 @@ class DpkgPM(OpkgDpkgPM):
open(os.path.join(target_dpkg_dir, "available"), "w+").close()
def remove_packaging_data(self):
- bb.utils.remove(os.path.join(self.target_rootfs,
- self.d.getVar('opkglibdir')), True)
+ bb.utils.remove(self.target_rootfs + self.d.getVar('opkglibdir'), True)
bb.utils.remove(self.target_rootfs + "/var/lib/dpkg/", True)
def fix_broken_dependencies(self):
diff --git a/meta/lib/oe/prservice.py b/meta/lib/oe/prservice.py
index b1132ccb11..3a5ef8d921 100644
--- a/meta/lib/oe/prservice.py
+++ b/meta/lib/oe/prservice.py
@@ -3,6 +3,10 @@
#
def prserv_make_conn(d, check = False):
+ # Otherwise this fails when called from recipes which e.g. inherit python3native (which sets _PYTHON_SYSCONFIGDATA_NAME) with:
+ # No module named '_sysconfigdata'
+ if '_PYTHON_SYSCONFIGDATA_NAME' in os.environ:
+ del os.environ['_PYTHON_SYSCONFIGDATA_NAME']
import prserv.serv
host_params = list([_f for _f in (d.getVar("PRSERV_HOST") or '').split(':') if _f])
try:
diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py
index c566ce5a0c..f1abff0c45 100644
--- a/meta/lib/oe/sstatesig.py
+++ b/meta/lib/oe/sstatesig.py
@@ -103,6 +103,7 @@ class SignatureGeneratorOEBasicHashMixIn(object):
self.unlockedrecipes = (data.getVar("SIGGEN_UNLOCKED_RECIPES") or
"").split()
self.unlockedrecipes = { k: "" for k in self.unlockedrecipes }
+ self.buildarch = data.getVar('BUILD_ARCH')
pass
def tasks_resolved(self, virtmap, virtpnmap, dataCache):
@@ -140,8 +141,23 @@ class SignatureGeneratorOEBasicHashMixIn(object):
self.dump_lockedsigs(sigfile)
return super(bb.siggen.SignatureGeneratorBasicHash, self).dump_sigs(dataCache, options)
+ def prep_taskhash(self, tid, deps, dataCache):
+ super().prep_taskhash(tid, deps, dataCache)
+ if hasattr(self, "extramethod"):
+ (_, _, _, fn) = bb.runqueue.split_tid_mcfn(tid)
+ inherits = " ".join(dataCache.inherits[fn])
+ if inherits.find("/native.bbclass") != -1 or inherits.find("/cross.bbclass") != -1:
+ self.extramethod[tid] = ":" + self.buildarch
+
def get_taskhash(self, tid, deps, dataCache):
h = super(bb.siggen.SignatureGeneratorBasicHash, self).get_taskhash(tid, deps, dataCache)
+ if tid in self.lockedhashes:
+ if self.lockedhashes[tid]:
+ return self.lockedhashes[tid]
+ else:
+ return h
+
+ h = super(bb.siggen.SignatureGeneratorBasicHash, self).get_taskhash(tid, deps, dataCache)
(mc, _, task, fn) = bb.runqueue.split_tid_mcfn(tid)
@@ -178,17 +194,19 @@ class SignatureGeneratorOEBasicHashMixIn(object):
% (recipename, task, h, h_locked, var))
return h_locked
+
+ self.lockedhashes[tid] = False
#bb.warn("%s %s %s" % (recipename, task, h))
return h
def get_unihash(self, tid):
- if tid in self.lockedhashes:
+ if tid in self.lockedhashes and self.lockedhashes[tid]:
return self.lockedhashes[tid]
return super().get_unihash(tid)
def dump_sigtask(self, fn, task, stampbase, runtime):
tid = fn + ":" + task
- if tid in self.lockedhashes:
+ if tid in self.lockedhashes and self.lockedhashes[tid]:
return
super(bb.siggen.SignatureGeneratorBasicHash, self).dump_sigtask(fn, task, stampbase, runtime)
@@ -512,8 +530,12 @@ def OEOuthashBasic(path, sigfile, task, d):
add_perm(stat.S_IXOTH, 'x')
if include_owners:
- update_hash(" %10s" % pwd.getpwuid(s.st_uid).pw_name)
- update_hash(" %10s" % grp.getgrgid(s.st_gid).gr_name)
+ try:
+ update_hash(" %10s" % pwd.getpwuid(s.st_uid).pw_name)
+ update_hash(" %10s" % grp.getgrgid(s.st_gid).gr_name)
+ except KeyError:
+ bb.warn("KeyError in %s" % path)
+ raise
update_hash(" ")
if stat.S_ISBLK(s.st_mode) or stat.S_ISCHR(s.st_mode):
diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py
index 652b2be145..144c123a0e 100644
--- a/meta/lib/oe/utils.py
+++ b/meta/lib/oe/utils.py
@@ -387,7 +387,7 @@ def host_gcc_version(d, taskcontextonly=False):
except subprocess.CalledProcessError as e:
bb.fatal("Error running %s --version: %s" % (compiler, e.output.decode("utf-8")))
- match = re.match(r".* (\d\.\d)\.\d.*", output.split('\n')[0])
+ match = re.match(r".* (\d+\.\d+)\.\d+.*", output.split('\n')[0])
if not match:
bb.fatal("Can't get compiler version from %s --version output" % compiler)
diff --git a/meta/lib/oeqa/buildperf/base.py b/meta/lib/oeqa/buildperf/base.py
index 3b2fed549f..5f1805d86c 100644
--- a/meta/lib/oeqa/buildperf/base.py
+++ b/meta/lib/oeqa/buildperf/base.py
@@ -462,7 +462,7 @@ class BuildPerfTestCase(unittest.TestCase):
def rm_tmp(self):
"""Cleanup temporary/intermediate files and directories"""
log.debug("Removing temporary and cache files")
- for name in ['bitbake.lock', 'conf/sanity_info',
+ for name in ['bitbake.lock', 'cache/sanity_info',
self.bb_vars['TMPDIR']]:
oe.path.remove(name, recurse=True)
diff --git a/meta/lib/oeqa/core/utils/concurrencytest.py b/meta/lib/oeqa/core/utils/concurrencytest.py
index 0f7b3dcc11..e6b14da89d 100644
--- a/meta/lib/oeqa/core/utils/concurrencytest.py
+++ b/meta/lib/oeqa/core/utils/concurrencytest.py
@@ -261,7 +261,7 @@ def fork_for_tests(concurrency_num, suite):
oe.path.copytree(selftestdir, newselftestdir)
for e in os.environ:
- if builddir in os.environ[e]:
+ if builddir + "/" in os.environ[e] or os.environ[e].endswith(builddir):
os.environ[e] = os.environ[e].replace(builddir, newbuilddir)
subprocess.check_output("git init; git add *; git commit -a -m 'initial'", cwd=newselftestdir, shell=True)
diff --git a/meta/lib/oeqa/sdkext/testsdk.py b/meta/lib/oeqa/sdkext/testsdk.py
index 785b5dda53..c5c46df6cd 100644
--- a/meta/lib/oeqa/sdkext/testsdk.py
+++ b/meta/lib/oeqa/sdkext/testsdk.py
@@ -25,11 +25,8 @@ class TestSDKExt(TestSDKBase):
subprocesstweak.errors_have_output()
- # extensible sdk can be contaminated if native programs are
- # in PATH, i.e. use perl-native instead of eSDK one.
- paths_to_avoid = [d.getVar('STAGING_DIR'),
- d.getVar('BASE_WORKDIR')]
- os.environ['PATH'] = avoid_paths_in_environ(paths_to_avoid)
+ # We need the original PATH for testing the eSDK, not with our manipulations
+ os.environ['PATH'] = d.getVar("BB_ORIGENV", False).getVar("PATH")
tcname = d.expand("${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.sh")
if not os.path.exists(tcname):
diff --git a/meta/lib/oeqa/selftest/cases/devtool.py b/meta/lib/oeqa/selftest/cases/devtool.py
index 3a25da2033..21e6002f06 100644
--- a/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/meta/lib/oeqa/selftest/cases/devtool.py
@@ -1496,11 +1496,13 @@ class DevtoolUpgradeTests(DevtoolBase):
recipedir = os.path.dirname(oldrecipefile)
olddir = os.path.join(recipedir, recipe + '-' + oldversion)
patchfn = '0001-Add-a-note-line-to-the-quick-reference.patch'
+ backportedpatchfn = 'backported.patch'
self.assertExists(os.path.join(olddir, patchfn), 'Original patch file does not exist')
- return recipe, oldrecipefile, recipedir, olddir, newversion, patchfn
+ self.assertExists(os.path.join(olddir, backportedpatchfn), 'Backported patch file does not exist')
+ return recipe, oldrecipefile, recipedir, olddir, newversion, patchfn, backportedpatchfn
def test_devtool_finish_upgrade_origlayer(self):
- recipe, oldrecipefile, recipedir, olddir, newversion, patchfn = self._setup_test_devtool_finish_upgrade()
+ recipe, oldrecipefile, recipedir, olddir, newversion, patchfn, backportedpatchfn = self._setup_test_devtool_finish_upgrade()
# Ensure the recipe is where we think it should be (so that cleanup doesn't trash things)
self.assertIn('/meta-selftest/', recipedir)
# Try finish to the original layer
@@ -1511,14 +1513,23 @@ class DevtoolUpgradeTests(DevtoolBase):
self.assertNotExists(os.path.join(self.workspacedir, 'recipes', recipe), 'Recipe directory should not exist after finish')
self.assertNotExists(oldrecipefile, 'Old recipe file should have been deleted but wasn\'t')
self.assertNotExists(os.path.join(olddir, patchfn), 'Old patch file should have been deleted but wasn\'t')
+ self.assertNotExists(os.path.join(olddir, backportedpatchfn), 'Old backported patch file should have been deleted but wasn\'t')
newrecipefile = os.path.join(recipedir, '%s_%s.bb' % (recipe, newversion))
newdir = os.path.join(recipedir, recipe + '-' + newversion)
self.assertExists(newrecipefile, 'New recipe file should have been copied into existing layer but wasn\'t')
self.assertExists(os.path.join(newdir, patchfn), 'Patch file should have been copied into new directory but wasn\'t')
+ self.assertNotExists(os.path.join(newdir, backportedpatchfn), 'Backported patch file should not have been copied into new directory but was')
self.assertExists(os.path.join(newdir, '0002-Add-a-comment-to-the-code.patch'), 'New patch file should have been created but wasn\'t')
+ with open(newrecipefile, 'r') as f:
+ newcontent = f.read()
+ self.assertNotIn(backportedpatchfn, newcontent, "Backported patch should have been removed from the recipe but wasn't")
+ self.assertIn(patchfn, newcontent, "Old patch should have not been removed from the recipe but was")
+ self.assertIn("0002-Add-a-comment-to-the-code.patch", newcontent, "New patch should have been added to the recipe but wasn't")
+ self.assertIn("http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz", newcontent, "New recipe no longer has upstream source in SRC_URI")
+
def test_devtool_finish_upgrade_otherlayer(self):
- recipe, oldrecipefile, recipedir, olddir, newversion, patchfn = self._setup_test_devtool_finish_upgrade()
+ recipe, oldrecipefile, recipedir, olddir, newversion, patchfn, backportedpatchfn = self._setup_test_devtool_finish_upgrade()
# Ensure the recipe is where we think it should be (so that cleanup doesn't trash things)
self.assertIn('/meta-selftest/', recipedir)
# Try finish to a different layer - should create a bbappend
@@ -1534,10 +1545,18 @@ class DevtoolUpgradeTests(DevtoolBase):
self.assertNotExists(os.path.join(self.workspacedir, 'recipes', recipe), 'Recipe directory should not exist after finish')
self.assertExists(oldrecipefile, 'Old recipe file should not have been deleted')
self.assertExists(os.path.join(olddir, patchfn), 'Old patch file should not have been deleted')
+ self.assertExists(os.path.join(olddir, backportedpatchfn), 'Old backported patch file should not have been deleted')
newdir = os.path.join(newrecipedir, recipe + '-' + newversion)
self.assertExists(newrecipefile, 'New recipe file should have been copied into existing layer but wasn\'t')
self.assertExists(os.path.join(newdir, patchfn), 'Patch file should have been copied into new directory but wasn\'t')
+ self.assertNotExists(os.path.join(newdir, backportedpatchfn), 'Backported patch file should not have been copied into new directory but was')
self.assertExists(os.path.join(newdir, '0002-Add-a-comment-to-the-code.patch'), 'New patch file should have been created but wasn\'t')
+ with open(newrecipefile, 'r') as f:
+ newcontent = f.read()
+ self.assertNotIn(backportedpatchfn, newcontent, "Backported patch should have been removed from the recipe but wasn't")
+ self.assertIn(patchfn, newcontent, "Old patch should have not been removed from the recipe but was")
+ self.assertIn("0002-Add-a-comment-to-the-code.patch", newcontent, "New patch should have been added to the recipe but wasn't")
+ self.assertIn("http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz", newcontent, "New recipe no longer has upstream source in SRC_URI")
def _setup_test_devtool_finish_modify(self):
# Check preconditions
diff --git a/meta/lib/oeqa/selftest/cases/incompatible_lic.py b/meta/lib/oeqa/selftest/cases/incompatible_lic.py
index 8fb93af8a8..3cc5bbc35c 100644
--- a/meta/lib/oeqa/selftest/cases/incompatible_lic.py
+++ b/meta/lib/oeqa/selftest/cases/incompatible_lic.py
@@ -12,12 +12,12 @@ class IncompatibleLicenseTests(OESelftestTestCase):
if error_msg not in result.output:
raise AssertionError(result.output)
- # Verify that a package with an SPDX license (from SRC_DISTRIBUTE_LICENSES)
+ # Verify that a package with an SPDX license (from AVAILABLE_LICENSES)
# cannot be built when INCOMPATIBLE_LICENSE contains this SPDX license
def test_incompatible_spdx_license(self):
self.lic_test('incompatible-license', 'GPL-3.0', 'GPL-3.0')
- # Verify that a package with an SPDX license (from SRC_DISTRIBUTE_LICENSES)
+ # Verify that a package with an SPDX license (from AVAILABLE_LICENSES)
# cannot be built when INCOMPATIBLE_LICENSE contains an alias (in
# SPDXLICENSEMAP) of this SPDX license
def test_incompatible_alias_spdx_license(self):
@@ -35,7 +35,7 @@ class IncompatibleLicenseTests(OESelftestTestCase):
self.lic_test('incompatible-license-alias', 'GPLv3', 'GPLv3')
# Verify that a package with a non-SPDX license (neither in
- # SRC_DISTRIBUTE_LICENSES nor in SPDXLICENSEMAP) cannot be built when
+ # AVAILABLE_LICENSES nor in SPDXLICENSEMAP) cannot be built when
# INCOMPATIBLE_LICENSE contains this license
def test_incompatible_nonspdx_license(self):
self.lic_test('incompatible-nonspdx-license', 'FooLicense', 'FooLicense')
diff --git a/meta/lib/oeqa/selftest/cases/reproducible.py b/meta/lib/oeqa/selftest/cases/reproducible.py
index c235c139ed..1b0b5bae70 100644
--- a/meta/lib/oeqa/selftest/cases/reproducible.py
+++ b/meta/lib/oeqa/selftest/cases/reproducible.py
@@ -5,11 +5,16 @@
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars
+import bb.utils
import functools
import multiprocessing
import textwrap
import json
import unittest
+import tempfile
+import shutil
+import stat
+import os
MISSING = 'MISSING'
DIFFERENT = 'DIFFERENT'
@@ -74,6 +79,7 @@ def compare_file(reference, test, diffutils_sysroot):
class ReproducibleTests(OESelftestTestCase):
package_classes = ['deb', 'ipk']
images = ['core-image-minimal']
+ save_results = False
def setUpLocal(self):
super().setUpLocal()
@@ -117,9 +123,18 @@ class ReproducibleTests(OESelftestTestCase):
self.extrasresults['reproducible']['files'].setdefault(package_class, {})[name] = [
{'reference': p.reference, 'test': p.test} for p in packages]
+ def copy_file(self, source, dest):
+ bb.utils.mkdirhier(os.path.dirname(dest))
+ shutil.copyfile(source, dest)
+
def test_reproducible_builds(self):
capture_vars = ['DEPLOY_DIR_' + c.upper() for c in self.package_classes]
+ if self.save_results:
+ save_dir = tempfile.mkdtemp(prefix='oe-reproducible-')
+ os.chmod(save_dir, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
+ self.logger.info('Non-reproducible packages will be copied to %s', save_dir)
+
# Build native utilities
self.write_config('')
bitbake("diffutils-native -c addto_recipe_sysroot")
@@ -159,6 +174,8 @@ class ReproducibleTests(OESelftestTestCase):
# NOTE: The temp directories from the reproducible build are purposely
# kept after the build so it can be diffed for debugging.
+ fails = []
+
for c in self.package_classes:
with self.subTest(package_class=c):
package_class = 'package_' + c
@@ -176,7 +193,15 @@ class ReproducibleTests(OESelftestTestCase):
self.write_package_list(package_class, 'different', result.different)
self.write_package_list(package_class, 'same', result.same)
+ if self.save_results:
+ for d in result.different:
+ self.copy_file(d.reference, '/'.join([save_dir, d.reference]))
+ self.copy_file(d.test, '/'.join([save_dir, d.test]))
+
if result.missing or result.different:
- self.fail("The following %s packages are missing or different: %s" %
- (c, ' '.join(r.test for r in (result.missing + result.different))))
+ fails.append("The following %s packages are missing or different: %s" %
+ (c, '\n'.join(r.test for r in (result.missing + result.different))))
+
+ if fails:
+ self.fail('\n'.join(fails))
diff --git a/meta/lib/oeqa/selftest/cases/runtime_test.py b/meta/lib/oeqa/selftest/cases/runtime_test.py
index 3f212bd0ea..d4fea91350 100644
--- a/meta/lib/oeqa/selftest/cases/runtime_test.py
+++ b/meta/lib/oeqa/selftest/cases/runtime_test.py
@@ -166,7 +166,7 @@ class TestImage(OESelftestTestCase):
bitbake('core-image-full-cmdline socat')
bitbake('-c testimage core-image-full-cmdline')
- def test_testimage_virgl_gtk(self):
+ def disabled_test_testimage_virgl_gtk(self):
"""
Summary: Check host-assisted accelerate OpenGL functionality in qemu with gtk frontend
Expected: 1. Check that virgl kernel driver is loaded and 3d acceleration is enabled
@@ -179,6 +179,8 @@ class TestImage(OESelftestTestCase):
distro = oe.lsb.distro_identifier()
if distro and distro == 'debian-8':
self.skipTest('virgl isn\'t working with Debian 8')
+ if distro and distro == 'centos-7':
+ self.skipTest('virgl isn\'t working with Centos 7')
qemu_packageconfig = get_bb_var('PACKAGECONFIG', 'qemu-system-native')
features = 'INHERIT += "testimage"\n'
diff --git a/meta/lib/oeqa/selftest/cases/signing.py b/meta/lib/oeqa/selftest/cases/signing.py
index 5c4e01b2c3..5b8f9bbd38 100644
--- a/meta/lib/oeqa/selftest/cases/signing.py
+++ b/meta/lib/oeqa/selftest/cases/signing.py
@@ -44,7 +44,9 @@ class Signing(OESelftestTestCase):
origenv = os.environ.copy()
for e in os.environ:
- if builddir in os.environ[e]:
+ if builddir + "/" in os.environ[e]:
+ os.environ[e] = os.environ[e].replace(builddir + "/", newbuilddir + "/")
+ if os.environ[e].endswith(builddir):
os.environ[e] = os.environ[e].replace(builddir, newbuilddir)
os.chdir(newbuilddir)
diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py b/meta/lib/oeqa/selftest/cases/sstatetests.py
index 2867cb78ab..9adb511960 100644
--- a/meta/lib/oeqa/selftest/cases/sstatetests.py
+++ b/meta/lib/oeqa/selftest/cases/sstatetests.py
@@ -255,6 +255,7 @@ BUILD_ARCH = "x86_64"
BUILD_OS = "linux"
SDKMACHINE = "x86_64"
PACKAGE_CLASSES = "package_rpm package_ipk package_deb"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
bitbake("core-image-sato -S none")
@@ -266,6 +267,7 @@ BUILD_ARCH = "i686"
BUILD_OS = "linux"
SDKMACHINE = "i686"
PACKAGE_CLASSES = "package_rpm package_ipk package_deb"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash2")
bitbake("core-image-sato -S none")
@@ -298,6 +300,7 @@ PACKAGE_CLASSES = "package_rpm package_ipk package_deb"
TMPDIR = \"${TOPDIR}/tmp-sstatesamehash\"
TCLIBCAPPEND = \"\"
NATIVELSBSTRING = \"DistroA\"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
bitbake("core-image-sato -S none")
@@ -305,6 +308,7 @@ NATIVELSBSTRING = \"DistroA\"
TMPDIR = \"${TOPDIR}/tmp-sstatesamehash2\"
TCLIBCAPPEND = \"\"
NATIVELSBSTRING = \"DistroB\"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash2")
bitbake("core-image-sato -S none")
@@ -332,11 +336,13 @@ NATIVELSBSTRING = \"DistroB\"
TMPDIR = \"${TOPDIR}/tmp-sstatesamehash\"
TCLIBCAPPEND = \"\"
MACHINE = \"qemux86-64\"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
"""
configB = """
TMPDIR = \"${TOPDIR}/tmp-sstatesamehash2\"
TCLIBCAPPEND = \"\"
MACHINE = \"qemuarm\"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
"""
self.sstate_allarch_samesigs(configA, configB)
@@ -352,6 +358,7 @@ MACHINE = \"qemux86-64\"
require conf/multilib.conf
MULTILIBS = \"multilib:lib32\"
DEFAULTTUNE_virtclass-multilib-lib32 = \"x86\"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
"""
configB = """
TMPDIR = \"${TOPDIR}/tmp-sstatesamehash2\"
@@ -359,6 +366,7 @@ TCLIBCAPPEND = \"\"
MACHINE = \"qemuarm\"
require conf/multilib.conf
MULTILIBS = \"\"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
"""
self.sstate_allarch_samesigs(configA, configB)
@@ -404,6 +412,7 @@ MACHINE = \"qemux86\"
require conf/multilib.conf
MULTILIBS = "multilib:lib32"
DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
bitbake("world meta-toolchain -S none")
@@ -414,6 +423,7 @@ MACHINE = \"qemux86copy\"
require conf/multilib.conf
MULTILIBS = "multilib:lib32"
DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash2")
bitbake("world meta-toolchain -S none")
@@ -436,6 +446,46 @@ DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
self.assertCountEqual(files1, files2)
+ def test_sstate_multilib_or_not_native_samesigs(self):
+ """The sstate checksums of two native recipes (and their dependencies)
+ where the target is using multilib in one but not the other
+ should be the same. We use the qemux86copy machine to test
+ this.
+ """
+
+ self.write_config("""
+TMPDIR = \"${TOPDIR}/tmp-sstatesamehash\"
+TCLIBCAPPEND = \"\"
+MACHINE = \"qemux86\"
+require conf/multilib.conf
+MULTILIBS = "multilib:lib32"
+DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
+""")
+ self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
+ bitbake("binutils-native -S none")
+ self.write_config("""
+TMPDIR = \"${TOPDIR}/tmp-sstatesamehash2\"
+TCLIBCAPPEND = \"\"
+MACHINE = \"qemux86copy\"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
+""")
+ self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash2")
+ bitbake("binutils-native -S none")
+
+ def get_files(d):
+ f = []
+ for root, dirs, files in os.walk(d):
+ for name in files:
+ f.append(os.path.join(root, name))
+ return f
+ files1 = get_files(self.topdir + "/tmp-sstatesamehash/stamps")
+ files2 = get_files(self.topdir + "/tmp-sstatesamehash2/stamps")
+ files2 = [x.replace("tmp-sstatesamehash2", "tmp-sstatesamehash") for x in files2]
+ self.maxDiff = None
+ self.assertCountEqual(files1, files2)
+
+
def test_sstate_noop_samesigs(self):
"""
The sstate checksums of two builds with these variables changed or
@@ -452,6 +502,7 @@ TIME = "111111"
DATE = "20161111"
INHERIT_remove = "buildstats-summary buildhistory uninative"
http_proxy = ""
+BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash")
self.track_for_cleanup(self.topdir + "/download1")
@@ -468,6 +519,7 @@ DATE = "20161212"
INHERIT_remove = "uninative"
INHERIT += "buildstats-summary buildhistory"
http_proxy = "http://example.com/"
+BB_SIGNATURE_HANDLER = "OEBasicHash"
""")
self.track_for_cleanup(self.topdir + "/tmp-sstatesamehash2")
self.track_for_cleanup(self.topdir + "/download2")
diff --git a/meta/lib/oeqa/selftest/context.py b/meta/lib/oeqa/selftest/context.py
index c4eb5d614e..3d3b19c6e8 100644
--- a/meta/lib/oeqa/selftest/context.py
+++ b/meta/lib/oeqa/selftest/context.py
@@ -280,11 +280,15 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
return rc
def _signal_clean_handler(self, signum, frame):
- sys.exit(1)
+ if self.ourpid == os.getpid():
+ sys.exit(1)
def run(self, logger, args):
self._process_args(logger, args)
+ # Setup a SIGTERM handler to allow restoration of files like local.conf and bblayers.conf
+ # but don't interfer with other processes
+ self.ourpid = os.getpid()
signal.signal(signal.SIGTERM, self._signal_clean_handler)
rc = None
diff --git a/meta/lib/oeqa/targetcontrol.py b/meta/lib/oeqa/targetcontrol.py
index 1445e3ecfb..41557dc224 100644
--- a/meta/lib/oeqa/targetcontrol.py
+++ b/meta/lib/oeqa/targetcontrol.py
@@ -117,9 +117,9 @@ class QemuTarget(BaseTarget):
import oe.path
bb.utils.mkdirhier(self.testdir)
self.qemurunnerlog = os.path.join(self.testdir, 'qemurunner_log.%s' % self.datetime)
- loggerhandler = logging.FileHandler(self.qemurunnerlog)
- loggerhandler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
- self.logger.addHandler(loggerhandler)
+ self.loggerhandler = logging.FileHandler(self.qemurunnerlog)
+ self.loggerhandler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
+ self.logger.addHandler(self.loggerhandler)
oe.path.symlink(os.path.basename(self.qemurunnerlog), os.path.join(self.testdir, 'qemurunner_log'), force=True)
if d.getVar("DISTRO") == "poky-tiny":
@@ -182,6 +182,7 @@ class QemuTarget(BaseTarget):
def stop(self):
self.runner.stop()
+ self.logger.removeHandler(self.loggerhandler)
self.connection = None
self.ip = None
self.server_ip = None
diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py
index fe8b77d97a..3db177b001 100644
--- a/meta/lib/oeqa/utils/qemurunner.py
+++ b/meta/lib/oeqa/utils/qemurunner.py
@@ -35,6 +35,7 @@ class QemuRunner:
# Popen object for runqemu
self.runqemu = None
+ self.runqemu_exited = False
# pid of the qemu process that runqemu will start
self.qemupid = None
# target ip - from the command line or runqemu output
@@ -102,7 +103,6 @@ class QemuRunner:
self.logger.debug("Output from runqemu:\n%s" % self.getOutput(self.runqemu.stdout))
self.stop()
self._dump_host()
- raise SystemExit
def start(self, qemuparams = None, get_ip = True, extra_bootparams = None, runqemuparams='', launch_cmd=None, discard_writes=True):
env = os.environ.copy()
@@ -206,6 +206,8 @@ class QemuRunner:
endtime = time.time() + self.runqemutime
while not self.is_alive() and time.time() < endtime:
if self.runqemu.poll():
+ if self.runqemu_exited:
+ return False
if self.runqemu.returncode:
# No point waiting any longer
self.logger.warning('runqemu exited with code %d' % self.runqemu.returncode)
@@ -215,6 +217,9 @@ class QemuRunner:
return False
time.sleep(0.5)
+ if self.runqemu_exited:
+ return False
+
if not self.is_alive():
self.logger.error("Qemu pid didn't appear in %s seconds (%s)" %
(self.runqemutime, time.strftime("%D %H:%M:%S")))
@@ -385,7 +390,7 @@ class QemuRunner:
os.killpg(os.getpgid(self.runqemu.pid), signal.SIGKILL)
self.runqemu.stdin.close()
self.runqemu.stdout.close()
- self.runqemu = None
+ self.runqemu_exited = True
if hasattr(self, 'server_socket') and self.server_socket:
self.server_socket.close()
@@ -396,7 +401,10 @@ class QemuRunner:
self.qemupid = None
self.ip = None
if os.path.exists(self.qemu_pidfile):
- os.remove(self.qemu_pidfile)
+ try:
+ os.remove(self.qemu_pidfile)
+ except FileNotFoundError as e:
+ self.logger.warning('qemu pidfile is no longer present')
if self.monitorpipe:
self.monitorpipe.close()
@@ -422,7 +430,7 @@ class QemuRunner:
return False
def is_alive(self):
- if not self.runqemu or self.runqemu.poll() is not None:
+ if not self.runqemu or self.runqemu.poll() is not None or self.runqemu_exited:
return False
if os.path.isfile(self.qemu_pidfile):
# when handling pidfile, qemu creates the file, stat it, lock it and then write to it
diff --git a/meta/recipes-bsp/u-boot/u-boot-tools.inc b/meta/recipes-bsp/u-boot/u-boot-tools.inc
new file mode 100644
index 0000000000..35894e1a8f
--- /dev/null
+++ b/meta/recipes-bsp/u-boot/u-boot-tools.inc
@@ -0,0 +1,65 @@
+SUMMARY = "U-Boot bootloader tools"
+DEPENDS += "openssl"
+
+PROVIDES = "${MLPREFIX}u-boot-mkimage ${MLPREFIX}u-boot-mkenvimage"
+PROVIDES_class-native = "u-boot-mkimage-native u-boot-mkenvimage-native"
+
+PACKAGES += "${PN}-mkimage ${PN}-mkenvimage"
+
+# Required for backward compatibility with "u-boot-mkimage-xxx.bb"
+RPROVIDES_${PN}-mkimage = "u-boot-mkimage"
+RREPLACES_${PN}-mkimage = "u-boot-mkimage"
+RCONFLICTS_${PN}-mkimage = "u-boot-mkimage"
+
+EXTRA_OEMAKE_class-target = 'CROSS_COMPILE="${TARGET_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
+EXTRA_OEMAKE_class-native = 'CC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
+EXTRA_OEMAKE_class-nativesdk = 'CROSS_COMPILE="${HOST_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
+
+SED_CONFIG_EFI = '-e "s/CONFIG_EFI_LOADER=.*/# CONFIG_EFI_LOADER is not set/"'
+SED_CONFIG_EFI_x86 = ''
+SED_CONFIG_EFI_x86-64 = ''
+SED_CONFIG_EFI_arm = ''
+SED_CONFIG_EFI_armeb = ''
+SED_CONFIG_EFI_aarch64 = ''
+
+do_compile () {
+ oe_runmake sandbox_defconfig
+
+ # Disable CONFIG_CMD_LICENSE, license.h is not used by tools and
+ # generating it requires bin2header tool, which for target build
+ # is built with target tools and thus cannot be executed on host.
+ sed -i -e "s/CONFIG_CMD_LICENSE=.*/# CONFIG_CMD_LICENSE is not set/" ${SED_CONFIG_EFI} .config
+
+ oe_runmake cross_tools NO_SDL=1
+}
+
+do_install () {
+ install -d ${D}${bindir}
+
+ # mkimage
+ install -m 0755 tools/mkimage ${D}${bindir}/uboot-mkimage
+ ln -sf uboot-mkimage ${D}${bindir}/mkimage
+
+ # mkenvimage
+ install -m 0755 tools/mkenvimage ${D}${bindir}/uboot-mkenvimage
+ ln -sf uboot-mkenvimage ${D}${bindir}/mkenvimage
+
+ # dumpimage
+ install -m 0755 tools/dumpimage ${D}${bindir}/uboot-dumpimage
+ ln -sf uboot-dumpimage ${D}${bindir}/dumpimage
+
+ # fit_check_sign
+ install -m 0755 tools/fit_check_sign ${D}${bindir}/uboot-fit_check_sign
+ ln -sf uboot-fit_check_sign ${D}${bindir}/fit_check_sign
+}
+
+ALLOW_EMPTY_${PN} = "1"
+FILES_${PN} = ""
+FILES_${PN}-mkimage = "${bindir}/uboot-mkimage ${bindir}/mkimage ${bindir}/uboot-dumpimage ${bindir}/dumpimage ${bindir}/uboot-fit_check_sign ${bindir}/fit_check_sign"
+FILES_${PN}-mkenvimage = "${bindir}/uboot-mkenvimage ${bindir}/mkenvimage"
+
+RDEPENDS_${PN}-mkimage += "dtc"
+RDEPENDS_${PN} += "${PN}-mkimage ${PN}-mkenvimage"
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-bsp/u-boot/u-boot-tools_2019.07.bb b/meta/recipes-bsp/u-boot/u-boot-tools_2019.07.bb
index bede984ef7..7eaf721ca8 100644
--- a/meta/recipes-bsp/u-boot/u-boot-tools_2019.07.bb
+++ b/meta/recipes-bsp/u-boot/u-boot-tools_2019.07.bb
@@ -1,67 +1,2 @@
require u-boot-common.inc
-
-SUMMARY = "U-Boot bootloader tools"
-DEPENDS += "openssl"
-
-PROVIDES = "${MLPREFIX}u-boot-mkimage ${MLPREFIX}u-boot-mkenvimage"
-PROVIDES_class-native = "u-boot-mkimage-native u-boot-mkenvimage-native"
-
-PACKAGES += "${PN}-mkimage ${PN}-mkenvimage"
-
-# Required for backward compatibility with "u-boot-mkimage-xxx.bb"
-RPROVIDES_${PN}-mkimage = "u-boot-mkimage"
-RREPLACES_${PN}-mkimage = "u-boot-mkimage"
-RCONFLICTS_${PN}-mkimage = "u-boot-mkimage"
-
-EXTRA_OEMAKE_class-target = 'CROSS_COMPILE="${TARGET_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
-EXTRA_OEMAKE_class-native = 'CC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
-EXTRA_OEMAKE_class-nativesdk = 'CROSS_COMPILE="${HOST_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1'
-
-SED_CONFIG_EFI = '-e "s/CONFIG_EFI_LOADER=.*/# CONFIG_EFI_LOADER is not set/"'
-SED_CONFIG_EFI_x86 = ''
-SED_CONFIG_EFI_x86-64 = ''
-SED_CONFIG_EFI_arm = ''
-SED_CONFIG_EFI_armeb = ''
-SED_CONFIG_EFI_aarch64 = ''
-
-do_compile () {
- oe_runmake sandbox_defconfig
-
- # Disable CONFIG_CMD_LICENSE, license.h is not used by tools and
- # generating it requires bin2header tool, which for target build
- # is built with target tools and thus cannot be executed on host.
- sed -i -e "s/CONFIG_CMD_LICENSE=.*/# CONFIG_CMD_LICENSE is not set/" ${SED_CONFIG_EFI} .config
-
- oe_runmake cross_tools NO_SDL=1
-}
-
-do_install () {
- install -d ${D}${bindir}
-
- # mkimage
- install -m 0755 tools/mkimage ${D}${bindir}/uboot-mkimage
- ln -sf uboot-mkimage ${D}${bindir}/mkimage
-
- # mkenvimage
- install -m 0755 tools/mkenvimage ${D}${bindir}/uboot-mkenvimage
- ln -sf uboot-mkenvimage ${D}${bindir}/mkenvimage
-
- # dumpimage
- install -m 0755 tools/dumpimage ${D}${bindir}/uboot-dumpimage
- ln -sf uboot-dumpimage ${D}${bindir}/dumpimage
-
- # fit_check_sign
- install -m 0755 tools/fit_check_sign ${D}${bindir}/uboot-fit_check_sign
- ln -sf uboot-fit_check_sign ${D}${bindir}/fit_check_sign
-}
-
-ALLOW_EMPTY_${PN} = "1"
-FILES_${PN} = ""
-FILES_${PN}-mkimage = "${bindir}/uboot-mkimage ${bindir}/mkimage ${bindir}/uboot-dumpimage ${bindir}/dumpimage ${bindir}/uboot-fit_check_sign ${bindir}/fit_check_sign"
-FILES_${PN}-mkenvimage = "${bindir}/uboot-mkenvimage ${bindir}/mkenvimage"
-
-RDEPENDS_${PN}-mkimage += "dtc"
-RDEPENDS_${PN} += "${PN}-mkimage ${PN}-mkenvimage"
-RDEPENDS_${PN}_class-native = ""
-
-BBCLASSEXTEND = "native nativesdk"
+require u-boot-tools.inc
diff --git a/meta/recipes-bsp/u-boot/u-boot.inc b/meta/recipes-bsp/u-boot/u-boot.inc
index 9a754fd09b..d241347bf7 100644
--- a/meta/recipes-bsp/u-boot/u-boot.inc
+++ b/meta/recipes-bsp/u-boot/u-boot.inc
@@ -87,6 +87,8 @@ do_configure () {
fi
merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
cml1_do_configure
+ else
+ DEVTOOL_DISABLE_MENUCONFIG=true
fi
}
diff --git a/meta/recipes-connectivity/avahi/avahi.inc b/meta/recipes-connectivity/avahi/avahi.inc
index 94fe6a16b6..6acedb5412 100644
--- a/meta/recipes-connectivity/avahi/avahi.inc
+++ b/meta/recipes-connectivity/avahi/avahi.inc
@@ -77,6 +77,11 @@ do_install() {
rm -rf ${D}${datadir}/dbus-1/interfaces
test -d ${D}${datadir}/dbus-1 && rmdir --ignore-fail-on-non-empty ${D}${datadir}/dbus-1
rm -rf ${D}${libdir}/avahi
+
+ # Move example service files out of /etc/avahi/services so we don't
+ # advertise ssh & sftp-ssh by default
+ install -d ${D}${docdir}/avahi
+ mv ${D}${sysconfdir}/avahi/services/* ${D}${docdir}/avahi
}
PACKAGES =+ "${@bb.utils.contains("PACKAGECONFIG", "libdns_sd", "libavahi-compat-libdnssd", "", d)}"
diff --git a/meta/recipes-connectivity/bind/bind/0001-configure.in-remove-useless-L-use_openssl-lib.patch b/meta/recipes-connectivity/bind/bind/0001-configure.in-remove-useless-L-use_openssl-lib.patch
index 871bb2a5f6..9d31b98080 100644
--- a/meta/recipes-connectivity/bind/bind/0001-configure.in-remove-useless-L-use_openssl-lib.patch
+++ b/meta/recipes-connectivity/bind/bind/0001-configure.in-remove-useless-L-use_openssl-lib.patch
@@ -1,4 +1,4 @@
-From 950867d9fd3f690e271c8c807b6eed144b2935b2 Mon Sep 17 00:00:00 2001
+From 2325a92f1896a2a7f586611686801b41fbc91b50 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Mon, 27 Aug 2018 15:00:51 +0800
Subject: [PATCH] configure.in: remove useless `-L$use_openssl/lib'
@@ -10,15 +10,16 @@ and helpful for clean up host build path in isc-config.sh
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
---
- configure.in | 2 +-
+ configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/configure.in b/configure.in
-index 54efc55..76ac0eb 100644
---- a/configure.in
-+++ b/configure.in
-@@ -1691,7 +1691,7 @@ If you don't want OpenSSL, use --without-openssl])
+diff --git a/configure.ac b/configure.ac
+index e85a5c6..2bbfc58 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1631,7 +1631,7 @@ If you don't want OpenSSL, use --without-openssl])
fi
;;
*)
@@ -27,6 +28,3 @@ index 54efc55..76ac0eb 100644
;;
esac
fi
---
-2.7.4
-
diff --git a/meta/recipes-connectivity/bind/bind/0001-gen.c-extend-DIRNAMESIZE-from-256-to-512.patch b/meta/recipes-connectivity/bind/bind/0001-gen.c-extend-DIRNAMESIZE-from-256-to-512.patch
deleted file mode 100644
index a8d601dcaa..0000000000
--- a/meta/recipes-connectivity/bind/bind/0001-gen.c-extend-DIRNAMESIZE-from-256-to-512.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Upstream-Status: Pending
-
-Subject: gen.c: extend DIRNAMESIZE from 256 to 512
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
----
- lib/dns/gen.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: bind-9.11.3/lib/dns/gen.c
-===================================================================
---- bind-9.11.3.orig/lib/dns/gen.c
-+++ bind-9.11.3/lib/dns/gen.c
-@@ -130,7 +130,7 @@ static const char copyright[] =
- #define TYPECLASSBUF (TYPECLASSLEN + 1)
- #define TYPECLASSFMT "%" STR(TYPECLASSLEN) "[-0-9a-z]_%d"
- #define ATTRIBUTESIZE 256
--#define DIRNAMESIZE 256
-+#define DIRNAMESIZE 512
-
- static struct cc {
- struct cc *next;
diff --git a/meta/recipes-connectivity/bind/bind/0001-lib-dns-gen.c-fix-too-long-error.patch b/meta/recipes-connectivity/bind/bind/0001-lib-dns-gen.c-fix-too-long-error.patch
deleted file mode 100644
index 01874a4407..0000000000
--- a/meta/recipes-connectivity/bind/bind/0001-lib-dns-gen.c-fix-too-long-error.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 5bc3167a8b714ec0c4a3f1c7f3b9411296ec0a23 Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Wed, 16 Sep 2015 20:23:47 -0700
-Subject: [PATCH] lib/dns/gen.c: fix too long error
-
-The 512 is a little short when build in deep dir, and cause "too long"
-error, use PATH_MAX if defined.
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
----
- lib/dns/gen.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-Index: bind-9.11.3/lib/dns/gen.c
-===================================================================
---- bind-9.11.3.orig/lib/dns/gen.c
-+++ bind-9.11.3/lib/dns/gen.c
-@@ -130,7 +130,11 @@ static const char copyright[] =
- #define TYPECLASSBUF (TYPECLASSLEN + 1)
- #define TYPECLASSFMT "%" STR(TYPECLASSLEN) "[-0-9a-z]_%d"
- #define ATTRIBUTESIZE 256
-+#ifdef PATH_MAX
-+#define DIRNAMESIZE PATH_MAX
-+#else
- #define DIRNAMESIZE 512
-+#endif
-
- static struct cc {
- struct cc *next;
diff --git a/meta/recipes-connectivity/bind/bind/CVE-2020-8622.patch b/meta/recipes-connectivity/bind/bind/CVE-2020-8622.patch
new file mode 100644
index 0000000000..dec5672657
--- /dev/null
+++ b/meta/recipes-connectivity/bind/bind/CVE-2020-8622.patch
@@ -0,0 +1,60 @@
+From ca543240380475d888d660ea3296fc880ce52f35 Mon Sep 17 00:00:00 2001
+From: Mark Andrews <marka@isc.org>
+Date: Wed, 15 Jul 2020 16:07:51 +1000
+Subject: [PATCH] bind: Always keep a copy of the message
+
+this allows it to be available even when dns_message_parse()
+returns a error.
+
+Upstream-Status: Backport
+CVE: CVE-2020-8622
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ lib/dns/message.c | 24 +++++++++++++-----------
+ 1 file changed, 13 insertions(+), 11 deletions(-)
+
+diff --git a/lib/dns/message.c b/lib/dns/message.c
+index ac637a2..39ed80f 100644
+--- a/lib/dns/message.c
++++ b/lib/dns/message.c
+@@ -1679,6 +1679,19 @@ dns_message_parse(dns_message_t *msg, isc_buffer_t *source,
+ msg->header_ok = 0;
+ msg->question_ok = 0;
+
++ if ((options & DNS_MESSAGEPARSE_CLONEBUFFER) == 0) {
++ isc_buffer_usedregion(&origsource, &msg->saved);
++ } else {
++ msg->saved.length = isc_buffer_usedlength(&origsource);
++ msg->saved.base = isc_mem_get(msg->mctx, msg->saved.length);
++ if (msg->saved.base == NULL) {
++ return (ISC_R_NOMEMORY);
++ }
++ memmove(msg->saved.base, isc_buffer_base(&origsource),
++ msg->saved.length);
++ msg->free_saved = 1;
++ }
++
+ isc_buffer_remainingregion(source, &r);
+ if (r.length < DNS_MESSAGE_HEADERLEN)
+ return (ISC_R_UNEXPECTEDEND);
+@@ -1754,17 +1767,6 @@ dns_message_parse(dns_message_t *msg, isc_buffer_t *source,
+ }
+
+ truncated:
+- if ((options & DNS_MESSAGEPARSE_CLONEBUFFER) == 0)
+- isc_buffer_usedregion(&origsource, &msg->saved);
+- else {
+- msg->saved.length = isc_buffer_usedlength(&origsource);
+- msg->saved.base = isc_mem_get(msg->mctx, msg->saved.length);
+- if (msg->saved.base == NULL)
+- return (ISC_R_NOMEMORY);
+- memmove(msg->saved.base, isc_buffer_base(&origsource),
+- msg->saved.length);
+- msg->free_saved = 1;
+- }
+
+ if (ret == ISC_R_UNEXPECTEDEND && ignore_tc)
+ return (DNS_R_RECOVERABLE);
+--
+1.9.1
+
diff --git a/meta/recipes-connectivity/bind/bind/CVE-2020-8623.patch b/meta/recipes-connectivity/bind/bind/CVE-2020-8623.patch
new file mode 100644
index 0000000000..8e5412a89e
--- /dev/null
+++ b/meta/recipes-connectivity/bind/bind/CVE-2020-8623.patch
@@ -0,0 +1,402 @@
+From 8d807cc21655eaa6e6a08afafeec3682c0f3f2ab Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= <ondrej@isc.org>
+Date: Tue, 21 Jul 2020 14:42:47 +0200
+Subject: [PATCH] Fix crash in pk11_numbits() when native-pkcs11 is used
+
+When pk11_numbits() is passed a user provided input that contains all
+zeroes (via crafted DNS message), it would crash with assertion
+failure. Fix that by properly handling such input.
+
+Upstream-Status: Backport
+CVE: CVE-2020-8623
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ lib/dns/pkcs11dh_link.c | 15 ++++++-
+ lib/dns/pkcs11dsa_link.c | 8 +++-
+ lib/dns/pkcs11rsa_link.c | 79 +++++++++++++++++++++++++--------
+ lib/isc/include/pk11/internal.h | 3 +-
+ lib/isc/pk11.c | 61 ++++++++++++++++---------
+ 5 files changed, 121 insertions(+), 45 deletions(-)
+
+diff --git a/lib/dns/pkcs11dh_link.c b/lib/dns/pkcs11dh_link.c
+index e2b60ea7c5..4cd8e32d60 100644
+--- a/lib/dns/pkcs11dh_link.c
++++ b/lib/dns/pkcs11dh_link.c
+@@ -748,6 +748,7 @@ pkcs11dh_fromdns(dst_key_t *key, isc_buffer_t *data) {
+ CK_BYTE *prime = NULL, *base = NULL, *pub = NULL;
+ CK_ATTRIBUTE *attr;
+ int special = 0;
++ unsigned int bits;
+ isc_result_t result;
+
+ isc_buffer_remainingregion(data, &r);
+@@ -852,7 +853,11 @@ pkcs11dh_fromdns(dst_key_t *key, isc_buffer_t *data) {
+ pub = r.base;
+ isc_region_consume(&r, publen);
+
+- key->key_size = pk11_numbits(prime, plen_);
++ result = pk11_numbits(prime, plen_, &bits);
++ if (result != ISC_R_SUCCESS) {
++ goto cleanup;
++ }
++ key->key_size = bits;
+
+ dh->repr = (CK_ATTRIBUTE *) isc_mem_get(key->mctx, sizeof(*attr) * 3);
+ if (dh->repr == NULL)
+@@ -1012,6 +1017,7 @@ pkcs11dh_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
+ dst_private_t priv;
+ isc_result_t ret;
+ int i;
++ unsigned int bits;
+ pk11_object_t *dh = NULL;
+ CK_ATTRIBUTE *attr;
+ isc_mem_t *mctx;
+@@ -1082,7 +1088,12 @@ pkcs11dh_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
+
+ attr = pk11_attribute_bytype(dh, CKA_PRIME);
+ INSIST(attr != NULL);
+- key->key_size = pk11_numbits(attr->pValue, attr->ulValueLen);
++
++ ret = pk11_numbits(attr->pValue, attr->ulValueLen, &bits);
++ if (ret != ISC_R_SUCCESS) {
++ goto err;
++ }
++ key->key_size = bits;
+
+ return (ISC_R_SUCCESS);
+
+diff --git a/lib/dns/pkcs11dsa_link.c b/lib/dns/pkcs11dsa_link.c
+index 12d707a112..24d4c149ff 100644
+--- a/lib/dns/pkcs11dsa_link.c
++++ b/lib/dns/pkcs11dsa_link.c
+@@ -983,6 +983,7 @@ pkcs11dsa_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
+ dst_private_t priv;
+ isc_result_t ret;
+ int i;
++ unsigned int bits;
+ pk11_object_t *dsa = NULL;
+ CK_ATTRIBUTE *attr;
+ isc_mem_t *mctx = key->mctx;
+@@ -1072,7 +1073,12 @@ pkcs11dsa_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
+
+ attr = pk11_attribute_bytype(dsa, CKA_PRIME);
+ INSIST(attr != NULL);
+- key->key_size = pk11_numbits(attr->pValue, attr->ulValueLen);
++
++ ret = pk11_numbits(attr->pValue, attr->ulValueLen, &bits);
++ if (ret != ISC_R_SUCCESS) {
++ goto err;
++ }
++ key->key_size = bits;
+
+ return (ISC_R_SUCCESS);
+
+diff --git a/lib/dns/pkcs11rsa_link.c b/lib/dns/pkcs11rsa_link.c
+index 096c1a8e91..1d10d26564 100644
+--- a/lib/dns/pkcs11rsa_link.c
++++ b/lib/dns/pkcs11rsa_link.c
+@@ -332,6 +332,7 @@ pkcs11rsa_createctx_verify(dst_key_t *key, unsigned int maxbits,
+ key->key_alg == DST_ALG_RSASHA256 ||
+ key->key_alg == DST_ALG_RSASHA512);
+ #endif
++ REQUIRE(maxbits <= RSA_MAX_PUBEXP_BITS);
+
+ /*
+ * Reject incorrect RSA key lengths.
+@@ -376,6 +377,7 @@ pkcs11rsa_createctx_verify(dst_key_t *key, unsigned int maxbits,
+ for (attr = pk11_attribute_first(rsa);
+ attr != NULL;
+ attr = pk11_attribute_next(rsa, attr))
++ {
+ switch (attr->type) {
+ case CKA_MODULUS:
+ INSIST(keyTemplate[5].type == attr->type);
+@@ -396,12 +398,16 @@ pkcs11rsa_createctx_verify(dst_key_t *key, unsigned int maxbits,
+ memmove(keyTemplate[6].pValue, attr->pValue,
+ attr->ulValueLen);
+ keyTemplate[6].ulValueLen = attr->ulValueLen;
+- if (pk11_numbits(attr->pValue,
+- attr->ulValueLen) > maxbits &&
+- maxbits != 0)
++ unsigned int bits;
++ ret = pk11_numbits(attr->pValue, attr->ulValueLen,
++ &bits);
++ if (ret != ISC_R_SUCCESS ||
++ (bits > maxbits && maxbits != 0)) {
+ DST_RET(DST_R_VERIFYFAILURE);
++ }
+ break;
+ }
++ }
+ pk11_ctx->object = CK_INVALID_HANDLE;
+ pk11_ctx->ontoken = false;
+ PK11_RET(pkcs_C_CreateObject,
+@@ -1072,6 +1078,7 @@ pkcs11rsa_verify(dst_context_t *dctx, const isc_region_t *sig) {
+ keyTemplate[5].ulValueLen = attr->ulValueLen;
+ break;
+ case CKA_PUBLIC_EXPONENT:
++ unsigned int bits;
+ INSIST(keyTemplate[6].type == attr->type);
+ keyTemplate[6].pValue = isc_mem_get(dctx->mctx,
+ attr->ulValueLen);
+@@ -1080,10 +1087,12 @@ pkcs11rsa_verify(dst_context_t *dctx, const isc_region_t *sig) {
+ memmove(keyTemplate[6].pValue, attr->pValue,
+ attr->ulValueLen);
+ keyTemplate[6].ulValueLen = attr->ulValueLen;
+- if (pk11_numbits(attr->pValue,
+- attr->ulValueLen)
+- > RSA_MAX_PUBEXP_BITS)
++ ret = pk11_numbits(attr->pValue, attr->ulValueLen,
++ &bits);
++ if (ret != ISC_R_SUCCESS || bits > RSA_MAX_PUBEXP_BITS)
++ {
+ DST_RET(DST_R_VERIFYFAILURE);
++ }
+ break;
+ }
+ pk11_ctx->object = CK_INVALID_HANDLE;
+@@ -1461,6 +1470,8 @@ pkcs11rsa_fromdns(dst_key_t *key, isc_buffer_t *data) {
+ CK_BYTE *exponent = NULL, *modulus = NULL;
+ CK_ATTRIBUTE *attr;
+ unsigned int length;
++ unsigned int bits;
++ isc_result_t ret = ISC_R_SUCCESS;
+
+ isc_buffer_remainingregion(data, &r);
+ if (r.length == 0)
+@@ -1478,9 +1489,7 @@ pkcs11rsa_fromdns(dst_key_t *key, isc_buffer_t *data) {
+
+ if (e_bytes == 0) {
+ if (r.length < 2) {
+- isc_safe_memwipe(rsa, sizeof(*rsa));
+- isc_mem_put(key->mctx, rsa, sizeof(*rsa));
+- return (DST_R_INVALIDPUBLICKEY);
++ DST_RET(DST_R_INVALIDPUBLICKEY);
+ }
+ e_bytes = (*r.base) << 8;
+ isc_region_consume(&r, 1);
+@@ -1489,16 +1498,18 @@ pkcs11rsa_fromdns(dst_key_t *key, isc_buffer_t *data) {
+ }
+
+ if (r.length < e_bytes) {
+- isc_safe_memwipe(rsa, sizeof(*rsa));
+- isc_mem_put(key->mctx, rsa, sizeof(*rsa));
+- return (DST_R_INVALIDPUBLICKEY);
++ DST_RET(DST_R_INVALIDPUBLICKEY);
+ }
+ exponent = r.base;
+ isc_region_consume(&r, e_bytes);
+ modulus = r.base;
+ mod_bytes = r.length;
+
+- key->key_size = pk11_numbits(modulus, mod_bytes);
++ ret = pk11_numbits(modulus, mod_bytes, &bits);
++ if (ret != ISC_R_SUCCESS) {
++ goto err;
++ }
++ key->key_size = bits;
+
+ isc_buffer_forward(data, length);
+
+@@ -1548,9 +1559,12 @@ pkcs11rsa_fromdns(dst_key_t *key, isc_buffer_t *data) {
+ rsa->repr,
+ rsa->attrcnt * sizeof(*attr));
+ }
++ ret = ISC_R_NOMEMORY;
++
++ err:
+ isc_safe_memwipe(rsa, sizeof(*rsa));
+ isc_mem_put(key->mctx, rsa, sizeof(*rsa));
+- return (ISC_R_NOMEMORY);
++ return (ret);
+ }
+
+ static isc_result_t
+@@ -1729,6 +1743,7 @@ pkcs11rsa_fetch(dst_key_t *key, const char *engine, const char *label,
+ pk11_object_t *pubrsa;
+ pk11_context_t *pk11_ctx = NULL;
+ isc_result_t ret;
++ unsigned int bits;
+
+ if (label == NULL)
+ return (DST_R_NOENGINE);
+@@ -1815,7 +1830,11 @@ pkcs11rsa_fetch(dst_key_t *key, const char *engine, const char *label,
+
+ attr = pk11_attribute_bytype(rsa, CKA_MODULUS);
+ INSIST(attr != NULL);
+- key->key_size = pk11_numbits(attr->pValue, attr->ulValueLen);
++ ret = pk11_numbits(attr->pValue, attr->ulValueLen, &bits);
++ if (ret != ISC_R_SUCCESS) {
++ goto err;
++ }
++ key->key_size = bits;
+
+ return (ISC_R_SUCCESS);
+
+@@ -1901,6 +1920,7 @@ pkcs11rsa_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
+ CK_ATTRIBUTE *attr;
+ isc_mem_t *mctx = key->mctx;
+ const char *engine = NULL, *label = NULL;
++ unsigned int bits;
+
+ /* read private key file */
+ ret = dst__privstruct_parse(key, DST_ALG_RSA, lexer, mctx, &priv);
+@@ -2044,12 +2064,22 @@ pkcs11rsa_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
+
+ attr = pk11_attribute_bytype(rsa, CKA_MODULUS);
+ INSIST(attr != NULL);
+- key->key_size = pk11_numbits(attr->pValue, attr->ulValueLen);
++ ret = pk11_numbits(attr->pValue, attr->ulValueLen, &bits);
++ if (ret != ISC_R_SUCCESS) {
++ goto err;
++ }
++ key->key_size = bits;
+
+ attr = pk11_attribute_bytype(rsa, CKA_PUBLIC_EXPONENT);
+ INSIST(attr != NULL);
+- if (pk11_numbits(attr->pValue, attr->ulValueLen) > RSA_MAX_PUBEXP_BITS)
++
++ ret = pk11_numbits(attr->pValue, attr->ulValueLen, &bits);
++ if (ret != ISC_R_SUCCESS) {
++ goto err;
++ }
++ if (bits > RSA_MAX_PUBEXP_BITS) {
+ DST_RET(ISC_R_RANGE);
++ }
+
+ dst__privstruct_free(&priv, mctx);
+ isc_safe_memwipe(&priv, sizeof(priv));
+@@ -2084,6 +2114,7 @@ pkcs11rsa_fromlabel(dst_key_t *key, const char *engine, const char *label,
+ pk11_context_t *pk11_ctx = NULL;
+ isc_result_t ret;
+ unsigned int i;
++ unsigned int bits;
+
+ UNUSED(pin);
+
+@@ -2178,12 +2209,22 @@ pkcs11rsa_fromlabel(dst_key_t *key, const char *engine, const char *label,
+
+ attr = pk11_attribute_bytype(rsa, CKA_PUBLIC_EXPONENT);
+ INSIST(attr != NULL);
+- if (pk11_numbits(attr->pValue, attr->ulValueLen) > RSA_MAX_PUBEXP_BITS)
++
++ ret = pk11_numbits(attr->pValue, attr->ulValueLen, &bits);
++ if (ret != ISC_R_SUCCESS) {
++ goto err;
++ }
++ if (bits > RSA_MAX_PUBEXP_BITS) {
+ DST_RET(ISC_R_RANGE);
++ }
+
+ attr = pk11_attribute_bytype(rsa, CKA_MODULUS);
+ INSIST(attr != NULL);
+- key->key_size = pk11_numbits(attr->pValue, attr->ulValueLen);
++ ret = pk11_numbits(attr->pValue, attr->ulValueLen, &bits);
++ if (ret != ISC_R_SUCCESS) {
++ goto err;
++ }
++ key->key_size = bits;
+
+ pk11_return_session(pk11_ctx);
+ isc_safe_memwipe(pk11_ctx, sizeof(*pk11_ctx));
+diff --git a/lib/isc/include/pk11/internal.h b/lib/isc/include/pk11/internal.h
+index aa8907ab08..7cc8ec812b 100644
+--- a/lib/isc/include/pk11/internal.h
++++ b/lib/isc/include/pk11/internal.h
+@@ -25,7 +25,8 @@ void pk11_mem_put(void *ptr, size_t size);
+
+ CK_SLOT_ID pk11_get_best_token(pk11_optype_t optype);
+
+-unsigned int pk11_numbits(CK_BYTE_PTR data, unsigned int bytecnt);
++isc_result_t
++pk11_numbits(CK_BYTE_PTR data, unsigned int bytecnt, unsigned int *bits);
+
+ CK_ATTRIBUTE *pk11_attribute_first(const pk11_object_t *obj);
+
+diff --git a/lib/isc/pk11.c b/lib/isc/pk11.c
+index 012afd968a..4e4052044b 100644
+--- a/lib/isc/pk11.c
++++ b/lib/isc/pk11.c
+@@ -962,13 +962,15 @@ pk11_get_best_token(pk11_optype_t optype) {
+ return (token->slotid);
+ }
+
+-unsigned int
+-pk11_numbits(CK_BYTE_PTR data, unsigned int bytecnt) {
++isc_result_t
++pk11_numbits(CK_BYTE_PTR data, unsigned int bytecnt, unsigned int *bits) {
+ unsigned int bitcnt, i;
+ CK_BYTE top;
+
+- if (bytecnt == 0)
+- return (0);
++ if (bytecnt == 0) {
++ *bits = 0;
++ return (ISC_R_SUCCESS);
++ }
+ bitcnt = bytecnt * 8;
+ for (i = 0; i < bytecnt; i++) {
+ top = data[i];
+@@ -976,26 +978,41 @@ pk11_numbits(CK_BYTE_PTR data, unsigned int bytecnt) {
+ bitcnt -= 8;
+ continue;
+ }
+- if (top & 0x80)
+- return (bitcnt);
+- if (top & 0x40)
+- return (bitcnt - 1);
+- if (top & 0x20)
+- return (bitcnt - 2);
+- if (top & 0x10)
+- return (bitcnt - 3);
+- if (top & 0x08)
+- return (bitcnt - 4);
+- if (top & 0x04)
+- return (bitcnt - 5);
+- if (top & 0x02)
+- return (bitcnt - 6);
+- if (top & 0x01)
+- return (bitcnt - 7);
++ if (top & 0x80) {
++ *bits = bitcnt;
++ return (ISC_R_SUCCESS);
++ }
++ if (top & 0x40) {
++ *bits = bitcnt - 1;
++ return (ISC_R_SUCCESS);
++ }
++ if (top & 0x20) {
++ *bits = bitcnt - 2;
++ return (ISC_R_SUCCESS);
++ }
++ if (top & 0x10) {
++ *bits = bitcnt - 3;
++ return (ISC_R_SUCCESS);
++ }
++ if (top & 0x08) {
++ *bits = bitcnt - 4;
++ return (ISC_R_SUCCESS);
++ }
++ if (top & 0x04) {
++ *bits = bitcnt - 5;
++ return (ISC_R_SUCCESS);
++ }
++ if (top & 0x02) {
++ *bits = bitcnt - 6;
++ return (ISC_R_SUCCESS);
++ }
++ if (top & 0x01) {
++ *bits = bitcnt - 7;
++ return (ISC_R_SUCCESS);
++ }
+ break;
+ }
+- INSIST(0);
+- ISC_UNREACHABLE();
++ return (ISC_R_RANGE);
+ }
+
+ CK_ATTRIBUTE *
+--
+2.17.1
+
diff --git a/meta/recipes-connectivity/bind/bind/CVE-2020-8624.patch b/meta/recipes-connectivity/bind/bind/CVE-2020-8624.patch
new file mode 100644
index 0000000000..9cffe358bf
--- /dev/null
+++ b/meta/recipes-connectivity/bind/bind/CVE-2020-8624.patch
@@ -0,0 +1,33 @@
+From a73c3d30de7fe98af9e4dc0e490f732a48412380 Mon Sep 17 00:00:00 2001
+From: Mark Andrews <marka@isc.org>
+Date: Wed, 29 Jul 2020 23:36:03 +1000
+Subject: [PATCH] bind: Update-policy 'subdomain' was incorrectly treated as
+ 'zonesub'
+
+resulting in names outside the specified subdomain having the wrong
+restrictions for the given key.
+
+Upstream-Status: Backport
+CVE: CVE-2020-8624
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ bin/named/zoneconf.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/bin/named/zoneconf.c b/bin/named/zoneconf.c
+index e237bdb..4898447 100644
+--- a/bin/named/zoneconf.c
++++ b/bin/named/zoneconf.c
+@@ -237,7 +237,8 @@ configure_zone_ssutable(const cfg_obj_t *zconfig, dns_zone_t *zone,
+
+ str = cfg_obj_asstring(matchtype);
+ CHECK(dns_ssu_mtypefromstring(str, &mtype));
+- if (mtype == dns_ssumatchtype_subdomain) {
++ if (mtype == dns_ssumatchtype_subdomain &&
++ strcasecmp(str, "zonesub") == 0) {
+ usezone = true;
+ }
+
+--
+1.9.1
+
diff --git a/meta/recipes-connectivity/bind/bind/bind-ensure-searching-for-json-headers-searches-sysr.patch b/meta/recipes-connectivity/bind/bind/bind-ensure-searching-for-json-headers-searches-sysr.patch
index 37e210e6da..84559e5f37 100644
--- a/meta/recipes-connectivity/bind/bind/bind-ensure-searching-for-json-headers-searches-sysr.patch
+++ b/meta/recipes-connectivity/bind/bind/bind-ensure-searching-for-json-headers-searches-sysr.patch
@@ -1,4 +1,4 @@
-From 9473d29843579802e96b0293a3e953fed93de82c Mon Sep 17 00:00:00 2001
+From edda20fb5a6e88548f85e39d34d6c074306e15bc Mon Sep 17 00:00:00 2001
From: Paul Gortmaker <paul.gortmaker@windriver.com>
Date: Tue, 9 Jun 2015 11:22:00 -0400
Subject: [PATCH] bind: ensure searching for json headers searches sysroot
@@ -27,15 +27,16 @@ to make use of the combination some day.
Upstream-Status: Inappropriate [OE Specific]
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
---
- configure.in | 2 +-
+ configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-Index: bind-9.11.3/configure.in
-===================================================================
---- bind-9.11.3.orig/configure.in
-+++ bind-9.11.3/configure.in
-@@ -2574,7 +2574,7 @@ case "$use_libjson" in
+diff --git a/configure.ac b/configure.ac
+index 17392fd..e85a5c6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -2449,7 +2449,7 @@ case "$use_libjson" in
libjson_libs=""
;;
auto|yes)
diff --git a/meta/recipes-connectivity/bind/bind_9.11.5-P4.bb b/meta/recipes-connectivity/bind/bind_9.11.19.bb
index 69b1174073..d4467b0b48 100644
--- a/meta/recipes-connectivity/bind/bind_9.11.5-P4.bb
+++ b/meta/recipes-connectivity/bind/bind_9.11.19.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://www.isc.org/sw/bind/"
SECTION = "console/network"
LICENSE = "ISC & BSD"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=8f17f64e47e83b60cd920a1e4b54419e"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=bf39058a7f64b2a934ce14dc9ec1dd45"
DEPENDS = "openssl libcap zlib"
@@ -15,20 +15,24 @@ SRC_URI = "https://ftp.isc.org/isc/bind9/${PV}/${BPN}-${PV}.tar.gz \
file://make-etc-initd-bind-stop-work.patch \
file://init.d-add-support-for-read-only-rootfs.patch \
file://bind-ensure-searching-for-json-headers-searches-sysr.patch \
- file://0001-gen.c-extend-DIRNAMESIZE-from-256-to-512.patch \
- file://0001-lib-dns-gen.c-fix-too-long-error.patch \
file://0001-configure.in-remove-useless-L-use_openssl-lib.patch \
file://0001-named-lwresd-V-and-start-log-hide-build-options.patch \
file://0001-avoid-start-failure-with-bind-user.patch \
-"
+ file://CVE-2020-8622.patch \
+ file://CVE-2020-8623.patch \
+ file://CVE-2020-8624.patch \
+ "
-SRC_URI[md5sum] = "8ddab4b61fa4516fe404679c74e37960"
-SRC_URI[sha256sum] = "7e8c08192bcbaeb6e9f2391a70e67583b027b90e8c4bc1605da6eb126edde434"
+SRC_URI[sha256sum] = "0dee554a4caa368948b32da9a0c97b516c19103bc13ff5b3762c5d8552f52329"
UPSTREAM_CHECK_URI = "https://ftp.isc.org/isc/bind9/"
# stay at 9.11 until 9.16, from 9.16 follow the ESV versions divisible by 4
UPSTREAM_CHECK_REGEX = "(?P<pver>9.(11|16|20|24|28)(\.\d+)+(-P\d+)*)/"
+# BIND >= 9.11.2 need dhcpd >= 4.4.0,
+# don't report it here since dhcpd is already recent enough.
+CVE_CHECK_WHITELIST += "CVE-2019-6470"
+
inherit autotools update-rc.d systemd useradd pkgconfig multilib_script
MULTILIB_SCRIPTS = "${PN}:${bindir}/bind9-config ${PN}:${bindir}/isc-config.sh"
diff --git a/meta/recipes-connectivity/bluez5/bluez5.inc b/meta/recipes-connectivity/bluez5/bluez5.inc
index f582a07e22..75fc2dbf4c 100644
--- a/meta/recipes-connectivity/bluez5/bluez5.inc
+++ b/meta/recipes-connectivity/bluez5/bluez5.inc
@@ -58,6 +58,8 @@ SRC_URI = "\
file://CVE-2018-10910.patch \
file://gcc9-fixes.patch \
file://0001-tools-Fix-build-after-y2038-changes-in-glibc.patch \
+ file://CVE-2020-0556-1.patch \
+ file://CVE-2020-0556-2.patch \
"
S = "${WORKDIR}/bluez-${PV}"
diff --git a/meta/recipes-connectivity/bluez5/bluez5/CVE-2020-0556-1.patch b/meta/recipes-connectivity/bluez5/bluez5/CVE-2020-0556-1.patch
new file mode 100644
index 0000000000..a6bf31e14b
--- /dev/null
+++ b/meta/recipes-connectivity/bluez5/bluez5/CVE-2020-0556-1.patch
@@ -0,0 +1,35 @@
+From 8cdbd3b09f29da29374e2f83369df24228da0ad1 Mon Sep 17 00:00:00 2001
+From: Alain Michaud <alainm@chromium.org>
+Date: Tue, 10 Mar 2020 02:35:16 +0000
+Subject: [PATCH 1/2] HOGP must only accept data from bonded devices.
+
+HOGP 1.0 Section 6.1 establishes that the HOGP must require bonding.
+
+Reference:
+https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00352.htm
+
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=8cdbd3b09f29da29374e2f83369df24228da0ad1]
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+CVE: CVE-2020-0556
+---
+ profiles/input/hog.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/profiles/input/hog.c b/profiles/input/hog.c
+index 83c017dcb..dfac68921 100644
+--- a/profiles/input/hog.c
++++ b/profiles/input/hog.c
+@@ -186,6 +186,10 @@ static int hog_accept(struct btd_service *service)
+ return -EINVAL;
+ }
+
++ /* HOGP 1.0 Section 6.1 requires bonding */
++ if (!device_is_bonded(device, btd_device_get_bdaddr_type(device)))
++ return -ECONNREFUSED;
++
+ /* TODO: Replace GAttrib with bt_gatt_client */
+ bt_hog_attach(dev->hog, attrib);
+
+--
+2.24.1
+
diff --git a/meta/recipes-connectivity/bluez5/bluez5/CVE-2020-0556-2.patch b/meta/recipes-connectivity/bluez5/bluez5/CVE-2020-0556-2.patch
new file mode 100644
index 0000000000..8acb2f15ec
--- /dev/null
+++ b/meta/recipes-connectivity/bluez5/bluez5/CVE-2020-0556-2.patch
@@ -0,0 +1,143 @@
+From 3cccdbab2324086588df4ccf5f892fb3ce1f1787 Mon Sep 17 00:00:00 2001
+From: Alain Michaud <alainm@chromium.org>
+Date: Tue, 10 Mar 2020 02:35:18 +0000
+Subject: [PATCH 2/2] HID accepts bonded device connections only.
+
+This change adds a configuration for platforms to choose a more secure
+posture for the HID profile. While some older mice are known to not
+support pairing or encryption, some platform may choose a more secure
+posture by requiring the device to be bonded and require the
+connection to be encrypted when bonding is required.
+
+Reference:
+https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00352.html
+
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=3cccdbab2324086588df4ccf5f892fb3ce1f1787]
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+CVE: CVE-2020-0556
+
+---
+ profiles/input/device.c | 23 ++++++++++++++++++++++-
+ profiles/input/device.h | 1 +
+ profiles/input/input.conf | 8 ++++++++
+ profiles/input/manager.c | 13 ++++++++++++-
+ 4 files changed, 43 insertions(+), 2 deletions(-)
+
+diff --git a/profiles/input/device.c b/profiles/input/device.c
+index 2cb3811c8..d89da2d7c 100644
+--- a/profiles/input/device.c
++++ b/profiles/input/device.c
+@@ -92,6 +92,7 @@ struct input_device {
+
+ static int idle_timeout = 0;
+ static bool uhid_enabled = false;
++static bool classic_bonded_only = false;
+
+ void input_set_idle_timeout(int timeout)
+ {
+@@ -103,6 +104,11 @@ void input_enable_userspace_hid(bool state)
+ uhid_enabled = state;
+ }
+
++void input_set_classic_bonded_only(bool state)
++{
++ classic_bonded_only = state;
++}
++
+ static void input_device_enter_reconnect_mode(struct input_device *idev);
+ static int connection_disconnect(struct input_device *idev, uint32_t flags);
+
+@@ -970,8 +976,18 @@ static int hidp_add_connection(struct input_device *idev)
+ if (device_name_known(idev->device))
+ device_get_name(idev->device, req->name, sizeof(req->name));
+
++ /* Make sure the device is bonded if required */
++ if (classic_bonded_only && !device_is_bonded(idev->device,
++ btd_device_get_bdaddr_type(idev->device))) {
++ error("Rejected connection from !bonded device %s", dst_addr);
++ goto cleanup;
++ }
++
+ /* Encryption is mandatory for keyboards */
+- if (req->subclass & 0x40) {
++ /* Some platforms may choose to require encryption for all devices */
++ /* Note that this only matters for pre 2.1 devices as otherwise the */
++ /* device is encrypted by default by the lower layers */
++ if (classic_bonded_only || req->subclass & 0x40) {
+ if (!bt_io_set(idev->intr_io, &gerr,
+ BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
+ BT_IO_OPT_INVALID)) {
+@@ -1203,6 +1219,11 @@ static void input_device_enter_reconnect_mode(struct input_device *idev)
+ DBG("path=%s reconnect_mode=%s", idev->path,
+ reconnect_mode_to_string(idev->reconnect_mode));
+
++ /* Make sure the device is bonded if required */
++ if (classic_bonded_only && !device_is_bonded(idev->device,
++ btd_device_get_bdaddr_type(idev->device)))
++ return;
++
+ /* Only attempt an auto-reconnect when the device is required to
+ * accept reconnections from the host.
+ */
+diff --git a/profiles/input/device.h b/profiles/input/device.h
+index 51a9aee18..3044db673 100644
+--- a/profiles/input/device.h
++++ b/profiles/input/device.h
+@@ -29,6 +29,7 @@ struct input_conn;
+
+ void input_set_idle_timeout(int timeout);
+ void input_enable_userspace_hid(bool state);
++void input_set_classic_bonded_only(bool state);
+
+ int input_device_register(struct btd_service *service);
+ void input_device_unregister(struct btd_service *service);
+diff --git a/profiles/input/input.conf b/profiles/input/input.conf
+index 3e1d65aae..166aff4a4 100644
+--- a/profiles/input/input.conf
++++ b/profiles/input/input.conf
+@@ -11,3 +11,11 @@
+ # Enable HID protocol handling in userspace input profile
+ # Defaults to false (HIDP handled in HIDP kernel module)
+ #UserspaceHID=true
++
++# Limit HID connections to bonded devices
++# The HID Profile does not specify that devices must be bonded, however some
++# platforms may want to make sure that input connections only come from bonded
++# device connections. Several older mice have been known for not supporting
++# pairing/encryption.
++# Defaults to false to maximize device compatibility.
++#ClassicBondedOnly=true
+diff --git a/profiles/input/manager.c b/profiles/input/manager.c
+index 1d31b0652..5cd27b839 100644
+--- a/profiles/input/manager.c
++++ b/profiles/input/manager.c
+@@ -96,7 +96,7 @@ static int input_init(void)
+ config = load_config_file(CONFIGDIR "/input.conf");
+ if (config) {
+ int idle_timeout;
+- gboolean uhid_enabled;
++ gboolean uhid_enabled, classic_bonded_only;
+
+ idle_timeout = g_key_file_get_integer(config, "General",
+ "IdleTimeout", &err);
+@@ -114,6 +114,17 @@ static int input_init(void)
+ input_enable_userspace_hid(uhid_enabled);
+ } else
+ g_clear_error(&err);
++
++ classic_bonded_only = g_key_file_get_boolean(config, "General",
++ "ClassicBondedOnly", &err);
++
++ if (!err) {
++ DBG("input.conf: ClassicBondedOnly=%s",
++ classic_bonded_only ? "true" : "false");
++ input_set_classic_bonded_only(classic_bonded_only);
++ } else
++ g_clear_error(&err);
++
+ }
+
+ btd_profile_register(&input_profile);
+--
+2.24.1
+
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0001-Ensure-context-is-running-prior-to-calling-isc_app_c.patch b/meta/recipes-connectivity/dhcp/dhcp/0001-Ensure-context-is-running-prior-to-calling-isc_app_c.patch
new file mode 100644
index 0000000000..34b2ae1e5c
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/dhcp/0001-Ensure-context-is-running-prior-to-calling-isc_app_c.patch
@@ -0,0 +1,165 @@
+From f369dbb9e67eb5ef336944af63039b6d8f838384 Mon Sep 17 00:00:00 2001
+From: Thomas Markwalder <tmark@isc.org>
+Date: Thu, 12 Sep 2019 10:35:46 -0400
+Subject: [PATCH 1/3] Ensure context is running prior to calling
+ isc_app_ctxsuspend
+
+Add a release note.
+
+includes/omapip/isclib.h
+ Added actx_running flag to global context, dhcp_gbl_ctx
+
+omapip/isclib.c
+ set_ctx_running() - new function used as the ctxonrun callback
+
+ dhcp_context_create() - installs set_ctx_running callback
+
+ dhcp_signal_handler() - modified to use act_running flag to
+ determine is context is running and should be suspended
+
+Upstream-Status: Backport [https://gitlab.isc.org/isc-projects/dhcp.git]
+
+Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+---
+ RELNOTES | 7 +++++
+ includes/omapip/isclib.h | 3 ++-
+ omapip/isclib.c | 57 +++++++++++++++++++++++++++++++++-------
+ 3 files changed, 57 insertions(+), 10 deletions(-)
+
+diff --git a/RELNOTES b/RELNOTES
+index f10305d..1730473 100644
+--- a/RELNOTES
++++ b/RELNOTES
+@@ -6,6 +6,13 @@
+
+ NEW FEATURES
+
++- Closed a small window of time between the installation of graceful
++ shutdown signal handlers and application context startup, during which
++ the receipt of shutdown signal would cause a REQUIRE() assertion to
++ occur. Note this issue is only visible when compiling with
++ ENABLE_GENTLE_SHUTDOWN defined.
++ [Gitlab #53,!18 git TBD]
++
+ Please note that that ISC DHCP is now licensed under the Mozilla Public License,
+ MPL 2.0. Please see https://www.mozilla.org/en-US/MPL/2.0/ to read the MPL 2.0
+ license terms.
+diff --git a/includes/omapip/isclib.h b/includes/omapip/isclib.h
+index 6c20584..af6a6fc 100644
+--- a/includes/omapip/isclib.h
++++ b/includes/omapip/isclib.h
+@@ -94,7 +94,8 @@
+ typedef struct dhcp_context {
+ isc_mem_t *mctx;
+ isc_appctx_t *actx;
+- int actx_started;
++ int actx_started; // ISC_TRUE if ctxstart has been called
++ int actx_running; // ISC_TRUE if ctxrun has been called
+ isc_taskmgr_t *taskmgr;
+ isc_task_t *task;
+ isc_socketmgr_t *socketmgr;
+diff --git a/omapip/isclib.c b/omapip/isclib.c
+index ce4b4a1..73e017c 100644
+--- a/omapip/isclib.c
++++ b/omapip/isclib.c
+@@ -134,6 +134,35 @@ handle_signal(int sig, void (*handler)(int)) {
+ }
+ }
+
++/* Callback passed to isc_app_ctxonrun
++ *
++ * BIND9 context code will invoke this handler once the context has
++ * entered the running state. We use it to set a global marker so that
++ * we can tell if the context is running. Several of the isc_app_
++ * calls REQUIRE that the context is running and we need a way to
++ * know that.
++ *
++ * We also check to see if we received a shutdown signal prior to
++ * the context entering the run state. If we did, then we can just
++ * simply shut the context down now. This closes the relatively
++ * small window between start up and entering run via the call
++ * to dispatch().
++ *
++ */
++static void
++set_ctx_running(isc_task_t *task, isc_event_t *event) {
++ task = task; // unused;
++ dhcp_gbl_ctx.actx_running = ISC_TRUE;
++
++ if (shutdown_signal) {
++ // We got signaled shutdown before we entered running state.
++ // Now that we've reached running state, shut'er down.
++ isc_app_ctxsuspend(dhcp_gbl_ctx.actx);
++ }
++
++ isc_event_free(&event);
++}
++
+ isc_result_t
+ dhcp_context_create(int flags,
+ struct in_addr *local4,
+@@ -141,6 +170,9 @@ dhcp_context_create(int flags,
+ isc_result_t result;
+
+ if ((flags & DHCP_CONTEXT_PRE_DB) != 0) {
++ dhcp_gbl_ctx.actx_started = ISC_FALSE;
++ dhcp_gbl_ctx.actx_running = ISC_FALSE;
++
+ /*
+ * Set up the error messages, this isn't the right place
+ * for this call but it is convienent for now.
+@@ -204,15 +236,24 @@ dhcp_context_create(int flags,
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+
+- result = isc_task_create(dhcp_gbl_ctx.taskmgr, 0, &dhcp_gbl_ctx.task);
++ result = isc_task_create(dhcp_gbl_ctx.taskmgr, 0,
++ &dhcp_gbl_ctx.task);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+
+ result = isc_app_ctxstart(dhcp_gbl_ctx.actx);
+ if (result != ISC_R_SUCCESS)
+- return (result);
++ goto cleanup;
++
+ dhcp_gbl_ctx.actx_started = ISC_TRUE;
+
++ // Install the onrun callback.
++ result = isc_app_ctxonrun(dhcp_gbl_ctx.actx, dhcp_gbl_ctx.mctx,
++ dhcp_gbl_ctx.task, set_ctx_running,
++ dhcp_gbl_ctx.actx);
++ if (result != ISC_R_SUCCESS)
++ goto cleanup;
++
+ /* Not all OSs support suppressing SIGPIPE through socket
+ * options, so set the sigal action to be ignore. This allows
+ * broken connections to fail gracefully with EPIPE on writes */
+@@ -335,19 +376,17 @@ isclib_make_dst_key(char *inname,
+ * @param signal signal code that we received
+ */
+ void dhcp_signal_handler(int signal) {
+- isc_appctx_t *ctx = dhcp_gbl_ctx.actx;
+- int prev = shutdown_signal;
+-
+- if (prev != 0) {
++ if (shutdown_signal != 0) {
+ /* Already in shutdown. */
+ return;
+ }
++
+ /* Possible race but does it matter? */
+ shutdown_signal = signal;
+
+- /* Use reload (aka suspend) for easier dispatch() reenter. */
+- if (ctx && ctx->methods && ctx->methods->ctxsuspend) {
+- (void) isc_app_ctxsuspend(ctx);
++ /* If the application context is running tell it to shut down */
++ if (dhcp_gbl_ctx.actx_running == ISC_TRUE) {
++ (void) isc_app_ctxsuspend(dhcp_gbl_ctx.actx);
+ }
+ }
+
+--
+2.23.0
+
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0002-Added-shutdown-log-statment-to-dhcrelay.patch b/meta/recipes-connectivity/dhcp/dhcp/0002-Added-shutdown-log-statment-to-dhcrelay.patch
new file mode 100644
index 0000000000..78b2b74f45
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/dhcp/0002-Added-shutdown-log-statment-to-dhcrelay.patch
@@ -0,0 +1,29 @@
+From adcd34ae1f56b16d7e9696d980332b4cf6c7ce91 Mon Sep 17 00:00:00 2001
+From: Thomas Markwalder <tmark@isc.org>
+Date: Fri, 13 Sep 2019 15:03:31 -0400
+Subject: [PATCH 2/3] Added shutdown log statment to dhcrelay
+
+Upstream-Status: Backport [https://gitlab.isc.org/isc-projects/dhcp.git]
+
+Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+---
+ relay/dhcrelay.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/relay/dhcrelay.c b/relay/dhcrelay.c
+index d8caaaf..4bd1d47 100644
+--- a/relay/dhcrelay.c
++++ b/relay/dhcrelay.c
+@@ -2076,6 +2076,9 @@ dhcp_set_control_state(control_object_state_t oldstate,
+ if (newstate != server_shutdown)
+ return ISC_R_SUCCESS;
+
++ /* Log shutdown on signal. */
++ log_info("Received signal %d, initiating shutdown.", shutdown_signal);
++
+ if (no_pid_file == ISC_FALSE)
+ (void) unlink(path_dhcrelay_pid);
+
+--
+2.23.0
+
diff --git a/meta/recipes-connectivity/dhcp/dhcp/0003-Addressed-review-comment.patch b/meta/recipes-connectivity/dhcp/dhcp/0003-Addressed-review-comment.patch
new file mode 100644
index 0000000000..a51b6cf526
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/dhcp/0003-Addressed-review-comment.patch
@@ -0,0 +1,31 @@
+From e4b54b4d676783152d487103714cba2913661ef8 Mon Sep 17 00:00:00 2001
+From: Thomas Markwalder <tmark@isc.org>
+Date: Wed, 6 Nov 2019 15:53:50 -0500
+Subject: [PATCH 3/3] Addressed review comment.
+
+omapip/isclib.c
+ Added use of IGNORE_UNUSED()
+
+Upstream-Status: Backport [https://gitlab.isc.org/isc-projects/dhcp.git]
+
+Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+---
+ omapip/isclib.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/omapip/isclib.c b/omapip/isclib.c
+index 73e017c..1d52463 100644
+--- a/omapip/isclib.c
++++ b/omapip/isclib.c
+@@ -151,7 +151,7 @@ handle_signal(int sig, void (*handler)(int)) {
+ */
+ static void
+ set_ctx_running(isc_task_t *task, isc_event_t *event) {
+- task = task; // unused;
++ IGNORE_UNUSED(task);
+ dhcp_gbl_ctx.actx_running = ISC_TRUE;
+
+ if (shutdown_signal) {
+--
+2.23.0
+
diff --git a/meta/recipes-connectivity/dhcp/dhcp_4.4.1.bb b/meta/recipes-connectivity/dhcp/dhcp_4.4.1.bb
index 275961a603..ddc8b60254 100644
--- a/meta/recipes-connectivity/dhcp/dhcp_4.4.1.bb
+++ b/meta/recipes-connectivity/dhcp/dhcp_4.4.1.bb
@@ -11,6 +11,9 @@ SRC_URI += "file://0001-define-macro-_PATH_DHCPD_CONF-and-_PATH_DHCLIENT_CON.pat
file://0013-fixup_use_libbind.patch \
file://0001-master-Added-includes-of-new-BIND9-compatibility-hea.patch \
file://0001-Fix-a-NSUPDATE-compiling-issue.patch \
+ file://0001-Ensure-context-is-running-prior-to-calling-isc_app_c.patch \
+ file://0002-Added-shutdown-log-statment-to-dhcrelay.patch \
+ file://0003-Addressed-review-comment.patch \
"
SRC_URI[md5sum] = "18c7f4dcbb0a63df25098216d47b1ede"
diff --git a/meta/recipes-connectivity/inetutils/inetutils_1.9.4.bb b/meta/recipes-connectivity/inetutils/inetutils_1.9.4.bb
index 684fbe09e1..cc9410b94e 100644
--- a/meta/recipes-connectivity/inetutils/inetutils_1.9.4.bb
+++ b/meta/recipes-connectivity/inetutils/inetutils_1.9.4.bb
@@ -143,11 +143,15 @@ ALTERNATIVE_${PN}-traceroute = "traceroute"
ALTERNATIVE_${PN}-hostname = "hostname"
ALTERNATIVE_LINK_NAME[hostname] = "${base_bindir}/hostname"
-ALTERNATIVE_${PN}-doc = "hostname.1 dnsdomainname.1 logger.1 syslogd.8"
+ALTERNATIVE_${PN}-doc = "hostname.1 dnsdomainname.1 logger.1 syslogd.8 \
+ tftpd.8 tftp.1 telnetd.8"
ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1"
ALTERNATIVE_LINK_NAME[dnsdomainname.1] = "${mandir}/man1/dnsdomainname.1"
ALTERNATIVE_LINK_NAME[logger.1] = "${mandir}/man1/logger.1"
ALTERNATIVE_LINK_NAME[syslogd.8] = "${mandir}/man8/syslogd.8"
+ALTERNATIVE_LINK_NAME[telnetd.8] = "${mandir}/man8/telnetd.8"
+ALTERNATIVE_LINK_NAME[tftpd.8] = "${mandir}/man8/tftpd.8"
+ALTERNATIVE_LINK_NAME[tftp.1] = "${mandir}/man1/tftp.1"
ALTERNATIVE_${PN}-ifconfig = "ifconfig"
ALTERNATIVE_LINK_NAME[ifconfig] = "${base_sbindir}/ifconfig"
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Disable-statx-if-using-glibc-emulation.patch b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Disable-statx-if-using-glibc-emulation.patch
new file mode 100644
index 0000000000..98b1391923
--- /dev/null
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Disable-statx-if-using-glibc-emulation.patch
@@ -0,0 +1,34 @@
+From ff3ad88c233ecd87f7983ad13836323f944540ec Mon Sep 17 00:00:00 2001
+From: Doug Nazar <nazard@nazar.ca>
+Date: Mon, 9 Dec 2019 10:53:37 -0500
+Subject: [PATCH] Disable statx if using glibc emulation
+
+On older kernels without statx, glibc with statx support will attempt
+to emulate the call. However it doesn't support AT_STATX_DONT_SYNC and
+will return EINVAL. This causes all xstat/xlstat calls to fail.
+
+Upstream-Status: Backport
+
+Signed-off-by: Doug Nazar <nazard@nazar.ca>
+Signed-off-by: Steve Dickson <steved@redhat.com>
+---
+ support/misc/xstat.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/support/misc/xstat.c b/support/misc/xstat.c
+index 661e29e4..a438fbcc 100644
+--- a/support/misc/xstat.c
++++ b/support/misc/xstat.c
+@@ -51,6 +51,9 @@ statx_do_stat(int fd, const char *pathname, struct stat *statbuf, int flags)
+ statx_copy(statbuf, &stxbuf);
+ return 0;
+ }
++ /* glibc emulation doesn't support AT_STATX_DONT_SYNC */
++ if (errno == EINVAL)
++ errno = ENOSYS;
+ if (errno == ENOSYS)
+ statx_supported = 0;
+ } else
+--
+2.19.1
+
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-statd-take-user-id-from-var-lib-nfs-sm.patch b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-statd-take-user-id-from-var-lib-nfs-sm.patch
new file mode 100644
index 0000000000..87f4f098e0
--- /dev/null
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-statd-take-user-id-from-var-lib-nfs-sm.patch
@@ -0,0 +1,102 @@
+From 12ee0ff1120a6e42b67cc90ad7d5006555e866c3 Mon Sep 17 00:00:00 2001
+From: NeilBrown <neilb@suse.de>
+Date: Tue, 23 Jun 2020 09:22:22 +0000
+Subject: [PATCH] statd: take user-id from /var/lib/nfs/sm
+
+Having /var/lib/nfs writeable by statd is not ideal
+as there are files in there that statd doesn't need
+to access.
+After dropping privs, statd and sm-notify only need to
+access files in the directories sm and sm.bak.
+So take the uid for these deamons from 'sm'.
+
+Upstream-Status: Backport [https://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commitdiff;h=fee2cc29e888f2ced6a76990923aef19d326dc0e]
+CVE: CVE-2019-3689
+
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Steve Dickson <steved@redhat.com>
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ support/nsm/file.c | 16 +++++-----------
+ utils/statd/sm-notify.man | 10 +++++++++-
+ utils/statd/statd.man | 10 +++++++++-
+ 3 files changed, 23 insertions(+), 13 deletions(-)
+
+diff --git a/support/nsm/file.c b/support/nsm/file.c
+index 0b66f12..f5b4480 100644
+--- a/support/nsm/file.c
++++ b/support/nsm/file.c
+@@ -388,23 +388,17 @@ nsm_drop_privileges(const int pidfd)
+
+ (void)umask(S_IRWXO);
+
+- /*
+- * XXX: If we can't stat dirname, or if dirname is owned by
+- * root, we should use "statduser" instead, which is set up
+- * by configure.ac. Nothing in nfs-utils seems to use
+- * "statduser," though.
+- */
+- if (lstat(nsm_base_dirname, &st) == -1) {
+- xlog(L_ERROR, "Failed to stat %s: %m", nsm_base_dirname);
+- return false;
+- }
+-
+ if (chdir(nsm_base_dirname) == -1) {
+ xlog(L_ERROR, "Failed to change working directory to %s: %m",
+ nsm_base_dirname);
+ return false;
+ }
+
++ if (lstat(NSM_MONITOR_DIR, &st) == -1) {
++ xlog(L_ERROR, "Failed to stat %s/%s: %m", nsm_base_dirname, NSM_MONITOR_DIR);
++ return false;
++ }
++
+ if (!prune_bounding_set())
+ return false;
+
+diff --git a/utils/statd/sm-notify.man b/utils/statd/sm-notify.man
+index cfe1e4b..addf5d3 100644
+--- a/utils/statd/sm-notify.man
++++ b/utils/statd/sm-notify.man
+@@ -190,7 +190,15 @@ by default.
+ After starting,
+ .B sm-notify
+ attempts to set its effective UID and GID to the owner
+-and group of this directory.
++and group of the subdirectory
++.B sm
++of this directory. After changing the effective ids,
++.B sm-notify
++only needs to access files in
++.B sm
++and
++.B sm.bak
++within the state-directory-path.
+ .TP
+ .BI -v " ipaddr " | " hostname
+ Specifies the network address from which to send reboot notifications,
+diff --git a/utils/statd/statd.man b/utils/statd/statd.man
+index 71d5846..6222701 100644
+--- a/utils/statd/statd.man
++++ b/utils/statd/statd.man
+@@ -259,7 +259,15 @@ by default.
+ After starting,
+ .B rpc.statd
+ attempts to set its effective UID and GID to the owner
+-and group of this directory.
++and group of the subdirectory
++.B sm
++of this directory. After changing the effective ids,
++.B rpc.statd
++only needs to access files in
++.B sm
++and
++.B sm.bak
++within the state-directory-path.
+ .TP
+ .BR -v ", " -V ", " --version
+ Causes
+--
+2.23.0
+
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils_2.4.1.bb b/meta/recipes-connectivity/nfs-utils/nfs-utils_2.4.1.bb
index 7e80354e4e..458e534864 100644
--- a/meta/recipes-connectivity/nfs-utils/nfs-utils_2.4.1.bb
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils_2.4.1.bb
@@ -33,6 +33,8 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/utils/nfs-utils/${PV}/nfs-utils-${PV}.tar.x
file://0001-Makefile.am-fix-undefined-function-for-libnsm.a.patch \
file://0001-Don-t-build-tools-with-CC_FOR_BUILD.patch \
file://0001-Fix-include-order-between-config.h-and-stat.h.patch \
+ file://0001-Disable-statx-if-using-glibc-emulation.patch \
+ file://0001-statd-take-user-id-from-var-lib-nfs-sm.patch \
"
SRC_URI_append_libc-glibc = " file://0001-configure.ac-Do-not-fatalize-Wmissing-prototypes.patch"
SRC_URI_append_libc-musl = " file://nfs-utils-musl-res_querydomain.patch"
diff --git a/meta/recipes-connectivity/openssh/openssh/0001-upstream-what-bozo-decided-to-use-2020-as-a-future-d.patch b/meta/recipes-connectivity/openssh/openssh/0001-upstream-what-bozo-decided-to-use-2020-as-a-future-d.patch
new file mode 100644
index 0000000000..e2930c3c7d
--- /dev/null
+++ b/meta/recipes-connectivity/openssh/openssh/0001-upstream-what-bozo-decided-to-use-2020-as-a-future-d.patch
@@ -0,0 +1,46 @@
+From 3cccc0a2ab597b8273bddf08e9a3cc5551d7e530 Mon Sep 17 00:00:00 2001
+From: "djm@openbsd.org" <djm@openbsd.org>
+Date: Fri, 3 Jan 2020 03:02:26 +0000
+Subject: [PATCH] upstream: what bozo decided to use 2020 as a future date in a
+ regress
+
+test?
+
+OpenBSD-Regress-ID: 3b953df5a7e14081ff6cf495d4e8d40e153cbc3a
+
+Upstream-Status: Backport [https://github.com/openssh/openssh-portable/commit/ff31f15773ee173502eec4d7861ec56f26bba381]
+
+[Dropped the script version and copyright year change at the top]
+
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ regress/cert-hostkey.sh | 2 +-
+ regress/cert-userkey.sh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/regress/cert-hostkey.sh b/regress/cert-hostkey.sh
+index 3ce7779..74d5a53 100644
+--- a/regress/cert-hostkey.sh
++++ b/regress/cert-hostkey.sh
+@@ -248,7 +248,7 @@ test_one() {
+ test_one "user-certificate" failure "-n $HOSTS"
+ test_one "empty principals" success "-h"
+ test_one "wrong principals" failure "-h -n foo"
+-test_one "cert not yet valid" failure "-h -V20200101:20300101"
++test_one "cert not yet valid" failure "-h -V20300101:20320101"
+ test_one "cert expired" failure "-h -V19800101:19900101"
+ test_one "cert valid interval" success "-h -V-1w:+2w"
+ test_one "cert has constraints" failure "-h -Oforce-command=false"
+diff --git a/regress/cert-userkey.sh b/regress/cert-userkey.sh
+index 6849e99..de455b8 100644
+--- a/regress/cert-userkey.sh
++++ b/regress/cert-userkey.sh
+@@ -327,7 +327,7 @@ test_one() {
+ test_one "correct principal" success "-n ${USER}"
+ test_one "host-certificate" failure "-n ${USER} -h"
+ test_one "wrong principals" failure "-n foo"
+-test_one "cert not yet valid" failure "-n ${USER} -V20200101:20300101"
++test_one "cert not yet valid" failure "-n ${USER} -V20300101:20320101"
+ test_one "cert expired" failure "-n ${USER} -V19800101:19900101"
+ test_one "cert valid interval" success "-n ${USER} -V-1w:+2w"
+ test_one "wrong source-address" failure "-n ${USER} -Osource-address=10.0.0.0/8"
diff --git a/meta/recipes-connectivity/openssh/openssh_8.0p1.bb b/meta/recipes-connectivity/openssh/openssh_8.0p1.bb
index 2ffbc9a95f..3d16f9d347 100644
--- a/meta/recipes-connectivity/openssh/openssh_8.0p1.bb
+++ b/meta/recipes-connectivity/openssh/openssh_8.0p1.bb
@@ -25,6 +25,7 @@ SRC_URI = "http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${PV}.tar
file://sshd_check_keys \
file://add-test-support-for-busybox.patch \
file://0001-upstream-fix-integer-overflow-in-XMSS-private-key-pa.patch \
+ file://0001-upstream-what-bozo-decided-to-use-2020-as-a-future-d.patch \
"
SRC_URI[md5sum] = "bf050f002fe510e1daecd39044e1122d"
SRC_URI[sha256sum] = "bd943879e69498e8031eb6b7f44d08cdc37d59a7ab689aa0b437320c3481fd68"
diff --git a/meta/recipes-connectivity/openssl/openssl/reproducible.patch b/meta/recipes-connectivity/openssl/openssl/reproducible.patch
new file mode 100644
index 0000000000..a24260c95d
--- /dev/null
+++ b/meta/recipes-connectivity/openssl/openssl/reproducible.patch
@@ -0,0 +1,32 @@
+The value for perl_archname can vary depending on the host, e.g.
+x86_64-linux-gnu-thread-multi or x86_64-linux-thread-multi which
+makes the ptest package non-reproducible. Its unused other than
+these references so drop it.
+
+RP 2020/2/6
+
+Upstream-Status: Pending
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: openssl-1.1.1d/Configure
+===================================================================
+--- openssl-1.1.1d.orig/Configure
++++ openssl-1.1.1d/Configure
+@@ -286,7 +286,7 @@ if (defined env($local_config_envname))
+ # Save away perl command information
+ $config{perl_cmd} = $^X;
+ $config{perl_version} = $Config{version};
+-$config{perl_archname} = $Config{archname};
++#$config{perl_archname} = $Config{archname};
+
+ $config{prefix}="";
+ $config{openssldir}="";
+@@ -2517,7 +2517,7 @@ _____
+ @{$config{perlargv}}), "\n";
+ print "\nPerl information:\n\n";
+ print ' ',$config{perl_cmd},"\n";
+- print ' ',$config{perl_version},' for ',$config{perl_archname},"\n";
++ print ' ',$config{perl_version},"\n";
+ }
+ if ($dump || $options) {
+ my $longest = 0;
diff --git a/meta/recipes-connectivity/openssl/openssl_1.1.1d.bb b/meta/recipes-connectivity/openssl/openssl_1.1.1g.bb
index 8819e19ec4..c514fcd82a 100644
--- a/meta/recipes-connectivity/openssl/openssl_1.1.1d.bb
+++ b/meta/recipes-connectivity/openssl/openssl_1.1.1g.bb
@@ -16,14 +16,14 @@ SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz \
file://0001-skip-test_symbol_presence.patch \
file://0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch \
file://afalg.patch \
+ file://reproducible.patch \
"
SRC_URI_append_class-nativesdk = " \
file://environment.d-openssl.sh \
"
-SRC_URI[md5sum] = "3be209000dbc7e1b95bcdf47980a3baa"
-SRC_URI[sha256sum] = "1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2"
+SRC_URI[sha256sum] = "ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46"
inherit lib_package multilib_header multilib_script ptest
MULTILIB_SCRIPTS = "${PN}-bin:${bindir}/c_rehash"
@@ -32,7 +32,7 @@ PACKAGECONFIG ?= ""
PACKAGECONFIG_class-native = ""
PACKAGECONFIG_class-nativesdk = ""
-PACKAGECONFIG[cryptodev-linux] = "enable-devcryptoeng,disable-devcryptoeng,cryptodev-linux"
+PACKAGECONFIG[cryptodev-linux] = "enable-devcryptoeng,disable-devcryptoeng,cryptodev-linux,,cryptodev-module"
B = "${WORKDIR}/build"
do_configure[cleandirs] = "${B}"
@@ -202,3 +202,7 @@ RDEPENDS_${PN}-ptest += "openssl-bin perl perl-modules bash"
BBCLASSEXTEND = "native nativesdk"
CVE_PRODUCT = "openssl:openssl"
+
+# Only affects OpenSSL >= 1.1.1 in combination with Apache < 2.4.37
+# Apache in meta-webserver is already recent enough
+CVE_CHECK_WHITELIST += "CVE-2019-0190"
diff --git a/meta/recipes-connectivity/ppp/ppp/0001-pppd-Fix-bounds-check-in-EAP-code.patch b/meta/recipes-connectivity/ppp/ppp/0001-pppd-Fix-bounds-check-in-EAP-code.patch
new file mode 100644
index 0000000000..b7ba7ba643
--- /dev/null
+++ b/meta/recipes-connectivity/ppp/ppp/0001-pppd-Fix-bounds-check-in-EAP-code.patch
@@ -0,0 +1,47 @@
+From 8d7970b8f3db727fe798b65f3377fe6787575426 Mon Sep 17 00:00:00 2001
+From: Paul Mackerras <paulus@ozlabs.org>
+Date: Mon, 3 Feb 2020 15:53:28 +1100
+Subject: [PATCH] pppd: Fix bounds check in EAP code
+
+Given that we have just checked vallen < len, it can never be the case
+that vallen >= len + sizeof(rhostname). This fixes the check so we
+actually avoid overflowing the rhostname array.
+
+Reported-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
+Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
+
+Upstream-Status: Backport
+[https://github.com/paulusmack/ppp/commit/8d7970b8f3db727fe798b65f3377fe6787575426]
+
+CVE: CVE-2020-8597
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ pppd/eap.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/pppd/eap.c b/pppd/eap.c
+index 94407f5..1b93db0 100644
+--- a/pppd/eap.c
++++ b/pppd/eap.c
+@@ -1420,7 +1420,7 @@ int len;
+ }
+
+ /* Not so likely to happen. */
+- if (vallen >= len + sizeof (rhostname)) {
++ if (len - vallen >= sizeof (rhostname)) {
+ dbglog("EAP: trimming really long peer name down");
+ BCOPY(inp + vallen, rhostname, sizeof (rhostname) - 1);
+ rhostname[sizeof (rhostname) - 1] = '\0';
+@@ -1846,7 +1846,7 @@ int len;
+ }
+
+ /* Not so likely to happen. */
+- if (vallen >= len + sizeof (rhostname)) {
++ if (len - vallen >= sizeof (rhostname)) {
+ dbglog("EAP: trimming really long peer name down");
+ BCOPY(inp + vallen, rhostname, sizeof (rhostname) - 1);
+ rhostname[sizeof (rhostname) - 1] = '\0';
+--
+2.17.1
+
diff --git a/meta/recipes-connectivity/ppp/ppp_2.4.7.bb b/meta/recipes-connectivity/ppp/ppp_2.4.7.bb
index 644cde4562..60c56dd0bd 100644
--- a/meta/recipes-connectivity/ppp/ppp_2.4.7.bb
+++ b/meta/recipes-connectivity/ppp/ppp_2.4.7.bb
@@ -33,6 +33,7 @@ SRC_URI = "https://download.samba.org/pub/${BPN}/${BP}.tar.gz \
file://0001-pppoe-include-netinet-in.h-before-linux-in.h.patch \
file://0001-ppp-Remove-unneeded-include.patch \
file://ppp-2.4.7-DES-openssl.patch \
+ file://0001-pppd-Fix-bounds-check-in-EAP-code.patch \
"
SRC_URI_append_libc-musl = "\
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch
new file mode 100644
index 0000000000..7b0713cf6d
--- /dev/null
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch
@@ -0,0 +1,82 @@
+hostapd before 2.10 and wpa_supplicant before 2.10 allow an incorrect indication
+of disconnection in certain situations because source address validation is
+mishandled. This is a denial of service that should have been prevented by PMF
+(aka management frame protection). The attacker must send a crafted 802.11 frame
+from a location that is within the 802.11 communications range.
+
+CVE: CVE-2019-16275
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From 8c07fa9eda13e835f3f968b2e1c9a8be3a851ff9 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Thu, 29 Aug 2019 11:52:04 +0300
+Subject: [PATCH] AP: Silently ignore management frame from unexpected source
+ address
+
+Do not process any received Management frames with unexpected/invalid SA
+so that we do not add any state for unexpected STA addresses or end up
+sending out frames to unexpected destination. This prevents unexpected
+sequences where an unprotected frame might end up causing the AP to send
+out a response to another device and that other device processing the
+unexpected response.
+
+In particular, this prevents some potential denial of service cases
+where the unexpected response frame from the AP might result in a
+connected station dropping its association.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ src/ap/drv_callbacks.c | 13 +++++++++++++
+ src/ap/ieee802_11.c | 12 ++++++++++++
+ 2 files changed, 25 insertions(+)
+
+diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c
+index 31587685fe3b..34ca379edc3d 100644
+--- a/src/ap/drv_callbacks.c
++++ b/src/ap/drv_callbacks.c
+@@ -131,6 +131,19 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
+ "hostapd_notif_assoc: Skip event with no address");
+ return -1;
+ }
++
++ if (is_multicast_ether_addr(addr) ||
++ is_zero_ether_addr(addr) ||
++ os_memcmp(addr, hapd->own_addr, ETH_ALEN) == 0) {
++ /* Do not process any frames with unexpected/invalid SA so that
++ * we do not add any state for unexpected STA addresses or end
++ * up sending out frames to unexpected destination. */
++ wpa_printf(MSG_DEBUG, "%s: Invalid SA=" MACSTR
++ " in received indication - ignore this indication silently",
++ __func__, MAC2STR(addr));
++ return 0;
++ }
++
+ random_add_randomness(addr, ETH_ALEN);
+
+ hostapd_logger(hapd, addr, HOSTAPD_MODULE_IEEE80211,
+diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
+index c85a28db44b7..e7065372e158 100644
+--- a/src/ap/ieee802_11.c
++++ b/src/ap/ieee802_11.c
+@@ -4626,6 +4626,18 @@ int ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len,
+ fc = le_to_host16(mgmt->frame_control);
+ stype = WLAN_FC_GET_STYPE(fc);
+
++ if (is_multicast_ether_addr(mgmt->sa) ||
++ is_zero_ether_addr(mgmt->sa) ||
++ os_memcmp(mgmt->sa, hapd->own_addr, ETH_ALEN) == 0) {
++ /* Do not process any frames with unexpected/invalid SA so that
++ * we do not add any state for unexpected STA addresses or end
++ * up sending out frames to unexpected destination. */
++ wpa_printf(MSG_DEBUG, "MGMT: Invalid SA=" MACSTR
++ " in received frame - ignore this frame silently",
++ MAC2STR(mgmt->sa));
++ return 0;
++ }
++
+ if (stype == WLAN_FC_STYPE_BEACON) {
+ handle_beacon(hapd, mgmt, len, fi);
+ return 1;
+--
+2.20.1
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch
new file mode 100644
index 0000000000..53ad5d028a
--- /dev/null
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch
@@ -0,0 +1,151 @@
+From 5b78c8f961f25f4dc22d6f2b77ddd06d712cec63 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <jouni@codeaurora.org>
+Date: Wed, 3 Jun 2020 23:17:35 +0300
+Subject: [PATCH 1/3] WPS UPnP: Do not allow event subscriptions with URLs to
+ other networks
+
+The UPnP Device Architecture 2.0 specification errata ("UDA errata
+16-04-2020.docx") addresses a problem with notifications being allowed
+to go out to other domains by disallowing such cases. Do such filtering
+for the notification callback URLs to avoid undesired connections to
+external networks based on subscriptions that any device in the local
+network could request when WPS support for external registrars is
+enabled (the upnp_iface parameter in hostapd configuration).
+
+Upstream-Status: Backport
+CVE: CVE-2020-12695 patch #1
+Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
+Signed-off-by: Armin Kuster <akuster@mvista.com>
+
+---
+ src/wps/wps_er.c | 2 +-
+ src/wps/wps_upnp.c | 38 ++++++++++++++++++++++++++++++++++++--
+ src/wps/wps_upnp_i.h | 3 ++-
+ 3 files changed, 39 insertions(+), 4 deletions(-)
+
+Index: wpa_supplicant-2.9/src/wps/wps_er.c
+===================================================================
+--- wpa_supplicant-2.9.orig/src/wps/wps_er.c
++++ wpa_supplicant-2.9/src/wps/wps_er.c
+@@ -1298,7 +1298,7 @@ wps_er_init(struct wps_context *wps, con
+ "with %s", filter);
+ }
+ if (get_netif_info(er->ifname, &er->ip_addr, &er->ip_addr_text,
+- er->mac_addr)) {
++ NULL, er->mac_addr)) {
+ wpa_printf(MSG_INFO, "WPS UPnP: Could not get IP/MAC address "
+ "for %s. Does it have IP address?", er->ifname);
+ wps_er_deinit(er, NULL, NULL);
+Index: wpa_supplicant-2.9/src/wps/wps_upnp.c
+===================================================================
+--- wpa_supplicant-2.9.orig/src/wps/wps_upnp.c
++++ wpa_supplicant-2.9/src/wps/wps_upnp.c
+@@ -303,6 +303,14 @@ static void subscr_addr_free_all(struct
+ }
+
+
++static int local_network_addr(struct upnp_wps_device_sm *sm,
++ struct sockaddr_in *addr)
++{
++ return (addr->sin_addr.s_addr & sm->netmask.s_addr) ==
++ (sm->ip_addr & sm->netmask.s_addr);
++}
++
++
+ /* subscr_addr_add_url -- add address(es) for one url to subscription */
+ static void subscr_addr_add_url(struct subscription *s, const char *url,
+ size_t url_len)
+@@ -381,6 +389,7 @@ static void subscr_addr_add_url(struct s
+
+ for (rp = result; rp; rp = rp->ai_next) {
+ struct subscr_addr *a;
++ struct sockaddr_in *addr = (struct sockaddr_in *) rp->ai_addr;
+
+ /* Limit no. of address to avoid denial of service attack */
+ if (dl_list_len(&s->addr_list) >= MAX_ADDR_PER_SUBSCRIPTION) {
+@@ -389,6 +398,13 @@ static void subscr_addr_add_url(struct s
+ break;
+ }
+
++ if (!local_network_addr(s->sm, addr)) {
++ wpa_printf(MSG_INFO,
++ "WPS UPnP: Ignore a delivery URL that points to another network %s",
++ inet_ntoa(addr->sin_addr));
++ continue;
++ }
++
+ a = os_zalloc(sizeof(*a) + alloc_len);
+ if (a == NULL)
+ break;
+@@ -889,11 +905,12 @@ static int eth_get(const char *device, u
+ * @net_if: Selected network interface name
+ * @ip_addr: Buffer for returning IP address in network byte order
+ * @ip_addr_text: Buffer for returning a pointer to allocated IP address text
++ * @netmask: Buffer for returning netmask or %NULL if not needed
+ * @mac: Buffer for returning MAC address
+ * Returns: 0 on success, -1 on failure
+ */
+ int get_netif_info(const char *net_if, unsigned *ip_addr, char **ip_addr_text,
+- u8 mac[ETH_ALEN])
++ struct in_addr *netmask, u8 mac[ETH_ALEN])
+ {
+ struct ifreq req;
+ int sock = -1;
+@@ -919,6 +936,19 @@ int get_netif_info(const char *net_if, u
+ in_addr.s_addr = *ip_addr;
+ os_snprintf(*ip_addr_text, 16, "%s", inet_ntoa(in_addr));
+
++ if (netmask) {
++ os_memset(&req, 0, sizeof(req));
++ os_strlcpy(req.ifr_name, net_if, sizeof(req.ifr_name));
++ if (ioctl(sock, SIOCGIFNETMASK, &req) < 0) {
++ wpa_printf(MSG_ERROR,
++ "WPS UPnP: SIOCGIFNETMASK failed: %d (%s)",
++ errno, strerror(errno));
++ goto fail;
++ }
++ addr = (struct sockaddr_in *) &req.ifr_netmask;
++ netmask->s_addr = addr->sin_addr.s_addr;
++ }
++
+ #ifdef __linux__
+ os_strlcpy(req.ifr_name, net_if, sizeof(req.ifr_name));
+ if (ioctl(sock, SIOCGIFHWADDR, &req) < 0) {
+@@ -1025,11 +1055,15 @@ static int upnp_wps_device_start(struct
+
+ /* Determine which IP and mac address we're using */
+ if (get_netif_info(net_if, &sm->ip_addr, &sm->ip_addr_text,
+- sm->mac_addr)) {
++ &sm->netmask, sm->mac_addr)) {
+ wpa_printf(MSG_INFO, "WPS UPnP: Could not get IP/MAC address "
+ "for %s. Does it have IP address?", net_if);
+ goto fail;
+ }
++ wpa_printf(MSG_DEBUG, "WPS UPnP: Local IP address %s netmask %s hwaddr "
++ MACSTR,
++ sm->ip_addr_text, inet_ntoa(sm->netmask),
++ MAC2STR(sm->mac_addr));
+
+ /* Listen for incoming TCP connections so that others
+ * can fetch our "xml files" from us.
+Index: wpa_supplicant-2.9/src/wps/wps_upnp_i.h
+===================================================================
+--- wpa_supplicant-2.9.orig/src/wps/wps_upnp_i.h
++++ wpa_supplicant-2.9/src/wps/wps_upnp_i.h
+@@ -128,6 +128,7 @@ struct upnp_wps_device_sm {
+ u8 mac_addr[ETH_ALEN]; /* mac addr of network i.f. we use */
+ char *ip_addr_text; /* IP address of network i.f. we use */
+ unsigned ip_addr; /* IP address of network i.f. we use (host order) */
++ struct in_addr netmask;
+ int multicast_sd; /* send multicast messages over this socket */
+ int ssdp_sd; /* receive discovery UPD packets on socket */
+ int ssdp_sd_registered; /* nonzero if we must unregister */
+@@ -158,7 +159,7 @@ struct subscription * subscription_find(
+ const u8 uuid[UUID_LEN]);
+ void subscr_addr_delete(struct subscr_addr *a);
+ int get_netif_info(const char *net_if, unsigned *ip_addr, char **ip_addr_text,
+- u8 mac[ETH_ALEN]);
++ struct in_addr *netmask, u8 mac[ETH_ALEN]);
+
+ /* wps_upnp_ssdp.c */
+ void msearchreply_state_machine_stop(struct advertisement_state_machine *a);
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch
new file mode 100644
index 0000000000..59640859dd
--- /dev/null
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch
@@ -0,0 +1,62 @@
+From f7d268864a2660b7239b9a8ff5ad37faeeb751ba Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <jouni@codeaurora.org>
+Date: Wed, 3 Jun 2020 22:41:02 +0300
+Subject: [PATCH 2/3] WPS UPnP: Fix event message generation using a long URL
+ path
+
+More than about 700 character URL ended up overflowing the wpabuf used
+for building the event notification and this resulted in the wpabuf
+buffer overflow checks terminating the hostapd process. Fix this by
+allocating the buffer to be large enough to contain the full URL path.
+However, since that around 700 character limit has been the practical
+limit for more than ten years, start explicitly enforcing that as the
+limit or the callback URLs since any longer ones had not worked before
+and there is no need to enable them now either.
+
+Upstream-Status: Backport
+CVE: CVE-2020-12695 patch #2
+Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
+Signed-off-by: Armin Kuster <akuster@mvista.com>
+
+---
+ src/wps/wps_upnp.c | 9 +++++++--
+ src/wps/wps_upnp_event.c | 3 ++-
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/src/wps/wps_upnp.c b/src/wps/wps_upnp.c
+index 7d4b7439940e..ab685d52ecab 100644
+--- a/src/wps/wps_upnp.c
++++ b/src/wps/wps_upnp.c
+@@ -328,9 +328,14 @@ static void subscr_addr_add_url(struct subscription *s, const char *url,
+ int rerr;
+ size_t host_len, path_len;
+
+- /* url MUST begin with http: */
+- if (url_len < 7 || os_strncasecmp(url, "http://", 7))
++ /* URL MUST begin with HTTP scheme. In addition, limit the length of
++ * the URL to 700 characters which is around the limit that was
++ * implicitly enforced for more than 10 years due to a bug in
++ * generating the event messages. */
++ if (url_len < 7 || os_strncasecmp(url, "http://", 7) || url_len > 700) {
++ wpa_printf(MSG_DEBUG, "WPS UPnP: Reject an unacceptable URL");
+ goto fail;
++ }
+ url += 7;
+ url_len -= 7;
+
+diff --git a/src/wps/wps_upnp_event.c b/src/wps/wps_upnp_event.c
+index d7e6edcc6503..08a23612f338 100644
+--- a/src/wps/wps_upnp_event.c
++++ b/src/wps/wps_upnp_event.c
+@@ -147,7 +147,8 @@ static struct wpabuf * event_build_message(struct wps_event_ *e)
+ struct wpabuf *buf;
+ char *b;
+
+- buf = wpabuf_alloc(1000 + wpabuf_len(e->data));
++ buf = wpabuf_alloc(1000 + os_strlen(e->addr->path) +
++ wpabuf_len(e->data));
+ if (buf == NULL)
+ return NULL;
+ wpabuf_printf(buf, "NOTIFY %s HTTP/1.1\r\n", e->addr->path);
+--
+2.20.1
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch
new file mode 100644
index 0000000000..8a014ef28a
--- /dev/null
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch
@@ -0,0 +1,50 @@
+From 85aac526af8612c21b3117dadc8ef5944985b476 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <jouni@codeaurora.org>
+Date: Thu, 4 Jun 2020 21:24:04 +0300
+Subject: [PATCH 3/3] WPS UPnP: Handle HTTP initiation failures for events more
+ properly
+
+While it is appropriate to try to retransmit the event to another
+callback URL on a failure to initiate the HTTP client connection, there
+is no point in trying the exact same operation multiple times in a row.
+Replve the event_retry() calls with event_addr_failure() for these cases
+to avoid busy loops trying to repeat the same failing operation.
+
+These potential busy loops would go through eloop callbacks, so the
+process is not completely stuck on handling them, but unnecessary CPU
+would be used to process the continues retries that will keep failing
+for the same reason.
+
+Upstream-Status: Backport
+CVE: CVE-2020-12695 patch #2
+Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
+Signed-off-by: Armin Kuster <akuster@mvista.com>
+
+---
+ src/wps/wps_upnp_event.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/wps/wps_upnp_event.c b/src/wps/wps_upnp_event.c
+index 08a23612f338..c0d9e41d9a38 100644
+--- a/src/wps/wps_upnp_event.c
++++ b/src/wps/wps_upnp_event.c
+@@ -294,7 +294,7 @@ static int event_send_start(struct subscription *s)
+
+ buf = event_build_message(e);
+ if (buf == NULL) {
+- event_retry(e, 0);
++ event_addr_failure(e);
+ return -1;
+ }
+
+@@ -302,7 +302,7 @@ static int event_send_start(struct subscription *s)
+ event_http_cb, e);
+ if (e->http_event == NULL) {
+ wpabuf_free(buf);
+- event_retry(e, 0);
++ event_addr_failure(e);
+ return -1;
+ }
+
+--
+2.20.1
diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.9.bb b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.9.bb
index c16978cfe8..de882fad55 100644
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.9.bb
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant_2.9.bb
@@ -15,7 +15,7 @@ PACKAGECONFIG[openssl] = ",,openssl"
inherit pkgconfig systemd
-SYSTEMD_SERVICE_${PN} = "wpa_supplicant.service wpa_supplicant-nl80211@.service wpa_supplicant-wired@.service"
+SYSTEMD_SERVICE_${PN} = "wpa_supplicant.service"
SYSTEMD_AUTO_ENABLE = "disable"
SRC_URI = "http://w1.fi/releases/wpa_supplicant-${PV}.tar.gz \
@@ -25,6 +25,10 @@ SRC_URI = "http://w1.fi/releases/wpa_supplicant-${PV}.tar.gz \
file://wpa_supplicant.conf-sane \
file://99_wpa_supplicant \
file://0001-replace-systemd-install-Alias-with-WantedBy.patch \
+ file://0001-AP-Silently-ignore-management-frame-from-unexpected-.patch \
+ file://0001-WPS-UPnP-Do-not-allow-event-subscriptions-with-URLs-.patch \
+ file://0002-WPS-UPnP-Fix-event-message-generation-using-a-long-U.patch \
+ file://0003-WPS-UPnP-Handle-HTTP-initiation-failures-for-events-.patch \
"
SRC_URI[md5sum] = "2d2958c782576dc9901092fbfecb4190"
SRC_URI[sha256sum] = "fcbdee7b4a64bea8177973299c8c824419c413ec2e3a95db63dd6a5dc3541f17"
@@ -36,13 +40,13 @@ S = "${WORKDIR}/wpa_supplicant-${PV}"
PACKAGES_prepend = "wpa-supplicant-passphrase wpa-supplicant-cli "
FILES_wpa-supplicant-passphrase = "${bindir}/wpa_passphrase"
FILES_wpa-supplicant-cli = "${sbindir}/wpa_cli"
-FILES_${PN} += "${datadir}/dbus-1/system-services/*"
+FILES_${PN} += "${datadir}/dbus-1/system-services/* ${systemd_system_unitdir}/*"
CONFFILES_${PN} += "${sysconfdir}/wpa_supplicant.conf"
do_configure () {
${MAKE} -C wpa_supplicant clean
install -m 0755 ${WORKDIR}/defconfig wpa_supplicant/.config
-
+
if echo "${PACKAGECONFIG}" | grep -qw "openssl"; then
ssl=openssl
elif echo "${PACKAGECONFIG}" | grep -qw "gnutls"; then
diff --git a/meta/recipes-core/busybox/busybox.inc b/meta/recipes-core/busybox/busybox.inc
index d08fa8d3d9..33c84bc2c1 100644
--- a/meta/recipes-core/busybox/busybox.inc
+++ b/meta/recipes-core/busybox/busybox.inc
@@ -1,6 +1,6 @@
SUMMARY = "Tiny versions of many common UNIX utilities in a single small executable"
DESCRIPTION = "BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides minimalist replacements for most of the utilities you usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts. BusyBox provides a fairly complete POSIX environment for any small or embedded system."
-HOMEPAGE = "http://www.busybox.net"
+HOMEPAGE = "https://www.busybox.net"
BUGTRACKER = "https://bugs.busybox.net/"
DEPENDS += "kern-tools-native virtual/crypt"
@@ -431,6 +431,32 @@ fi
d.prependVar('pkg_postinst_%s' % pkg, postinst)
}
+pkg_postinst_${PN}_prepend () {
+ # Need path to saved utils, but they may have be removed on upgrade of busybox
+ # Only use shell to get paths. Also capture if busybox was saved.
+ BUSYBOX=""
+ if [ "x$D" = "x" ] ; then
+ for busybox_rmdir in /tmp/busyboxrm-*; do
+ if [ "$busybox_rmdir" != '/tmp/busyboxrm-*' ] ; then
+ export PATH=$busybox_rmdir:$PATH
+ if [ -e $busybox_rmdir/busybox* ] ; then
+ BUSYBOX="$busybox_rmdir/busybox*"
+ fi
+ fi
+ done
+ fi
+}
+
+pkg_postinst_${PN}_append () {
+ # If busybox exists in the remove directory it is because it was the only shell left.
+ if [ "x$D" = "x" ] ; then
+ if [ "x$BUSYBOX" != "x" ] ; then
+ update-alternatives --remove sh $BUSYBOX
+ rm -f $BUSYBOX
+ fi
+ fi
+}
+
pkg_prerm_${PN} () {
# This is so you can make busybox commit suicide - removing busybox with no other packages
# providing its files, this will make update-alternatives work, but the update-rc.d part
@@ -451,9 +477,26 @@ pkg_prerm_${PN} () {
ln -s ${base_bindir}/busybox $tmpdir/grep
ln -s ${base_bindir}/busybox $tmpdir/tail
export PATH=$PATH:$tmpdir
+
+ # If busybox is the shell, we need to save it since its the lowest priority shell
+ # Register saved bitbake as the lowest priority shell possible as back up.
+ if [ -n "$(readlink -f /bin/sh | grep busybox)" ] ; then
+ BUSYBOX=$(readlink -f /bin/sh)
+ cp $BUSYBOX $tmpdir/$(basename $BUSYBOX)
+ update-alternatives --install /bin/sh sh $tmpdir/$(basename $BUSYBOX) 1
+ fi
}
pkg_postrm_${PN} () {
+ # Add path to remove dir in case we removed our only grep
+ if [ "x$D" = "x" ] ; then
+ for busybox_rmdir in /tmp/busyboxrm-*; do
+ if [ "$busybox_rmdir" != '/tmp/busyboxrm-*' ] ; then
+ export PATH=$busybox_rmdir:$PATH
+ fi
+ done
+ fi
+
if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links* && [ ! -e $D${base_bindir}/bash ]; then
printf "$(grep -v "^${base_bindir}/bash$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
fi
diff --git a/meta/recipes-core/busybox/busybox_1.31.0.bb b/meta/recipes-core/busybox/busybox_1.31.0.bb
index 34b1f2cc91..5dd8d448da 100644
--- a/meta/recipes-core/busybox/busybox_1.31.0.bb
+++ b/meta/recipes-core/busybox/busybox_1.31.0.bb
@@ -1,6 +1,6 @@
require busybox.inc
-SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
+SRC_URI = "https://busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
file://busybox-udhcpc-no_deconfig.patch \
file://find-touchscreen.sh \
file://busybox-cron \
diff --git a/meta/recipes-core/dbus/dbus-glib_0.110.bb b/meta/recipes-core/dbus/dbus-glib_0.110.bb
index 9afbc2b6a1..0b45805cf4 100644
--- a/meta/recipes-core/dbus/dbus-glib_0.110.bb
+++ b/meta/recipes-core/dbus/dbus-glib_0.110.bb
@@ -1,7 +1,7 @@
SUMMARY = "High level language (GLib) binding for D-Bus"
DESCRIPTION = "GLib bindings for the D-Bus message bus that integrate \
the D-Bus library with the GLib thread abstraction and main loop."
-HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
+HOMEPAGE = "https://www.freedesktop.org/Software/dbus"
LICENSE = "AFL-2.1 | GPLv2+"
LIC_FILES_CHKSUM = "file://COPYING;md5=cf5b3a2f7083750d504333114e738656 \
file://dbus/dbus-glib.h;beginline=7;endline=21;md5=7755c9d7abccd5dbd25a6a974538bb3c"
@@ -10,7 +10,7 @@ SECTION = "base"
DEPENDS = "expat glib-2.0 virtual/libintl dbus-glib-native dbus"
DEPENDS_class-native = "glib-2.0-native dbus-native"
-SRC_URI = "http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-${PV}.tar.gz \
+SRC_URI = "https://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-${PV}.tar.gz \
file://no-examples.patch \
file://test-install-makefile.patch \
"
diff --git a/meta/recipes-core/dbus/dbus/CVE-2020-12049.patch b/meta/recipes-core/dbus/dbus/CVE-2020-12049.patch
new file mode 100644
index 0000000000..ac7a4b7a71
--- /dev/null
+++ b/meta/recipes-core/dbus/dbus/CVE-2020-12049.patch
@@ -0,0 +1,78 @@
+From 872b085f12f56da25a2dbd9bd0b2dff31d5aea63 Mon Sep 17 00:00:00 2001
+From: Simon McVittie <smcv@collabora.com>
+Date: Thu, 16 Apr 2020 14:45:11 +0100
+Subject: [PATCH] sysdeps-unix: On MSG_CTRUNC, close the fds we did receive
+
+MSG_CTRUNC indicates that we have received fewer fds that we should
+have done because the buffer was too small, but we were treating it
+as though it indicated that we received *no* fds. If we received any,
+we still have to make sure we close them, otherwise they will be leaked.
+
+On the system bus, if an attacker can induce us to leak fds in this
+way, that's a local denial of service via resource exhaustion.
+
+Reported-by: Kevin Backhouse, GitHub Security Lab
+Fixes: dbus#294
+Fixes: CVE-2020-12049
+Fixes: GHSL-2020-057
+
+Upstream-Status: Backport [https://gitlab.freedesktop.org/dbus/dbus/-/commit/872b085f12f56da25a2dbd9bd0b2dff31d5aea63]
+CVE: CVE-2020-12049
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ dbus/dbus-sysdeps-unix.c | 32 ++++++++++++++++++++------------
+ 1 file changed, 20 insertions(+), 12 deletions(-)
+
+diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
+index b5fc2466..b176dae1 100644
+--- a/dbus/dbus-sysdeps-unix.c
++++ b/dbus/dbus-sysdeps-unix.c
+@@ -435,18 +435,6 @@ _dbus_read_socket_with_unix_fds (DBusSocket fd,
+ struct cmsghdr *cm;
+ dbus_bool_t found = FALSE;
+
+- if (m.msg_flags & MSG_CTRUNC)
+- {
+- /* Hmm, apparently the control data was truncated. The bad
+- thing is that we might have completely lost a couple of fds
+- without chance to recover them. Hence let's treat this as a
+- serious error. */
+-
+- errno = ENOSPC;
+- _dbus_string_set_length (buffer, start);
+- return -1;
+- }
+-
+ for (cm = CMSG_FIRSTHDR(&m); cm; cm = CMSG_NXTHDR(&m, cm))
+ if (cm->cmsg_level == SOL_SOCKET && cm->cmsg_type == SCM_RIGHTS)
+ {
+@@ -501,6 +489,26 @@ _dbus_read_socket_with_unix_fds (DBusSocket fd,
+ if (!found)
+ *n_fds = 0;
+
++ if (m.msg_flags & MSG_CTRUNC)
++ {
++ unsigned int i;
++
++ /* Hmm, apparently the control data was truncated. The bad
++ thing is that we might have completely lost a couple of fds
++ without chance to recover them. Hence let's treat this as a
++ serious error. */
++
++ /* We still need to close whatever fds we *did* receive,
++ * otherwise they'll never get closed. (CVE-2020-12049) */
++ for (i = 0; i < *n_fds; i++)
++ close (fds[i]);
++
++ *n_fds = 0;
++ errno = ENOSPC;
++ _dbus_string_set_length (buffer, start);
++ return -1;
++ }
++
+ /* put length back (doesn't actually realloc) */
+ _dbus_string_set_length (buffer, start + bytes_read);
+
+--
+2.25.1
+
diff --git a/meta/recipes-core/dbus/dbus_1.12.16.bb b/meta/recipes-core/dbus/dbus_1.12.16.bb
index 05716608b0..92508cbeb8 100644
--- a/meta/recipes-core/dbus/dbus_1.12.16.bb
+++ b/meta/recipes-core/dbus/dbus_1.12.16.bb
@@ -1,6 +1,6 @@
SUMMARY = "D-Bus message bus"
DESCRIPTION = "D-Bus is a message bus system, a simple way for applications to talk to one another. In addition to interprocess communication, D-Bus helps coordinate process lifecycle; it makes it simple and reliable to code a \"single instance\" application or daemon, and to launch applications and daemons on demand when their services are needed."
-HOMEPAGE = "http://dbus.freedesktop.org"
+HOMEPAGE = "https://dbus.freedesktop.org"
SECTION = "base"
LICENSE = "AFL-2.1 | GPLv2+"
LIC_FILES_CHKSUM = "file://COPYING;md5=10dded3b58148f3f1fd804b26354af3e \
@@ -12,10 +12,11 @@ PACKAGES += "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', '${PN}-ptest', '',
ALLOW_EMPTY_dbus-ptest = "1"
RDEPENDS_dbus-ptest_class-target = "dbus-test-ptest"
-SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \
+SRC_URI = "https://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \
file://tmpdir.patch \
file://dbus-1.init \
file://clear-guid_from_server-if-send_negotiate_unix_f.patch \
+ file://CVE-2020-12049.patch \
"
SRC_URI[md5sum] = "2dbeae80dfc9e3632320c6a53d5e8890"
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0020-meson.build-do-not-hardcode-linux-as-the-host-system.patch b/meta/recipes-core/glib-2.0/glib-2.0/0020-meson.build-do-not-hardcode-linux-as-the-host-system.patch
new file mode 100644
index 0000000000..9c311f1c90
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/0020-meson.build-do-not-hardcode-linux-as-the-host-system.patch
@@ -0,0 +1,49 @@
+From d5e82cd0b6076f33b86e0285ef1c0dba8a14112e Mon Sep 17 00:00:00 2001
+From: Ahmad Fatoum <a.fatoum@pengutronix.de>
+Date: Thu, 9 Jul 2020 13:00:16 +0200
+Subject: [PATCH] meson.build: do not hardcode 'linux' as the host system
+
+OE build system can set this to other values that include 'linux',
+e.g. 'linux-gnueabi'. This led to glib always being built without
+libmount, mkostemp and selinux support.
+
+Upstream-Status: Inappropriate [other]
+Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
+---
+ meson.build | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index dd95c750b5ea..8bcacaf3c7e1 100644
+--- a/meson.build
++++ b/meson.build
+@@ -604,7 +604,7 @@ else
+ endif
+ message('Checking whether to use statfs or statvfs .. ' + stat_func_to_use)
+
+-if host_system == 'linux'
++if host_system.contains('linux')
+ if cc.has_function('mkostemp',
+ prefix: '''#define _GNU_SOURCE
+ #include <stdlib.h>''')
+@@ -1810,7 +1810,7 @@ glib_conf.set_quoted('GLIB_LOCALE_DIR', join_paths(glib_datadir, 'locale'))
+ # libmount is only used by gio, but we need to fetch the libs to generate the
+ # pkg-config file below
+ libmount_dep = []
+-if host_system == 'linux' and get_option('libmount')
++if host_system.contains('linux') and get_option('libmount')
+ libmount_dep = [dependency('mount', version : '>=2.23', required : true)]
+ glib_conf.set('HAVE_LIBMOUNT', 1)
+ endif
+@@ -1820,7 +1820,7 @@ if host_system == 'windows'
+ endif
+
+ selinux_dep = []
+-if host_system == 'linux'
++if host_system.contains('linux')
+ selinux_dep = dependency('libselinux', required: get_option('selinux'))
+
+ glib_conf.set('HAVE_SELINUX', selinux_dep.found())
+--
+2.27.0
+
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/CVE-2020-6750.patch b/meta/recipes-core/glib-2.0/glib-2.0/CVE-2020-6750.patch
new file mode 100644
index 0000000000..6db3934978
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/CVE-2020-6750.patch
@@ -0,0 +1,741 @@
+From 747f2c646f5a86ac58ad59be08036e81388e971d Mon Sep 17 00:00:00 2001
+From: Patrick Griffis <tingping@tingping.se>
+Date: Thu, 23 Jan 2020 19:58:41 -0800
+Subject: [PATCH] Refactor g_socket_client_connect_async()
+
+This is a fairly large refactoring. The highlights are:
+
+- Removing in-progress connections/addresses from GSocketClientAsyncConnectData:
+
+ This caused issues where multiple ConnectionAttempt's would step over eachother
+ and modify shared state causing bugs like accidentally bypassing a set proxy.
+
+ Fixes #1871
+ Fixes #1989
+ Fixes #1902
+
+- Cancelling address enumeration on error/completion
+
+- Queuing successful TCP connections and doing application layer work serially:
+
+ This is more in the spirit of Happy Eyeballs but it also greatly simplifies
+ the flow of connection handling so fewer tasks are happening in parallel
+ when they don't need to be.
+
+ The behavior also should more closely match that of g_socket_client_connect().
+
+- Better track the state of address enumeration:
+
+ Previously we were over eager to treat enumeration finishing as an error.
+
+ Fixes #1872
+ See also #1982
+
+- Add more detailed documentation and logging.
+
+Closes #1995
+
+CVE: CVE-2020-6750
+
+Upstream-Status: Backport [ https://gitlab.gnome.org/GNOME/glib.git;
+commit=2722620e3291b930a3a228100d7c0e07b69534e3 ]
+
+Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
+---
+ gio/gsocketclient.c | 459 ++++++++++++++++++++++++++++----------------
+ 1 file changed, 296 insertions(+), 163 deletions(-)
+
+diff --git a/gio/gsocketclient.c b/gio/gsocketclient.c
+index 81767c0..b1d5f6c 100644
+--- a/gio/gsocketclient.c
++++ b/gio/gsocketclient.c
+@@ -1332,13 +1332,15 @@ typedef struct
+
+ GSocketConnectable *connectable;
+ GSocketAddressEnumerator *enumerator;
+- GProxyAddress *proxy_addr;
+- GSocket *socket;
+- GIOStream *connection;
++ GCancellable *enumeration_cancellable;
+
+ GSList *connection_attempts;
++ GSList *successful_connections;
+ GError *last_error;
+
++ gboolean enumerated_at_least_once;
++ gboolean enumeration_completed;
++ gboolean connection_in_progress;
+ gboolean completed;
+ } GSocketClientAsyncConnectData;
+
+@@ -1350,10 +1352,9 @@ g_socket_client_async_connect_data_free (GSocketClientAsyncConnectData *data)
+ data->task = NULL;
+ g_clear_object (&data->connectable);
+ g_clear_object (&data->enumerator);
+- g_clear_object (&data->proxy_addr);
+- g_clear_object (&data->socket);
+- g_clear_object (&data->connection);
++ g_clear_object (&data->enumeration_cancellable);
+ g_slist_free_full (data->connection_attempts, connection_attempt_unref);
++ g_slist_free_full (data->successful_connections, connection_attempt_unref);
+
+ g_clear_error (&data->last_error);
+
+@@ -1365,6 +1366,7 @@ typedef struct
+ GSocketAddress *address;
+ GSocket *socket;
+ GIOStream *connection;
++ GProxyAddress *proxy_addr;
+ GSocketClientAsyncConnectData *data; /* unowned */
+ GSource *timeout_source;
+ GCancellable *cancellable;
+@@ -1396,6 +1398,7 @@ connection_attempt_unref (gpointer pointer)
+ g_clear_object (&attempt->socket);
+ g_clear_object (&attempt->connection);
+ g_clear_object (&attempt->cancellable);
++ g_clear_object (&attempt->proxy_addr);
+ if (attempt->timeout_source)
+ {
+ g_source_destroy (attempt->timeout_source);
+@@ -1413,37 +1416,59 @@ connection_attempt_remove (ConnectionAttempt *attempt)
+ }
+
+ static void
+-g_socket_client_async_connect_complete (GSocketClientAsyncConnectData *data)
++cancel_all_attempts (GSocketClientAsyncConnectData *data)
+ {
+- g_assert (data->connection);
++ GSList *l;
+
+- if (!G_IS_SOCKET_CONNECTION (data->connection))
++ for (l = data->connection_attempts; l; l = g_slist_next (l))
+ {
+- GSocketConnection *wrapper_connection;
+-
+- wrapper_connection = g_tcp_wrapper_connection_new (data->connection, data->socket);
+- g_object_unref (data->connection);
+- data->connection = (GIOStream *)wrapper_connection;
++ ConnectionAttempt *attempt_entry = l->data;
++ g_cancellable_cancel (attempt_entry->cancellable);
++ connection_attempt_unref (attempt_entry);
+ }
++ g_slist_free (data->connection_attempts);
++ data->connection_attempts = NULL;
+
+- if (!data->completed)
++ g_slist_free_full (data->successful_connections, connection_attempt_unref);
++ data->successful_connections = NULL;
++
++ g_cancellable_cancel (data->enumeration_cancellable);
++}
++
++static void
++g_socket_client_async_connect_complete (ConnectionAttempt *attempt)
++{
++ GSocketClientAsyncConnectData *data = attempt->data;
++ GError *error = NULL;
++ g_assert (attempt->connection);
++ g_assert (!data->completed);
++
++ if (!G_IS_SOCKET_CONNECTION (attempt->connection))
+ {
+- GError *error = NULL;
++ GSocketConnection *wrapper_connection;
+
+- if (g_cancellable_set_error_if_cancelled (g_task_get_cancellable (data->task), &error))
+- {
+- g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_COMPLETE, data->connectable, NULL);
+- g_task_return_error (data->task, g_steal_pointer (&error));
+- }
+- else
+- {
+- g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_COMPLETE, data->connectable, data->connection);
+- g_task_return_pointer (data->task, g_steal_pointer (&data->connection), g_object_unref);
+- }
++ wrapper_connection = g_tcp_wrapper_connection_new (attempt->connection, attempt->socket);
++ g_object_unref (attempt->connection);
++ attempt->connection = (GIOStream *)wrapper_connection;
++ }
+
+- data->completed = TRUE;
++ data->completed = TRUE;
++ cancel_all_attempts (data);
++
++ if (g_cancellable_set_error_if_cancelled (g_task_get_cancellable (data->task), &error))
++ {
++ g_debug ("GSocketClient: Connection cancelled!");
++ g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_COMPLETE, data->connectable, NULL);
++ g_task_return_error (data->task, g_steal_pointer (&error));
++ }
++ else
++ {
++ g_debug ("GSocketClient: Connection successful!");
++ g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_COMPLETE, data->connectable, attempt->connection);
++ g_task_return_pointer (data->task, g_steal_pointer (&attempt->connection), g_object_unref);
+ }
+
++ connection_attempt_unref (attempt);
+ g_object_unref (data->task);
+ }
+
+@@ -1465,59 +1490,63 @@ static void
+ enumerator_next_async (GSocketClientAsyncConnectData *data,
+ gboolean add_task_ref)
+ {
+- /* We need to cleanup the state */
+- g_clear_object (&data->socket);
+- g_clear_object (&data->proxy_addr);
+- g_clear_object (&data->connection);
+-
+ /* Each enumeration takes a ref. This arg just avoids repeated unrefs when
+ an enumeration starts another enumeration */
+ if (add_task_ref)
+ g_object_ref (data->task);
+
+ g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_RESOLVING, data->connectable, NULL);
++ g_debug ("GSocketClient: Starting new address enumeration");
+ g_socket_address_enumerator_next_async (data->enumerator,
+- g_task_get_cancellable (data->task),
++ data->enumeration_cancellable,
+ g_socket_client_enumerator_callback,
+ data);
+ }
+
++static void try_next_connection_or_finish (GSocketClientAsyncConnectData *, gboolean);
++
+ static void
+ g_socket_client_tls_handshake_callback (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+ {
+- GSocketClientAsyncConnectData *data = user_data;
++ ConnectionAttempt *attempt = user_data;
++ GSocketClientAsyncConnectData *data = attempt->data;
+
+ if (g_tls_connection_handshake_finish (G_TLS_CONNECTION (object),
+ result,
+ &data->last_error))
+ {
+- g_object_unref (data->connection);
+- data->connection = G_IO_STREAM (object);
++ g_object_unref (attempt->connection);
++ attempt->connection = G_IO_STREAM (object);
+
+- g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_TLS_HANDSHAKED, data->connectable, data->connection);
+- g_socket_client_async_connect_complete (data);
++ g_debug ("GSocketClient: TLS handshake succeeded");
++ g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_TLS_HANDSHAKED, data->connectable, attempt->connection);
++ g_socket_client_async_connect_complete (attempt);
+ }
+ else
+ {
+ g_object_unref (object);
+- enumerator_next_async (data, FALSE);
++ connection_attempt_unref (attempt);
++ g_debug ("GSocketClient: TLS handshake failed: %s", data->last_error->message);
++ try_next_connection_or_finish (data, TRUE);
+ }
+ }
+
+ static void
+-g_socket_client_tls_handshake (GSocketClientAsyncConnectData *data)
++g_socket_client_tls_handshake (ConnectionAttempt *attempt)
+ {
++ GSocketClientAsyncConnectData *data = attempt->data;
+ GIOStream *tlsconn;
+
+ if (!data->client->priv->tls)
+ {
+- g_socket_client_async_connect_complete (data);
++ g_socket_client_async_connect_complete (attempt);
+ return;
+ }
+
+- tlsconn = g_tls_client_connection_new (data->connection,
++ g_debug ("GSocketClient: Starting TLS handshake");
++ tlsconn = g_tls_client_connection_new (attempt->connection,
+ data->connectable,
+ &data->last_error);
+ if (tlsconn)
+@@ -1529,11 +1558,12 @@ g_socket_client_tls_handshake (GSocketClientAsyncConnectData *data)
+ G_PRIORITY_DEFAULT,
+ g_task_get_cancellable (data->task),
+ g_socket_client_tls_handshake_callback,
+- data);
++ attempt);
+ }
+ else
+ {
+- enumerator_next_async (data, FALSE);
++ connection_attempt_unref (attempt);
++ try_next_connection_or_finish (data, TRUE);
+ }
+ }
+
+@@ -1542,23 +1572,38 @@ g_socket_client_proxy_connect_callback (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+ {
+- GSocketClientAsyncConnectData *data = user_data;
++ ConnectionAttempt *attempt = user_data;
++ GSocketClientAsyncConnectData *data = attempt->data;
+
+- g_object_unref (data->connection);
+- data->connection = g_proxy_connect_finish (G_PROXY (object),
+- result,
+- &data->last_error);
+- if (data->connection)
++ g_object_unref (attempt->connection);
++ attempt->connection = g_proxy_connect_finish (G_PROXY (object),
++ result,
++ &data->last_error);
++ if (attempt->connection)
+ {
+- g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_PROXY_NEGOTIATED, data->connectable, data->connection);
++ g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_PROXY_NEGOTIATED, data->connectable, attempt->connection);
+ }
+ else
+ {
+- enumerator_next_async (data, FALSE);
++ connection_attempt_unref (attempt);
++ try_next_connection_or_finish (data, TRUE);
+ return;
+ }
+
+- g_socket_client_tls_handshake (data);
++ g_socket_client_tls_handshake (attempt);
++}
++
++static void
++complete_connection_with_error (GSocketClientAsyncConnectData *data,
++ GError *error)
++{
++ g_debug ("GSocketClient: Connection failed: %s", error->message);
++ g_assert (!data->completed);
++
++ g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_COMPLETE, data->connectable, NULL);
++ data->completed = TRUE;
++ cancel_all_attempts (data);
++ g_task_return_error (data->task, error);
+ }
+
+ static gboolean
+@@ -1572,15 +1617,114 @@ task_completed_or_cancelled (GSocketClientAsyncConnectData *data)
+ return TRUE;
+ else if (g_cancellable_set_error_if_cancelled (cancellable, &error))
+ {
+- g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_COMPLETE, data->connectable, NULL);
+- g_task_return_error (task, g_steal_pointer (&error));
+- data->completed = TRUE;
++ complete_connection_with_error (data, g_steal_pointer (&error));
+ return TRUE;
+ }
+ else
+ return FALSE;
+ }
+
++static gboolean
++try_next_successful_connection (GSocketClientAsyncConnectData *data)
++{
++ ConnectionAttempt *attempt;
++ const gchar *protocol;
++ GProxy *proxy;
++
++ if (data->connection_in_progress)
++ return FALSE;
++
++ g_assert (data->successful_connections != NULL);
++ attempt = data->successful_connections->data;
++ g_assert (attempt != NULL);
++ data->successful_connections = g_slist_remove (data->successful_connections, attempt);
++ data->connection_in_progress = TRUE;
++
++ g_debug ("GSocketClient: Starting application layer connection");
++
++ if (!attempt->proxy_addr)
++ {
++ g_socket_client_tls_handshake (g_steal_pointer (&attempt));
++ return TRUE;
++ }
++
++ protocol = g_proxy_address_get_protocol (attempt->proxy_addr);
++
++ /* The connection should not be anything other than TCP,
++ * but let's put a safety guard in case
++ */
++ if (!G_IS_TCP_CONNECTION (attempt->connection))
++ {
++ g_critical ("Trying to proxy over non-TCP connection, this is "
++ "most likely a bug in GLib IO library.");
++
++ g_set_error_literal (&data->last_error,
++ G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
++ _("Proxying over a non-TCP connection is not supported."));
++ }
++ else if (g_hash_table_contains (data->client->priv->app_proxies, protocol))
++ {
++ /* Simply complete the connection, we don't want to do TLS handshake
++ * as the application proxy handling may need proxy handshake first */
++ g_socket_client_async_connect_complete (g_steal_pointer (&attempt));
++ return TRUE;
++ }
++ else if ((proxy = g_proxy_get_default_for_protocol (protocol)))
++ {
++ GIOStream *connection = attempt->connection;
++ GProxyAddress *proxy_addr = attempt->proxy_addr;
++
++ g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_PROXY_NEGOTIATING, data->connectable, attempt->connection);
++ g_debug ("GSocketClient: Starting proxy connection");
++ g_proxy_connect_async (proxy,
++ connection,
++ proxy_addr,
++ g_task_get_cancellable (data->task),
++ g_socket_client_proxy_connect_callback,
++ g_steal_pointer (&attempt));
++ g_object_unref (proxy);
++ return TRUE;
++ }
++ else
++ {
++ g_clear_error (&data->last_error);
++
++ g_set_error (&data->last_error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
++ _("Proxy protocol “%s” is not supported."),
++ protocol);
++ }
++
++ data->connection_in_progress = FALSE;
++ g_clear_pointer (&attempt, connection_attempt_unref);
++ return FALSE; /* All non-return paths are failures */
++}
++
++static void
++try_next_connection_or_finish (GSocketClientAsyncConnectData *data,
++ gboolean end_current_connection)
++{
++ if (end_current_connection)
++ data->connection_in_progress = FALSE;
++
++ if (data->connection_in_progress)
++ return;
++
++ /* Keep trying successful connections until one works, each iteration pops one */
++ while (data->successful_connections)
++ {
++ if (try_next_successful_connection (data))
++ return;
++ }
++
++ if (!data->enumeration_completed)
++ {
++ enumerator_next_async (data, FALSE);
++ return;
++ }
++
++ complete_connection_with_error (data, data->last_error);
++}
++
+ static void
+ g_socket_client_connected_callback (GObject *source,
+ GAsyncResult *result,
+@@ -1588,10 +1732,7 @@ g_socket_client_connected_callback (GObject *source,
+ {
+ ConnectionAttempt *attempt = user_data;
+ GSocketClientAsyncConnectData *data = attempt->data;
+- GSList *l;
+ GError *error = NULL;
+- GProxy *proxy;
+- const gchar *protocol;
+
+ if (task_completed_or_cancelled (data) || g_cancellable_is_cancelled (attempt->cancellable))
+ {
+@@ -1613,11 +1754,12 @@ g_socket_client_connected_callback (GObject *source,
+ {
+ clarify_connect_error (error, data->connectable, attempt->address);
+ set_last_error (data, error);
++ g_debug ("GSocketClient: Connection attempt failed: %s", error->message);
+ connection_attempt_remove (attempt);
+- enumerator_next_async (data, FALSE);
+ connection_attempt_unref (attempt);
++ try_next_connection_or_finish (data, FALSE);
+ }
+- else
++ else /* Silently ignore cancelled attempts */
+ {
+ g_clear_error (&error);
+ g_object_unref (data->task);
+@@ -1627,74 +1769,21 @@ g_socket_client_connected_callback (GObject *source,
+ return;
+ }
+
+- data->socket = g_steal_pointer (&attempt->socket);
+- data->connection = g_steal_pointer (&attempt->connection);
+-
+- for (l = data->connection_attempts; l; l = g_slist_next (l))
+- {
+- ConnectionAttempt *attempt_entry = l->data;
+- g_cancellable_cancel (attempt_entry->cancellable);
+- connection_attempt_unref (attempt_entry);
+- }
+- g_slist_free (data->connection_attempts);
+- data->connection_attempts = NULL;
+- connection_attempt_unref (attempt);
+-
+- g_socket_connection_set_cached_remote_address ((GSocketConnection*)data->connection, NULL);
+- g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_CONNECTED, data->connectable, data->connection);
++ g_socket_connection_set_cached_remote_address ((GSocketConnection*)attempt->connection, NULL);
++ g_debug ("GSocketClient: TCP connection successful");
++ g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_CONNECTED, data->connectable, attempt->connection);
+
+ /* wrong, but backward compatible */
+- g_socket_set_blocking (data->socket, TRUE);
++ g_socket_set_blocking (attempt->socket, TRUE);
+
+- if (!data->proxy_addr)
+- {
+- g_socket_client_tls_handshake (data);
+- return;
+- }
+-
+- protocol = g_proxy_address_get_protocol (data->proxy_addr);
+-
+- /* The connection should not be anything other than TCP,
+- * but let's put a safety guard in case
++ /* This ends the parallel "happy eyeballs" portion of connecting.
++ Now that we have a successful tcp connection we will attempt to connect
++ at the TLS/Proxy layer. If those layers fail we will move on to the next
++ connection.
+ */
+- if (!G_IS_TCP_CONNECTION (data->connection))
+- {
+- g_critical ("Trying to proxy over non-TCP connection, this is "
+- "most likely a bug in GLib IO library.");
+-
+- g_set_error_literal (&data->last_error,
+- G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+- _("Proxying over a non-TCP connection is not supported."));
+-
+- enumerator_next_async (data, FALSE);
+- }
+- else if (g_hash_table_contains (data->client->priv->app_proxies, protocol))
+- {
+- /* Simply complete the connection, we don't want to do TLS handshake
+- * as the application proxy handling may need proxy handshake first */
+- g_socket_client_async_connect_complete (data);
+- }
+- else if ((proxy = g_proxy_get_default_for_protocol (protocol)))
+- {
+- g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_PROXY_NEGOTIATING, data->connectable, data->connection);
+- g_proxy_connect_async (proxy,
+- data->connection,
+- data->proxy_addr,
+- g_task_get_cancellable (data->task),
+- g_socket_client_proxy_connect_callback,
+- data);
+- g_object_unref (proxy);
+- }
+- else
+- {
+- g_clear_error (&data->last_error);
+-
+- g_set_error (&data->last_error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+- _("Proxy protocol “%s” is not supported."),
+- protocol);
+-
+- enumerator_next_async (data, FALSE);
+- }
++ connection_attempt_remove (attempt);
++ data->successful_connections = g_slist_append (data->successful_connections, g_steal_pointer (&attempt));
++ try_next_connection_or_finish (data, FALSE);
+ }
+
+ static gboolean
+@@ -1702,7 +1791,11 @@ on_connection_attempt_timeout (gpointer data)
+ {
+ ConnectionAttempt *attempt = data;
+
+- enumerator_next_async (attempt->data, TRUE);
++ if (!attempt->data->enumeration_completed)
++ {
++ g_debug ("GSocketClient: Timeout reached, trying another enumeration");
++ enumerator_next_async (attempt->data, TRUE);
++ }
+
+ g_clear_pointer (&attempt->timeout_source, g_source_unref);
+ return G_SOURCE_REMOVE;
+@@ -1712,9 +1805,9 @@ static void
+ on_connection_cancelled (GCancellable *cancellable,
+ gpointer data)
+ {
+- GCancellable *attempt_cancellable = data;
++ GCancellable *linked_cancellable = G_CANCELLABLE (data);
+
+- g_cancellable_cancel (attempt_cancellable);
++ g_cancellable_cancel (linked_cancellable);
+ }
+
+ static void
+@@ -1738,39 +1831,49 @@ g_socket_client_enumerator_callback (GObject *object,
+ result, &error);
+ if (address == NULL)
+ {
+- if (data->connection_attempts)
++ if (G_UNLIKELY (data->enumeration_completed))
++ return;
++
++ data->enumeration_completed = TRUE;
++ g_debug ("GSocketClient: Address enumeration completed (out of addresses)");
++
++ /* As per API docs: We only care about error if its the first call,
++ after that the enumerator is done.
++
++ Note that we don't care about cancellation errors because
++ task_completed_or_cancelled() above should handle that.
++
++ If this fails and nothing is in progress then we will complete task here.
++ */
++ if ((data->enumerated_at_least_once && !data->connection_attempts && !data->connection_in_progress) ||
++ !data->enumerated_at_least_once)
+ {
+- g_object_unref (data->task);
+- return;
++ g_debug ("GSocketClient: Address enumeration failed: %s", error ? error->message : NULL);
++ if (data->last_error)
++ {
++ g_clear_error (&error);
++ error = data->last_error;
++ data->last_error = NULL;
++ }
++ else if (!error)
++ {
++ g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
++ _("Unknown error on connect"));
++ }
++
++ complete_connection_with_error (data, error);
+ }
+
+- g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_COMPLETE, data->connectable, NULL);
+- data->completed = TRUE;
+- if (!error)
+- {
+- if (data->last_error)
+- {
+- error = data->last_error;
+- data->last_error = NULL;
+- }
+- else
+- {
+- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
+- _("Unknown error on connect"));
+- }
+- }
+- g_task_return_error (data->task, error);
++ /* Enumeration should never trigger again, drop our ref */
+ g_object_unref (data->task);
+ return;
+ }
+
++ data->enumerated_at_least_once = TRUE;
++ g_debug ("GSocketClient: Address enumeration succeeded");
+ g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_RESOLVED,
+ data->connectable, NULL);
+
+- if (G_IS_PROXY_ADDRESS (address) &&
+- data->client->priv->enable_proxy)
+- data->proxy_addr = g_object_ref (G_PROXY_ADDRESS (address));
+-
+ g_clear_error (&data->last_error);
+
+ socket = create_socket (data->client, address, &data->last_error);
+@@ -1788,6 +1891,10 @@ g_socket_client_enumerator_callback (GObject *object,
+ attempt->cancellable = g_cancellable_new ();
+ attempt->connection = (GIOStream *)g_socket_connection_factory_create_connection (socket);
+ attempt->timeout_source = g_timeout_source_new (HAPPY_EYEBALLS_CONNECTION_ATTEMPT_TIMEOUT_MS);
++
++ if (G_IS_PROXY_ADDRESS (address) && data->client->priv->enable_proxy)
++ attempt->proxy_addr = g_object_ref (G_PROXY_ADDRESS (address));
++
+ g_source_set_callback (attempt->timeout_source, on_connection_attempt_timeout, attempt, NULL);
+ g_source_attach (attempt->timeout_source, g_main_context_get_thread_default ());
+ data->connection_attempts = g_slist_append (data->connection_attempts, attempt);
+@@ -1797,6 +1904,7 @@ g_socket_client_enumerator_callback (GObject *object,
+ g_object_ref (attempt->cancellable), g_object_unref);
+
+ g_socket_connection_set_cached_remote_address ((GSocketConnection *)attempt->connection, address);
++ g_debug ("GSocketClient: Starting TCP connection attempt");
+ g_socket_client_emit_event (data->client, G_SOCKET_CLIENT_CONNECTING, data->connectable, attempt->connection);
+ g_socket_connection_connect_async (G_SOCKET_CONNECTION (attempt->connection),
+ address,
+@@ -1849,24 +1957,48 @@ g_socket_client_connect_async (GSocketClient *client,
+ else
+ data->enumerator = g_socket_connectable_enumerate (connectable);
+
+- /* The flow and ownership here isn't quite obvious:
+- - The task starts an async attempt to connect.
+- - Each attempt holds a single ref on task.
+- - Each attempt may create new attempts by timing out (not a failure) so
+- there are multiple attempts happening in parallel.
+- - Upon failure an attempt will start a new attempt that steals its ref
+- until there are no more attempts left and it drops its ref.
+- - Upon success it will cancel all other attempts and continue on
+- to the rest of the connection (tls, proxies, etc) which do not
+- happen in parallel and at the very end drop its ref.
+- - Upon cancellation an attempt drops its ref.
+- */
++ /* This function tries to match the behavior of g_socket_client_connect ()
++ which is simple enough but much of it is done in parallel to be as responsive
++ as possible as per Happy Eyeballs (RFC 8305). This complicates flow quite a
++ bit but we can describe it in 3 sections:
++
++ Firstly we have address enumeration (DNS):
++ - This may be triggered multiple times by enumerator_next_async().
++ - It also has its own cancellable (data->enumeration_cancellable).
++ - Enumeration is done lazily because GNetworkAddressAddressEnumerator
++ also does work in parallel and may lazily add new addresses.
++ - If the first enumeration errors then the task errors. Otherwise all enumerations
++ will potentially be used (until task or enumeration is cancelled).
++
++ Then we start attempting connections (TCP):
++ - Each connection is independent and kept in a ConnectionAttempt object.
++ - They each hold a ref on the main task and have their own cancellable.
++ - Multiple attempts may happen in parallel as per Happy Eyeballs.
++ - Upon failure or timeouts more connection attempts are made.
++ - If no connections succeed the task errors.
++ - Upon success they are kept in a list of successful connections.
++
++ Lastly we connect at the application layer (TLS, Proxies):
++ - These are done in serial.
++ - The reasoning here is that Happy Eyeballs is about making bad connections responsive
++ at the IP/TCP layers. Issues at the application layer are generally not due to
++ connectivity issues but rather misconfiguration.
++ - Upon failure it will try the next TCP connection until it runs out and
++ the task errors.
++ - Upon success it cancels everything remaining (enumeration and connections)
++ and returns the connection.
++ */
+
+ data->task = g_task_new (client, cancellable, callback, user_data);
+ g_task_set_check_cancellable (data->task, FALSE); /* We handle this manually */
+ g_task_set_source_tag (data->task, g_socket_client_connect_async);
+ g_task_set_task_data (data->task, data, (GDestroyNotify)g_socket_client_async_connect_data_free);
+
++ data->enumeration_cancellable = g_cancellable_new ();
++ if (cancellable)
++ g_cancellable_connect (cancellable, G_CALLBACK (on_connection_cancelled),
++ g_object_ref (data->enumeration_cancellable), g_object_unref);
++
+ enumerator_next_async (data, FALSE);
+ }
+
+@@ -1985,6 +2117,7 @@ g_socket_client_connect_to_uri_async (GSocketClient *client,
+ }
+ else
+ {
++ g_debug("g_socket_client_connect_to_uri_async");
+ g_socket_client_connect_async (client,
+ connectable, cancellable,
+ callback, user_data);
+--
+2.23.0
+
diff --git a/meta/recipes-core/glib-2.0/glib-2.0_2.60.7.bb b/meta/recipes-core/glib-2.0/glib-2.0_2.60.7.bb
index 740473719d..af8ded76d5 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0_2.60.7.bb
+++ b/meta/recipes-core/glib-2.0/glib-2.0_2.60.7.bb
@@ -16,6 +16,8 @@ SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \
file://0001-Do-not-write-bindir-into-pkg-config-files.patch \
file://0001-meson.build-do-not-hardcode-linux-as-the-host-system.patch \
file://0001-meson-do-a-build-time-check-for-strlcpy-before-attem.patch \
+ file://CVE-2020-6750.patch \
+ file://0020-meson.build-do-not-hardcode-linux-as-the-host-system.patch \
"
SRC_URI_append_class-native = " file://relocate-modules.patch"
@@ -23,3 +25,6 @@ SRC_URI_append_class-target = " file://glib-meson.cross"
SRC_URI[md5sum] = "f036f78a7fca330d9f7d939fcf794bde"
SRC_URI[sha256sum] = "8b12c0af569afd3b71200556ad751bad4cf4bf7bc4b5f880638459a42ca86310"
+
+# Fixed in 2.60.4, but CPE data is outdated
+CVE_CHECK_WHITELIST += "CVE-2019-12450"
diff --git a/meta/recipes-core/glibc/glibc-testsuite_2.30.bb b/meta/recipes-core/glibc/glibc-testsuite_2.30.bb
index 657fd4dbc1..d887aeff79 100644
--- a/meta/recipes-core/glibc/glibc-testsuite_2.30.bb
+++ b/meta/recipes-core/glibc/glibc-testsuite_2.30.bb
@@ -1,5 +1,7 @@
require glibc_${PV}.bb
+EXCLUDE_FROM_WORLD = "1"
+
# handle PN differences
FILESEXTRAPATHS_prepend := "${THISDIR}/glibc:"
@@ -58,3 +60,4 @@ addtask do_check after do_compile
inherit nopackages
deltask do_stash_locale
+deltask do_install
diff --git a/meta/recipes-core/glibc/glibc/0005-nativesdk-glibc-Make-relocatable-install-for-locales.patch b/meta/recipes-core/glibc/glibc/0005-nativesdk-glibc-Make-relocatable-install-for-locales.patch
index 3aad603ada..5cd235f6ac 100644
--- a/meta/recipes-core/glibc/glibc/0005-nativesdk-glibc-Make-relocatable-install-for-locales.patch
+++ b/meta/recipes-core/glibc/glibc/0005-nativesdk-glibc-Make-relocatable-install-for-locales.patch
@@ -65,6 +65,35 @@ index 7c1cc3eecb..53cb8bfc59 100644
/* Load the locale data for CATEGORY from the file specified by *NAME.
If *NAME is "", use environment variables as specified by POSIX, and
---
-2.22.0
-
+Index: git/locale/programs/locale.c
+===================================================================
+--- git.orig/locale/programs/locale.c
++++ git/locale/programs/locale.c
+@@ -632,6 +632,7 @@ nameentcmp (const void *a, const void *b
+ ((const struct nameent *) b)->name);
+ }
+
++static char _write_archive_locales_path[4096] attribute_hidden __attribute__ ((section (".gccrelocprefix"))) = ARCHIVE_NAME;
+
+ static int
+ write_archive_locales (void **all_datap, char *linebuf)
+@@ -645,7 +646,7 @@ write_archive_locales (void **all_datap,
+ int fd, ret = 0;
+ uint32_t cnt;
+
+- fd = open64 (ARCHIVE_NAME, O_RDONLY);
++ fd = open64 (_write_archive_locales_path, O_RDONLY);
+ if (fd < 0)
+ return 0;
+
+@@ -700,8 +701,8 @@ write_archive_locales (void **all_datap,
+ if (cnt)
+ putchar_unlocked ('\n');
+
+- printf ("locale: %-15.15s archive: " ARCHIVE_NAME "\n%s\n",
+- names[cnt].name, linebuf);
++ printf ("locale: %-15.15s archive: %s\n%s\n",
++ names[cnt].name, _write_archive_locales_path, linebuf);
+
+ locrec = (struct locrecent *) (addr + names[cnt].locrec_offset);
+
diff --git a/meta/recipes-core/glibc/glibc/CVE-2019-19126.patch b/meta/recipes-core/glibc/glibc/CVE-2019-19126.patch
new file mode 100644
index 0000000000..aead04c485
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/CVE-2019-19126.patch
@@ -0,0 +1,32 @@
+From 37c90e117310728a4ad1eb998c0bbe7d79c4a398 Mon Sep 17 00:00:00 2001
+From: =?utf8?q?Marcin=20Ko=C5=9Bcielnicki?= <mwk@0x04.net>
+Date: Thu, 21 Nov 2019 00:20:15 +0100
+Subject: [PATCH] rtld: Check __libc_enable_secure before honoring
+ LD_PREFER_MAP_32BIT_EXEC (CVE-2019-19126) [BZ #25204]
+
+The problem was introduced in glibc 2.23, in commit
+b9eb92ab05204df772eb4929eccd018637c9f3e9
+("Add Prefer_MAP_32BIT_EXEC to map executable pages with MAP_32BIT").
+
+(cherry picked from commit d5dfad4326fc683c813df1e37bbf5cf920591c8e)
+
+Upstream-Status: Backport [https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commit;h=37c90e117310728a4ad1eb998c0bbe7d79c4a398]
+CVE: CVE-2019-19126
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+diff --git a/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h b/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h
+index 975cbe2..df2cdfd 100644
+--- a/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h
++++ b/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h
+@@ -31,7 +31,8 @@
+ environment variable, LD_PREFER_MAP_32BIT_EXEC. */
+ #define EXTRA_LD_ENVVARS \
+ case 21: \
+- if (memcmp (envline, "PREFER_MAP_32BIT_EXEC", 21) == 0) \
++ if (!__libc_enable_secure \
++ && memcmp (envline, "PREFER_MAP_32BIT_EXEC", 21) == 0) \
+ GLRO(dl_x86_cpu_features).feature[index_arch_Prefer_MAP_32BIT_EXEC] \
+ |= bit_arch_Prefer_MAP_32BIT_EXEC; \
+ break;
+--
+2.9.3
diff --git a/meta/recipes-core/glibc/glibc/CVE-2020-10029.patch b/meta/recipes-core/glibc/glibc/CVE-2020-10029.patch
new file mode 100644
index 0000000000..606b691bcf
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/CVE-2020-10029.patch
@@ -0,0 +1,128 @@
+From ce265ec5bc25ec35fba53807abac1b0c8469895e Mon Sep 17 00:00:00 2001
+From: Joseph Myers <joseph@codesourcery.com>
+Date: Wed, 12 Feb 2020 23:31:56 +0000
+Subject: [PATCH] Avoid ldbl-96 stack corruption from range reduction of
+
+ pseudo-zero (bug 25487).
+
+Bug 25487 reports stack corruption in ldbl-96 sinl on a pseudo-zero
+argument (an representation where all the significand bits, including
+the explicit high bit, are zero, but the exponent is not zero, which
+is not a valid representation for the long double type).
+
+Although this is not a valid long double representation, existing
+practice in this area (see bug 4586, originally marked invalid but
+subsequently fixed) is that we still seek to avoid invalid memory
+accesses as a result, in case of programs that treat arbitrary binary
+data as long double representations, although the invalid
+representations of the ldbl-96 format do not need to be consistently
+handled the same as any particular valid representation.
+
+This patch makes the range reduction detect pseudo-zero and unnormal
+representations that would otherwise go to __kernel_rem_pio2, and
+returns a NaN for them instead of continuing with the range reduction
+process. (Pseudo-zero and unnormal representations whose unbiased
+exponent is less than -1 have already been safely returned from the
+function before this point without going through the rest of range
+reduction.) Pseudo-zero representations would previously result in
+the value passed to __kernel_rem_pio2 being all-zero, which is
+definitely unsafe; unnormal representations would previously result in
+a value passed whose high bit is zero, which might well be unsafe
+since that is not a form of input expected by __kernel_rem_pio2.
+
+Tested for x86_64.
+
+CVE: CVE-2020-10029
+Upstream-Status: Backport [https://sourceware.org/git/gitweb.cgi?p=glibc.git;
+a=patch;h=9333498794cde1d5cca518badf79533a24114b6f]
+Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
+
+---
+ sysdeps/ieee754/ldbl-96/Makefile | 3 ++-
+ sysdeps/ieee754/ldbl-96/e_rem_pio2l.c | 12 +++++++++
+ sysdeps/ieee754/ldbl-96/test-sinl-pseudo.c | 41 ++++++++++++++++++++++++++++++
+ 3 files changed, 55 insertions(+), 1 deletion(-)
+ create mode 100644 sysdeps/ieee754/ldbl-96/test-sinl-pseudo.c
+
+diff --git a/sysdeps/ieee754/ldbl-96/Makefile b/sysdeps/ieee754/ldbl-96/Makefile
+index b103254..052c1c7 100644
+--- a/sysdeps/ieee754/ldbl-96/Makefile
++++ b/sysdeps/ieee754/ldbl-96/Makefile
+@@ -17,5 +17,6 @@
+ # <http://www.gnu.org/licenses/>.
+
+ ifeq ($(subdir),math)
+-tests += test-canonical-ldbl-96 test-totalorderl-ldbl-96
++tests += test-canonical-ldbl-96 test-totalorderl-ldbl-96 test-sinl-pseudo
++CFLAGS-test-sinl-pseudo.c += -fstack-protector-all
+ endif
+diff --git a/sysdeps/ieee754/ldbl-96/e_rem_pio2l.c b/sysdeps/ieee754/ldbl-96/e_rem_pio2l.c
+index 805de22..1aeccb4 100644
+--- a/sysdeps/ieee754/ldbl-96/e_rem_pio2l.c
++++ b/sysdeps/ieee754/ldbl-96/e_rem_pio2l.c
+@@ -210,6 +210,18 @@ __ieee754_rem_pio2l (long double x, long double *y)
+ return 0;
+ }
+
++ if ((i0 & 0x80000000) == 0)
++ {
++ /* Pseudo-zero and unnormal representations are not valid
++ representations of long double. We need to avoid stack
++ corruption in __kernel_rem_pio2, which expects input in a
++ particular normal form, but those representations do not need
++ to be consistently handled like any particular floating-point
++ value. */
++ y[1] = y[0] = __builtin_nanl ("");
++ return 0;
++ }
++
+ /* Split the 64 bits of the mantissa into three 24-bit integers
+ stored in a double array. */
+ exp = j0 - 23;
+diff --git a/sysdeps/ieee754/ldbl-96/test-sinl-pseudo.c b/sysdeps/ieee754/ldbl-96/test-sinl-pseudo.c
+new file mode 100644
+index 0000000..f59b977
+--- /dev/null
++++ b/sysdeps/ieee754/ldbl-96/test-sinl-pseudo.c
+@@ -0,0 +1,41 @@
++/* Test sinl for pseudo-zeros and unnormals for ldbl-96 (bug 25487).
++ Copyright (C) 2020 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <https://www.gnu.org/licenses/>. */
++
++#include <math.h>
++#include <math_ldbl.h>
++#include <stdint.h>
++
++static int
++do_test (void)
++{
++ for (int i = 0; i < 64; i++)
++ {
++ uint64_t sig = i == 63 ? 0 : 1ULL << i;
++ long double ld;
++ SET_LDOUBLE_WORDS (ld, 0x4141,
++ sig >> 32, sig & 0xffffffffULL);
++ /* The requirement is that no stack overflow occurs when the
++ pseudo-zero or unnormal goes through range reduction. */
++ volatile long double ldr;
++ ldr = sinl (ld);
++ (void) ldr;
++ }
++ return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/meta/recipes-core/glibc/glibc/CVE-2020-1751.patch b/meta/recipes-core/glibc/glibc/CVE-2020-1751.patch
new file mode 100644
index 0000000000..0ed92d50e9
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/CVE-2020-1751.patch
@@ -0,0 +1,70 @@
+From d93769405996dfc11d216ddbe415946617b5a494 Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@suse.de>
+Date: Mon, 20 Jan 2020 17:01:50 +0100
+Subject: [PATCH] Fix array overflow in backtrace on PowerPC (bug 25423)
+
+When unwinding through a signal frame the backtrace function on PowerPC
+didn't check array bounds when storing the frame address. Fixes commit
+d400dcac5e ("PowerPC: fix backtrace to handle signal trampolines").
+
+CVE: CVE-2020-1751
+Upstream-Status: Backport [git://sourceware.org/git/glibc.git]
+Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
+---
+ debug/tst-backtrace5.c | 12 ++++++++++++
+ sysdeps/powerpc/powerpc32/backtrace.c | 2 ++
+ sysdeps/powerpc/powerpc64/backtrace.c | 2 ++
+ 3 files changed, 16 insertions(+)
+
+diff --git a/debug/tst-backtrace5.c b/debug/tst-backtrace5.c
+index e7ce410845..b2f46160e7 100644
+--- a/debug/tst-backtrace5.c
++++ b/debug/tst-backtrace5.c
+@@ -89,6 +89,18 @@ handle_signal (int signum)
+ }
+ /* Symbol names are not available for static functions, so we do not
+ check do_test. */
++
++ /* Check that backtrace does not return more than what fits in the array
++ (bug 25423). */
++ for (int j = 0; j < NUM_FUNCTIONS; j++)
++ {
++ n = backtrace (addresses, j);
++ if (n > j)
++ {
++ FAIL ();
++ return;
++ }
++ }
+ }
+
+ NO_INLINE int
+diff --git a/sysdeps/powerpc/powerpc32/backtrace.c b/sysdeps/powerpc/powerpc32/backtrace.c
+index 7c2d4726f8..d1456c8ae4 100644
+--- a/sysdeps/powerpc/powerpc32/backtrace.c
++++ b/sysdeps/powerpc/powerpc32/backtrace.c
+@@ -114,6 +114,8 @@ __backtrace (void **array, int size)
+ }
+ if (gregset)
+ {
++ if (count + 1 == size)
++ break;
+ array[++count] = (void*)((*gregset)[PT_NIP]);
+ current = (void*)((*gregset)[PT_R1]);
+ }
+diff --git a/sysdeps/powerpc/powerpc64/backtrace.c b/sysdeps/powerpc/powerpc64/backtrace.c
+index 65c260ab76..8a53a1088f 100644
+--- a/sysdeps/powerpc/powerpc64/backtrace.c
++++ b/sysdeps/powerpc/powerpc64/backtrace.c
+@@ -87,6 +87,8 @@ __backtrace (void **array, int size)
+ if (is_sigtramp_address (current->return_address))
+ {
+ struct signal_frame_64 *sigframe = (struct signal_frame_64*) current;
++ if (count + 1 == size)
++ break;
+ array[++count] = (void*) sigframe->uc.uc_mcontext.gp_regs[PT_NIP];
+ current = (void*) sigframe->uc.uc_mcontext.gp_regs[PT_R1];
+ }
+--
+2.23.0
+
diff --git a/meta/recipes-core/glibc/glibc/CVE-2020-1752.patch b/meta/recipes-core/glibc/glibc/CVE-2020-1752.patch
new file mode 100644
index 0000000000..6c347cd414
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/CVE-2020-1752.patch
@@ -0,0 +1,66 @@
+From ddc650e9b3dc916eab417ce9f79e67337b05035c Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@suse.de>
+Date: Wed, 19 Feb 2020 17:21:46 +0100
+Subject: [PATCH] Fix use-after-free in glob when expanding ~user (bug 25414)
+
+The value of `end_name' points into the value of `dirname', thus don't
+deallocate the latter before the last use of the former.
+
+CVE: CVE-2020-1752
+Upstream-Status: Backport [git://sourceware.org/git/glibc.git]
+Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
+---
+ posix/glob.c | 25 +++++++++++++------------
+ 1 file changed, 13 insertions(+), 12 deletions(-)
+
+diff --git a/posix/glob.c b/posix/glob.c
+index cba9cd1819..4580cefb9f 100644
+--- a/posix/glob.c
++++ b/posix/glob.c
+@@ -827,31 +827,32 @@ __glob (const char *pattern, int flags, int (*errfunc) (const char *, int),
+ {
+ size_t home_len = strlen (p->pw_dir);
+ size_t rest_len = end_name == NULL ? 0 : strlen (end_name);
+- char *d;
++ char *d, *newp;
++ bool use_alloca = glob_use_alloca (alloca_used,
++ home_len + rest_len + 1);
+
+- if (__glibc_unlikely (malloc_dirname))
+- free (dirname);
+- malloc_dirname = 0;
+-
+- if (glob_use_alloca (alloca_used, home_len + rest_len + 1))
+- dirname = alloca_account (home_len + rest_len + 1,
+- alloca_used);
++ if (use_alloca)
++ newp = alloca_account (home_len + rest_len + 1, alloca_used);
+ else
+ {
+- dirname = malloc (home_len + rest_len + 1);
+- if (dirname == NULL)
++ newp = malloc (home_len + rest_len + 1);
++ if (newp == NULL)
+ {
+ scratch_buffer_free (&pwtmpbuf);
+ retval = GLOB_NOSPACE;
+ goto out;
+ }
+- malloc_dirname = 1;
+ }
+- d = mempcpy (dirname, p->pw_dir, home_len);
++ d = mempcpy (newp, p->pw_dir, home_len);
+ if (end_name != NULL)
+ d = mempcpy (d, end_name, rest_len);
+ *d = '\0';
+
++ if (__glibc_unlikely (malloc_dirname))
++ free (dirname);
++ dirname = newp;
++ malloc_dirname = !use_alloca;
++
+ dirlen = home_len + rest_len;
+ dirname_modified = 1;
+ }
+--
+2.18.2
diff --git a/meta/recipes-core/glibc/glibc/CVE-2020-6096-1.patch b/meta/recipes-core/glibc/glibc/CVE-2020-6096-1.patch
new file mode 100644
index 0000000000..01c0328362
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/CVE-2020-6096-1.patch
@@ -0,0 +1,193 @@
+From 79a4fa341b8a89cb03f84564fd72abaa1a2db394 Mon Sep 17 00:00:00 2001
+From: Evgeny Eremin <e.eremin@omprussia.ru>
+Date: Wed, 8 Jul 2020 14:18:19 +0200
+Subject: [PATCH 1/2] arm: CVE-2020-6096: fix memcpy and memmove for negative
+ length [BZ #25620]
+
+Unsigned branch instructions could be used for r2 to fix the wrong
+behavior when a negative length is passed to memcpy and memmove.
+This commit fixes the generic arm implementation of memcpy amd memmove.
+
+CVE: CVE-2020-6096
+Upstream-Status: Backport [git://sourceware.org/git/glibc.git]
+Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
+---
+ sysdeps/arm/memcpy.S | 24 ++++++++++--------------
+ sysdeps/arm/memmove.S | 24 ++++++++++--------------
+ 2 files changed, 20 insertions(+), 28 deletions(-)
+
+diff --git a/sysdeps/arm/memcpy.S b/sysdeps/arm/memcpy.S
+index 510e8adaf2..bcfbc51d99 100644
+--- a/sysdeps/arm/memcpy.S
++++ b/sysdeps/arm/memcpy.S
+@@ -68,7 +68,7 @@ ENTRY(memcpy)
+ cfi_remember_state
+
+ subs r2, r2, #4
+- blt 8f
++ blo 8f
+ ands ip, r0, #3
+ PLD( pld [r1, #0] )
+ bne 9f
+@@ -82,7 +82,7 @@ ENTRY(memcpy)
+ cfi_rel_offset (r6, 4)
+ cfi_rel_offset (r7, 8)
+ cfi_rel_offset (r8, 12)
+- blt 5f
++ blo 5f
+
+ CALGN( ands ip, r1, #31 )
+ CALGN( rsb r3, ip, #32 )
+@@ -98,9 +98,9 @@ ENTRY(memcpy)
+ #endif
+
+ PLD( pld [r1, #0] )
+-2: PLD( subs r2, r2, #96 )
++2: PLD( cmp r2, #96 )
+ PLD( pld [r1, #28] )
+- PLD( blt 4f )
++ PLD( blo 4f )
+ PLD( pld [r1, #60] )
+ PLD( pld [r1, #92] )
+
+@@ -108,9 +108,7 @@ ENTRY(memcpy)
+ 4: ldmia r1!, {r3, r4, r5, r6, r7, r8, ip, lr}
+ subs r2, r2, #32
+ stmia r0!, {r3, r4, r5, r6, r7, r8, ip, lr}
+- bge 3b
+- PLD( cmn r2, #96 )
+- PLD( bge 4b )
++ bhs 3b
+
+ 5: ands ip, r2, #28
+ rsb ip, ip, #32
+@@ -222,7 +220,7 @@ ENTRY(memcpy)
+ strbge r4, [r0], #1
+ subs r2, r2, ip
+ strb lr, [r0], #1
+- blt 8b
++ blo 8b
+ ands ip, r1, #3
+ beq 1b
+
+@@ -236,7 +234,7 @@ ENTRY(memcpy)
+ .macro forward_copy_shift pull push
+
+ subs r2, r2, #28
+- blt 14f
++ blo 14f
+
+ CALGN( ands ip, r1, #31 )
+ CALGN( rsb ip, ip, #32 )
+@@ -253,9 +251,9 @@ ENTRY(memcpy)
+ cfi_rel_offset (r10, 16)
+
+ PLD( pld [r1, #0] )
+- PLD( subs r2, r2, #96 )
++ PLD( cmp r2, #96 )
+ PLD( pld [r1, #28] )
+- PLD( blt 13f )
++ PLD( blo 13f )
+ PLD( pld [r1, #60] )
+ PLD( pld [r1, #92] )
+
+@@ -280,9 +278,7 @@ ENTRY(memcpy)
+ mov ip, ip, PULL #\pull
+ orr ip, ip, lr, PUSH #\push
+ stmia r0!, {r3, r4, r5, r6, r7, r8, r10, ip}
+- bge 12b
+- PLD( cmn r2, #96 )
+- PLD( bge 13b )
++ bhs 12b
+
+ pop {r5 - r8, r10}
+ cfi_adjust_cfa_offset (-20)
+diff --git a/sysdeps/arm/memmove.S b/sysdeps/arm/memmove.S
+index 954037ef3a..0d07b76ee6 100644
+--- a/sysdeps/arm/memmove.S
++++ b/sysdeps/arm/memmove.S
+@@ -85,7 +85,7 @@ ENTRY(memmove)
+ add r1, r1, r2
+ add r0, r0, r2
+ subs r2, r2, #4
+- blt 8f
++ blo 8f
+ ands ip, r0, #3
+ PLD( pld [r1, #-4] )
+ bne 9f
+@@ -99,7 +99,7 @@ ENTRY(memmove)
+ cfi_rel_offset (r6, 4)
+ cfi_rel_offset (r7, 8)
+ cfi_rel_offset (r8, 12)
+- blt 5f
++ blo 5f
+
+ CALGN( ands ip, r1, #31 )
+ CALGN( sbcsne r4, ip, r2 ) @ C is always set here
+@@ -114,9 +114,9 @@ ENTRY(memmove)
+ #endif
+
+ PLD( pld [r1, #-4] )
+-2: PLD( subs r2, r2, #96 )
++2: PLD( cmp r2, #96 )
+ PLD( pld [r1, #-32] )
+- PLD( blt 4f )
++ PLD( blo 4f )
+ PLD( pld [r1, #-64] )
+ PLD( pld [r1, #-96] )
+
+@@ -124,9 +124,7 @@ ENTRY(memmove)
+ 4: ldmdb r1!, {r3, r4, r5, r6, r7, r8, ip, lr}
+ subs r2, r2, #32
+ stmdb r0!, {r3, r4, r5, r6, r7, r8, ip, lr}
+- bge 3b
+- PLD( cmn r2, #96 )
+- PLD( bge 4b )
++ bhs 3b
+
+ 5: ands ip, r2, #28
+ rsb ip, ip, #32
+@@ -237,7 +235,7 @@ ENTRY(memmove)
+ strbge r4, [r0, #-1]!
+ subs r2, r2, ip
+ strb lr, [r0, #-1]!
+- blt 8b
++ blo 8b
+ ands ip, r1, #3
+ beq 1b
+
+@@ -251,7 +249,7 @@ ENTRY(memmove)
+ .macro backward_copy_shift push pull
+
+ subs r2, r2, #28
+- blt 14f
++ blo 14f
+
+ CALGN( ands ip, r1, #31 )
+ CALGN( rsb ip, ip, #32 )
+@@ -268,9 +266,9 @@ ENTRY(memmove)
+ cfi_rel_offset (r10, 16)
+
+ PLD( pld [r1, #-4] )
+- PLD( subs r2, r2, #96 )
++ PLD( cmp r2, #96 )
+ PLD( pld [r1, #-32] )
+- PLD( blt 13f )
++ PLD( blo 13f )
+ PLD( pld [r1, #-64] )
+ PLD( pld [r1, #-96] )
+
+@@ -295,9 +293,7 @@ ENTRY(memmove)
+ mov r4, r4, PUSH #\push
+ orr r4, r4, r3, PULL #\pull
+ stmdb r0!, {r4 - r8, r10, ip, lr}
+- bge 12b
+- PLD( cmn r2, #96 )
+- PLD( bge 13b )
++ bhs 12b
+
+ pop {r5 - r8, r10}
+ cfi_adjust_cfa_offset (-20)
+--
+2.17.0
+
diff --git a/meta/recipes-core/glibc/glibc/CVE-2020-6096-2.patch b/meta/recipes-core/glibc/glibc/CVE-2020-6096-2.patch
new file mode 100644
index 0000000000..bfb2d7e7f5
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/CVE-2020-6096-2.patch
@@ -0,0 +1,111 @@
+From beea361050728138b82c57dda0c4810402d342b9 Mon Sep 17 00:00:00 2001
+From: Alexander Anisimov <a.anisimov@omprussia.ru>
+Date: Wed, 8 Jul 2020 14:18:31 +0200
+Subject: [PATCH 2/2] arm: CVE-2020-6096: Fix multiarch memcpy for negative
+ length [BZ #25620]
+
+Unsigned branch instructions could be used for r2 to fix the wrong
+behavior when a negative length is passed to memcpy.
+This commit fixes the armv7 version.
+
+CVE: CVE-2020-6096
+Upstream-Status: Backport [git://sourceware.org/git/glibc.git]
+Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
+---
+ sysdeps/arm/armv7/multiarch/memcpy_impl.S | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/sysdeps/arm/armv7/multiarch/memcpy_impl.S b/sysdeps/arm/armv7/multiarch/memcpy_impl.S
+index bf4ac7077f..379bb56fc9 100644
+--- a/sysdeps/arm/armv7/multiarch/memcpy_impl.S
++++ b/sysdeps/arm/armv7/multiarch/memcpy_impl.S
+@@ -268,7 +268,7 @@ ENTRY(memcpy)
+
+ mov dst, dstin /* Preserve dstin, we need to return it. */
+ cmp count, #64
+- bge .Lcpy_not_short
++ bhs .Lcpy_not_short
+ /* Deal with small copies quickly by dropping straight into the
+ exit block. */
+
+@@ -351,10 +351,10 @@ ENTRY(memcpy)
+
+ 1:
+ subs tmp2, count, #64 /* Use tmp2 for count. */
+- blt .Ltail63aligned
++ blo .Ltail63aligned
+
+ cmp tmp2, #512
+- bge .Lcpy_body_long
++ bhs .Lcpy_body_long
+
+ .Lcpy_body_medium: /* Count in tmp2. */
+ #ifdef USE_VFP
+@@ -378,7 +378,7 @@ ENTRY(memcpy)
+ add src, src, #64
+ vstr d1, [dst, #56]
+ add dst, dst, #64
+- bge 1b
++ bhs 1b
+ tst tmp2, #0x3f
+ beq .Ldone
+
+@@ -412,7 +412,7 @@ ENTRY(memcpy)
+ ldrd A_l, A_h, [src, #64]!
+ strd A_l, A_h, [dst, #64]!
+ subs tmp2, tmp2, #64
+- bge 1b
++ bhs 1b
+ tst tmp2, #0x3f
+ bne 1f
+ ldr tmp2,[sp], #FRAME_SIZE
+@@ -482,7 +482,7 @@ ENTRY(memcpy)
+ add src, src, #32
+
+ subs tmp2, tmp2, #prefetch_lines * 64 * 2
+- blt 2f
++ blo 2f
+ 1:
+ cpy_line_vfp d3, 0
+ cpy_line_vfp d4, 64
+@@ -494,7 +494,7 @@ ENTRY(memcpy)
+ add dst, dst, #2 * 64
+ add src, src, #2 * 64
+ subs tmp2, tmp2, #prefetch_lines * 64
+- bge 1b
++ bhs 1b
+
+ 2:
+ cpy_tail_vfp d3, 0
+@@ -615,8 +615,8 @@ ENTRY(memcpy)
+ 1:
+ pld [src, #(3 * 64)]
+ subs count, count, #64
+- ldrmi tmp2, [sp], #FRAME_SIZE
+- bmi .Ltail63unaligned
++ ldrlo tmp2, [sp], #FRAME_SIZE
++ blo .Ltail63unaligned
+ pld [src, #(4 * 64)]
+
+ #ifdef USE_NEON
+@@ -633,7 +633,7 @@ ENTRY(memcpy)
+ neon_load_multi d0-d3, src
+ neon_load_multi d4-d7, src
+ subs count, count, #64
+- bmi 2f
++ blo 2f
+ 1:
+ pld [src, #(4 * 64)]
+ neon_store_multi d0-d3, dst
+@@ -641,7 +641,7 @@ ENTRY(memcpy)
+ neon_store_multi d4-d7, dst
+ neon_load_multi d4-d7, src
+ subs count, count, #64
+- bpl 1b
++ bhs 1b
+ 2:
+ neon_store_multi d0-d3, dst
+ neon_store_multi d4-d7, dst
+--
+2.17.0
+
diff --git a/meta/recipes-core/glibc/glibc_2.30.bb b/meta/recipes-core/glibc/glibc_2.30.bb
index 03add3363c..b674b02706 100644
--- a/meta/recipes-core/glibc/glibc_2.30.bb
+++ b/meta/recipes-core/glibc/glibc_2.30.bb
@@ -41,6 +41,12 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
file://0026-intl-Emit-no-lines-in-bison-generated-files.patch \
file://0027-inject-file-assembly-directives.patch \
file://0028-locale-prevent-maybe-uninitialized-errors-with-Os-BZ.patch \
+ file://CVE-2019-19126.patch \
+ file://CVE-2020-10029.patch \
+ file://CVE-2020-1751.patch \
+ file://CVE-2020-1752.patch \
+ file://CVE-2020-6096-1.patch \
+ file://CVE-2020-6096-2.patch \
"
S = "${WORKDIR}/git"
B = "${WORKDIR}/build-${TARGET_SYS}"
diff --git a/meta/recipes-core/images/build-appliance-image_15.0.0.bb b/meta/recipes-core/images/build-appliance-image_15.0.0.bb
index 1d74ee5198..e993bde2d7 100644
--- a/meta/recipes-core/images/build-appliance-image_15.0.0.bb
+++ b/meta/recipes-core/images/build-appliance-image_15.0.0.bb
@@ -24,8 +24,8 @@ IMAGE_FSTYPES = "wic.vmdk"
inherit core-image module-base setuptools3
-SRCREV ?= "8181681b33da272fef83276104d5c7a93f84da46"
-SRC_URI = "git://git.yoctoproject.org/poky \
+SRCREV ?= "f4b1c01110bf6cf7691aa6f214cecd89a52d5661"
+SRC_URI = "git://git.yoctoproject.org/poky;branch=zeus \
file://Yocto_Build_Appliance.vmx \
file://Yocto_Build_Appliance.vmxf \
file://README_VirtualBox_Guest_Additions.txt \
diff --git a/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh b/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh
index f5b5b9904b..4871ee94e5 100644
--- a/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh
+++ b/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh
@@ -26,6 +26,10 @@ if [ -e /sys/kernel/config ] && grep -q configfs /proc/filesystems; then
mount -t configfs configfs /sys/kernel/config
fi
+if [ -e /sys/firmware/efi/efivars ] && grep -q efivarfs /proc/filesystems; then
+ mount -t efivarfs efivarfs /sys/firmware/efi/efivars
+fi
+
if ! [ -e /dev/zero ] && [ -e /dev ] && grep -q devtmpfs /proc/filesystems; then
mount -n -t devtmpfs devtmpfs /dev
fi
diff --git a/meta/recipes-core/kbd/kbd/0001-configure.ac-Fix-logic-of-vlock-configure-switch.patch b/meta/recipes-core/kbd/kbd/0001-configure.ac-Fix-logic-of-vlock-configure-switch.patch
new file mode 100644
index 0000000000..c3f068f61b
--- /dev/null
+++ b/meta/recipes-core/kbd/kbd/0001-configure.ac-Fix-logic-of-vlock-configure-switch.patch
@@ -0,0 +1,31 @@
+From f7f357ef079b6d185f340e716d7c72a98d82bad0 Mon Sep 17 00:00:00 2001
+From: Garry Filakhtov <filakhtov@gmail.com>
+Date: Fri, 20 Jul 2018 15:58:56 +0200
+Subject: [PATCH] configure.ac: Fix logic of vlock configure switch
+
+Downstream bug report: https://bugs.gentoo.org/661650
+
+Upstream-Status: Backport [f7f357ef079b6d185f340e716d7c72a98d82bad0]
+
+Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
+Signed-off-by: De Huo <de.huo@windriver.com>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 87eb63c..07098cf 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -119,7 +119,7 @@ AM_CONDITIONAL(BUILD_LIBKEYMAP, test "$BUILD_LIBKEYMAP" = "yes")
+
+ AC_ARG_ENABLE(vlock,
+ AS_HELP_STRING(--disable-vlock, [do not build vlock]),
+- [VLOCK_PROG=no],[VLOCK_PROG=yes])
++ [VLOCK_PROG=$enableval],[VLOCK_PROG=yes])
+ AM_CONDITIONAL(VLOCK, test "$VLOCK_PROG" = "yes")
+
+ if test "$VLOCK_PROG" = "yes"; then
+--
+2.23.0
+
diff --git a/meta/recipes-core/kbd/kbd_2.0.4.bb b/meta/recipes-core/kbd/kbd_2.0.4.bb
index 4af3256fff..47e76da2b4 100644
--- a/meta/recipes-core/kbd/kbd_2.0.4.bb
+++ b/meta/recipes-core/kbd/kbd_2.0.4.bb
@@ -13,6 +13,7 @@ RCONFLICTS_${PN} = "console-tools"
SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/${BP}.tar.xz \
file://run-ptest \
${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'file://set-proper-path-of-resources.patch', '', d)} \
+ file://0001-configure.ac-Fix-logic-of-vlock-configure-switch.patch \
"
SRC_URI[md5sum] = "c1635a5a83b63aca7f97a3eab39ebaa6"
@@ -58,7 +59,8 @@ RDEPENDS_${PN}-ptest = "make"
inherit update-alternatives
-ALTERNATIVE_${PN} = "chvt deallocvt fgconsole openvt showkey"
+ALTERNATIVE_${PN} = "chvt deallocvt fgconsole openvt showkey \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'vlock','', d)}"
ALTERNATIVE_PRIORITY = "100"
BBCLASSEXTEND = "native"
diff --git a/meta/recipes-core/libxml/libxml2/CVE-2019-20388.patch b/meta/recipes-core/libxml/libxml2/CVE-2019-20388.patch
new file mode 100644
index 0000000000..4ee2d4fe62
--- /dev/null
+++ b/meta/recipes-core/libxml/libxml2/CVE-2019-20388.patch
@@ -0,0 +1,37 @@
+From 7ffcd44d7e6c46704f8af0321d9314cd26e0e18a Mon Sep 17 00:00:00 2001
+From: Zhipeng Xie <xiezhipeng1@huawei.com>
+Date: Tue, 20 Aug 2019 16:33:06 +0800
+Subject: [PATCH] Fix memory leak in xmlSchemaValidateStream
+
+When ctxt->schema is NULL, xmlSchemaSAXPlug->xmlSchemaPreRun
+alloc a new schema for ctxt->schema and set vctxt->xsiAssemble
+to 1. Then xmlSchemaVStart->xmlSchemaPreRun initialize
+vctxt->xsiAssemble to 0 again which cause the alloced schema
+can not be freed anymore.
+
+Found with libFuzzer.
+
+Upstream-Status: Accepted [https://gitlab.gnome.org/GNOME/libxml2/commit/7ffcd44d7e6c46704f8af0321d9314cd26e0e18a]
+CVE: CVE-2019-20388
+
+Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ xmlschemas.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/xmlschemas.c b/xmlschemas.c
+index 301c8449..39d92182 100644
+--- a/xmlschemas.c
++++ b/xmlschemas.c
+@@ -28090,7 +28090,6 @@ xmlSchemaPreRun(xmlSchemaValidCtxtPtr vctxt) {
+ vctxt->nberrors = 0;
+ vctxt->depth = -1;
+ vctxt->skipDepth = -1;
+- vctxt->xsiAssemble = 0;
+ vctxt->hasKeyrefs = 0;
+ #ifdef ENABLE_IDC_NODE_TABLES_TEST
+ vctxt->createIDCNodeTables = 1;
+--
+2.24.1
+
diff --git a/meta/recipes-core/libxml/libxml2/CVE-2020-7595.patch b/meta/recipes-core/libxml/libxml2/CVE-2020-7595.patch
new file mode 100644
index 0000000000..facfefd362
--- /dev/null
+++ b/meta/recipes-core/libxml/libxml2/CVE-2020-7595.patch
@@ -0,0 +1,36 @@
+From 0e1a49c8907645d2e155f0d89d4d9895ac5112b5 Mon Sep 17 00:00:00 2001
+From: Zhipeng Xie <xiezhipeng1@huawei.com>
+Date: Thu, 12 Dec 2019 17:30:55 +0800
+Subject: [PATCH] Fix infinite loop in xmlStringLenDecodeEntities
+
+When ctxt->instate == XML_PARSER_EOF,xmlParseStringEntityRef
+return NULL which cause a infinite loop in xmlStringLenDecodeEntities
+
+Found with libFuzzer.
+
+Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
+
+Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/libxml2/commit/0e1a49c89076]
+CVE: CVE-2020-7595
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ parser.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/parser.c b/parser.c
+index d1c31963..a34bb6cd 100644
+--- a/parser.c
++++ b/parser.c
+@@ -2646,7 +2646,8 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
+ else
+ c = 0;
+ while ((c != 0) && (c != end) && /* non input consuming loop */
+- (c != end2) && (c != end3)) {
++ (c != end2) && (c != end3) &&
++ (ctxt->instate != XML_PARSER_EOF)) {
+
+ if (c == 0) break;
+ if ((c == '&') && (str[1] == '#')) {
+--
+2.24.1
+
diff --git a/meta/recipes-core/libxml/libxml2/Fix-CVE-2019-19956.patch b/meta/recipes-core/libxml/libxml2/Fix-CVE-2019-19956.patch
new file mode 100644
index 0000000000..1c2dff9d5f
--- /dev/null
+++ b/meta/recipes-core/libxml/libxml2/Fix-CVE-2019-19956.patch
@@ -0,0 +1,40 @@
+From 5a02583c7e683896d84878bd90641d8d9b0d0549 Mon Sep 17 00:00:00 2001
+From: Zhipeng Xie <xiezhipeng1@huawei.com>
+Date: Wed, 7 Aug 2019 17:39:17 +0800
+Subject: [PATCH] Fix memory leak in xmlParseBalancedChunkMemoryRecover
+
+When doc is NULL, namespace created in xmlTreeEnsureXMLDecl
+is bind to newDoc->oldNs, in this case, set newDoc->oldNs to
+NULL and free newDoc will cause a memory leak.
+
+Found with libFuzzer.
+
+Closes #82.
+
+Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/libxml2/commit/5a02583c7e683896d84878bd90641d8d9b0d0549]
+CVE: CVE-2019-19956
+
+Signed-off-by: Chee Yang Lee <chee.yang.lee@intel.com>
+
+---
+ parser.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/parser.c b/parser.c
+index 1ce1ccf1..26d9f4e3 100644
+--- a/parser.c
++++ b/parser.c
+@@ -13894,7 +13894,8 @@ xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, xmlSAXHandlerPtr sax,
+ xmlFreeParserCtxt(ctxt);
+ newDoc->intSubset = NULL;
+ newDoc->extSubset = NULL;
+- newDoc->oldNs = NULL;
++ if(doc != NULL)
++ newDoc->oldNs = NULL;
+ xmlFreeDoc(newDoc);
+
+ return(ret);
+--
+2.24.1
+
+
diff --git a/meta/recipes-core/libxml/libxml2_2.9.9.bb b/meta/recipes-core/libxml/libxml2_2.9.9.bb
index c38f883e44..1d898ab020 100644
--- a/meta/recipes-core/libxml/libxml2_2.9.9.bb
+++ b/meta/recipes-core/libxml/libxml2_2.9.9.bb
@@ -20,6 +20,9 @@ SRC_URI = "http://www.xmlsoft.org/sources/libxml2-${PV}.tar.gz;name=libtar \
file://libxml-m4-use-pkgconfig.patch \
file://0001-Make-ptest-run-the-python-tests-if-python-is-enabled.patch \
file://fix-execution-of-ptests.patch \
+ file://Fix-CVE-2019-19956.patch \
+ file://CVE-2020-7595.patch \
+ file://CVE-2019-20388.patch \
"
SRC_URI[libtar.md5sum] = "c04a5a0a042eaa157e8e8c9eabe76bd6"
diff --git a/meta/recipes-core/meta/buildtools-extended-tarball.bb b/meta/recipes-core/meta/buildtools-extended-tarball.bb
new file mode 100644
index 0000000000..94ed57585b
--- /dev/null
+++ b/meta/recipes-core/meta/buildtools-extended-tarball.bb
@@ -0,0 +1,36 @@
+require recipes-core/meta/buildtools-tarball.bb
+
+DESCRIPTION = "SDK type target for building a standalone tarball containing build-essentials, python3, chrpath, \
+ make, git and tar. The tarball can be used to run bitbake builds on systems which don't meet the \
+ usual version requirements and have ancient compilers."
+SUMMARY = "Standalone tarball for running builds on systems with inadequate software and ancient compilers"
+LICENSE = "MIT"
+
+# Add nativesdk equivalent of build-essentials
+TOOLCHAIN_HOST_TASK += "\
+ nativesdk-automake \
+ nativesdk-autoconf \
+ nativesdk-binutils \
+ nativesdk-binutils-symlinks \
+ nativesdk-cpp \
+ nativesdk-cpp-symlinks \
+ nativesdk-gcc \
+ nativesdk-gcc-symlinks \
+ nativesdk-g++ \
+ nativesdk-g++-symlinks \
+ nativesdk-gettext \
+ nativesdk-libatomic \
+ nativesdk-libgcc \
+ nativesdk-libstdc++ \
+ nativesdk-libstdc++-dev \
+ nativesdk-libstdc++-staticdev \
+ nativesdk-libtool \
+ nativesdk-pkgconfig \
+ nativesdk-glibc-utils \
+ nativesdk-python \
+ nativesdk-libxcrypt-dev \
+ "
+
+TOOLCHAIN_OUTPUTNAME = "${SDK_ARCH}-buildtools-extended-nativesdk-standalone-${DISTRO_VERSION}"
+
+SDK_TITLE = "Extended Build tools"
diff --git a/meta/recipes-core/meta/buildtools-tarball.bb b/meta/recipes-core/meta/buildtools-tarball.bb
index 91df6f1ae9..ceb60b0e48 100644
--- a/meta/recipes-core/meta/buildtools-tarball.bb
+++ b/meta/recipes-core/meta/buildtools-tarball.bb
@@ -25,6 +25,7 @@ TOOLCHAIN_HOST_TASK ?= "\
nativesdk-texinfo \
nativesdk-libnss-nis \
nativesdk-rpcsvc-proto \
+ nativesdk-patch \
"
MULTIMACH_TARGET_SYS = "${SDK_ARCH}-nativesdk${SDK_VENDOR}-${SDK_OS}"
@@ -72,7 +73,13 @@ create_sdk_files_append () {
toolchain_create_sdk_version ${SDK_OUTPUT}/${SDKPATH}/version-${SDK_SYS}
echo 'export GIT_SSL_CAINFO="${SDKPATHNATIVE}${sysconfdir}/ssl/certs/ca-certificates.crt"' >>$script
+ echo 'export SSL_CERT_FILE="${SDKPATHNATIVE}${sysconfdir}/ssl/certs/ca-certificates.crt"' >>$script
+ echo 'export OPENSSL_CONF="${SDKPATHNATIVE}${sysconfdir}/ssl/openssl.cnf"' >>$script
+ mkdir -p ${SDK_OUTPUT}/${SDKPATHNATIVE}${sysconfdir}/
+ echo '${SDKPATHNATIVE}${libdir}
+${SDKPATHNATIVE}${base_libdir}
+include /etc/ld.so.conf' > ${SDK_OUTPUT}/${SDKPATHNATIVE}${sysconfdir}/ld.so.conf
if [ "${SDKMACHINE}" = "i686" ]; then
echo 'export NO32LIBS="0"' >>$script
echo 'echo "$BB_ENV_EXTRAWHITE" | grep -q "NO32LIBS"' >>$script
diff --git a/meta/recipes-core/meta/cve-update-db-native.bb b/meta/recipes-core/meta/cve-update-db-native.bb
index 2c427a5884..0577a5ccac 100644
--- a/meta/recipes-core/meta/cve-update-db-native.bb
+++ b/meta/recipes-core/meta/cve-update-db-native.bb
@@ -13,34 +13,41 @@ deltask do_install
deltask do_populate_sysroot
python () {
- if not d.getVar("CVE_CHECK_DB_FILE"):
+ cve_check_db_file = d.getVar("CVE_CHECK_DB_FILE")
+ if not cve_check_db_file:
raise bb.parse.SkipRecipe("Skip recipe when cve-check class is not loaded.")
+
+ if os.path.exists("%s-journal" % cve_check_db_file ):
+ os.remove("%s-journal" % cve_check_db_file)
+
+ if os.path.exists(cve_check_db_file):
+ os.remove(cve_check_db_file)
}
python do_populate_cve_db() {
"""
Update NVD database with json data feed
"""
-
+ import bb.utils
import sqlite3, urllib, urllib.parse, shutil, gzip
from datetime import date
- BASE_URL = "https://nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-"
+ bb.utils.export_proxies(d)
+
+ BASE_URL = "https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-"
YEAR_START = 2002
- db_dir = os.path.join(d.getVar("DL_DIR"), 'CVE_CHECK')
- db_file = os.path.join(db_dir, 'nvdcve_1.0.db')
+ db_file = d.getVar("CVE_CHECK_DB_FILE")
+ db_dir = os.path.dirname(db_file)
json_tmpfile = os.path.join(db_dir, 'nvd.json.gz')
- proxy = d.getVar("https_proxy")
- if proxy:
- # instantiate an opener but do not install it as the global
- # opener unless if we're really sure it's applicable for all
- # urllib requests
- proxy_handler = urllib.request.ProxyHandler({'https': proxy})
- proxy_opener = urllib.request.build_opener(proxy_handler)
- else:
- proxy_opener = None
+ # Don't refresh the database more than once an hour
+ try:
+ import time
+ if time.time() - os.path.getmtime(db_file) < (60*60):
+ return
+ except OSError:
+ pass
cve_f = open(os.path.join(d.getVar("TMPDIR"), 'cve_check'), 'a')
@@ -59,15 +66,7 @@ python do_populate_cve_db() {
json_url = year_url + ".json.gz"
# Retrieve meta last modified date
-
- response = None
-
- if proxy_opener:
- response = proxy_opener.open(meta_url)
- else:
- req = urllib.request.Request(meta_url)
- response = urllib.request.urlopen(req)
-
+ response = urllib.request.urlopen(meta_url)
if response:
for l in response.read().decode("utf-8").splitlines():
key, value = l.split(":", 1)
@@ -87,12 +86,7 @@ python do_populate_cve_db() {
# Update db with current year json file
try:
- if proxy_opener:
- response = proxy_opener.open(json_url)
- else:
- req = urllib.request.Request(json_url)
- response = urllib.request.urlopen(req)
-
+ response = urllib.request.urlopen(json_url)
if response:
update_db(c, gzip.decompress(response.read()).decode('utf-8'))
c.execute("insert or replace into META values (?, ?)", [year, last_modified])
@@ -112,11 +106,14 @@ python do_populate_cve_db() {
def initialize_db(c):
c.execute("CREATE TABLE IF NOT EXISTS META (YEAR INTEGER UNIQUE, DATE TEXT)")
+
c.execute("CREATE TABLE IF NOT EXISTS NVD (ID TEXT UNIQUE, SUMMARY TEXT, \
SCOREV2 TEXT, SCOREV3 TEXT, MODIFIED INTEGER, VECTOR TEXT)")
+
c.execute("CREATE TABLE IF NOT EXISTS PRODUCTS (ID TEXT, \
VENDOR TEXT, PRODUCT TEXT, VERSION_START TEXT, OPERATOR_START TEXT, \
VERSION_END TEXT, OPERATOR_END TEXT)")
+ c.execute("CREATE INDEX IF NOT EXISTS PRODUCT_ID_IDX on PRODUCTS(ID);")
def parse_node_and_insert(c, node, cveId):
# Parse children node if needed
@@ -132,7 +129,7 @@ def parse_node_and_insert(c, node, cveId):
product = cpe23[4]
version = cpe23[5]
- if version != '*':
+ if version != '*' and version != '-':
# Version is defined, this is a '=' match
yield [cveId, vendor, product, version, '=', '', '']
else:
@@ -170,15 +167,20 @@ def update_db(c, jsondata):
if not elt['impact']:
continue
+ accessVector = None
cveId = elt['cve']['CVE_data_meta']['ID']
cveDesc = elt['cve']['description']['description_data'][0]['value']
date = elt['lastModifiedDate']
- accessVector = elt['impact']['baseMetricV2']['cvssV2']['accessVector']
- cvssv2 = elt['impact']['baseMetricV2']['cvssV2']['baseScore']
-
try:
+ accessVector = elt['impact']['baseMetricV2']['cvssV2']['accessVector']
+ cvssv2 = elt['impact']['baseMetricV2']['cvssV2']['baseScore']
+ except KeyError:
+ cvssv2 = 0.0
+ try:
+ accessVector = accessVector or elt['impact']['baseMetricV3']['cvssV3']['attackVector']
cvssv3 = elt['impact']['baseMetricV3']['cvssV3']['baseScore']
- except:
+ except KeyError:
+ accessVector = accessVector or "UNKNOWN"
cvssv3 = 0.0
c.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?)",
diff --git a/meta/recipes-core/meta/dummy-sdk-package.inc b/meta/recipes-core/meta/dummy-sdk-package.inc
index 4d653706b1..0d15a37c35 100644
--- a/meta/recipes-core/meta/dummy-sdk-package.inc
+++ b/meta/recipes-core/meta/dummy-sdk-package.inc
@@ -17,6 +17,9 @@ ALLOW_EMPTY_${PN} = "1"
PR[vardeps] += "DUMMYPROVIDES"
+DUMMYPROVIDES_PACKAGES ??= ""
+DUMMYPROVIDES += "${@' '.join([multilib_pkg_extend(d, pkg) for pkg in d.getVar('DUMMYPROVIDES_PACKAGES').split()])}"
+
python populate_packages_prepend() {
p = d.getVar("PN")
d.appendVar("RPROVIDES_%s" % p, "${DUMMYPROVIDES}")
diff --git a/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb b/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb
index 6a8748acdf..cfa41c4ae6 100644
--- a/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb
+++ b/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb
@@ -1,6 +1,6 @@
DUMMYARCH = "buildtools-dummy-${SDKPKGSUFFIX}"
-DUMMYPROVIDES = "\
+DUMMYPROVIDES_PACKAGES = "\
nativesdk-perl \
nativesdk-libxml-parser-perl \
nativesdk-perl-module-bytes \
@@ -15,12 +15,18 @@ DUMMYPROVIDES = "\
nativesdk-perl-module-file-find \
nativesdk-perl-module-file-glob \
nativesdk-perl-module-file-path \
+ nativesdk-perl-module-file-spec \
nativesdk-perl-module-file-stat \
nativesdk-perl-module-getopt-long \
nativesdk-perl-module-io-file \
+ nativesdk-perl-module-overloading \
nativesdk-perl-module-posix \
nativesdk-perl-module-thread-queue \
nativesdk-perl-module-threads \
+ nativesdk-perl-module-warnings \
+"
+
+DUMMYPROVIDES = "\
/usr/bin/perl \
"
diff --git a/meta/recipes-core/meta/nativesdk-sdk-provides-dummy.bb b/meta/recipes-core/meta/nativesdk-sdk-provides-dummy.bb
index b891efa5ef..29f4dd3633 100644
--- a/meta/recipes-core/meta/nativesdk-sdk-provides-dummy.bb
+++ b/meta/recipes-core/meta/nativesdk-sdk-provides-dummy.bb
@@ -1,10 +1,13 @@
DUMMYARCH = "sdk-provides-dummy-${SDKPKGSUFFIX}"
+DUMMYPROVIDES_PACKAGES = "\
+ pkgconfig \
+"
+
# Add /bin/sh?
DUMMYPROVIDES = "\
/bin/bash \
/usr/bin/env \
- pkgconfig \
libGL.so()(64bit) \
libGL.so \
"
diff --git a/meta/recipes-core/meta/target-sdk-provides-dummy.bb b/meta/recipes-core/meta/target-sdk-provides-dummy.bb
index 87b8bfab9c..e3beeb796c 100644
--- a/meta/recipes-core/meta/target-sdk-provides-dummy.bb
+++ b/meta/recipes-core/meta/target-sdk-provides-dummy.bb
@@ -48,7 +48,6 @@ DUMMYPROVIDES_PACKAGES = "\
"
DUMMYPROVIDES = "\
- ${@' '.join([multilib_pkg_extend(d, pkg) for pkg in d.getVar('DUMMYPROVIDES_PACKAGES').split()])} \
/bin/sh \
/bin/bash \
/usr/bin/env \
diff --git a/meta/recipes-core/ncurses/ncurses.inc b/meta/recipes-core/ncurses/ncurses.inc
index 5f2cc35823..b7bf4c0d81 100644
--- a/meta/recipes-core/ncurses/ncurses.inc
+++ b/meta/recipes-core/ncurses/ncurses.inc
@@ -87,6 +87,7 @@ ncurses_configure() {
--disable-rpath-hack \
${EXCONFIG_ARGS} \
--with-manpage-format=normal \
+ --without-manpage-renames \
--disable-stripping \
"$@" || return 1
cd ..
diff --git a/meta/recipes-core/ncurses/ncurses_6.1+20190803.bb b/meta/recipes-core/ncurses/ncurses_6.1+20190803.bb
index e638a3737c..c3a89f1c4f 100644
--- a/meta/recipes-core/ncurses/ncurses_6.1+20190803.bb
+++ b/meta/recipes-core/ncurses/ncurses_6.1+20190803.bb
@@ -10,3 +10,5 @@ SRCREV = "3c9b2677c96c645496997321bf2fe465a5e7e21f"
S = "${WORKDIR}/git"
EXTRA_OECONF += "--with-abi-version=5 --cache-file=${B}/config.cache"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+(\+\d+)*)"
+
+CVE_VERSION = "6.1.${@d.getVar("PV").split('+')[1]}"
diff --git a/meta/recipes-core/systemd/systemd-boot_243.bb b/meta/recipes-core/systemd/systemd-boot_243.2.bb
index 515abc289b..515abc289b 100644
--- a/meta/recipes-core/systemd/systemd-boot_243.bb
+++ b/meta/recipes-core/systemd/systemd-boot_243.2.bb
diff --git a/meta/recipes-core/systemd/systemd-conf_243.bb b/meta/recipes-core/systemd/systemd-conf_243.2.bb
index d9ec023bfd..d9ec023bfd 100644
--- a/meta/recipes-core/systemd/systemd-conf_243.bb
+++ b/meta/recipes-core/systemd/systemd-conf_243.2.bb
diff --git a/meta/recipes-core/systemd/systemd-systemctl/systemctl b/meta/recipes-core/systemd/systemd-systemctl/systemctl
index ebac863739..990de1ab39 100755
--- a/meta/recipes-core/systemd/systemd-systemctl/systemctl
+++ b/meta/recipes-core/systemd/systemd-systemctl/systemctl
@@ -172,7 +172,7 @@ class SystemdUnit():
def _path_for_unit(self, unit):
for location in locations:
path = self.root / location / "system" / unit
- if path.exists():
+ if path.exists() or path.is_symlink():
return path
raise SystemdUnitNotFoundError(self.root, unit)
diff --git a/meta/recipes-core/systemd/systemd.inc b/meta/recipes-core/systemd/systemd.inc
index 7f3a59c208..18f17d28ac 100644
--- a/meta/recipes-core/systemd/systemd.inc
+++ b/meta/recipes-core/systemd/systemd.inc
@@ -14,10 +14,8 @@ LICENSE = "GPLv2 & LGPLv2.1"
LIC_FILES_CHKSUM = "file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \
file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c"
-SRCREV = "efb536d0cbe2e58f80e501d19999928c75e08f6a"
+SRCREV = "fab6f010ac6c3bc93a10868de722d7c8c3622eb9"
SRCBRANCH = "v243-stable"
SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=git;branch=${SRCBRANCH}"
S = "${WORKDIR}/git"
-
-PV_append = "+${SRCPV}"
diff --git a/meta/recipes-core/systemd/systemd/0001-Merge-branch-polkit-ref-count.patch b/meta/recipes-core/systemd/systemd/0001-Merge-branch-polkit-ref-count.patch
new file mode 100644
index 0000000000..e684ab8755
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0001-Merge-branch-polkit-ref-count.patch
@@ -0,0 +1,520 @@
+From 0062d795bf29301ae054e1826a7189198a2565c4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Tue, 14 Apr 2020 09:06:53 +0000
+Subject: [PATCH] Merge branch 'polkit-ref-count'
+
+Upsteam-Status: Backport [https://github.com/systemd/systemd/commit/ea0d0ede03c6f18dbc5036c5e9cccf97e415ccc2]
+CVE: CVE-2020-1712
+
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ TODO | 2 +-
+ man/rules/meson.build | 1 +
+ man/sd_bus_enqueue_for_read.xml | 88 ++++++++++++++++
+ src/libsystemd/libsystemd.sym | 1 +
+ src/libsystemd/sd-bus/sd-bus.c | 24 +++++
+ src/shared/bus-util.c | 179 +++++++++++++++++++++-----------
+ src/systemd/sd-bus.h | 1 +
+ 7 files changed, 235 insertions(+), 61 deletions(-)
+ create mode 100644 man/sd_bus_enqueue_for_read.xml
+
+diff --git a/TODO b/TODO
+index c5b5b86057..5c5ea1f568 100644
+--- a/TODO
++++ b/TODO
+@@ -184,7 +184,7 @@ Features:
+
+ * the a-posteriori stopping of units bound to units that disappeared logic
+ should be reworked: there should be a queue of units, and we should only
+- enqeue stop jobs from a defer event that processes queue instead of
++ enqueue stop jobs from a defer event that processes queue instead of
+ right-away when we find a unit that is bound to one that doesn't exist
+ anymore. (similar to how the stop-unneeded queue has been reworked the same
+ way)
+diff --git a/man/rules/meson.build b/man/rules/meson.build
+index 3b63311d7b..e80ed98c34 100644
+--- a/man/rules/meson.build
++++ b/man/rules/meson.build
+@@ -192,6 +192,7 @@ manpages = [
+ 'sd_bus_open_user_with_description',
+ 'sd_bus_open_with_description'],
+ ''],
++ ['sd_bus_enqueue_for_read', '3', [], ''],
+ ['sd_bus_error',
+ '3',
+ ['SD_BUS_ERROR_MAKE_CONST',
+diff --git a/man/sd_bus_enqueue_for_read.xml b/man/sd_bus_enqueue_for_read.xml
+new file mode 100644
+index 0000000000..3318a3031b
+--- /dev/null
++++ b/man/sd_bus_enqueue_for_read.xml
+@@ -0,0 +1,88 @@
++<?xml version='1.0'?>
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
++ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
++<!-- SPDX-License-Identifier: LGPL-2.1+ -->
++
++<refentry id="sd_bus_enqueue_for_read"
++ xmlns:xi="http://www.w3.org/2001/XInclude">
++
++ <refentryinfo>
++ <title>sd_bus_enqueue_for_read</title>
++ <productname>systemd</productname>
++ </refentryinfo>
++
++ <refmeta>
++ <refentrytitle>sd_bus_enqueue_for_read</refentrytitle>
++ <manvolnum>3</manvolnum>
++ </refmeta>
++
++ <refnamediv>
++ <refname>sd_bus_enqueue_for_read</refname>
++
++ <refpurpose>Re-enqueue a bus message on a bus connection, for reading.</refpurpose>
++ </refnamediv>
++
++ <refsynopsisdiv>
++ <funcsynopsis>
++ <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
++
++ <funcprototype>
++ <funcdef>int <function>sd_bus_enqueue_for_read</function></funcdef>
++ <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
++ <paramdef>sd_bus_message *<parameter>message</parameter></paramdef>
++ </funcprototype>
++
++ </funcsynopsis>
++ </refsynopsisdiv>
++
++ <refsect1>
++ <title>Description</title>
++
++ <para><function>sd_bus_enqueue_for_read()</function> may be used to re-enqueue an incoming bus message on
++ the local read queue, so that it is processed and dispatched locally again, similar to how an incoming
++ message from the peer is processed. Takes a bus connection object and the message to enqueue. A reference
++ is taken of the message and the caller's reference thus remains in possession of the caller. The message
++ is enqueued at the end of the queue, thus will be dispatched after all other already queued messages are
++ dispatched.</para>
++
++ <para>This call is primarily useful for dealing with incoming method calls that may be processed only
++ after an additional asynchronous operation completes. One example are PolicyKit authorization requests
++ that are determined to be necessary to authorize a newly incoming method call: when the PolicyKit response
++ is received the original method call may be re-enqueued to process it again, this time with the
++ authorization result known.</para>
++ </refsect1>
++
++ <refsect1>
++ <title>Return Value</title>
++
++ <para>On success, this function return 0 or a positive integer. On failure, it returns a negative errno-style
++ error code.</para>
++
++ <refsect2>
++ <title>Errors</title>
++
++ <para>Returned errors may indicate the following problems:</para>
++
++ <variablelist>
++ <varlistentry>
++ <term><constant>-ECHILD</constant></term>
++
++ <listitem><para>The bus connection has been created in a different process.</para></listitem>
++ </varlistentry>
++ </variablelist>
++ </refsect2>
++ </refsect1>
++
++ <xi:include href="libsystemd-pkgconfig.xml" />
++
++ <refsect1>
++ <title>See Also</title>
++
++ <para>
++ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>sd_bus_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
++ </para>
++ </refsect1>
++
++</refentry>
+diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym
+index 5ec42e0f1f..c40f1b7d1a 100644
+--- a/src/libsystemd/libsystemd.sym
++++ b/src/libsystemd/libsystemd.sym
+@@ -679,6 +679,7 @@ global:
+
+ LIBSYSTEMD_243 {
+ global:
++ sd_bus_enqueue_for_read;
+ sd_bus_object_vtable_format;
+ sd_event_source_disable_unref;
+ } LIBSYSTEMD_241;
+diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
+index 026ac8cb94..07bc145f37 100644
+--- a/src/libsystemd/sd-bus/sd-bus.c
++++ b/src/libsystemd/sd-bus/sd-bus.c
+@@ -4194,3 +4194,27 @@ _public_ int sd_bus_get_close_on_exit(sd_bus *bus) {
+
+ return bus->close_on_exit;
+ }
++
++_public_ int sd_bus_enqueue_for_read(sd_bus *bus, sd_bus_message *m) {
++ int r;
++
++ assert_return(bus, -EINVAL);
++ assert_return(bus = bus_resolve(bus), -ENOPKG);
++ assert_return(m, -EINVAL);
++ assert_return(m->sealed, -EINVAL);
++ assert_return(!bus_pid_changed(bus), -ECHILD);
++
++ if (!BUS_IS_OPEN(bus->state))
++ return -ENOTCONN;
++
++ /* Re-enqueue a message for reading. This is primarily useful for PolicyKit-style authentication,
++ * where we accept a message, then determine we need to interactively authenticate the user, and then
++ * we want to process the message again. */
++
++ r = bus_rqueue_make_room(bus);
++ if (r < 0)
++ return r;
++
++ bus->rqueue[bus->rqueue_size++] = bus_message_ref_queued(m, bus);
++ return 0;
++}
+diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
+index e9b0b8a99d..88cad9cd0a 100644
+--- a/src/shared/bus-util.c
++++ b/src/shared/bus-util.c
+@@ -212,6 +212,34 @@ static int check_good_user(sd_bus_message *m, uid_t good_user) {
+ return sender_uid == good_user;
+ }
+
++#if ENABLE_POLKIT
++static int bus_message_append_strv_key_value(
++ sd_bus_message *m,
++ const char **l) {
++
++ const char **k, **v;
++ int r;
++
++ assert(m);
++
++ r = sd_bus_message_open_container(m, 'a', "{ss}");
++ if (r < 0)
++ return r;
++
++ STRV_FOREACH_PAIR(k, v, l) {
++ r = sd_bus_message_append(m, "{ss}", *k, *v);
++ if (r < 0)
++ return r;
++ }
++
++ r = sd_bus_message_close_container(m);
++ if (r < 0)
++ return r;
++
++ return r;
++}
++#endif
++
+ int bus_test_polkit(
+ sd_bus_message *call,
+ int capability,
+@@ -219,7 +247,7 @@ int bus_test_polkit(
+ const char **details,
+ uid_t good_user,
+ bool *_challenge,
+- sd_bus_error *e) {
++ sd_bus_error *ret_error) {
+
+ int r;
+
+@@ -242,7 +270,7 @@ int bus_test_polkit(
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message *request = NULL;
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+ int authorized = false, challenge = false;
+- const char *sender, **k, **v;
++ const char *sender;
+
+ sender = sd_bus_message_get_sender(call);
+ if (!sender)
+@@ -266,17 +294,7 @@ int bus_test_polkit(
+ if (r < 0)
+ return r;
+
+- r = sd_bus_message_open_container(request, 'a', "{ss}");
+- if (r < 0)
+- return r;
+-
+- STRV_FOREACH_PAIR(k, v, details) {
+- r = sd_bus_message_append(request, "{ss}", *k, *v);
+- if (r < 0)
+- return r;
+- }
+-
+- r = sd_bus_message_close_container(request);
++ r = bus_message_append_strv_key_value(request, details);
+ if (r < 0)
+ return r;
+
+@@ -284,11 +302,11 @@ int bus_test_polkit(
+ if (r < 0)
+ return r;
+
+- r = sd_bus_call(call->bus, request, 0, e, &reply);
++ r = sd_bus_call(call->bus, request, 0, ret_error, &reply);
+ if (r < 0) {
+ /* Treat no PK available as access denied */
+- if (sd_bus_error_has_name(e, SD_BUS_ERROR_SERVICE_UNKNOWN)) {
+- sd_bus_error_free(e);
++ if (sd_bus_error_has_name(ret_error, SD_BUS_ERROR_SERVICE_UNKNOWN)) {
++ sd_bus_error_free(ret_error);
+ return -EACCES;
+ }
+
+@@ -319,15 +337,17 @@ int bus_test_polkit(
+ #if ENABLE_POLKIT
+
+ typedef struct AsyncPolkitQuery {
++ char *action;
++ char **details;
++
+ sd_bus_message *request, *reply;
+- sd_bus_message_handler_t callback;
+- void *userdata;
+ sd_bus_slot *slot;
++
+ Hashmap *registry;
++ sd_event_source *defer_event_source;
+ } AsyncPolkitQuery;
+
+ static void async_polkit_query_free(AsyncPolkitQuery *q) {
+-
+ if (!q)
+ return;
+
+@@ -339,9 +359,25 @@ static void async_polkit_query_free(AsyncPolkitQuery *q) {
+ sd_bus_message_unref(q->request);
+ sd_bus_message_unref(q->reply);
+
++ free(q->action);
++ strv_free(q->details);
++
++ sd_event_source_disable_unref(q->defer_event_source);
+ free(q);
+ }
+
++static int async_polkit_defer(sd_event_source *s, void *userdata) {
++ AsyncPolkitQuery *q = userdata;
++
++ assert(s);
++
++ /* This is called as idle event source after we processed the async polkit reply, hopefully after the
++ * method call we re-enqueued has been properly processed. */
++
++ async_polkit_query_free(q);
++ return 0;
++}
++
+ static int async_polkit_callback(sd_bus_message *reply, void *userdata, sd_bus_error *error) {
+ _cleanup_(sd_bus_error_free) sd_bus_error error_buffer = SD_BUS_ERROR_NULL;
+ AsyncPolkitQuery *q = userdata;
+@@ -350,21 +386,46 @@ static int async_polkit_callback(sd_bus_message *reply, void *userdata, sd_bus_e
+ assert(reply);
+ assert(q);
+
++ assert(q->slot);
+ q->slot = sd_bus_slot_unref(q->slot);
++
++ assert(!q->reply);
+ q->reply = sd_bus_message_ref(reply);
+
++ /* Now, let's dispatch the original message a second time be re-enqueing. This will then traverse the
++ * whole message processing again, and thus re-validating and re-retrieving the "userdata" field
++ * again.
++ *
++ * We install an idle event loop event to clean-up the PolicyKit request data when we are idle again,
++ * i.e. after the second time the message is processed is complete. */
++
++ assert(!q->defer_event_source);
++ r = sd_event_add_defer(sd_bus_get_event(sd_bus_message_get_bus(reply)), &q->defer_event_source, async_polkit_defer, q);
++ if (r < 0)
++ goto fail;
++
++ r = sd_event_source_set_priority(q->defer_event_source, SD_EVENT_PRIORITY_IDLE);
++ if (r < 0)
++ goto fail;
++
++ r = sd_event_source_set_enabled(q->defer_event_source, SD_EVENT_ONESHOT);
++ if (r < 0)
++ goto fail;
++
+ r = sd_bus_message_rewind(q->request, true);
+- if (r < 0) {
+- r = sd_bus_reply_method_errno(q->request, r, NULL);
+- goto finish;
+- }
++ if (r < 0)
++ goto fail;
+
+- r = q->callback(q->request, q->userdata, &error_buffer);
+- r = bus_maybe_reply_error(q->request, r, &error_buffer);
++ r = sd_bus_enqueue_for_read(sd_bus_message_get_bus(q->request), q->request);
++ if (r < 0)
++ goto fail;
+
+-finish:
+- async_polkit_query_free(q);
++ return 1;
+
++fail:
++ log_debug_errno(r, "Processing asynchronous PolicyKit reply failed, ignoring: %m");
++ (void) sd_bus_reply_method_errno(q->request, r, NULL);
++ async_polkit_query_free(q);
+ return r;
+ }
+
+@@ -378,16 +439,14 @@ int bus_verify_polkit_async(
+ bool interactive,
+ uid_t good_user,
+ Hashmap **registry,
+- sd_bus_error *error) {
++ sd_bus_error *ret_error) {
+
+ #if ENABLE_POLKIT
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message *pk = NULL;
+ AsyncPolkitQuery *q;
+- const char *sender, **k, **v;
+- sd_bus_message_handler_t callback;
+- void *userdata;
+ int c;
+ #endif
++ const char *sender;
+ int r;
+
+ assert(call);
+@@ -403,11 +462,17 @@ int bus_verify_polkit_async(
+ if (q) {
+ int authorized, challenge;
+
+- /* This is the second invocation of this function, and
+- * there's already a response from polkit, let's
+- * process it */
++ /* This is the second invocation of this function, and there's already a response from
++ * polkit, let's process it */
+ assert(q->reply);
+
++ /* If the operation we want to authenticate changed between the first and the second time,
++ * let's not use this authentication, it might be out of date as the object and context we
++ * operate on might have changed. */
++ if (!streq(q->action, action) ||
++ !strv_equal(q->details, (char**) details))
++ return -ESTALE;
++
+ if (sd_bus_message_is_method_error(q->reply, NULL)) {
+ const sd_bus_error *e;
+
+@@ -418,7 +483,7 @@ int bus_verify_polkit_async(
+ return -EACCES;
+
+ /* Copy error from polkit reply */
+- sd_bus_error_copy(error, e);
++ sd_bus_error_copy(ret_error, e);
+ return -sd_bus_error_get_errno(e);
+ }
+
+@@ -433,7 +498,7 @@ int bus_verify_polkit_async(
+ return 1;
+
+ if (challenge)
+- return sd_bus_error_set(error, SD_BUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED, "Interactive authentication required.");
++ return sd_bus_error_set(ret_error, SD_BUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED, "Interactive authentication required.");
+
+ return -EACCES;
+ }
+@@ -445,20 +510,12 @@ int bus_verify_polkit_async(
+ else if (r > 0)
+ return 1;
+
+-#if ENABLE_POLKIT
+- if (sd_bus_get_current_message(call->bus) != call)
+- return -EINVAL;
+-
+- callback = sd_bus_get_current_handler(call->bus);
+- if (!callback)
+- return -EINVAL;
+-
+- userdata = sd_bus_get_current_userdata(call->bus);
+
+ sender = sd_bus_message_get_sender(call);
+ if (!sender)
+ return -EBADMSG;
+
++#if ENABLE_POLKIT
+ c = sd_bus_message_get_allow_interactive_authorization(call);
+ if (c < 0)
+ return c;
+@@ -487,17 +544,7 @@ int bus_verify_polkit_async(
+ if (r < 0)
+ return r;
+
+- r = sd_bus_message_open_container(pk, 'a', "{ss}");
+- if (r < 0)
+- return r;
+-
+- STRV_FOREACH_PAIR(k, v, details) {
+- r = sd_bus_message_append(pk, "{ss}", *k, *v);
+- if (r < 0)
+- return r;
+- }
+-
+- r = sd_bus_message_close_container(pk);
++ r = bus_message_append_strv_key_value(pk, details);
+ if (r < 0)
+ return r;
+
+@@ -505,13 +552,25 @@ int bus_verify_polkit_async(
+ if (r < 0)
+ return r;
+
+- q = new0(AsyncPolkitQuery, 1);
++ q = new(AsyncPolkitQuery, 1);
+ if (!q)
+ return -ENOMEM;
+
+- q->request = sd_bus_message_ref(call);
+- q->callback = callback;
+- q->userdata = userdata;
++ *q = (AsyncPolkitQuery) {
++ .request = sd_bus_message_ref(call),
++ };
++
++ q->action = strdup(action);
++ if (!q->action) {
++ async_polkit_query_free(q);
++ return -ENOMEM;
++ }
++
++ q->details = strv_copy((char**) details);
++ if (!q->details) {
++ async_polkit_query_free(q);
++ return -ENOMEM;
++ }
+
+ r = hashmap_put(*registry, call, q);
+ if (r < 0) {
+diff --git a/src/systemd/sd-bus.h b/src/systemd/sd-bus.h
+index 84ceb62dc7..0e5c761f83 100644
+--- a/src/systemd/sd-bus.h
++++ b/src/systemd/sd-bus.h
+@@ -201,6 +201,7 @@ int sd_bus_process(sd_bus *bus, sd_bus_message **r);
+ int sd_bus_process_priority(sd_bus *bus, int64_t max_priority, sd_bus_message **r);
+ int sd_bus_wait(sd_bus *bus, uint64_t timeout_usec);
+ int sd_bus_flush(sd_bus *bus);
++int sd_bus_enqueue_for_read(sd_bus *bus, sd_bus_message *m);
+
+ sd_bus_slot* sd_bus_get_current_slot(sd_bus *bus);
+ sd_bus_message* sd_bus_get_current_message(sd_bus *bus);
+--
+2.23.0
+
diff --git a/meta/recipes-core/systemd/systemd/CVE-2020-13776.patch b/meta/recipes-core/systemd/systemd/CVE-2020-13776.patch
new file mode 100644
index 0000000000..7b5e3e7f7a
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/CVE-2020-13776.patch
@@ -0,0 +1,96 @@
+From 156a5fd297b61bce31630d7a52c15614bf784843 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Sun, 31 May 2020 18:21:09 +0200
+Subject: [PATCH 1/1] basic/user-util: always use base 10 for user/group
+ numbers
+
+We would parse numbers with base prefixes as user identifiers. For example,
+"0x2b3bfa0" would be interpreted as UID==45334432 and "01750" would be
+interpreted as UID==1000. This parsing was used also in cases where either a
+user/group name or number may be specified. This means that names like
+0x2b3bfa0 would be ambiguous: they are a valid user name according to our
+documented relaxed rules, but they would also be parsed as numeric uids.
+
+This behaviour is definitely not expected by users, since tools generally only
+accept decimal numbers (e.g. id, getent passwd), while other tools only accept
+user names and thus will interpret such strings as user names without even
+attempting to convert them to numbers (su, ssh). So let's follow suit and only
+accept numbers in decimal notation. Effectively this means that we will reject
+such strings as a username/uid/groupname/gid where strict mode is used, and try
+to look up a user/group with such a name in relaxed mode.
+
+Since the function changed is fairly low-level and fairly widely used, this
+affects multiple tools: loginctl show-user/enable-linger/disable-linger foo',
+the third argument in sysusers.d, fourth and fifth arguments in tmpfiles.d,
+etc.
+
+Fixes #15985.
+---
+ src/basic/user-util.c | 2 +-
+ src/test/test-user-util.c | 10 ++++++++++
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+
+--- end of commit 156a5fd297b61bce31630d7a52c15614bf784843 ---
+
+
+Add definition of safe_atou32_full() from commit b934ac3d6e7dcad114776ef30ee9098693e7ab7e
+
+CVE: CVE-2020-13776
+
+Upstream-Status: Backport [https://github.com/systemd/systemd.git]
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+
+
+--- git.orig/src/basic/user-util.c
++++ git/src/basic/user-util.c
+@@ -49,7 +49,7 @@ int parse_uid(const char *s, uid_t *ret)
+ assert(s);
+
+ assert_cc(sizeof(uid_t) == sizeof(uint32_t));
+- r = safe_atou32(s, &uid);
++ r = safe_atou32_full(s, 10, &uid);
+ if (r < 0)
+ return r;
+
+--- git.orig/src/test/test-user-util.c
++++ git/src/test/test-user-util.c
+@@ -48,9 +48,19 @@ static void test_parse_uid(void) {
+
+ r = parse_uid("65535", &uid);
+ assert_se(r == -ENXIO);
++ assert_se(uid == 100);
++
++ r = parse_uid("0x1234", &uid);
++ assert_se(r == -EINVAL);
++ assert_se(uid == 100);
++
++ r = parse_uid("01234", &uid);
++ assert_se(r == 0);
++ assert_se(uid == 1234);
+
+ r = parse_uid("asdsdas", &uid);
+ assert_se(r == -EINVAL);
++ assert_se(uid == 1234);
+ }
+
+ static void test_uid_ptr(void) {
+--- git.orig/src/basic/parse-util.h
++++ git/src/basic/parse-util.h
+@@ -45,9 +45,13 @@ static inline int safe_atoux16(const cha
+
+ int safe_atoi16(const char *s, int16_t *ret);
+
+-static inline int safe_atou32(const char *s, uint32_t *ret_u) {
++static inline int safe_atou32_full(const char *s, unsigned base, uint32_t *ret_u) {
+ assert_cc(sizeof(uint32_t) == sizeof(unsigned));
+- return safe_atou(s, (unsigned*) ret_u);
++ return safe_atou_full(s, base, (unsigned*) ret_u);
++}
++
++static inline int safe_atou32(const char *s, uint32_t *ret_u) {
++ return safe_atou32_full(s, 0, (unsigned*) ret_u);
+ }
+
+ static inline int safe_atoi32(const char *s, int32_t *ret_i) {
diff --git a/meta/recipes-core/systemd/systemd_243.bb b/meta/recipes-core/systemd/systemd_243.2.bb
index 6e7f95693b..905348176c 100644
--- a/meta/recipes-core/systemd/systemd_243.bb
+++ b/meta/recipes-core/systemd/systemd_243.2.bb
@@ -24,6 +24,8 @@ SRC_URI += "file://touchscreen.rules \
file://0005-rules-watch-metadata-changes-in-ide-devices.patch \
file://0001-unit-file.c-consider-symlink-on-filesystems-like-NFS.patch \
file://99-default.preset \
+ file://0001-Merge-branch-polkit-ref-count.patch \
+ file://CVE-2020-13776.patch \
"
# patches needed by musl
diff --git a/meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb b/meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb
index bfc1283f73..39f612be1f 100644
--- a/meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb
+++ b/meta/recipes-core/sysvinit/sysvinit_2.88dsf.bb
@@ -31,6 +31,7 @@ B = "${S}/src"
inherit update-alternatives distro_features_check
DEPENDS_append = " update-rc.d-native base-passwd virtual/crypt"
+do_package_setscene[depends] = "${MLPREFIX}base-passwd:do_populate_sysroot"
REQUIRED_DISTRO_FEATURES = "sysvinit"
diff --git a/meta/recipes-core/udev/eudev_3.2.8.bb b/meta/recipes-core/udev/eudev_3.2.8.bb
index eecf64e550..aed411827c 100644
--- a/meta/recipes-core/udev/eudev_3.2.8.bb
+++ b/meta/recipes-core/udev/eudev_3.2.8.bb
@@ -8,7 +8,7 @@ DEPENDS = "glib-2.0 glib-2.0-native gperf-native kmod libxslt-native util-linux"
PROVIDES = "udev"
-SRC_URI = "http://dev.gentoo.org/~blueness/${BPN}/${BP}.tar.gz \
+SRC_URI = "https://dev.gentoo.org/~blueness/${BPN}/${BP}.tar.gz \
file://0014-Revert-rules-remove-firmware-loading-rules.patch \
file://Revert-udev-remove-userspace-firmware-loading-suppor.patch \
file://devfs-udev.rules \
diff --git a/meta/recipes-devtools/apt/files/apt.conf b/meta/recipes-devtools/apt/files/apt.conf
index 03351356bc..c95a5b07af 100644
--- a/meta/recipes-devtools/apt/files/apt.conf
+++ b/meta/recipes-devtools/apt/files/apt.conf
@@ -39,4 +39,4 @@ APT
};
};
-DPkg::Options {"--root=#ROOTFS#";"--admindir=#ROOTFS#/var/lib/dpkg";"--force-all";"--no-debsig"};
+DPkg::Options {"--root=#ROOTFS#";"--admindir=#ROOTFS#/var/lib/dpkg";"--force-all";"--no-force-overwrite";"--no-debsig"};
diff --git a/meta/recipes-devtools/binutils/binutils-2.32.inc b/meta/recipes-devtools/binutils/binutils-2.32.inc
index 19baf8a883..349c3e1154 100644
--- a/meta/recipes-devtools/binutils/binutils-2.32.inc
+++ b/meta/recipes-devtools/binutils/binutils-2.32.inc
@@ -49,6 +49,8 @@ SRC_URI = "\
file://CVE-2019-12972.patch \
file://CVE-2019-14250.patch \
file://CVE-2019-14444.patch \
+ file://CVE-2019-17450.patch \
+ file://CVE-2019-17451.patch \
"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-devtools/binutils/binutils/CVE-2019-17450.patch b/meta/recipes-devtools/binutils/binutils/CVE-2019-17450.patch
new file mode 100644
index 0000000000..a6ce0b9a8a
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/CVE-2019-17450.patch
@@ -0,0 +1,99 @@
+From 09dd135df9ebc7a4b640537e23e26a03a288a789 Mon Sep 17 00:00:00 2001
+From: Alan Modra <amodra@gmail.com>
+Date: Wed, 9 Oct 2019 00:07:29 +1030
+Subject: [PATCH] PR25078, stack overflow in function find_abstract_instance
+
+Selectively backporting fix for bfd/dwarf2.c, but not the ChangeLog
+file. There are newer versions of binutils, but none of them contain the
+commit fixing CVE-2019-17450, so backport it to master and zeus.
+
+Upstream-Status: Backport [https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=063c511bd79]
+CVE: CVE-2019-17450
+Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
+
+ PR 25078
+ * dwarf2.c (find_abstract_instance): Delete orig_info_ptr, add
+ recur_count. Error on recur_count reaching 100 rather than
+ info_ptr matching orig_info_ptr. Adjust calls.
+
+---
+ bfd/dwarf2.c | 35 +++++++++++++++++------------------
+ 1 file changed, 17 insertions(+), 18 deletions(-)
+
+diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
+index 0b4e485582..20ec9e2e56 100644
+--- a/bfd/dwarf2.c
++++ b/bfd/dwarf2.c
+@@ -2803,13 +2803,13 @@ lookup_symbol_in_variable_table (struct comp_unit *unit,
+ }
+
+ static bfd_boolean
+-find_abstract_instance (struct comp_unit * unit,
+- bfd_byte * orig_info_ptr,
+- struct attribute * attr_ptr,
+- const char ** pname,
+- bfd_boolean * is_linkage,
+- char ** filename_ptr,
+- int * linenumber_ptr)
++find_abstract_instance (struct comp_unit *unit,
++ struct attribute *attr_ptr,
++ unsigned int recur_count,
++ const char **pname,
++ bfd_boolean *is_linkage,
++ char **filename_ptr,
++ int *linenumber_ptr)
+ {
+ bfd *abfd = unit->abfd;
+ bfd_byte *info_ptr;
+@@ -2820,6 +2820,14 @@ find_abstract_instance (struct comp_unit * unit,
+ struct attribute attr;
+ const char *name = NULL;
+
++ if (recur_count == 100)
++ {
++ _bfd_error_handler
++ (_("DWARF error: abstract instance recursion detected"));
++ bfd_set_error (bfd_error_bad_value);
++ return FALSE;
++ }
++
+ /* DW_FORM_ref_addr can reference an entry in a different CU. It
+ is an offset from the .debug_info section, not the current CU. */
+ if (attr_ptr->form == DW_FORM_ref_addr)
+@@ -2939,15 +2947,6 @@ find_abstract_instance (struct comp_unit * unit,
+ info_ptr, info_ptr_end);
+ if (info_ptr == NULL)
+ break;
+- /* It doesn't ever make sense for DW_AT_specification to
+- refer to the same DIE. Stop simple recursion. */
+- if (info_ptr == orig_info_ptr)
+- {
+- _bfd_error_handler
+- (_("DWARF error: abstract instance recursion detected"));
+- bfd_set_error (bfd_error_bad_value);
+- return FALSE;
+- }
+ switch (attr.name)
+ {
+ case DW_AT_name:
+@@ -2961,7 +2960,7 @@ find_abstract_instance (struct comp_unit * unit,
+ }
+ break;
+ case DW_AT_specification:
+- if (!find_abstract_instance (unit, info_ptr, &attr,
++ if (!find_abstract_instance (unit, &attr, recur_count + 1,
+ &name, is_linkage,
+ filename_ptr, linenumber_ptr))
+ return FALSE;
+@@ -3175,7 +3174,7 @@ scan_unit_for_symbols (struct comp_unit *unit)
+
+ case DW_AT_abstract_origin:
+ case DW_AT_specification:
+- if (!find_abstract_instance (unit, info_ptr, &attr,
++ if (!find_abstract_instance (unit, &attr, 0,
+ &func->name,
+ &func->is_linkage,
+ &func->file,
+--
+2.23.0
+
diff --git a/meta/recipes-devtools/binutils/binutils/CVE-2019-17451.patch b/meta/recipes-devtools/binutils/binutils/CVE-2019-17451.patch
new file mode 100644
index 0000000000..b36a532668
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/CVE-2019-17451.patch
@@ -0,0 +1,51 @@
+From 0192438051a7e781585647d5581a2a6f62fda362 Mon Sep 17 00:00:00 2001
+From: Alan Modra <amodra@gmail.com>
+Date: Wed, 9 Oct 2019 10:47:13 +1030
+Subject: [PATCH] PR25070, SEGV in function _bfd_dwarf2_find_nearest_line
+
+Selectively backporting fix for bfd/dwarf2.c, but not the ChangeLog
+file. There are newer versions of binutils, but none of them contain the
+commit fixing CVE-2019-17451, so backport it to master and zeus.
+
+Upstream-Status: Backport
+[https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=336bfbeb1848]
+CVE: CVE-2019-17451
+Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
+
+
+Evil testcase with two debug info sections, with sizes of 2aaaabac4ec1
+and ffffd5555453b140 result in a total size of 1. Reading the first
+section of course overflows the buffer and tramples on other memory.
+
+ PR 25070
+ * dwarf2.c (_bfd_dwarf2_slurp_debug_info): Catch overflow of
+ total_size calculation.
+---
+ bfd/dwarf2.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
+index 0b4e485582..a91597b1d0 100644
+--- a/bfd/dwarf2.c
++++ b/bfd/dwarf2.c
+@@ -4426,7 +4426,16 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
+ for (total_size = 0;
+ msec;
+ msec = find_debug_info (debug_bfd, debug_sections, msec))
+- total_size += msec->size;
++ {
++ /* Catch PR25070 testcase overflowing size calculation here. */
++ if (total_size + msec->size < total_size
++ || total_size + msec->size < msec->size)
++ {
++ bfd_set_error (bfd_error_no_memory);
++ return FALSE;
++ }
++ total_size += msec->size;
++ }
+
+ stash->info_ptr_memory = (bfd_byte *) bfd_malloc (total_size);
+ if (stash->info_ptr_memory == NULL)
+--
+2.23.0
+
diff --git a/meta/recipes-devtools/binutils/binutils/nativesdk-relocation.patch b/meta/recipes-devtools/binutils/binutils/nativesdk-relocation.patch
new file mode 100644
index 0000000000..408f7d18b7
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/nativesdk-relocation.patch
@@ -0,0 +1,80 @@
+We need binutils to look at our ld.so.conf file within the SDK to ensure
+we search the SDK's libdirs as well as those from the host system.
+
+We therefore pass in the directory to the code using a define, then add
+it to a section we relocate in a similar way to the way we relocate the
+gcc internal paths. This ensures that ld works correctly in our buildtools
+tarball.
+
+Standard sysroot relocation doesn't work since we're not in a sysroot,
+we want to use both the host system and SDK libs.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+2020/1/17
+Upstream-Status: Inappropriate [OE specific tweak]
+
+Index: git/ld/Makefile.am
+===================================================================
+--- git.orig/ld/Makefile.am
++++ git/ld/Makefile.am
+@@ -36,7 +36,8 @@ am__skipyacc =
+
+ ELF_CLFAGS=-DELF_LIST_OPTIONS=@elf_list_options@ \
+ -DELF_SHLIB_LIST_OPTIONS=@elf_shlib_list_options@ \
+- -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@
++ -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@ \
++ -DSYSCONFDIR="\"$(sysconfdir)\""
+ WARN_CFLAGS = @WARN_CFLAGS@
+ NO_WERROR = @NO_WERROR@
+ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS)
+Index: git/ld/Makefile.in
+===================================================================
+--- git.orig/ld/Makefile.in
++++ git/ld/Makefile.in
+@@ -546,7 +546,8 @@ am__skiplex =
+ am__skipyacc =
+ ELF_CLFAGS = -DELF_LIST_OPTIONS=@elf_list_options@ \
+ -DELF_SHLIB_LIST_OPTIONS=@elf_shlib_list_options@ \
+- -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@
++ -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@ \
++ -DSYSCONFDIR="\"$(sysconfdir)\""
+
+ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS)
+ @ENABLE_PLUGINS_FALSE@PLUGIN_C =
+Index: git/ld/emultempl/elf32.em
+===================================================================
+--- git.orig/ld/emultempl/elf32.em
++++ git/ld/emultempl/elf32.em
+@@ -1024,7 +1024,7 @@ gld${EMULATION_NAME}_check_ld_so_conf (c
+
+ info.path = NULL;
+ info.len = info.alloc = 0;
+- tmppath = concat (ld_sysroot, "${prefix}/etc/ld.so.conf",
++ tmppath = concat (ld_sysconfdir, "/ld.so.conf",
+ (const char *) NULL);
+ if (!gld${EMULATION_NAME}_parse_ld_so_conf (&info, tmppath))
+ {
+Index: git/ld/ldmain.c
+===================================================================
+--- git.orig/ld/ldmain.c
++++ git/ld/ldmain.c
+@@ -68,6 +68,7 @@ char *program_name;
+
+ /* The prefix for system library directories. */
+ const char *ld_sysroot;
++char ld_sysconfdir[4096] __attribute__ ((section (".gccrelocprefix"))) = SYSCONFDIR;
+
+ /* The canonical representation of ld_sysroot. */
+ char *ld_canon_sysroot;
+Index: git/ld/ldmain.h
+===================================================================
+--- git.orig/ld/ldmain.h
++++ git/ld/ldmain.h
+@@ -23,6 +23,7 @@
+
+ extern char *program_name;
+ extern const char *ld_sysroot;
++extern char ld_sysconfdir[4096];
+ extern char *ld_canon_sysroot;
+ extern int ld_canon_sysroot_len;
+ extern FILE *saved_script_handle;
diff --git a/meta/recipes-devtools/binutils/binutils_2.32.bb b/meta/recipes-devtools/binutils/binutils_2.32.bb
index 89315915c4..ecdab96658 100644
--- a/meta/recipes-devtools/binutils/binutils_2.32.bb
+++ b/meta/recipes-devtools/binutils/binutils_2.32.bb
@@ -51,5 +51,10 @@ do_install_class-native () {
PACKAGE_BEFORE_PN += "libbfd"
FILES_libbfd = "${libdir}/libbfd-*.so"
+SRC_URI_append_class-nativesdk = "file://nativesdk-relocation.patch"
+
+USE_ALTERNATIVES_FOR_class-nativesdk = ""
+FILES_${PN}_append_class-nativesdk = " ${bindir}"
+
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/dosfstools/dosfstools_4.1.bb b/meta/recipes-devtools/dosfstools/dosfstools_4.1.bb
index 69aa81af44..23b8836670 100644
--- a/meta/recipes-devtools/dosfstools/dosfstools_4.1.bb
+++ b/meta/recipes-devtools/dosfstools/dosfstools_4.1.bb
@@ -23,3 +23,6 @@ EXTRA_OECONF = "--without-udev --enable-compat-symlinks"
CFLAGS += "-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
BBCLASSEXTEND = "native"
+
+# Add codepage437 to avoid error from `dosfsck -l`
+RRECOMMENDS_${PN}_append_libc-glibc = " glibc-gconv-ibm437"
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-e2fsck-don-t-try-to-rehash-a-deleted-directory.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-e2fsck-don-t-try-to-rehash-a-deleted-directory.patch
new file mode 100644
index 0000000000..ba4e3a3c97
--- /dev/null
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/0001-e2fsck-don-t-try-to-rehash-a-deleted-directory.patch
@@ -0,0 +1,49 @@
+From 71ba13755337e19c9a826dfc874562a36e1b24d3 Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Thu, 19 Dec 2019 19:45:06 -0500
+Subject: [PATCH] e2fsck: don't try to rehash a deleted directory
+
+If directory has been deleted in pass1[bcd] processing, then we
+shouldn't try to rehash the directory in pass 3a when we try to
+rehash/reoptimize directories.
+
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/commit/?id=71ba13755337e19c9a826dfc874562a36e1b24d3]
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ e2fsck/pass1b.c | 4 ++++
+ e2fsck/rehash.c | 2 ++
+ 2 files changed, 6 insertions(+)
+
+diff --git a/e2fsck/pass1b.c b/e2fsck/pass1b.c
+index 5693b9cf..bca701ca 100644
+--- a/e2fsck/pass1b.c
++++ b/e2fsck/pass1b.c
+@@ -705,6 +705,10 @@ static void delete_file(e2fsck_t ctx, ext2_ino_t ino,
+ fix_problem(ctx, PR_1B_BLOCK_ITERATE, &pctx);
+ if (ctx->inode_bad_map)
+ ext2fs_unmark_inode_bitmap2(ctx->inode_bad_map, ino);
++ if (ctx->inode_reg_map)
++ ext2fs_unmark_inode_bitmap2(ctx->inode_reg_map, ino);
++ ext2fs_unmark_inode_bitmap2(ctx->inode_dir_map, ino);
++ ext2fs_unmark_inode_bitmap2(ctx->inode_used_map, ino);
+ ext2fs_inode_alloc_stats2(fs, ino, -1, LINUX_S_ISDIR(dp->inode.i_mode));
+ quota_data_sub(ctx->qctx, &dp->inode, ino,
+ pb.dup_blocks * fs->blocksize);
+diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c
+index 3dd1e941..2c908be0 100644
+--- a/e2fsck/rehash.c
++++ b/e2fsck/rehash.c
+@@ -1028,6 +1028,8 @@ void e2fsck_rehash_directories(e2fsck_t ctx)
+ if (!ext2fs_u32_list_iterate(iter, &ino))
+ break;
+ }
++ if (!ext2fs_test_inode_bitmap2(ctx->inode_dir_map, ino))
++ continue;
+
+ pctx.dir = ino;
+ if (first) {
+--
+2.24.1
+
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/CVE-2019-5094.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/CVE-2019-5094.patch
new file mode 100644
index 0000000000..56925cbd4b
--- /dev/null
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/CVE-2019-5094.patch
@@ -0,0 +1,217 @@
+From 8dbe7b475ec5e91ed767239f0e85880f416fc384 Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Sun, 1 Sep 2019 00:59:16 -0400
+Subject: libsupport: add checks to prevent buffer overrun bugs in quota code
+
+A maliciously corrupted file systems can trigger buffer overruns in
+the quota code used by e2fsck. To fix this, add sanity checks to the
+quota header fields as well as to block number references in the quota
+tree.
+
+Addresses: CVE-2019-5094
+Addresses: TALOS-2019-0887
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+
+
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/commit/?h=maint&id=8dbe7b475ec5e91ed767239f0e85880f416fc384]
+CVE: CVE-2019-5094
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ lib/support/mkquota.c | 1 +
+ lib/support/quotaio_tree.c | 71 ++++++++++++++++++++++++++++++----------------
+ lib/support/quotaio_v2.c | 28 ++++++++++++++++++
+ 3 files changed, 76 insertions(+), 24 deletions(-)
+
+diff --git a/lib/support/mkquota.c b/lib/support/mkquota.c
+index 0b9e7665..ddb53124 100644
+--- a/lib/support/mkquota.c
++++ b/lib/support/mkquota.c
+@@ -671,6 +671,7 @@ errcode_t quota_compare_and_update(quota_ctx_t qctx, enum quota_type qtype,
+ err = qh.qh_ops->scan_dquots(&qh, scan_dquots_callback, &scan_data);
+ if (err) {
+ log_debug("Error scanning dquots");
++ *usage_inconsistent = 1;
+ goto out_close_qh;
+ }
+
+diff --git a/lib/support/quotaio_tree.c b/lib/support/quotaio_tree.c
+index a7c2028c..6cc4fb5b 100644
+--- a/lib/support/quotaio_tree.c
++++ b/lib/support/quotaio_tree.c
+@@ -540,6 +540,17 @@ struct dquot *qtree_read_dquot(struct quota_handle *h, qid_t id)
+ return dquot;
+ }
+
++static int check_reference(struct quota_handle *h, unsigned int blk)
++{
++ if (blk >= h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks) {
++ log_err("Illegal reference (%u >= %u) in %s quota file",
++ blk, h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks,
++ quota_type2name(h->qh_type));
++ return -1;
++ }
++ return 0;
++}
++
+ /*
+ * Scan all dquots in file and call callback on each
+ */
+@@ -558,7 +569,7 @@ static int report_block(struct dquot *dquot, unsigned int blk, char *bitmap,
+ int entries, i;
+
+ if (!buf)
+- return 0;
++ return -1;
+
+ set_bit(bitmap, blk);
+ read_blk(dquot->dq_h, blk, buf);
+@@ -580,23 +591,12 @@ static int report_block(struct dquot *dquot, unsigned int blk, char *bitmap,
+ return entries;
+ }
+
+-static void check_reference(struct quota_handle *h, unsigned int blk)
+-{
+- if (blk >= h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks)
+- log_err("Illegal reference (%u >= %u) in %s quota file. "
+- "Quota file is probably corrupted.\n"
+- "Please run e2fsck (8) to fix it.",
+- blk,
+- h->qh_info.u.v2_mdqi.dqi_qtree.dqi_blocks,
+- quota_type2name(h->qh_type));
+-}
+-
+ static int report_tree(struct dquot *dquot, unsigned int blk, int depth,
+ char *bitmap,
+ int (*process_dquot) (struct dquot *, void *),
+ void *data)
+ {
+- int entries = 0, i;
++ int entries = 0, ret, i;
+ dqbuf_t buf = getdqbuf();
+ __le32 *ref = (__le32 *) buf;
+
+@@ -607,22 +607,40 @@ static int report_tree(struct dquot *dquot, unsigned int blk, int depth,
+ if (depth == QT_TREEDEPTH - 1) {
+ for (i = 0; i < QT_BLKSIZE >> 2; i++) {
+ blk = ext2fs_le32_to_cpu(ref[i]);
+- check_reference(dquot->dq_h, blk);
+- if (blk && !get_bit(bitmap, blk))
+- entries += report_block(dquot, blk, bitmap,
+- process_dquot, data);
++ if (check_reference(dquot->dq_h, blk)) {
++ entries = -1;
++ goto errout;
++ }
++ if (blk && !get_bit(bitmap, blk)) {
++ ret = report_block(dquot, blk, bitmap,
++ process_dquot, data);
++ if (ret < 0) {
++ entries = ret;
++ goto errout;
++ }
++ entries += ret;
++ }
+ }
+ } else {
+ for (i = 0; i < QT_BLKSIZE >> 2; i++) {
+ blk = ext2fs_le32_to_cpu(ref[i]);
+ if (blk) {
+- check_reference(dquot->dq_h, blk);
+- entries += report_tree(dquot, blk, depth + 1,
+- bitmap, process_dquot,
+- data);
++ if (check_reference(dquot->dq_h, blk)) {
++ entries = -1;
++ goto errout;
++ }
++ ret = report_tree(dquot, blk, depth + 1,
++ bitmap, process_dquot,
++ data);
++ if (ret < 0) {
++ entries = ret;
++ goto errout;
++ }
++ entries += ret;
+ }
+ }
+ }
++errout:
+ freedqbuf(buf);
+ return entries;
+ }
+@@ -642,6 +660,7 @@ int qtree_scan_dquots(struct quota_handle *h,
+ int (*process_dquot) (struct dquot *, void *),
+ void *data)
+ {
++ int ret;
+ char *bitmap;
+ struct v2_mem_dqinfo *v2info = &h->qh_info.u.v2_mdqi;
+ struct qtree_mem_dqinfo *info = &v2info->dqi_qtree;
+@@ -655,10 +674,14 @@ int qtree_scan_dquots(struct quota_handle *h,
+ ext2fs_free_mem(&dquot);
+ return -1;
+ }
+- v2info->dqi_used_entries = report_tree(dquot, QT_TREEOFF, 0, bitmap,
+- process_dquot, data);
++ ret = report_tree(dquot, QT_TREEOFF, 0, bitmap, process_dquot, data);
++ if (ret < 0)
++ goto errout;
++ v2info->dqi_used_entries = ret;
+ v2info->dqi_data_blocks = find_set_bits(bitmap, info->dqi_blocks);
++ ret = 0;
++errout:
+ ext2fs_free_mem(&bitmap);
+ ext2fs_free_mem(&dquot);
+- return 0;
++ return ret;
+ }
+diff --git a/lib/support/quotaio_v2.c b/lib/support/quotaio_v2.c
+index 38be2a34..73906676 100644
+--- a/lib/support/quotaio_v2.c
++++ b/lib/support/quotaio_v2.c
+@@ -175,6 +175,8 @@ static int v2_check_file(struct quota_handle *h, int type, int fmt)
+ static int v2_init_io(struct quota_handle *h)
+ {
+ struct v2_disk_dqinfo ddqinfo;
++ struct v2_mem_dqinfo *info;
++ __u64 filesize;
+
+ h->qh_info.u.v2_mdqi.dqi_qtree.dqi_entry_size =
+ sizeof(struct v2r1_disk_dqblk);
+@@ -185,6 +187,32 @@ static int v2_init_io(struct quota_handle *h)
+ sizeof(ddqinfo)) != sizeof(ddqinfo))
+ return -1;
+ v2_disk2memdqinfo(&h->qh_info, &ddqinfo);
++
++ /* Check to make sure quota file info is sane */
++ info = &h->qh_info.u.v2_mdqi;
++ if (ext2fs_file_get_lsize(h->qh_qf.e2_file, &filesize))
++ return -1;
++ if ((filesize > (1U << 31)) ||
++ (info->dqi_qtree.dqi_blocks >
++ (filesize + QT_BLKSIZE - 1) >> QT_BLKSIZE_BITS)) {
++ log_err("Quota inode %u corrupted: file size %llu; "
++ "dqi_blocks %u", h->qh_qf.ino,
++ filesize, info->dqi_qtree.dqi_blocks);
++ return -1;
++ }
++ if (info->dqi_qtree.dqi_free_blk >= info->dqi_qtree.dqi_blocks) {
++ log_err("Quota inode %u corrupted: free_blk %u; dqi_blocks %u",
++ h->qh_qf.ino, info->dqi_qtree.dqi_free_blk,
++ info->dqi_qtree.dqi_blocks);
++ return -1;
++ }
++ if (info->dqi_qtree.dqi_free_entry >= info->dqi_qtree.dqi_blocks) {
++ log_err("Quota inode %u corrupted: free_entry %u; "
++ "dqi_blocks %u", h->qh_qf.ino,
++ info->dqi_qtree.dqi_free_entry,
++ info->dqi_qtree.dqi_blocks);
++ return -1;
++ }
+ return 0;
+ }
+
+--
+cgit 1.2-0.3.lf.el7
+
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/CVE-2019-5188.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/CVE-2019-5188.patch
new file mode 100644
index 0000000000..de4bce0037
--- /dev/null
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/CVE-2019-5188.patch
@@ -0,0 +1,57 @@
+From 8dd73c149f418238f19791f9d666089ef9734dff Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Thu, 19 Dec 2019 19:37:34 -0500
+Subject: [PATCH] e2fsck: abort if there is a corrupted directory block when
+ rehashing
+
+In e2fsck pass 3a, when we are rehashing directories, at least in
+theory, all of the directories should have had corruptions with
+respect to directory entry structure fixed. However, it's possible
+(for example, if the user declined a fix) that we can reach this stage
+of processing with a corrupted directory entries.
+
+So check for that case and don't try to process a corrupted directory
+block so we don't run into trouble in mutate_name() if there is a
+zero-length file name.
+
+Addresses: TALOS-2019-0973
+Addresses: CVE-2019-5188
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+
+CVE: CVE-2019-5188
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/commit/?id=8dd73c149f418238f19791f9d666089ef9734dff]
+---
+ e2fsck/rehash.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c
+index a5fc1be1..3dd1e941 100644
+--- a/e2fsck/rehash.c
++++ b/e2fsck/rehash.c
+@@ -160,6 +160,10 @@ static int fill_dir_block(ext2_filsys fs,
+ dir_offset += rec_len;
+ if (dirent->inode == 0)
+ continue;
++ if ((name_len) == 0) {
++ fd->err = EXT2_ET_DIR_CORRUPTED;
++ return BLOCK_ABORT;
++ }
+ if (!fd->compress && (name_len == 1) &&
+ (dirent->name[0] == '.'))
+ continue;
+@@ -401,6 +405,11 @@ static int duplicate_search_and_fix(e2fsck_t ctx, ext2_filsys fs,
+ continue;
+ }
+ new_len = ext2fs_dirent_name_len(ent->dir);
++ if (new_len == 0) {
++ /* should never happen */
++ ext2fs_unmark_valid(fs);
++ continue;
++ }
+ memcpy(new_name, ent->dir->name, new_len);
+ mutate_name(new_name, &new_len);
+ for (j=0; j < fd->num_array; j++) {
+--
+2.24.1
+
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/e2fsck-fix-use-after-free-in-calculate_tree.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/e2fsck-fix-use-after-free-in-calculate_tree.patch
new file mode 100644
index 0000000000..342a2b855b
--- /dev/null
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/e2fsck-fix-use-after-free-in-calculate_tree.patch
@@ -0,0 +1,76 @@
+From: Wang Shilong <wshilong@ddn.com>
+Date: Mon, 30 Dec 2019 19:52:39 -0500
+Subject: e2fsck: fix use after free in calculate_tree()
+
+The problem is alloc_blocks() will call get_next_block() which might
+reallocate outdir->buf, and memory address could be changed after
+this. To fix this, pointers that point into outdir->buf, such as
+int_limit and root need to be recaulated based on the new starting
+address of outdir->buf.
+
+[ Changed to correctly recalculate int_limit, and to optimize how we
+ reallocate outdir->buf. -TYT ]
+
+Addresses-Debian-Bug: 948517
+Signed-off-by: Wang Shilong <wshilong@ddn.com>
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+(cherry picked from commit 101e73e99ccafa0403fcb27dd7413033b587ca01)
+
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/commit/?id=101e73e99ccafa0403fcb27dd7413033b587ca01]
+---
+ e2fsck/rehash.c | 17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
+
+diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c
+index 0a5888a9..2574e151 100644
+--- a/e2fsck/rehash.c
++++ b/e2fsck/rehash.c
+@@ -295,7 +295,11 @@ static errcode_t get_next_block(ext2_filsys fs, struct out_dir *outdir,
+ errcode_t retval;
+
+ if (outdir->num >= outdir->max) {
+- retval = alloc_size_dir(fs, outdir, outdir->max + 50);
++ int increment = outdir->max / 10;
++
++ if (increment < 50)
++ increment = 50;
++ retval = alloc_size_dir(fs, outdir, outdir->max + increment);
+ if (retval)
+ return retval;
+ }
+@@ -637,6 +641,9 @@ static int alloc_blocks(ext2_filsys fs,
+ if (retval)
+ return retval;
+
++ /* outdir->buf might be reallocated */
++ *prev_ent = (struct ext2_dx_entry *) (outdir->buf + *prev_offset);
++
+ *next_ent = set_int_node(fs, block_start);
+ *limit = (struct ext2_dx_countlimit *)(*next_ent);
+ if (next_offset)
+@@ -726,6 +733,9 @@ static errcode_t calculate_tree(ext2_filsys fs,
+ return retval;
+ }
+ if (c3 == 0) {
++ int delta1 = (char *)int_limit - outdir->buf;
++ int delta2 = (char *)root - outdir->buf;
++
+ retval = alloc_blocks(fs, &limit, &int_ent,
+ &dx_ent, &int_offset,
+ NULL, outdir, i, &c2,
+@@ -733,6 +743,11 @@ static errcode_t calculate_tree(ext2_filsys fs,
+ if (retval)
+ return retval;
+
++ /* outdir->buf might be reallocated */
++ int_limit = (struct ext2_dx_countlimit *)
++ (outdir->buf + delta1);
++ root = (struct ext2_dx_entry *)
++ (outdir->buf + delta2);
+ }
+ dx_ent->block = ext2fs_cpu_to_le32(i);
+ if (c3 != limit->limit)
+--
+2.24.1
+
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.45.3.bb b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.45.3.bb
index fdc9454b58..f81defb837 100644
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.45.3.bb
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.45.3.bb
@@ -5,6 +5,10 @@ SRC_URI += "file://remove.ldconfig.call.patch \
file://ptest.patch \
file://mkdir_p.patch \
file://0001-misc-create_inode.c-set-dir-s-mode-correctly.patch \
+ file://CVE-2019-5094.patch \
+ file://CVE-2019-5188.patch \
+ file://0001-e2fsck-don-t-try-to-rehash-a-deleted-directory.patch \
+ file://e2fsck-fix-use-after-free-in-calculate_tree.patch \
"
SRC_URI_append_class-native = " file://e2fsprogs-fix-missing-check-for-permission-denied.patch \
diff --git a/meta/recipes-devtools/file/file/CVE-2019-18218.patch b/meta/recipes-devtools/file/file/CVE-2019-18218.patch
new file mode 100644
index 0000000000..3d02c5ad4b
--- /dev/null
+++ b/meta/recipes-devtools/file/file/CVE-2019-18218.patch
@@ -0,0 +1,55 @@
+cdf_read_property_info in cdf.c in file through 5.37 does not restrict the
+number of CDF_VECTOR elements, which allows a heap-based buffer overflow (4-byte
+out-of-bounds write).
+
+CVE: CVE-2019-18218
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From 46a8443f76cec4b41ec736eca396984c74664f84 Mon Sep 17 00:00:00 2001
+From: Christos Zoulas <christos@zoulas.com>
+Date: Mon, 26 Aug 2019 14:31:39 +0000
+Subject: [PATCH] Limit the number of elements in a vector (found by oss-fuzz)
+
+---
+ src/cdf.c | 9 ++++-----
+ src/cdf.h | 1 +
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/cdf.c b/src/cdf.c
+index 9d6396742..bb81d6374 100644
+--- a/src/cdf.c
++++ b/src/cdf.c
+@@ -1016,8 +1016,9 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
+ goto out;
+ }
+ nelements = CDF_GETUINT32(q, 1);
+- if (nelements == 0) {
+- DPRINTF(("CDF_VECTOR with nelements == 0\n"));
++ if (nelements > CDF_ELEMENT_LIMIT || nelements == 0) {
++ DPRINTF(("CDF_VECTOR with nelements == %"
++ SIZE_T_FORMAT "u\n", nelements));
+ goto out;
+ }
+ slen = 2;
+@@ -1060,8 +1061,6 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
+ goto out;
+ inp += nelem;
+ }
+- DPRINTF(("nelements = %" SIZE_T_FORMAT "u\n",
+- nelements));
+ for (j = 0; j < nelements && i < sh.sh_properties;
+ j++, i++)
+ {
+diff --git a/src/cdf.h b/src/cdf.h
+index 2f7e554b7..05056668f 100644
+--- a/src/cdf.h
++++ b/src/cdf.h
+@@ -48,6 +48,7 @@
+ typedef int32_t cdf_secid_t;
+
+ #define CDF_LOOP_LIMIT 10000
++#define CDF_ELEMENT_LIMIT 100000
+
+ #define CDF_SECID_NULL 0
+ #define CDF_SECID_FREE -1
diff --git a/meta/recipes-devtools/file/file_5.37.bb b/meta/recipes-devtools/file/file_5.37.bb
index 6547d12888..eb0f40b54d 100644
--- a/meta/recipes-devtools/file/file_5.37.bb
+++ b/meta/recipes-devtools/file/file_5.37.bb
@@ -9,12 +9,13 @@ LICENSE = "BSD"
LIC_FILES_CHKSUM = "file://COPYING;beginline=2;md5=0251eaec1188b20d9a72c502ecfdda1b"
DEPENDS = "zlib file-replacement-native"
-DEPENDS_class-native = "zlib-native"
+DEPENDS_class-native = "zlib-native bzip2-replacement-native"
# Blacklist a bogus tag in upstream check
UPSTREAM_CHECK_GITTAGREGEX = "FILE(?P<pver>(?!6_23).+)"
-SRC_URI = "git://github.com/file/file.git"
+SRC_URI = "git://github.com/file/file.git \
+ file://CVE-2019-18218.patch"
SRCREV = "a0d5b0e4e9f97d74a9911e95cedd579852e25398"
S = "${WORKDIR}/git"
@@ -31,6 +32,10 @@ EXTRA_OEMAKE_append_class-nativesdk = "-e FILE_COMPILE=${STAGING_BINDIR_NATIVE}/
FILES_${PN} += "${datadir}/misc/*.mgc"
+do_compile_append_class-native() {
+ oe_runmake check
+}
+
do_install_append_class-native() {
create_cmdline_wrapper ${D}/${bindir}/file \
--magic-file ${datadir}/misc/magic.mgc
diff --git a/meta/recipes-devtools/gcc/gcc-9.2.inc b/meta/recipes-devtools/gcc/gcc-9.2.inc
index c6395998d5..4f068231f3 100644
--- a/meta/recipes-devtools/gcc/gcc-9.2.inc
+++ b/meta/recipes-devtools/gcc/gcc-9.2.inc
@@ -68,6 +68,7 @@ SRC_URI = "\
file://CVE-2019-15847_1.patch \
file://CVE-2019-15847_2.patch \
file://CVE-2019-15847_3.patch \
+ file://re-PR-target-91102-aarch64-ICE-on-Linux-kernel-with-.patch \
"
S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/gcc-${PV}"
SRC_URI[md5sum] = "3818ad8600447f05349098232c2ddc78"
diff --git a/meta/recipes-devtools/gcc/gcc-9.2/re-PR-target-91102-aarch64-ICE-on-Linux-kernel-with-.patch b/meta/recipes-devtools/gcc/gcc-9.2/re-PR-target-91102-aarch64-ICE-on-Linux-kernel-with-.patch
new file mode 100644
index 0000000000..c37e0bb9dd
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-9.2/re-PR-target-91102-aarch64-ICE-on-Linux-kernel-with-.patch
@@ -0,0 +1,95 @@
+From efb0ee06f5c0186c2d1442ecd4dbbd55dbd97b44 Mon Sep 17 00:00:00 2001
+From: Vladimir Makarov <vmakarov@redhat.com>
+Date: Wed, 10 Jul 2019 16:07:10 +0000
+Subject: [PATCH] re PR target/91102 (aarch64 ICE on Linux kernel with -Os
+ starting with r270266)
+
+2019-07-10 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR target/91102
+ * lra-constraints.c (process_alt_operands): Don't match user
+ defined regs only if they are early clobbers.
+
+2019-07-10 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR target/91102
+ * gcc.target/aarch64/pr91102.c: New test.
+
+From-SVN: r273357
+Upstream-Status: Backport [https://github.com/gcc-mirror/gcc/commit/613caed2feb9cfc8158308670b59df3d031ec629]
+[takondra: dropped conflicting ChangeLog changes]
+Signed-off-by: Taras Kondratiuk <takondra@cisco.com>
+---
+ gcc/lra-constraints.c | 17 ++++++++++----
+ gcc/testsuite/gcc.target/aarch64/pr91102.c | 26 ++++++++++++++++++++++
+ 2 files changed, 39 insertions(+), 4 deletions(-)
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/pr91102.c
+
+diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
+index cf33da8013e4..6382dbf852b6 100644
+--- a/gcc/lra-constraints.c
++++ b/gcc/lra-constraints.c
+@@ -2172,8 +2172,9 @@ process_alt_operands (int only_alternative)
+ else
+ {
+ /* Operands don't match. If the operands are
+- different user defined explicit hard registers,
+- then we cannot make them match. */
++ different user defined explicit hard
++ registers, then we cannot make them match
++ when one is early clobber operand. */
+ if ((REG_P (*curr_id->operand_loc[nop])
+ || SUBREG_P (*curr_id->operand_loc[nop]))
+ && (REG_P (*curr_id->operand_loc[m])
+@@ -2192,9 +2193,17 @@ process_alt_operands (int only_alternative)
+ && REG_P (m_reg)
+ && HARD_REGISTER_P (m_reg)
+ && REG_USERVAR_P (m_reg))
+- break;
++ {
++ int i;
++
++ for (i = 0; i < early_clobbered_regs_num; i++)
++ if (m == early_clobbered_nops[i])
++ break;
++ if (i < early_clobbered_regs_num
++ || early_clobber_p)
++ break;
++ }
+ }
+-
+ /* Both operands must allow a reload register,
+ otherwise we cannot make them match. */
+ if (curr_alt[m] == NO_REGS)
+diff --git a/gcc/testsuite/gcc.target/aarch64/pr91102.c b/gcc/testsuite/gcc.target/aarch64/pr91102.c
+new file mode 100644
+index 000000000000..70b99045a48e
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/pr91102.c
+@@ -0,0 +1,26 @@
++/* PR target/91102 */
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++int
++foo (long d, long l)
++{
++ register long e asm ("x1") = d;
++ register long f asm("x2") = l;
++ asm ("" : : "r" (e), "r" (f));
++ return 3;
++}
++
++struct T { int i; int j; };
++union S { long h; struct T t; };
++
++void
++bar (union S b)
++{
++ while (1)
++ {
++ union S c = b;
++ c.t.j++;
++ b.h = foo (b.h, c.h);
++ }
++}
diff --git a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
index f14cbf7152..4aac345bec 100644
--- a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
+++ b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
@@ -158,7 +158,7 @@ SYSTEMLIBS1 = "${target_libdir}/"
EXTRA_OECONF += "--enable-poison-system-directories"
EXTRA_OECONF_remove_elf = "--with-sysroot=/not/exist"
EXTRA_OECONF_remove_eabi = "--with-sysroot=/not/exist"
-EXTRA_OECONF_append_elf = "--without-headers --with-newlib"
-EXTRA_OECONF_append_eabi = "--without-headers --with-newlib"
+EXTRA_OECONF_append_elf = " --without-headers --with-newlib"
+EXTRA_OECONF_append_eabi = " --without-headers --with-newlib"
# gcc 4.7 needs -isystem
export ARCH_FLAGS_FOR_TARGET = "--sysroot=${STAGING_DIR_TARGET} -isystem=${target_includedir}"
diff --git a/meta/recipes-devtools/gcc/gcc-cross.inc b/meta/recipes-devtools/gcc/gcc-cross.inc
index 8855bb1f34..06ba3ccd15 100644
--- a/meta/recipes-devtools/gcc/gcc-cross.inc
+++ b/meta/recipes-devtools/gcc/gcc-cross.inc
@@ -61,6 +61,13 @@ do_compile () {
export CXXFLAGS_FOR_TARGET="${TARGET_CXXFLAGS}"
export LDFLAGS_FOR_TARGET="${TARGET_LDFLAGS}"
+ # Prevent native/host sysroot path from being used in configargs.h header,
+ # as it will be rewritten when used by other sysroots preventing support
+ # for gcc plugins
+ oe_runmake configure-gcc
+ sed -i 's@${STAGING_DIR_TARGET}@/host@g' ${B}/gcc/configargs.h
+ sed -i 's@${STAGING_DIR_HOST}@/host@g' ${B}/gcc/configargs.h
+
oe_runmake all-host configure-target-libgcc
(cd ${B}/${TARGET_SYS}/libgcc; oe_runmake enable-execute-stack.c unwind.h md-unwind-support.h sfp-machine.h gthr-default.h)
# now generate script to drive testing
diff --git a/meta/recipes-devtools/gcc/gcc-runtime.inc b/meta/recipes-devtools/gcc/gcc-runtime.inc
index 2da3c02ef0..536b18d97f 100644
--- a/meta/recipes-devtools/gcc/gcc-runtime.inc
+++ b/meta/recipes-devtools/gcc/gcc-runtime.inc
@@ -302,10 +302,6 @@ do_check() {
# HACK: this works around the configure setting CXX with -nostd* args
sed -i 's/-nostdinc++ -nostdlib++//g' $(find ${B} -name testsuite_flags | head -1)
- # HACK: this works around the de-stashing changes to configargs.h, as well as recipe-sysroot changing the content
- sed -i '/static const char configuration_arguments/d' ${B}/gcc/configargs.h
- ${CC} -v 2>&1 | grep "^Configured with:" | \
- sed 's/Configured with: \(.*\)/static const char configuration_arguments[] = "\1";/g' >> ${B}/gcc/configargs.h
if [ "${TOOLCHAIN_TEST_TARGET}" = "user" ]; then
# qemu user has issues allocating large amounts of memory
diff --git a/meta/recipes-devtools/gcc/gcc-target.inc b/meta/recipes-devtools/gcc/gcc-target.inc
index bdc6ff658f..987e88d32c 100644
--- a/meta/recipes-devtools/gcc/gcc-target.inc
+++ b/meta/recipes-devtools/gcc/gcc-target.inc
@@ -137,6 +137,14 @@ FILES_${PN}-doc = "\
"
do_compile () {
+ # Prevent full target sysroot path from being used in configargs.h header,
+ # as it will be rewritten when used by other sysroots preventing support
+ # for gcc plugins. Additionally the path is embeddeded into the output
+ # binary, this prevents building a reproducible binary.
+ oe_runmake configure-gcc
+ sed -i 's@${STAGING_DIR_TARGET}@/@g' ${B}/gcc/configargs.h
+ sed -i 's@${STAGING_DIR_HOST}@/@g' ${B}/gcc/configargs.h
+
oe_runmake all-host
}
diff --git a/meta/recipes-devtools/gdb/gdb-8.3.1.inc b/meta/recipes-devtools/gdb/gdb-8.3.1.inc
index 39f1c48cc7..aec913f3ce 100644
--- a/meta/recipes-devtools/gdb/gdb-8.3.1.inc
+++ b/meta/recipes-devtools/gdb/gdb-8.3.1.inc
@@ -16,6 +16,7 @@ SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.xz \
file://0009-Change-order-of-CFLAGS.patch \
file://0010-resolve-restrict-keyword-conflict.patch \
file://0011-Fix-invalid-sigprocmask-call.patch \
+ file://CVE-2019-1010180.patch \
"
SRC_URI[md5sum] = "73b6a5d8141672c62bf851cd34c4aa83"
SRC_URI[sha256sum] = "1e55b4d7cdca7b34be12f4ceae651623aa73b2fd640152313f9f66a7149757c4"
diff --git a/meta/recipes-devtools/gdb/gdb/CVE-2019-1010180.patch b/meta/recipes-devtools/gdb/gdb/CVE-2019-1010180.patch
new file mode 100644
index 0000000000..46b2b3a713
--- /dev/null
+++ b/meta/recipes-devtools/gdb/gdb/CVE-2019-1010180.patch
@@ -0,0 +1,132 @@
+From 950b74950f6020eda38647f22e9077ac7f68ca49 Mon Sep 17 00:00:00 2001
+From: Keith Seitz <keiths@redhat.com>
+Date: Wed, 16 Oct 2019 11:33:59 -0700
+Subject: [PATCH] DWARF reader: Reject sections with invalid sizes
+
+This is another fuzzer bug, gdb/23567. This time, the fuzzer has
+specifically altered the size of .debug_str:
+
+$ eu-readelf -S objdump
+Section Headers:
+[Nr] Name Type Addr Off Size ES Flags Lk Inf Al
+[31] .debug_str PROGBITS 0000000000000000 0057116d ffffffffffffffff 1 MS 0 0 1
+
+When this file is loaded into GDB, the DWARF reader crashes attempting
+to access the string table (or it may just store a bunch of nonsense):
+
+[gdb-8.3-6-fc30]
+$ gdb -nx -q objdump
+BFD: warning: /path/to/objdump has a corrupt section with a size (ffffffffffffffff) larger than the file size
+Reading symbols from /path/to/objdump...
+Segmentation fault (core dumped)
+
+Nick has already committed a BFD patch to issue the warning seen above.
+
+[gdb master 6acc1a0b]
+$ gdb -BFD: warning: /path/to/objdump has a corrupt section with a size (ffffffffffffffff) larger than the file size
+Reading symbols from /path/to/objdump...
+(gdb) inf func
+All defined functions:
+
+File ./../include/dwarf2.def:
+186: const
+
+ 8 *>(.:
+ ;'@�B);
+747: const
+
+ 8 *�(.:
+ ;'@�B);
+701: const
+
+ 8 *�D �
+ (.:
+ ;'@�B);
+71: const
+
+ 8 *(.:
+ ;'@�B);
+/* and more gibberish */
+
+Consider read_indirect_string_at_offset_from:
+
+static const char *
+read_indirect_string_at_offset_from (struct objfile *objfile,
+ bfd *abfd, LONGEST str_offset,
+ struct dwarf2_section_info *sect,
+ const char *form_name,
+ const char *sect_name)
+{
+ dwarf2_read_section (objfile, sect);
+ if (sect->buffer == NULL)
+ error (_("%s used without %s section [in module %s]"),
+ form_name, sect_name, bfd_get_filename (abfd));
+ if (str_offset >= sect->size)
+ error (_("%s pointing outside of %s section [in module %s]"),
+ form_name, sect_name, bfd_get_filename (abfd));
+ gdb_assert (HOST_CHAR_BIT == 8);
+ if (sect->buffer[str_offset] == '\0')
+ return NULL;
+ return (const char *) (sect->buffer + str_offset);
+}
+
+With sect_size being ginormous, the code attempts to access
+sect->buffer[GINORMOUS], and depending on the layout of memory,
+GDB either stores a bunch of gibberish strings or crashes.
+
+This is an attempt to mitigate this by implementing a similar approach
+used by BFD. In our case, we simply reject the section with the invalid
+length:
+
+$ ./gdb -nx -q objdump
+BFD: warning: /path/to/objdump has a corrupt section with a size (ffffffffffffffff) larger than the file size
+Reading symbols from /path/to/objdump...
+
+warning: Discarding section .debug_str which has a section size (ffffffffffffffff) larger than the file size [in module /path/to/objdump]
+DW_FORM_strp used without .debug_str section [in module /path/to/objdump]
+(No debugging symbols found in /path/to/objdump)
+(gdb)
+
+Unfortunately, I have not found a way to regression test this, since it
+requires poking ELF section headers.
+
+gdb/ChangeLog:
+2019-10-16 Keith Seitz <keiths@redhat.com>
+
+ PR gdb/23567
+ * dwarf2read.c (dwarf2_per_objfile::locate_sections): Discard
+ sections whose size is greater than the file size.
+
+Change-Id: I896ac3b4eb2207c54e8e05c16beab3051d9b4b2f
+
+CVE: CVE-2019-1010180
+Upstream-Status: Backport [https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=950b74950f6020eda38647f22e9077ac7f68ca49]
+[Removed Changelog entry]
+Signed-off-by: Vinay Kumar <vinay.m.engg@gmail.com>
+---
+ gdb/dwarf2read.c | 9 +++++++++
+ 2 files changed, 15 insertions(+)
+
+diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+index 0443b55..a78f818 100644
+--- a/gdb/dwarf2read.c
++++ b/gdb/dwarf2read.c
+@@ -2338,6 +2338,15 @@ dwarf2_per_objfile::locate_sections (bfd *abfd, asection *sectp,
+ if ((aflag & SEC_HAS_CONTENTS) == 0)
+ {
+ }
++ else if (elf_section_data (sectp)->this_hdr.sh_size
++ > bfd_get_file_size (abfd))
++ {
++ bfd_size_type size = elf_section_data (sectp)->this_hdr.sh_size;
++ warning (_("Discarding section %s which has a section size (%s"
++ ") larger than the file size [in module %s]"),
++ bfd_section_name (abfd, sectp), phex_nz (size, sizeof (size)),
++ bfd_get_filename (abfd));
++ }
+ else if (section_is_p (sectp->name, &names.info))
+ {
+ this->info.s.section = sectp;
+--
+2.7.4
+
diff --git a/meta/recipes-devtools/git/git.inc b/meta/recipes-devtools/git/git.inc
index 6e137432f0..a0ce1626a1 100644
--- a/meta/recipes-devtools/git/git.inc
+++ b/meta/recipes-devtools/git/git.inc
@@ -7,7 +7,21 @@ DEPENDS = "openssl curl zlib expat"
PROVIDES_append_class-native = " git-replacement-native"
SRC_URI = "${KERNELORG_MIRROR}/software/scm/git/git-${PV}.tar.gz;name=tarball \
- ${KERNELORG_MIRROR}/software/scm/git/git-manpages-${PV}.tar.gz;name=manpages"
+ ${KERNELORG_MIRROR}/software/scm/git/git-manpages-${PV}.tar.gz;name=manpages \
+ file://CVE-2020-5260.patch \
+ file://0001-t-lib-credential-use-test_i18ncmp-to-check-stderr.patch \
+ file://0002-credential-detect-unrepresentable-values-when-parsin.patch \
+ file://0003-fsck-detect-gitmodules-URLs-with-embedded-newlines.patch \
+ file://CVE-2020-11008-1.patch \
+ file://CVE-2020-11008-2.patch \
+ file://CVE-2020-11008-3.patch \
+ file://CVE-2020-11008-4.patch \
+ file://CVE-2020-11008-5.patch \
+ file://CVE-2020-11008-6.patch \
+ file://CVE-2020-11008-7.patch \
+ file://CVE-2020-11008-8.patch \
+ file://CVE-2020-11008-9.patch \
+ "
S = "${WORKDIR}/git-${PV}"
diff --git a/meta/recipes-devtools/git/git/0001-t-lib-credential-use-test_i18ncmp-to-check-stderr.patch b/meta/recipes-devtools/git/git/0001-t-lib-credential-use-test_i18ncmp-to-check-stderr.patch
new file mode 100644
index 0000000000..6eb3c16aef
--- /dev/null
+++ b/meta/recipes-devtools/git/git/0001-t-lib-credential-use-test_i18ncmp-to-check-stderr.patch
@@ -0,0 +1,35 @@
+From 70ef9c6ce884b2d466d3d36563f1d2aa31b56443 Mon Sep 17 00:00:00 2001
+From: Jeff King <peff@peff.net>
+Date: Wed, 11 Mar 2020 18:11:37 -0400
+Subject: [PATCH 01/12] t/lib-credential: use test_i18ncmp to check stderr
+
+The credential tests have a "check" function which feeds some input to
+git-credential and checks the stdout and stderr. We look for exact
+matches in the output. For stdout, this makes sense; the output is
+the credential protocol. But for stderr, we may be showing various
+diagnostic messages, or the prompts fed to the askpass program, which
+could be translated. Let's mark them as such.
+
+Upstream-Status: Backport
+
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ t/lib-credential.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/t/lib-credential.sh b/t/lib-credential.sh
+index 937b831..bb88cc0 100755
+--- a/t/lib-credential.sh
++++ b/t/lib-credential.sh
+@@ -19,7 +19,7 @@ check() {
+ false
+ fi &&
+ test_cmp expect-stdout stdout &&
+- test_cmp expect-stderr stderr
++ test_i18ncmp expect-stderr stderr
+ }
+
+ read_chunk() {
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/0002-credential-detect-unrepresentable-values-when-parsin.patch b/meta/recipes-devtools/git/git/0002-credential-detect-unrepresentable-values-when-parsin.patch
new file mode 100644
index 0000000000..a9b7348ef7
--- /dev/null
+++ b/meta/recipes-devtools/git/git/0002-credential-detect-unrepresentable-values-when-parsin.patch
@@ -0,0 +1,156 @@
+From 43803880b954a020dbffa5250a5b7fd893442c7c Mon Sep 17 00:00:00 2001
+From: Jeff King <peff@peff.net>
+Date: Thu, 12 Mar 2020 01:31:11 -0400
+Subject: [PATCH 02/12] credential: detect unrepresentable values when parsing
+ urls
+
+The credential protocol can't represent newlines in values, but URLs can
+embed percent-encoded newlines in various components. A previous commit
+taught the low-level writing routines to die() when encountering this,
+but we can be a little friendlier to the user by detecting them earlier
+and handling them gracefully.
+
+This patch teaches credential_from_url() to notice such components,
+issue a warning, and blank the credential (which will generally result
+in prompting the user for a username and password). We blank the whole
+credential in this case. Another option would be to blank only the
+invalid component. However, we're probably better off not feeding a
+partially-parsed URL result to a credential helper. We don't know how a
+given helper would handle it, so we're better off to err on the side of
+matching nothing rather than something unexpected.
+
+The die() call in credential_write() is _probably_ impossible to reach
+after this patch. Values should end up in credential structs only by URL
+parsing (which is covered here), or by reading credential protocol input
+(which by definition cannot read a newline into a value). But we should
+definitely keep the low-level check, as it's our final and most accurate
+line of defense against protocol injection attacks. Arguably it could
+become a BUG(), but it probably doesn't matter much either way.
+
+Note that the public interface of credential_from_url() grows a little
+more than we need here. We'll use the extra flexibility in a future
+patch to help fsck catch these cases.
+
+Upstream-Status: Backport
+
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ credential.c | 36 ++++++++++++++++++++++++++++++++++--
+ credential.h | 16 ++++++++++++++++
+ t/t0300-credentials.sh | 12 ++++++++++--
+ 3 files changed, 60 insertions(+), 4 deletions(-)
+
+diff --git a/credential.c b/credential.c
+index a79aff0..2482382 100644
+--- a/credential.c
++++ b/credential.c
+@@ -324,7 +324,22 @@ void credential_reject(struct credential *c)
+ c->approved = 0;
+ }
+
+-void credential_from_url(struct credential *c, const char *url)
++static int check_url_component(const char *url, int quiet,
++ const char *name, const char *value)
++{
++ if (!value)
++ return 0;
++ if (!strchr(value, '\n'))
++ return 0;
++
++ if (!quiet)
++ warning(_("url contains a newline in its %s component: %s"),
++ name, url);
++ return -1;
++}
++
++int credential_from_url_gently(struct credential *c, const char *url,
++ int quiet)
+ {
+ const char *at, *colon, *cp, *slash, *host, *proto_end;
+
+@@ -338,7 +353,7 @@ void credential_from_url(struct credential *c, const char *url)
+ */
+ proto_end = strstr(url, "://");
+ if (!proto_end)
+- return;
++ return 0;
+ cp = proto_end + 3;
+ at = strchr(cp, '@');
+ colon = strchr(cp, ':');
+@@ -373,4 +388,21 @@ void credential_from_url(struct credential *c, const char *url)
+ while (p > c->path && *p == '/')
+ *p-- = '\0';
+ }
++
++ if (check_url_component(url, quiet, "username", c->username) < 0 ||
++ check_url_component(url, quiet, "password", c->password) < 0 ||
++ check_url_component(url, quiet, "protocol", c->protocol) < 0 ||
++ check_url_component(url, quiet, "host", c->host) < 0 ||
++ check_url_component(url, quiet, "path", c->path) < 0)
++ return -1;
++
++ return 0;
++}
++
++void credential_from_url(struct credential *c, const char *url)
++{
++ if (credential_from_url_gently(c, url, 0) < 0) {
++ warning(_("skipping credential lookup for url: %s"), url);
++ credential_clear(c);
++ }
+ }
+diff --git a/credential.h b/credential.h
+index 6b0cd16..122a23c 100644
+--- a/credential.h
++++ b/credential.h
+@@ -28,7 +28,23 @@ struct credential {
+
+ int credential_read(struct credential *, FILE *);
+ void credential_write(const struct credential *, FILE *);
++
++/*
++ * Parse a url into a credential struct, replacing any existing contents.
++ *
++ * Ifthe url can't be parsed (e.g., a missing "proto://" component), the
++ * resulting credential will be empty but we'll still return success from the
++ * "gently" form.
++ *
++ * If we encounter a component which cannot be represented as a credential
++ * value (e.g., because it contains a newline), the "gently" form will return
++ * an error but leave the broken state in the credential object for further
++ * examination. The non-gentle form will issue a warning to stderr and return
++ * an empty credential.
++ */
+ void credential_from_url(struct credential *, const char *url);
++int credential_from_url_gently(struct credential *, const char *url, int quiet);
++
+ int credential_match(const struct credential *have,
+ const struct credential *want);
+
+diff --git a/t/t0300-credentials.sh b/t/t0300-credentials.sh
+index 26f3c3a..b9c0f1f 100755
+--- a/t/t0300-credentials.sh
++++ b/t/t0300-credentials.sh
+@@ -308,9 +308,17 @@ test_expect_success 'empty helper spec resets helper list' '
+ EOF
+ '
+
+-test_expect_success 'url parser rejects embedded newlines' '
+- test_must_fail git credential fill <<-\EOF
++test_expect_success 'url parser ignores embedded newlines' '
++ check fill <<-EOF
+ url=https://one.example.com?%0ahost=two.example.com/
++ --
++ username=askpass-username
++ password=askpass-password
++ --
++ warning: url contains a newline in its host component: https://one.example.com?%0ahost=two.example.com/
++ warning: skipping credential lookup for url: https://one.example.com?%0ahost=two.example.com/
++ askpass: Username:
++ askpass: Password:
+ EOF
+ '
+
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/0003-fsck-detect-gitmodules-URLs-with-embedded-newlines.patch b/meta/recipes-devtools/git/git/0003-fsck-detect-gitmodules-URLs-with-embedded-newlines.patch
new file mode 100644
index 0000000000..23931e6313
--- /dev/null
+++ b/meta/recipes-devtools/git/git/0003-fsck-detect-gitmodules-URLs-with-embedded-newlines.patch
@@ -0,0 +1,103 @@
+From 1c9f8cedd34302575db40016231bdf502f17901e Mon Sep 17 00:00:00 2001
+From: Li Zhou <li.zhou@windriver.com>
+Date: Mon, 27 Apr 2020 13:49:39 +0800
+Subject: [PATCH 03/12] fsck: detect gitmodules URLs with embedded newlines
+
+The credential protocol can't handle values with newlines. We already
+detect and block any such URLs from being used with credential helpers,
+but let's also add an fsck check to detect and block gitmodules files
+with such URLs. That will let us notice the problem earlier when
+transfer.fsckObjects is turned on. And in particular it will prevent bad
+objects from spreading, which may protect downstream users running older
+versions of Git.
+
+We'll file this under the existing gitmodulesUrl flag, which covers URLs
+with option injection. There's really no need to distinguish the exact
+flaw in the URL in this context. Likewise, I've expanded the description
+of t7416 to cover all types of bogus URLs.
+
+Upstream-Status: Backport
+
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ fsck.c | 16 +++++++++++++++-
+ t/t7416-submodule-dash-url.sh | 18 +++++++++++++++++-
+ 2 files changed, 32 insertions(+), 2 deletions(-)
+
+diff --git a/fsck.c b/fsck.c
+index ef8b343..ea46eea 100644
+--- a/fsck.c
++++ b/fsck.c
+@@ -15,6 +15,7 @@
+ #include "packfile.h"
+ #include "submodule-config.h"
+ #include "config.h"
++#include "credential.h"
+ #include "help.h"
+
+ static struct oidset gitmodules_found = OIDSET_INIT;
+@@ -947,6 +948,19 @@ static int fsck_tag(struct tag *tag, const char *data,
+ return fsck_tag_buffer(tag, data, size, options);
+ }
+
++static int check_submodule_url(const char *url)
++{
++ struct credential c = CREDENTIAL_INIT;
++ int ret;
++
++ if (looks_like_command_line_option(url))
++ return -1;
++
++ ret = credential_from_url_gently(&c, url, 1);
++ credential_clear(&c);
++ return ret;
++}
++
+ struct fsck_gitmodules_data {
+ struct object *obj;
+ struct fsck_options *options;
+@@ -971,7 +985,7 @@ static int fsck_gitmodules_fn(const char *var, const char *value, void *vdata)
+ "disallowed submodule name: %s",
+ name);
+ if (!strcmp(key, "url") && value &&
+- looks_like_command_line_option(value))
++ check_submodule_url(value) < 0)
+ data->ret |= report(data->options, data->obj,
+ FSCK_MSG_GITMODULES_URL,
+ "disallowed submodule url: %s",
+diff --git a/t/t7416-submodule-dash-url.sh b/t/t7416-submodule-dash-url.sh
+index 5ba041f..41431b1 100755
+--- a/t/t7416-submodule-dash-url.sh
++++ b/t/t7416-submodule-dash-url.sh
+@@ -1,6 +1,6 @@
+ #!/bin/sh
+
+-test_description='check handling of .gitmodule url with dash'
++test_description='check handling of disallowed .gitmodule urls'
+ . ./test-lib.sh
+
+ test_expect_success 'create submodule with protected dash in url' '
+@@ -60,4 +60,20 @@ test_expect_success 'trailing backslash is handled correctly' '
+ test_i18ngrep ! "unknown option" err
+ '
+
++test_expect_success 'fsck rejects embedded newline in url' '
++ # create an orphan branch to avoid existing .gitmodules objects
++ git checkout --orphan newline &&
++ cat >.gitmodules <<-\EOF &&
++ [submodule "foo"]
++ url = "https://one.example.com?%0ahost=two.example.com/foo.git"
++ EOF
++ git add .gitmodules &&
++ git commit -m "gitmodules with newline" &&
++ test_when_finished "rm -rf dst" &&
++ git init --bare dst &&
++ git -C dst config transfer.fsckObjects true &&
++ test_must_fail git push dst HEAD 2>err &&
++ grep gitmodulesUrl err
++'
++
+ test_done
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/CVE-2020-11008-1.patch b/meta/recipes-devtools/git/git/CVE-2020-11008-1.patch
new file mode 100644
index 0000000000..9cf98ea7b4
--- /dev/null
+++ b/meta/recipes-devtools/git/git/CVE-2020-11008-1.patch
@@ -0,0 +1,70 @@
+From 863f8067d8b4012904ca3bb881c659ac9894df97 Mon Sep 17 00:00:00 2001
+From: Li Zhou <li.zhou@windriver.com>
+Date: Mon, 27 Apr 2020 14:36:03 +0800
+Subject: [PATCH 04/12] t0300: make "quit" helper more realistic
+
+We test a toy credential helper that writes "quit=1" and confirms that
+we stop running other helpers. However, that helper is unrealistic in
+that it does not bother to read its stdin at all.
+
+For now we don't send any input to it, because we feed git-credential a
+blank credential. But that will change in the next patch, which will
+cause this test to racily fail, as git-credential will get SIGPIPE
+writing to the helper rather than exiting because it was asked to.
+
+Let's make this one-off helper more like our other sample helpers, and
+have it source the "dump" script. That will read stdin, fixing the
+SIGPIPE problem. But it will also write what it sees to stderr. We can
+make the test more robust by checking that output, which confirms that
+we do run the quit helper, don't run any other helpers, and exit for the
+reason we expected.
+
+Signed-off-by: Jeff King <peff@peff.net>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+
+Upstream-Status: Backport
+CVE: CVE-2020-11008 (1)
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ t/t0300-credentials.sh | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/t/t0300-credentials.sh b/t/t0300-credentials.sh
+index b9c0f1f..0206b3b 100755
+--- a/t/t0300-credentials.sh
++++ b/t/t0300-credentials.sh
+@@ -22,6 +22,11 @@ test_expect_success 'setup helper scripts' '
+ exit 0
+ EOF
+
++ write_script git-credential-quit <<-\EOF &&
++ . ./dump
++ echo quit=1
++ EOF
++
+ write_script git-credential-verbatim <<-\EOF &&
+ user=$1; shift
+ pass=$1; shift
+@@ -291,10 +296,16 @@ test_expect_success 'http paths can be part of context' '
+
+ test_expect_success 'helpers can abort the process' '
+ test_must_fail git \
+- -c credential.helper="!f() { echo quit=1; }; f" \
++ -c credential.helper=quit \
+ -c credential.helper="verbatim foo bar" \
+- credential fill >stdout &&
+- test_must_be_empty stdout
++ credential fill >stdout 2>stderr &&
++ >expect &&
++ test_cmp expect stdout &&
++ cat >expect <<-\EOF &&
++ quit: get
++ fatal: credential helper '\''quit'\'' told us to quit
++ EOF
++ test_i18ncmp expect stderr
+ '
+
+ test_expect_success 'empty helper spec resets helper list' '
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/CVE-2020-11008-2.patch b/meta/recipes-devtools/git/git/CVE-2020-11008-2.patch
new file mode 100644
index 0000000000..c752e3d431
--- /dev/null
+++ b/meta/recipes-devtools/git/git/CVE-2020-11008-2.patch
@@ -0,0 +1,292 @@
+From 5588659069214aa0f7fea75a69687078e2f7a817 Mon Sep 17 00:00:00 2001
+From: Jeff King <peff@peff.net>
+Date: Sat, 18 Apr 2020 20:47:30 -0700
+Subject: [PATCH 05/12] t0300: use more realistic inputs
+
+Many of the tests in t0300 give partial inputs to git-credential,
+omitting a protocol or hostname. We're checking only high-level things
+like whether and how helpers are invoked at all, and we don't care about
+specific hosts. However, in preparation for tightening up the rules
+about when we're willing to run a helper, let's start using input that's
+a bit more realistic: pretend as if http://example.com is being
+examined.
+
+This shouldn't change the point of any of the tests, but do note we have
+to adjust the expected output to accommodate this (filling a credential
+will repeat back the protocol/host fields to stdout, and the helper
+debug messages and askpass prompt will change on stderr).
+
+Signed-off-by: Jeff King <peff@peff.net>
+Reviewed-by: Taylor Blau <me@ttaylorr.com>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+
+Upstream-Status: Backport
+CVE: CVE-2020-11008 (2)
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ t/t0300-credentials.sh | 89 +++++++++++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 85 insertions(+), 4 deletions(-)
+
+diff --git a/t/t0300-credentials.sh b/t/t0300-credentials.sh
+index 0206b3b..f4c5d7f 100755
+--- a/t/t0300-credentials.sh
++++ b/t/t0300-credentials.sh
+@@ -40,43 +40,71 @@ test_expect_success 'setup helper scripts' '
+
+ test_expect_success 'credential_fill invokes helper' '
+ check fill "verbatim foo bar" <<-\EOF
++ protocol=http
++ host=example.com
+ --
++ protocol=http
++ host=example.com
+ username=foo
+ password=bar
+ --
+ verbatim: get
++ verbatim: protocol=http
++ verbatim: host=example.com
+ EOF
+ '
+
+ test_expect_success 'credential_fill invokes multiple helpers' '
+ check fill useless "verbatim foo bar" <<-\EOF
++ protocol=http
++ host=example.com
+ --
++ protocol=http
++ host=example.com
+ username=foo
+ password=bar
+ --
+ useless: get
++ useless: protocol=http
++ useless: host=example.com
+ verbatim: get
++ verbatim: protocol=http
++ verbatim: host=example.com
+ EOF
+ '
+
+ test_expect_success 'credential_fill stops when we get a full response' '
+ check fill "verbatim one two" "verbatim three four" <<-\EOF
++ protocol=http
++ host=example.com
+ --
++ protocol=http
++ host=example.com
+ username=one
+ password=two
+ --
+ verbatim: get
++ verbatim: protocol=http
++ verbatim: host=example.com
+ EOF
+ '
+
+ test_expect_success 'credential_fill continues through partial response' '
+ check fill "verbatim one \"\"" "verbatim two three" <<-\EOF
++ protocol=http
++ host=example.com
+ --
++ protocol=http
++ host=example.com
+ username=two
+ password=three
+ --
+ verbatim: get
++ verbatim: protocol=http
++ verbatim: host=example.com
+ verbatim: get
++ verbatim: protocol=http
++ verbatim: host=example.com
+ verbatim: username=one
+ EOF
+ '
+@@ -102,14 +130,20 @@ test_expect_success 'credential_fill passes along metadata' '
+
+ test_expect_success 'credential_approve calls all helpers' '
+ check approve useless "verbatim one two" <<-\EOF
++ protocol=http
++ host=example.com
+ username=foo
+ password=bar
+ --
+ --
+ useless: store
++ useless: protocol=http
++ useless: host=example.com
+ useless: username=foo
+ useless: password=bar
+ verbatim: store
++ verbatim: protocol=http
++ verbatim: host=example.com
+ verbatim: username=foo
+ verbatim: password=bar
+ EOF
+@@ -117,6 +151,8 @@ test_expect_success 'credential_approve calls all helpers' '
+
+ test_expect_success 'do not bother storing password-less credential' '
+ check approve useless <<-\EOF
++ protocol=http
++ host=example.com
+ username=foo
+ --
+ --
+@@ -126,14 +162,20 @@ test_expect_success 'do not bother storing password-less credential' '
+
+ test_expect_success 'credential_reject calls all helpers' '
+ check reject useless "verbatim one two" <<-\EOF
++ protocol=http
++ host=example.com
+ username=foo
+ password=bar
+ --
+ --
+ useless: erase
++ useless: protocol=http
++ useless: host=example.com
+ useless: username=foo
+ useless: password=bar
+ verbatim: erase
++ verbatim: protocol=http
++ verbatim: host=example.com
+ verbatim: username=foo
+ verbatim: password=bar
+ EOF
+@@ -141,33 +183,49 @@ test_expect_success 'credential_reject calls all helpers' '
+
+ test_expect_success 'usernames can be preserved' '
+ check fill "verbatim \"\" three" <<-\EOF
++ protocol=http
++ host=example.com
+ username=one
+ --
++ protocol=http
++ host=example.com
+ username=one
+ password=three
+ --
+ verbatim: get
++ verbatim: protocol=http
++ verbatim: host=example.com
+ verbatim: username=one
+ EOF
+ '
+
+ test_expect_success 'usernames can be overridden' '
+ check fill "verbatim two three" <<-\EOF
++ protocol=http
++ host=example.com
+ username=one
+ --
++ protocol=http
++ host=example.com
+ username=two
+ password=three
+ --
+ verbatim: get
++ verbatim: protocol=http
++ verbatim: host=example.com
+ verbatim: username=one
+ EOF
+ '
+
+ test_expect_success 'do not bother completing already-full credential' '
+ check fill "verbatim three four" <<-\EOF
++ protocol=http
++ host=example.com
+ username=one
+ password=two
+ --
++ protocol=http
++ host=example.com
+ username=one
+ password=two
+ --
+@@ -179,23 +237,31 @@ test_expect_success 'do not bother completing already-full credential' '
+ # askpass helper is run, we know the internal getpass is working.
+ test_expect_success 'empty helper list falls back to internal getpass' '
+ check fill <<-\EOF
++ protocol=http
++ host=example.com
+ --
++ protocol=http
++ host=example.com
+ username=askpass-username
+ password=askpass-password
+ --
+- askpass: Username:
+- askpass: Password:
++ askpass: Username for '\''http://example.com'\'':
++ askpass: Password for '\''http://askpass-username@example.com'\'':
+ EOF
+ '
+
+ test_expect_success 'internal getpass does not ask for known username' '
+ check fill <<-\EOF
++ protocol=http
++ host=example.com
+ username=foo
+ --
++ protocol=http
++ host=example.com
+ username=foo
+ password=askpass-password
+ --
+- askpass: Password:
++ askpass: Password for '\''http://foo@example.com'\'':
+ EOF
+ '
+
+@@ -207,7 +273,11 @@ HELPER="!f() {
+ test_expect_success 'respect configured credentials' '
+ test_config credential.helper "$HELPER" &&
+ check fill <<-\EOF
++ protocol=http
++ host=example.com
+ --
++ protocol=http
++ host=example.com
+ username=foo
+ password=bar
+ --
+@@ -298,11 +368,16 @@ test_expect_success 'helpers can abort the process' '
+ test_must_fail git \
+ -c credential.helper=quit \
+ -c credential.helper="verbatim foo bar" \
+- credential fill >stdout 2>stderr &&
++ credential fill >stdout 2>stderr <<-\EOF &&
++ protocol=http
++ host=example.com
++ EOF
+ >expect &&
+ test_cmp expect stdout &&
+ cat >expect <<-\EOF &&
+ quit: get
++ quit: protocol=http
++ quit: host=example.com
+ fatal: credential helper '\''quit'\'' told us to quit
+ EOF
+ test_i18ncmp expect stderr
+@@ -311,11 +386,17 @@ test_expect_success 'helpers can abort the process' '
+ test_expect_success 'empty helper spec resets helper list' '
+ test_config credential.helper "verbatim file file" &&
+ check fill "" "verbatim cmdline cmdline" <<-\EOF
++ protocol=http
++ host=example.com
+ --
++ protocol=http
++ host=example.com
+ username=cmdline
+ password=cmdline
+ --
+ verbatim: get
++ verbatim: protocol=http
++ verbatim: host=example.com
+ EOF
+ '
+
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/CVE-2020-11008-3.patch b/meta/recipes-devtools/git/git/CVE-2020-11008-3.patch
new file mode 100644
index 0000000000..c17e883d6c
--- /dev/null
+++ b/meta/recipes-devtools/git/git/CVE-2020-11008-3.patch
@@ -0,0 +1,97 @@
+From 22f28251ae575dd7a60f7a46853469025d004ca7 Mon Sep 17 00:00:00 2001
+From: Jeff King <peff@peff.net>
+Date: Sat, 18 Apr 2020 20:48:05 -0700
+Subject: [PATCH 06/12] credential: parse URL without host as empty host, not
+ unset
+
+We may feed a URL like "cert:///path/to/cert.pem" into the credential
+machinery to get the key for a client-side certificate. That
+credential has no hostname field, which is about to be disallowed (to
+avoid confusion with protocols where a helper _would_ expect a
+hostname).
+
+This means as of the next patch, credential helpers won't work for
+unlocking certs. Let's fix that by doing two things:
+
+ - when we parse a url with an empty host, set the host field to the
+ empty string (asking only to match stored entries with an empty
+ host) rather than NULL (asking to match _any_ host).
+
+ - when we build a cert:// credential by hand, similarly assign an
+ empty string
+
+It's the latter that is more likely to impact real users in practice,
+since it's what's used for http connections. But we don't have good
+infrastructure to test it.
+
+The url-parsing version will help anybody using git-credential in a
+script, and is easy to test.
+
+Signed-off-by: Jeff King <peff@peff.net>
+Reviewed-by: Taylor Blau <me@ttaylorr.com>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+
+Upstream-Status: Backport
+CVE: CVE-2020-11008 (3)
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ credential.c | 3 +--
+ http.c | 1 +
+ t/t0300-credentials.sh | 17 +++++++++++++++++
+ 3 files changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/credential.c b/credential.c
+index 2482382..f2413ce 100644
+--- a/credential.c
++++ b/credential.c
+@@ -376,8 +376,7 @@ int credential_from_url_gently(struct credential *c, const char *url,
+
+ if (proto_end - url > 0)
+ c->protocol = xmemdupz(url, proto_end - url);
+- if (slash - host > 0)
+- c->host = url_decode_mem(host, slash - host);
++ c->host = url_decode_mem(host, slash - host);
+ /* Trim leading and trailing slashes from path */
+ while (*slash == '/')
+ slash++;
+diff --git a/http.c b/http.c
+index 27aa0a3..c4dfdac 100644
+--- a/http.c
++++ b/http.c
+@@ -558,6 +558,7 @@ static int has_cert_password(void)
+ return 0;
+ if (!cert_auth.password) {
+ cert_auth.protocol = xstrdup("cert");
++ cert_auth.host = xstrdup("");
+ cert_auth.username = xstrdup("");
+ cert_auth.path = xstrdup(ssl_cert);
+ credential_fill(&cert_auth);
+diff --git a/t/t0300-credentials.sh b/t/t0300-credentials.sh
+index f4c5d7f..1c1010b 100755
+--- a/t/t0300-credentials.sh
++++ b/t/t0300-credentials.sh
+@@ -414,4 +414,21 @@ test_expect_success 'url parser ignores embedded newlines' '
+ EOF
+ '
+
++test_expect_success 'host-less URLs are parsed as empty host' '
++ check fill "verbatim foo bar" <<-\EOF
++ url=cert:///path/to/cert.pem
++ --
++ protocol=cert
++ host=
++ path=path/to/cert.pem
++ username=foo
++ password=bar
++ --
++ verbatim: get
++ verbatim: protocol=cert
++ verbatim: host=
++ verbatim: path=path/to/cert.pem
++ EOF
++'
++
+ test_done
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/CVE-2020-11008-4.patch b/meta/recipes-devtools/git/git/CVE-2020-11008-4.patch
new file mode 100644
index 0000000000..14e23466d4
--- /dev/null
+++ b/meta/recipes-devtools/git/git/CVE-2020-11008-4.patch
@@ -0,0 +1,173 @@
+From f8bf7099379990ad974c1ca8f51e1f28bf18cf2a Mon Sep 17 00:00:00 2001
+From: Jeff King <peff@peff.net>
+Date: Sat, 18 Apr 2020 20:50:48 -0700
+Subject: [PATCH 07/12] credential: refuse to operate when missing host or
+ protocol
+
+The credential helper protocol was designed to be very flexible: the
+fields it takes as input are treated as a pattern, and any missing
+fields are taken as wildcards. This allows unusual things like:
+
+ echo protocol=https | git credential reject
+
+to delete all stored https credentials (assuming the helpers themselves
+treat the input that way). But when helpers are invoked automatically by
+Git, this flexibility works against us. If for whatever reason we don't
+have a "host" field, then we'd match _any_ host. When you're filling a
+credential to send to a remote server, this is almost certainly not what
+you want.
+
+Prevent this at the layer that writes to the credential helper. Add a
+check to the credential API that the host and protocol are always passed
+in, and add an assertion to the credential_write function that speaks
+credential helper protocol to be doubly sure.
+
+There are a few ways this can be triggered in practice:
+
+ - the "git credential" command passes along arbitrary credential
+ parameters it reads from stdin.
+
+ - until the previous patch, when the host field of a URL is empty, we
+ would leave it unset (rather than setting it to the empty string)
+
+ - a URL like "example.com/foo.git" is treated by curl as if "http://"
+ was present, but our parser sees it as a non-URL and leaves all
+ fields unset
+
+ - the recent fix for URLs with embedded newlines blanks the URL but
+ otherwise continues. Rather than having the desired effect of
+ looking up no credential at all, many helpers will return _any_
+ credential
+
+Our earlier test for an embedded newline didn't catch this because it
+only checked that the credential was cleared, but didn't configure an
+actual helper. Configuring the "verbatim" helper in the test would show
+that it is invoked (it's obviously a silly helper which doesn't look at
+its input, but the point is that it shouldn't be run at all). Since
+we're switching this case to die(), we don't need to bother with a
+helper. We can see the new behavior just by checking that the operation
+fails.
+
+We'll add new tests covering partial input as well (these can be
+triggered through various means with url-parsing, but it's simpler to
+just check them directly, as we know we are covered even if the url
+parser changes behavior in the future).
+
+[jn: changed to die() instead of logging and showing a manual
+ username/password prompt]
+
+Reported-by: Carlo Arenas <carenas@gmail.com>
+Signed-off-by: Jeff King <peff@peff.net>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+
+Upstream-Status: Backport
+CVE: CVE-2020-11008 (4)
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ credential.c | 20 ++++++++++++++------
+ t/t0300-credentials.sh | 34 ++++++++++++++++++++++++++--------
+ 2 files changed, 40 insertions(+), 14 deletions(-)
+
+diff --git a/credential.c b/credential.c
+index f2413ce..e08ed84 100644
+--- a/credential.c
++++ b/credential.c
+@@ -89,6 +89,11 @@ static int proto_is_http(const char *s)
+
+ static void credential_apply_config(struct credential *c)
+ {
++ if (!c->host)
++ die(_("refusing to work with credential missing host field"));
++ if (!c->protocol)
++ die(_("refusing to work with credential missing protocol field"));
++
+ if (c->configured)
+ return;
+ git_config(credential_config_callback, c);
+@@ -191,8 +196,11 @@ int credential_read(struct credential *c, FILE *fp)
+ return 0;
+ }
+
+-static void credential_write_item(FILE *fp, const char *key, const char *value)
++static void credential_write_item(FILE *fp, const char *key, const char *value,
++ int required)
+ {
++ if (!value && required)
++ BUG("credential value for %s is missing", key);
+ if (!value)
+ return;
+ if (strchr(value, '\n'))
+@@ -202,11 +210,11 @@ static void credential_write_item(FILE *fp, const char *key, const char *value)
+
+ void credential_write(const struct credential *c, FILE *fp)
+ {
+- credential_write_item(fp, "protocol", c->protocol);
+- credential_write_item(fp, "host", c->host);
+- credential_write_item(fp, "path", c->path);
+- credential_write_item(fp, "username", c->username);
+- credential_write_item(fp, "password", c->password);
++ credential_write_item(fp, "protocol", c->protocol, 1);
++ credential_write_item(fp, "host", c->host, 1);
++ credential_write_item(fp, "path", c->path, 0);
++ credential_write_item(fp, "username", c->username, 0);
++ credential_write_item(fp, "password", c->password, 0);
+ }
+
+ static int run_credential_helper(struct credential *c,
+diff --git a/t/t0300-credentials.sh b/t/t0300-credentials.sh
+index 1c1010b..646f845 100755
+--- a/t/t0300-credentials.sh
++++ b/t/t0300-credentials.sh
+@@ -400,18 +400,16 @@ test_expect_success 'empty helper spec resets helper list' '
+ EOF
+ '
+
+-test_expect_success 'url parser ignores embedded newlines' '
+- check fill <<-EOF
++test_expect_success 'url parser rejects embedded newlines' '
++ test_must_fail git credential fill 2>stderr <<-\EOF &&
+ url=https://one.example.com?%0ahost=two.example.com/
+- --
+- username=askpass-username
+- password=askpass-password
+- --
++ EOF
++ cat >expect <<-\EOF &&
+ warning: url contains a newline in its host component: https://one.example.com?%0ahost=two.example.com/
+ warning: skipping credential lookup for url: https://one.example.com?%0ahost=two.example.com/
+- askpass: Username:
+- askpass: Password:
++ fatal: refusing to work with credential missing host field
+ EOF
++ test_i18ncmp expect stderr
+ '
+
+ test_expect_success 'host-less URLs are parsed as empty host' '
+@@ -431,4 +429,24 @@ test_expect_success 'host-less URLs are parsed as empty host' '
+ EOF
+ '
+
++test_expect_success 'credential system refuses to work with missing host' '
++ test_must_fail git credential fill 2>stderr <<-\EOF &&
++ protocol=http
++ EOF
++ cat >expect <<-\EOF &&
++ fatal: refusing to work with credential missing host field
++ EOF
++ test_i18ncmp expect stderr
++'
++
++test_expect_success 'credential system refuses to work with missing protocol' '
++ test_must_fail git credential fill 2>stderr <<-\EOF &&
++ host=example.com
++ EOF
++ cat >expect <<-\EOF &&
++ fatal: refusing to work with credential missing protocol field
++ EOF
++ test_i18ncmp expect stderr
++'
++
+ test_done
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/CVE-2020-11008-5.patch b/meta/recipes-devtools/git/git/CVE-2020-11008-5.patch
new file mode 100644
index 0000000000..60f8d59082
--- /dev/null
+++ b/meta/recipes-devtools/git/git/CVE-2020-11008-5.patch
@@ -0,0 +1,211 @@
+From 3431abe8c0f64f4049a31298c0b1056baa7d81dc Mon Sep 17 00:00:00 2001
+From: Li Zhou <li.zhou@windriver.com>
+Date: Mon, 27 Apr 2020 14:45:49 +0800
+Subject: [PATCH 08/12] fsck: convert gitmodules url to URL passed to curl
+
+In 07259e74ec1 (fsck: detect gitmodules URLs with embedded newlines,
+2020-03-11), git fsck learned to check whether URLs in .gitmodules could
+be understood by the credential machinery when they are handled by
+git-remote-curl.
+
+However, the check is overbroad: it checks all URLs instead of only
+URLs that would be passed to git-remote-curl. In principle a git:// or
+file:/// URL does not need to follow the same conventions as an http://
+URL; in particular, git:// and file:// protocols are not succeptible to
+issues in the credential API because they do not support attaching
+credentials.
+
+In the HTTP case, the URL in .gitmodules does not always match the URL
+that would be passed to git-remote-curl and the credential machinery:
+Git's URL syntax allows specifying a remote helper followed by a "::"
+delimiter and a URL to be passed to it, so that
+
+ git ls-remote http::https://example.com/repo.git
+
+invokes git-remote-http with https://example.com/repo.git as its URL
+argument. With today's checks, that distinction does not make a
+difference, but for a check we are about to introduce (for empty URL
+schemes) it will matter.
+
+.gitmodules files also support relative URLs. To ensure coverage for the
+https based embedded-newline attack, urldecode and check them directly
+for embedded newlines.
+
+Helped-by: Jeff King <peff@peff.net>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+Reviewed-by: Jeff King <peff@peff.net>
+
+Upstream-Status: Backport
+CVE: CVE-2020-11008 (5)
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ fsck.c | 94 ++++++++++++++++++++++++++++++++++++++++---
+ t/t7416-submodule-dash-url.sh | 29 +++++++++++++
+ 2 files changed, 118 insertions(+), 5 deletions(-)
+
+diff --git a/fsck.c b/fsck.c
+index ea46eea..0f21eb1 100644
+--- a/fsck.c
++++ b/fsck.c
+@@ -9,6 +9,7 @@
+ #include "tag.h"
+ #include "fsck.h"
+ #include "refs.h"
++#include "url.h"
+ #include "utf8.h"
+ #include "decorate.h"
+ #include "oidset.h"
+@@ -948,17 +949,100 @@ static int fsck_tag(struct tag *tag, const char *data,
+ return fsck_tag_buffer(tag, data, size, options);
+ }
+
++/*
++ * Like builtin/submodule--helper.c's starts_with_dot_slash, but without
++ * relying on the platform-dependent is_dir_sep helper.
++ *
++ * This is for use in checking whether a submodule URL is interpreted as
++ * relative to the current directory on any platform, since \ is a
++ * directory separator on Windows but not on other platforms.
++ */
++static int starts_with_dot_slash(const char *str)
++{
++ return str[0] == '.' && (str[1] == '/' || str[1] == '\\');
++}
++
++/*
++ * Like starts_with_dot_slash, this is a variant of submodule--helper's
++ * helper of the same name with the twist that it accepts backslash as a
++ * directory separator even on non-Windows platforms.
++ */
++static int starts_with_dot_dot_slash(const char *str)
++{
++ return str[0] == '.' && starts_with_dot_slash(str + 1);
++}
++
++static int submodule_url_is_relative(const char *url)
++{
++ return starts_with_dot_slash(url) || starts_with_dot_dot_slash(url);
++}
++
++/*
++ * Check whether a transport is implemented by git-remote-curl.
++ *
++ * If it is, returns 1 and writes the URL that would be passed to
++ * git-remote-curl to the "out" parameter.
++ *
++ * Otherwise, returns 0 and leaves "out" untouched.
++ *
++ * Examples:
++ * http::https://example.com/repo.git -> 1, https://example.com/repo.git
++ * https://example.com/repo.git -> 1, https://example.com/repo.git
++ * git://example.com/repo.git -> 0
++ *
++ * This is for use in checking for previously exploitable bugs that
++ * required a submodule URL to be passed to git-remote-curl.
++ */
++static int url_to_curl_url(const char *url, const char **out)
++{
++ /*
++ * We don't need to check for case-aliases, "http.exe", and so
++ * on because in the default configuration, is_transport_allowed
++ * prevents URLs with those schemes from being cloned
++ * automatically.
++ */
++ if (skip_prefix(url, "http::", out) ||
++ skip_prefix(url, "https::", out) ||
++ skip_prefix(url, "ftp::", out) ||
++ skip_prefix(url, "ftps::", out))
++ return 1;
++ if (starts_with(url, "http://") ||
++ starts_with(url, "https://") ||
++ starts_with(url, "ftp://") ||
++ starts_with(url, "ftps://")) {
++ *out = url;
++ return 1;
++ }
++ return 0;
++}
++
+ static int check_submodule_url(const char *url)
+ {
+- struct credential c = CREDENTIAL_INIT;
+- int ret;
++ const char *curl_url;
+
+ if (looks_like_command_line_option(url))
+ return -1;
+
+- ret = credential_from_url_gently(&c, url, 1);
+- credential_clear(&c);
+- return ret;
++ if (submodule_url_is_relative(url)) {
++ /*
++ * This could be appended to an http URL and url-decoded;
++ * check for malicious characters.
++ */
++ char *decoded = url_decode(url);
++ int has_nl = !!strchr(decoded, '\n');
++ free(decoded);
++ if (has_nl)
++ return -1;
++ }
++
++ else if (url_to_curl_url(url, &curl_url)) {
++ struct credential c = CREDENTIAL_INIT;
++ int ret = credential_from_url_gently(&c, curl_url, 1);
++ credential_clear(&c);
++ return ret;
++ }
++
++ return 0;
+ }
+
+ struct fsck_gitmodules_data {
+diff --git a/t/t7416-submodule-dash-url.sh b/t/t7416-submodule-dash-url.sh
+index 41431b1..afdd255 100755
+--- a/t/t7416-submodule-dash-url.sh
++++ b/t/t7416-submodule-dash-url.sh
+@@ -60,6 +60,20 @@ test_expect_success 'trailing backslash is handled correctly' '
+ test_i18ngrep ! "unknown option" err
+ '
+
++test_expect_success 'fsck permits embedded newline with unrecognized scheme' '
++ git checkout --orphan newscheme &&
++ cat >.gitmodules <<-\EOF &&
++ [submodule "foo"]
++ url = "data://acjbkd%0akajfdickajkd"
++ EOF
++ git add .gitmodules &&
++ git commit -m "gitmodules with unrecognized scheme" &&
++ test_when_finished "rm -rf dst" &&
++ git init --bare dst &&
++ git -C dst config transfer.fsckObjects true &&
++ git push dst HEAD
++'
++
+ test_expect_success 'fsck rejects embedded newline in url' '
+ # create an orphan branch to avoid existing .gitmodules objects
+ git checkout --orphan newline &&
+@@ -76,4 +90,19 @@ test_expect_success 'fsck rejects embedded newline in url' '
+ grep gitmodulesUrl err
+ '
+
++test_expect_success 'fsck rejects embedded newline in relative url' '
++ git checkout --orphan relative-newline &&
++ cat >.gitmodules <<-\EOF &&
++ [submodule "foo"]
++ url = "./%0ahost=two.example.com/foo.git"
++ EOF
++ git add .gitmodules &&
++ git commit -m "relative url with newline" &&
++ test_when_finished "rm -rf dst" &&
++ git init --bare dst &&
++ git -C dst config transfer.fsckObjects true &&
++ test_must_fail git push dst HEAD 2>err &&
++ grep gitmodulesUrl err
++'
++
+ test_done
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/CVE-2020-11008-6.patch b/meta/recipes-devtools/git/git/CVE-2020-11008-6.patch
new file mode 100644
index 0000000000..6b36893030
--- /dev/null
+++ b/meta/recipes-devtools/git/git/CVE-2020-11008-6.patch
@@ -0,0 +1,84 @@
+From 883508bcebe87fbe7fb7392272e930c27c30fdc2 Mon Sep 17 00:00:00 2001
+From: Jeff King <peff@peff.net>
+Date: Sat, 18 Apr 2020 20:53:09 -0700
+Subject: [PATCH 09/12] credential: die() when parsing invalid urls
+
+When we try to initialize credential loading by URL and find that the
+URL is invalid, we set all fields to NULL in order to avoid acting on
+malicious input. Later when we request credentials, we diagonse the
+erroneous input:
+
+ fatal: refusing to work with credential missing host field
+
+This is problematic in two ways:
+
+- The message doesn't tell the user *why* we are missing the host
+ field, so they can't tell from this message alone how to recover.
+ There can be intervening messages after the original warning of
+ bad input, so the user may not have the context to put two and two
+ together.
+
+- The error only occurs when we actually need to get a credential. If
+ the URL permits anonymous access, the only encouragement the user gets
+ to correct their bogus URL is a quiet warning.
+
+ This is inconsistent with the check we perform in fsck, where any use
+ of such a URL as a submodule is an error.
+
+When we see such a bogus URL, let's not try to be nice and continue
+without helpers. Instead, die() immediately. This is simpler and
+obviously safe. And there's very little chance of disrupting a normal
+workflow.
+
+It's _possible_ that somebody has a legitimate URL with a raw newline in
+it. It already wouldn't work with credential helpers, so this patch
+steps that up from an inconvenience to "we will refuse to work with it
+at all". If such a case does exist, we should figure out a way to work
+with it (especially if the newline is only in the path component, which
+we normally don't even pass to helpers). But until we see a real report,
+we're better off being defensive.
+
+Reported-by: Carlo Arenas <carenas@gmail.com>
+Signed-off-by: Jeff King <peff@peff.net>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+
+Upstream-Status: Backport
+CVE: CVE-2020-11008 (6)
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ credential.c | 6 ++----
+ t/t0300-credentials.sh | 3 +--
+ 2 files changed, 3 insertions(+), 6 deletions(-)
+
+diff --git a/credential.c b/credential.c
+index e08ed84..22649d5 100644
+--- a/credential.c
++++ b/credential.c
+@@ -408,8 +408,6 @@ int credential_from_url_gently(struct credential *c, const char *url,
+
+ void credential_from_url(struct credential *c, const char *url)
+ {
+- if (credential_from_url_gently(c, url, 0) < 0) {
+- warning(_("skipping credential lookup for url: %s"), url);
+- credential_clear(c);
+- }
++ if (credential_from_url_gently(c, url, 0) < 0)
++ die(_("credential url cannot be parsed: %s"), url);
+ }
+diff --git a/t/t0300-credentials.sh b/t/t0300-credentials.sh
+index 646f845..efed3ea 100755
+--- a/t/t0300-credentials.sh
++++ b/t/t0300-credentials.sh
+@@ -406,8 +406,7 @@ test_expect_success 'url parser rejects embedded newlines' '
+ EOF
+ cat >expect <<-\EOF &&
+ warning: url contains a newline in its host component: https://one.example.com?%0ahost=two.example.com/
+- warning: skipping credential lookup for url: https://one.example.com?%0ahost=two.example.com/
+- fatal: refusing to work with credential missing host field
++ fatal: credential url cannot be parsed: https://one.example.com?%0ahost=two.example.com/
+ EOF
+ test_i18ncmp expect stderr
+ '
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/CVE-2020-11008-7.patch b/meta/recipes-devtools/git/git/CVE-2020-11008-7.patch
new file mode 100644
index 0000000000..5e3b6f1454
--- /dev/null
+++ b/meta/recipes-devtools/git/git/CVE-2020-11008-7.patch
@@ -0,0 +1,206 @@
+From 68acf8724e9cb2f67664dd980581c0022401daf0 Mon Sep 17 00:00:00 2001
+From: Jonathan Nieder <jrnieder@gmail.com>
+Date: Sat, 18 Apr 2020 20:54:13 -0700
+Subject: [PATCH 10/12] credential: treat URL without scheme as invalid
+
+libcurl permits making requests without a URL scheme specified. In
+this case, it guesses the URL from the hostname, so I can run
+
+ git ls-remote http::ftp.example.com/path/to/repo
+
+and it would make an FTP request.
+
+Any user intentionally using such a URL is likely to have made a typo.
+Unfortunately, credential_from_url is not able to determine the host and
+protocol in order to determine appropriate credentials to send, and
+until "credential: refuse to operate when missing host or protocol",
+this resulted in another host's credentials being leaked to the named
+host.
+
+Teach credential_from_url_gently to consider such a URL to be invalid
+so that fsck can detect and block gitmodules files with such URLs,
+allowing server operators to avoid serving them to downstream users
+running older versions of Git.
+
+This also means that when such URLs are passed on the command line, Git
+will print a clearer error so affected users can switch to the simpler
+URL that explicitly specifies the host and protocol they intend.
+
+One subtlety: .gitmodules files can contain relative URLs, representing
+a URL relative to the URL they were cloned from. The relative URL
+resolver used for .gitmodules can follow ".." components out of the path
+part and past the host part of a URL, meaning that such a relative URL
+can be used to traverse from a https://foo.example.com/innocent
+superproject to a https::attacker.example.com/exploit submodule.
+Fortunately a leading ':' in the first path component after a series of
+leading './' and '../' components is unlikely to show up in other
+contexts, so we can catch this by detecting that pattern.
+
+Reported-by: Jeff King <peff@peff.net>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+Reviewed-by: Jeff King <peff@peff.net>
+
+Upstream-Status: Backport
+CVE: CVE-2020-11008 (7)
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ credential.c | 7 +++++--
+ fsck.c | 47 +++++++++++++++++++++++++++++++++++++++++--
+ t/t5550-http-fetch-dumb.sh | 7 ++-----
+ t/t7416-submodule-dash-url.sh | 32 +++++++++++++++++++++++++++++
+ 4 files changed, 84 insertions(+), 9 deletions(-)
+
+diff --git a/credential.c b/credential.c
+index 22649d5..1e1aed5 100644
+--- a/credential.c
++++ b/credential.c
+@@ -360,8 +360,11 @@ int credential_from_url_gently(struct credential *c, const char *url,
+ * (3) proto://<user>:<pass>@<host>/...
+ */
+ proto_end = strstr(url, "://");
+- if (!proto_end)
+- return 0;
++ if (!proto_end) {
++ if (!quiet)
++ warning(_("url has no scheme: %s"), url);
++ return -1;
++ }
+ cp = proto_end + 3;
+ at = strchr(cp, '@');
+ colon = strchr(cp, ':');
+diff --git a/fsck.c b/fsck.c
+index 0f21eb1..30eac29 100644
+--- a/fsck.c
++++ b/fsck.c
+@@ -978,6 +978,34 @@ static int submodule_url_is_relative(const char *url)
+ }
+
+ /*
++ * Count directory components that a relative submodule URL should chop
++ * from the remote_url it is to be resolved against.
++ *
++ * In other words, this counts "../" components at the start of a
++ * submodule URL.
++ *
++ * Returns the number of directory components to chop and writes a
++ * pointer to the next character of url after all leading "./" and
++ * "../" components to out.
++ */
++static int count_leading_dotdots(const char *url, const char **out)
++{
++ int result = 0;
++ while (1) {
++ if (starts_with_dot_dot_slash(url)) {
++ result++;
++ url += strlen("../");
++ continue;
++ }
++ if (starts_with_dot_slash(url)) {
++ url += strlen("./");
++ continue;
++ }
++ *out = url;
++ return result;
++ }
++}
++/*
+ * Check whether a transport is implemented by git-remote-curl.
+ *
+ * If it is, returns 1 and writes the URL that would be passed to
+@@ -1024,15 +1052,30 @@ static int check_submodule_url(const char *url)
+ return -1;
+
+ if (submodule_url_is_relative(url)) {
++ char *decoded;
++ const char *next;
++ int has_nl;
++
+ /*
+ * This could be appended to an http URL and url-decoded;
+ * check for malicious characters.
+ */
+- char *decoded = url_decode(url);
+- int has_nl = !!strchr(decoded, '\n');
++ decoded = url_decode(url);
++ has_nl = !!strchr(decoded, '\n');
++
+ free(decoded);
+ if (has_nl)
+ return -1;
++
++ /*
++ * URLs which escape their root via "../" can overwrite
++ * the host field and previous components, resolving to
++ * URLs like https::example.com/submodule.git that were
++ * susceptible to CVE-2020-11008.
++ */
++ if (count_leading_dotdots(url, &next) > 0 &&
++ *next == ':')
++ return -1;
+ }
+
+ else if (url_to_curl_url(url, &curl_url)) {
+diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh
+index b811d89..1c9e5d3 100755
+--- a/t/t5550-http-fetch-dumb.sh
++++ b/t/t5550-http-fetch-dumb.sh
+@@ -321,11 +321,8 @@ test_expect_success 'git client does not send an empty Accept-Language' '
+ '
+
+ test_expect_success 'remote-http complains cleanly about malformed urls' '
+- # do not actually issue "list" or other commands, as we do not
+- # want to rely on what curl would actually do with such a broken
+- # URL. This is just about making sure we do not segfault during
+- # initialization.
+- test_must_fail git remote-http http::/example.com/repo.git
++ test_must_fail git remote-http http::/example.com/repo.git 2>stderr &&
++ test_i18ngrep "url has no scheme" stderr
+ '
+
+ test_expect_success 'redirects can be forbidden/allowed' '
+diff --git a/t/t7416-submodule-dash-url.sh b/t/t7416-submodule-dash-url.sh
+index afdd255..249dc3d 100755
+--- a/t/t7416-submodule-dash-url.sh
++++ b/t/t7416-submodule-dash-url.sh
+@@ -60,6 +60,38 @@ test_expect_success 'trailing backslash is handled correctly' '
+ test_i18ngrep ! "unknown option" err
+ '
+
++test_expect_success 'fsck rejects missing URL scheme' '
++ git checkout --orphan missing-scheme &&
++ cat >.gitmodules <<-\EOF &&
++ [submodule "foo"]
++ url = http::one.example.com/foo.git
++ EOF
++ git add .gitmodules &&
++ test_tick &&
++ git commit -m "gitmodules with missing URL scheme" &&
++ test_when_finished "rm -rf dst" &&
++ git init --bare dst &&
++ git -C dst config transfer.fsckObjects true &&
++ test_must_fail git push dst HEAD 2>err &&
++ grep gitmodulesUrl err
++'
++
++test_expect_success 'fsck rejects relative URL resolving to missing scheme' '
++ git checkout --orphan relative-missing-scheme &&
++ cat >.gitmodules <<-\EOF &&
++ [submodule "foo"]
++ url = "..\\../.\\../:one.example.com/foo.git"
++ EOF
++ git add .gitmodules &&
++ test_tick &&
++ git commit -m "gitmodules with relative URL that strips off scheme" &&
++ test_when_finished "rm -rf dst" &&
++ git init --bare dst &&
++ git -C dst config transfer.fsckObjects true &&
++ test_must_fail git push dst HEAD 2>err &&
++ grep gitmodulesUrl err
++'
++
+ test_expect_success 'fsck permits embedded newline with unrecognized scheme' '
+ git checkout --orphan newscheme &&
+ cat >.gitmodules <<-\EOF &&
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/CVE-2020-11008-8.patch b/meta/recipes-devtools/git/git/CVE-2020-11008-8.patch
new file mode 100644
index 0000000000..935d47795f
--- /dev/null
+++ b/meta/recipes-devtools/git/git/CVE-2020-11008-8.patch
@@ -0,0 +1,114 @@
+From 5e06d0781a963d62413ae7eab4eb78cc7195af8b Mon Sep 17 00:00:00 2001
+From: Jonathan Nieder <jrnieder@gmail.com>
+Date: Sat, 18 Apr 2020 20:54:57 -0700
+Subject: [PATCH 11/12] credential: treat URL with empty scheme as invalid
+
+Until "credential: refuse to operate when missing host or protocol",
+Git's credential handling code interpreted URLs with empty scheme to
+mean "give me credentials matching this host for any protocol".
+
+Luckily libcurl does not recognize such URLs (it tries to look for a
+protocol named "" and fails). Just in case that changes, let's reject
+them within Git as well. This way, credential_from_url is guaranteed to
+always produce a "struct credential" with protocol and host set.
+
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+
+Upstream-Status: Backport
+CVE: CVE-2020-11008 (8)
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ credential.c | 5 ++---
+ t/t5550-http-fetch-dumb.sh | 9 +++++++++
+ t/t7416-submodule-dash-url.sh | 32 ++++++++++++++++++++++++++++++++
+ 3 files changed, 43 insertions(+), 3 deletions(-)
+
+diff --git a/credential.c b/credential.c
+index 1e1aed5..cf11cc9 100644
+--- a/credential.c
++++ b/credential.c
+@@ -360,7 +360,7 @@ int credential_from_url_gently(struct credential *c, const char *url,
+ * (3) proto://<user>:<pass>@<host>/...
+ */
+ proto_end = strstr(url, "://");
+- if (!proto_end) {
++ if (!proto_end || proto_end == url) {
+ if (!quiet)
+ warning(_("url has no scheme: %s"), url);
+ return -1;
+@@ -385,8 +385,7 @@ int credential_from_url_gently(struct credential *c, const char *url,
+ host = at + 1;
+ }
+
+- if (proto_end - url > 0)
+- c->protocol = xmemdupz(url, proto_end - url);
++ c->protocol = xmemdupz(url, proto_end - url);
+ c->host = url_decode_mem(host, slash - host);
+ /* Trim leading and trailing slashes from path */
+ while (*slash == '/')
+diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh
+index 1c9e5d3..ea2688b 100755
+--- a/t/t5550-http-fetch-dumb.sh
++++ b/t/t5550-http-fetch-dumb.sh
+@@ -325,6 +325,15 @@ test_expect_success 'remote-http complains cleanly about malformed urls' '
+ test_i18ngrep "url has no scheme" stderr
+ '
+
++# NEEDSWORK: Writing commands to git-remote-curl can race against the latter
++# erroring out, producing SIGPIPE. Remove "ok=sigpipe" once transport-helper has
++# learned to handle early remote helper failures more cleanly.
++test_expect_success 'remote-http complains cleanly about empty scheme' '
++ test_must_fail ok=sigpipe git ls-remote \
++ http::${HTTPD_URL#http}/dumb/repo.git 2>stderr &&
++ test_i18ngrep "url has no scheme" stderr
++'
++
+ test_expect_success 'redirects can be forbidden/allowed' '
+ test_must_fail git -c http.followRedirects=false \
+ clone $HTTPD_URL/dumb-redir/repo.git dumb-redir &&
+diff --git a/t/t7416-submodule-dash-url.sh b/t/t7416-submodule-dash-url.sh
+index 249dc3d..9309040 100755
+--- a/t/t7416-submodule-dash-url.sh
++++ b/t/t7416-submodule-dash-url.sh
+@@ -92,6 +92,38 @@ test_expect_success 'fsck rejects relative URL resolving to missing scheme' '
+ grep gitmodulesUrl err
+ '
+
++test_expect_success 'fsck rejects empty URL scheme' '
++ git checkout --orphan empty-scheme &&
++ cat >.gitmodules <<-\EOF &&
++ [submodule "foo"]
++ url = http::://one.example.com/foo.git
++ EOF
++ git add .gitmodules &&
++ test_tick &&
++ git commit -m "gitmodules with empty URL scheme" &&
++ test_when_finished "rm -rf dst" &&
++ git init --bare dst &&
++ git -C dst config transfer.fsckObjects true &&
++ test_must_fail git push dst HEAD 2>err &&
++ grep gitmodulesUrl err
++'
++
++test_expect_success 'fsck rejects relative URL resolving to empty scheme' '
++ git checkout --orphan relative-empty-scheme &&
++ cat >.gitmodules <<-\EOF &&
++ [submodule "foo"]
++ url = ../../../:://one.example.com/foo.git
++ EOF
++ git add .gitmodules &&
++ test_tick &&
++ git commit -m "relative gitmodules URL resolving to empty scheme" &&
++ test_when_finished "rm -rf dst" &&
++ git init --bare dst &&
++ git -C dst config transfer.fsckObjects true &&
++ test_must_fail git push dst HEAD 2>err &&
++ grep gitmodulesUrl err
++'
++
+ test_expect_success 'fsck permits embedded newline with unrecognized scheme' '
+ git checkout --orphan newscheme &&
+ cat >.gitmodules <<-\EOF &&
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/CVE-2020-11008-9.patch b/meta/recipes-devtools/git/git/CVE-2020-11008-9.patch
new file mode 100644
index 0000000000..22292dbbbf
--- /dev/null
+++ b/meta/recipes-devtools/git/git/CVE-2020-11008-9.patch
@@ -0,0 +1,114 @@
+From 2e084e25fa454c58a600c9434f776f2150037a76 Mon Sep 17 00:00:00 2001
+From: Jonathan Nieder <jrnieder@gmail.com>
+Date: Sat, 18 Apr 2020 20:57:22 -0700
+Subject: [PATCH 12/12] fsck: reject URL with empty host in .gitmodules
+
+Git's URL parser interprets
+
+ https:///example.com/repo.git
+
+to have no host and a path of "example.com/repo.git". Curl, on the
+other hand, internally redirects it to https://example.com/repo.git. As
+a result, until "credential: parse URL without host as empty host, not
+unset", tricking a user into fetching from such a URL would cause Git to
+send credentials for another host to example.com.
+
+Teach fsck to block and detect .gitmodules files using such a URL to
+prevent sharing them with Git versions that are not yet protected.
+
+A relative URL in a .gitmodules file could also be used to trigger this.
+The relative URL resolver used for .gitmodules does not normalize
+sequences of slashes and can follow ".." components out of the path part
+and to the host part of a URL, meaning that such a relative URL can be
+used to traverse from a https://foo.example.com/innocent superproject to
+a https:///attacker.example.com/exploit submodule. Fortunately,
+redundant extra slashes in .gitmodules are rare, so we can catch this by
+detecting one after a leading sequence of "./" and "../" components.
+
+Helped-by: Jeff King <peff@peff.net>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+Reviewed-by: Jeff King <peff@peff.net>
+
+Upstream-Status: Backport
+CVE: CVE-2020-11008 (9)
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ fsck.c | 10 +++++++---
+ t/t7416-submodule-dash-url.sh | 32 ++++++++++++++++++++++++++++++++
+ 2 files changed, 39 insertions(+), 3 deletions(-)
+
+diff --git a/fsck.c b/fsck.c
+index 30eac29..00077b1 100644
+--- a/fsck.c
++++ b/fsck.c
+@@ -1070,17 +1070,21 @@ static int check_submodule_url(const char *url)
+ /*
+ * URLs which escape their root via "../" can overwrite
+ * the host field and previous components, resolving to
+- * URLs like https::example.com/submodule.git that were
++ * URLs like https::example.com/submodule.git and
++ * https:///example.com/submodule.git that were
+ * susceptible to CVE-2020-11008.
+ */
+ if (count_leading_dotdots(url, &next) > 0 &&
+- *next == ':')
++ (*next == ':' || *next == '/'))
+ return -1;
+ }
+
+ else if (url_to_curl_url(url, &curl_url)) {
+ struct credential c = CREDENTIAL_INIT;
+- int ret = credential_from_url_gently(&c, curl_url, 1);
++ int ret = 0;
++ if (credential_from_url_gently(&c, curl_url, 1) ||
++ !*c.host)
++ ret = -1;
+ credential_clear(&c);
+ return ret;
+ }
+diff --git a/t/t7416-submodule-dash-url.sh b/t/t7416-submodule-dash-url.sh
+index 9309040..eec96e0 100755
+--- a/t/t7416-submodule-dash-url.sh
++++ b/t/t7416-submodule-dash-url.sh
+@@ -124,6 +124,38 @@ test_expect_success 'fsck rejects relative URL resolving to empty scheme' '
+ grep gitmodulesUrl err
+ '
+
++test_expect_success 'fsck rejects empty hostname' '
++ git checkout --orphan empty-host &&
++ cat >.gitmodules <<-\EOF &&
++ [submodule "foo"]
++ url = http:///one.example.com/foo.git
++ EOF
++ git add .gitmodules &&
++ test_tick &&
++ git commit -m "gitmodules with extra slashes" &&
++ test_when_finished "rm -rf dst" &&
++ git init --bare dst &&
++ git -C dst config transfer.fsckObjects true &&
++ test_must_fail git push dst HEAD 2>err &&
++ grep gitmodulesUrl err
++'
++
++test_expect_success 'fsck rejects relative url that produced empty hostname' '
++ git checkout --orphan messy-relative &&
++ cat >.gitmodules <<-\EOF &&
++ [submodule "foo"]
++ url = ../../..//one.example.com/foo.git
++ EOF
++ git add .gitmodules &&
++ test_tick &&
++ git commit -m "gitmodules abusing relative_path" &&
++ test_when_finished "rm -rf dst" &&
++ git init --bare dst &&
++ git -C dst config transfer.fsckObjects true &&
++ test_must_fail git push dst HEAD 2>err &&
++ grep gitmodulesUrl err
++'
++
+ test_expect_success 'fsck permits embedded newline with unrecognized scheme' '
+ git checkout --orphan newscheme &&
+ cat >.gitmodules <<-\EOF &&
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git/CVE-2020-5260.patch b/meta/recipes-devtools/git/git/CVE-2020-5260.patch
new file mode 100644
index 0000000000..d03e701a8f
--- /dev/null
+++ b/meta/recipes-devtools/git/git/CVE-2020-5260.patch
@@ -0,0 +1,65 @@
+From 9a6bbee8006c24b46a85d29e7b38cfa79e9ab21b Mon Sep 17 00:00:00 2001
+From: Jeff King <peff@peff.net>
+Date: Wed, 11 Mar 2020 17:53:41 -0400
+Subject: [PATCH] credential: avoid writing values with newlines
+
+The credential protocol that we use to speak to helpers can't represent
+values with newlines in them. This was an intentional design choice to
+keep the protocol simple, since none of the values we pass should
+generally have newlines.
+
+However, if we _do_ encounter a newline in a value, we blindly transmit
+it in credential_write(). Such values may break the protocol syntax, or
+worse, inject new valid lines into the protocol stream.
+
+The most likely way for a newline to end up in a credential struct is by
+decoding a URL with a percent-encoded newline. However, since the bug
+occurs at the moment we write the value to the protocol, we'll catch it
+there. That should leave no possibility of accidentally missing a code
+path that can trigger the problem.
+
+At this level of the code we have little choice but to die(). However,
+since we'd not ever expect to see this case outside of a malicious URL,
+that's an acceptable outcome.
+
+Reported-by: Felix Wilhelm <fwilhelm@google.com>
+
+Upstream-Status: Backport
+CVE: CVE-2020-5260
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ credential.c | 2 ++
+ t/t0300-credentials.sh | 6 ++++++
+ 2 files changed, 8 insertions(+)
+
+diff --git a/credential.c b/credential.c
+index 9747f47..00ee4d6 100644
+--- a/credential.c
++++ b/credential.c
+@@ -194,6 +194,8 @@ static void credential_write_item(FILE *fp, const char *key, const char *value)
+ {
+ if (!value)
+ return;
++ if (strchr(value, '\n'))
++ die("credential value for %s contains newline", key);
+ fprintf(fp, "%s=%s\n", key, value);
+ }
+
+diff --git a/t/t0300-credentials.sh b/t/t0300-credentials.sh
+index 03bd31e..15cc3c5 100755
+--- a/t/t0300-credentials.sh
++++ b/t/t0300-credentials.sh
+@@ -309,4 +309,10 @@ test_expect_success 'empty helper spec resets helper list' '
+ EOF
+ '
+
++test_expect_success 'url parser rejects embedded newlines' '
++ test_must_fail git credential fill <<-\EOF
++ url=https://one.example.com?%0ahost=two.example.com/
++ EOF
++'
++
+ test_done
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/git/git_2.23.0.bb b/meta/recipes-devtools/git/git_2.23.0.bb
deleted file mode 100644
index 1539182a90..0000000000
--- a/meta/recipes-devtools/git/git_2.23.0.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require git.inc
-
-EXTRA_OECONF += "ac_cv_snprintf_returns_bogus=no \
- ac_cv_fread_reads_directories=${ac_cv_fread_reads_directories=yes} \
- "
-EXTRA_OEMAKE += "NO_GETTEXT=1"
-
-SRC_URI[tarball.md5sum] = "203c238ffdcef76f9bd6c67cfbaf949f"
-SRC_URI[tarball.sha256sum] = "e3396c90888111a01bf607346db09b0fbf49a95bc83faf9506b61195936f0cfe"
-SRC_URI[manpages.md5sum] = "90a72e553de712d798d68b15b57bc928"
-SRC_URI[manpages.sha256sum] = "a5b0998f95c2290386d191d34780d145ea67e527fac98541e0350749bf76be75"
diff --git a/meta/recipes-devtools/git/git_2.23.1.bb b/meta/recipes-devtools/git/git_2.23.1.bb
new file mode 100644
index 0000000000..7d8287d8a7
--- /dev/null
+++ b/meta/recipes-devtools/git/git_2.23.1.bb
@@ -0,0 +1,11 @@
+require git.inc
+
+EXTRA_OECONF += "ac_cv_snprintf_returns_bogus=no \
+ ac_cv_fread_reads_directories=${ac_cv_fread_reads_directories=yes} \
+ "
+EXTRA_OEMAKE += "NO_GETTEXT=1"
+
+SRC_URI[tarball.md5sum] = "5dbd2a5bf2c4aeec65a7b34229ba47f2"
+SRC_URI[tarball.sha256sum] = "d24f129cb0d395550b9ba62f518200405e9fee422134cb46b9820f2db2f54b47"
+SRC_URI[manpages.md5sum] = "890a45439e8462460a590aeb7fe7725c"
+SRC_URI[manpages.sha256sum] = "efd51b6078469501ccbe2e39c5565ba696e9bdf213453ac477be0c256fc7ad42"
diff --git a/meta/recipes-devtools/go/go-1.12.inc b/meta/recipes-devtools/go/go-1.12.inc
index ed14b175e6..2a0680aeaa 100644
--- a/meta/recipes-devtools/go/go-1.12.inc
+++ b/meta/recipes-devtools/go/go-1.12.inc
@@ -17,6 +17,11 @@ SRC_URI += "\
file://0007-cmd-go-make-GOROOT-precious-by-default.patch \
file://0008-use-GOBUILDMODE-to-set-buildmode.patch \
file://0001-release-branch.go1.12-security-net-textproto-don-t-n.patch \
+ file://0010-fix-CVE-2019-17596.patch \
+ file://CVE-2020-15586.patch \
+ file://CVE-2020-16845.patch \
+ file://0001-net-http-cgi-rename-a-test-file-to-be-less-cute.patch \
+ file://CVE-2020-24553.patch \
"
SRC_URI_append_libc-musl = " file://0009-ld-replace-glibc-dynamic-linker-with-musl.patch"
diff --git a/meta/recipes-devtools/go/go-1.12/0001-net-http-cgi-rename-a-test-file-to-be-less-cute.patch b/meta/recipes-devtools/go/go-1.12/0001-net-http-cgi-rename-a-test-file-to-be-less-cute.patch
new file mode 100644
index 0000000000..7c07961c03
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.12/0001-net-http-cgi-rename-a-test-file-to-be-less-cute.patch
@@ -0,0 +1,28 @@
+From 8390c478600b852392cb116741b3cb239c94d123 Mon Sep 17 00:00:00 2001
+From: Brad Fitzpatrick <bradfitz@golang.org>
+Date: Wed, 15 Jan 2020 18:08:10 +0000
+Subject: [PATCH] net/http/cgi: rename a test file to be less cute
+
+My fault (from CL 4245070), sorry.
+
+Change-Id: Ib95d3170dc326e74aa74c22421c4e44a8b00f577
+Reviewed-on: https://go-review.googlesource.com/c/go/+/214920
+Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
+TryBot-Result: Gobot Gobot <gobot@golang.org>
+Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
+
+Upstream-Status: Backport
+[lz: Add this patch for merging the patch for CVE-2020-24553]
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ src/net/http/cgi/{matryoshka_test.go => integration_test.go} | 0
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+ rename src/net/http/cgi/{matryoshka_test.go => integration_test.go} (100%)
+
+diff --git a/src/net/http/cgi/matryoshka_test.go b/src/net/http/cgi/integration_test.go
+similarity index 100%
+rename from src/net/http/cgi/matryoshka_test.go
+rename to src/net/http/cgi/integration_test.go
+--
+2.17.1
+
diff --git a/meta/recipes-devtools/go/go-1.12/0010-fix-CVE-2019-17596.patch b/meta/recipes-devtools/go/go-1.12/0010-fix-CVE-2019-17596.patch
new file mode 100644
index 0000000000..134cfab737
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.12/0010-fix-CVE-2019-17596.patch
@@ -0,0 +1,42 @@
+From f1783e1ce44a86c000a7c380a57a805c89c3efbe Mon Sep 17 00:00:00 2001
+From: Katie Hockman <katie@golang.org>
+Date: Mon, 14 Oct 2019 16:42:21 -0400
+Subject: [PATCH] crypto/dsa: prevent bad public keys from causing panic
+
+dsa.Verify might currently use a nil s inverse in a
+multiplication if the public key contains a non-prime Q,
+causing a panic. Change this to check that the mod
+inverse exists before using it.
+
+Fixes CVE-2019-17596
+
+Change-Id: I94d5f3cc38f1b5d52d38dcb1d253c71b7fd1cae7
+Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/572809
+Reviewed-by: Filippo Valsorda <valsorda@google.com>
+(cherry picked from commit 9119dfb0511326d4485b248b83d4fde19c95d0f7)
+Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/575232
+
+CVE: CVE-2019-17596
+Upstream-Status: Backport [https://github.com/golang/go/commit/2017d88dbc096381d4f348d2fb08bfb3c2b7ed73]
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ src/crypto/dsa/dsa.go | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/crypto/dsa/dsa.go b/src/crypto/dsa/dsa.go
+index 575314b..2fc4f1f 100644
+--- a/src/crypto/dsa/dsa.go
++++ b/src/crypto/dsa/dsa.go
+@@ -279,6 +279,9 @@ func Verify(pub *PublicKey, hash []byte, r, s *big.Int) bool {
+ }
+
+ w := new(big.Int).ModInverse(s, pub.Q)
++ if w == nil {
++ return false
++ }
+
+ n := pub.Q.BitLen()
+ if n&7 != 0 {
+--
+2.23.0
+
diff --git a/meta/recipes-devtools/go/go-1.12/CVE-2020-15586.patch b/meta/recipes-devtools/go/go-1.12/CVE-2020-15586.patch
new file mode 100644
index 0000000000..ebdc5aec6d
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.12/CVE-2020-15586.patch
@@ -0,0 +1,131 @@
+From fa98f46741f818913a8c11b877520a548715131f Mon Sep 17 00:00:00 2001
+From: Russ Cox <rsc@golang.org>
+Date: Mon, 13 Jul 2020 13:27:22 -0400
+Subject: [PATCH] net/http: synchronize "100 Continue" write and Handler writes
+
+The expectContinueReader writes to the connection on the first
+Request.Body read. Since a Handler might be doing a read in parallel or
+before a write, expectContinueReader needs to synchronize with the
+ResponseWriter, and abort if a response already went out.
+
+The tests will land in a separate CL.
+
+Fixes #34902
+Fixes CVE-2020-15586
+
+Change-Id: Icdd8dd539f45e8863762bd378194bb4741e875fc
+Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/793350
+Reviewed-by: Filippo Valsorda <valsorda@google.com>
+Reviewed-on: https://go-review.googlesource.com/c/go/+/242598
+Run-TryBot: Katie Hockman <katie@golang.org>
+Reviewed-by: Filippo Valsorda <filippo@golang.org>
+TryBot-Result: Gobot Gobot <gobot@golang.org>
+
+Upstream-Status: Backport
+CVE: CVE-2020-15586
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ src/net/http/server.go | 43 +++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 36 insertions(+), 7 deletions(-)
+
+diff --git a/src/net/http/server.go b/src/net/http/server.go
+index a995a50658..d41b5f6f48 100644
+--- a/src/net/http/server.go
++++ b/src/net/http/server.go
+@@ -425,6 +425,16 @@ type response struct {
+ wants10KeepAlive bool // HTTP/1.0 w/ Connection "keep-alive"
+ wantsClose bool // HTTP request has Connection "close"
+
++ // canWriteContinue is a boolean value accessed as an atomic int32
++ // that says whether or not a 100 Continue header can be written
++ // to the connection.
++ // writeContinueMu must be held while writing the header.
++ // These two fields together synchronize the body reader
++ // (the expectContinueReader, which wants to write 100 Continue)
++ // against the main writer.
++ canWriteContinue atomicBool
++ writeContinueMu sync.Mutex
++
+ w *bufio.Writer // buffers output in chunks to chunkWriter
+ cw chunkWriter
+
+@@ -515,6 +525,7 @@ type atomicBool int32
+
+ func (b *atomicBool) isSet() bool { return atomic.LoadInt32((*int32)(b)) != 0 }
+ func (b *atomicBool) setTrue() { atomic.StoreInt32((*int32)(b), 1) }
++func (b *atomicBool) setFalse() { atomic.StoreInt32((*int32)(b), 0) }
+
+ // declareTrailer is called for each Trailer header when the
+ // response header is written. It notes that a header will need to be
+@@ -878,21 +889,27 @@ type expectContinueReader struct {
+ resp *response
+ readCloser io.ReadCloser
+ closed bool
+- sawEOF bool
++ sawEOF atomicBool
+ }
+
+ func (ecr *expectContinueReader) Read(p []byte) (n int, err error) {
+ if ecr.closed {
+ return 0, ErrBodyReadAfterClose
+ }
+- if !ecr.resp.wroteContinue && !ecr.resp.conn.hijacked() {
+- ecr.resp.wroteContinue = true
+- ecr.resp.conn.bufw.WriteString("HTTP/1.1 100 Continue\r\n\r\n")
+- ecr.resp.conn.bufw.Flush()
++ w := ecr.resp
++ if !w.wroteContinue && w.canWriteContinue.isSet() && !w.conn.hijacked() {
++ w.wroteContinue = true
++ w.writeContinueMu.Lock()
++ if w.canWriteContinue.isSet() {
++ w.conn.bufw.WriteString("HTTP/1.1 100 Continue\r\n\r\n")
++ w.conn.bufw.Flush()
++ w.canWriteContinue.setFalse()
++ }
++ w.writeContinueMu.Unlock()
+ }
+ n, err = ecr.readCloser.Read(p)
+ if err == io.EOF {
+- ecr.sawEOF = true
++ ecr.sawEOF.setTrue()
+ }
+ return
+ }
+@@ -1311,7 +1328,7 @@ func (cw *chunkWriter) writeHeader(p []byte) {
+ // because we don't know if the next bytes on the wire will be
+ // the body-following-the-timer or the subsequent request.
+ // See Issue 11549.
+- if ecr, ok := w.req.Body.(*expectContinueReader); ok && !ecr.sawEOF {
++ if ecr, ok := w.req.Body.(*expectContinueReader); ok && !ecr.sawEOF.isSet() {
+ w.closeAfterReply = true
+ }
+
+@@ -1561,6 +1578,17 @@ func (w *response) write(lenData int, dataB []byte, dataS string) (n int, err er
+ }
+ return 0, ErrHijacked
+ }
++
++ if w.canWriteContinue.isSet() {
++ // Body reader wants to write 100 Continue but hasn't yet.
++ // Tell it not to. The store must be done while holding the lock
++ // because the lock makes sure that there is not an active write
++ // this very moment.
++ w.writeContinueMu.Lock()
++ w.canWriteContinue.setFalse()
++ w.writeContinueMu.Unlock()
++ }
++
+ if !w.wroteHeader {
+ w.WriteHeader(StatusOK)
+ }
+@@ -1872,6 +1900,7 @@ func (c *conn) serve(ctx context.Context) {
+ if req.ProtoAtLeast(1, 1) && req.ContentLength != 0 {
+ // Wrap the Body reader with one that replies on the connection
+ req.Body = &expectContinueReader{readCloser: req.Body, resp: w}
++ w.canWriteContinue.setTrue()
+ }
+ } else if req.Header.get("Expect") != "" {
+ w.sendExpectationFailed()
+--
+2.17.1
+
diff --git a/meta/recipes-devtools/go/go-1.12/CVE-2020-16845.patch b/meta/recipes-devtools/go/go-1.12/CVE-2020-16845.patch
new file mode 100644
index 0000000000..80f467522f
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.12/CVE-2020-16845.patch
@@ -0,0 +1,110 @@
+From 027d7241ce050d197e7fabea3d541ffbe3487258 Mon Sep 17 00:00:00 2001
+From: Katie Hockman <katie@golang.org>
+Date: Tue, 4 Aug 2020 11:45:32 -0400
+Subject: [PATCH] encoding/binary: read at most MaxVarintLen64 bytes in
+ ReadUvarint
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This CL ensures that ReadUvarint consumes only a limited
+amount of input (instead of an unbounded amount).
+
+On some inputs, ReadUvarint could read an arbitrary number
+of bytes before deciding to return an overflow error.
+After this CL, ReadUvarint returns that same overflow
+error sooner, after reading at most MaxVarintLen64 bytes.
+
+Fix authored by Robert Griesemer and Filippo Valsorda.
+
+Thanks to Diederik Loerakker, Jonny Rhea, Raúl Kripalani,
+and Preston Van Loon for reporting this.
+
+Fixes #40618
+Fixes CVE-2020-16845
+
+Change-Id: Ie0cb15972f14c38b7cf7af84c45c4ce54909bb8f
+Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/812099
+Reviewed-by: Filippo Valsorda <valsorda@google.com>
+Reviewed-on: https://go-review.googlesource.com/c/go/+/247120
+Run-TryBot: Katie Hockman <katie@golang.org>
+TryBot-Result: Gobot Gobot <gobot@golang.org>
+Reviewed-by: Alexander Rakoczy <alex@golang.org>
+
+Upstream-Status: Backport [https://github.com/golang/go.git]
+CVE: CVE-2020-16845
+Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
+---
+ src/encoding/binary/varint.go | 5 +++--
+ src/encoding/binary/varint_test.go | 18 ++++++++++++------
+ 2 files changed, 15 insertions(+), 8 deletions(-)
+
+diff --git a/src/encoding/binary/varint.go b/src/encoding/binary/varint.go
+index bcb8ac9a45..38af61075c 100644
+--- a/src/encoding/binary/varint.go
++++ b/src/encoding/binary/varint.go
+@@ -106,13 +106,13 @@ var overflow = errors.New("binary: varint overflows a 64-bit integer")
+ func ReadUvarint(r io.ByteReader) (uint64, error) {
+ var x uint64
+ var s uint
+- for i := 0; ; i++ {
++ for i := 0; i < MaxVarintLen64; i++ {
+ b, err := r.ReadByte()
+ if err != nil {
+ return x, err
+ }
+ if b < 0x80 {
+- if i > 9 || i == 9 && b > 1 {
++ if i == 9 && b > 1 {
+ return x, overflow
+ }
+ return x | uint64(b)<<s, nil
+@@ -120,6 +120,7 @@ func ReadUvarint(r io.ByteReader) (uint64, error) {
+ x |= uint64(b&0x7f) << s
+ s += 7
+ }
++ return x, overflow
+ }
+
+ // ReadVarint reads an encoded signed integer from r and returns it as an int64.
+diff --git a/src/encoding/binary/varint_test.go b/src/encoding/binary/varint_test.go
+index ca411ecbd6..6ef4c99505 100644
+--- a/src/encoding/binary/varint_test.go
++++ b/src/encoding/binary/varint_test.go
+@@ -121,21 +121,27 @@ func TestBufferTooSmall(t *testing.T) {
+ }
+ }
+
+-func testOverflow(t *testing.T, buf []byte, n0 int, err0 error) {
++func testOverflow(t *testing.T, buf []byte, x0 uint64, n0 int, err0 error) {
+ x, n := Uvarint(buf)
+ if x != 0 || n != n0 {
+ t.Errorf("Uvarint(%v): got x = %d, n = %d; want 0, %d", buf, x, n, n0)
+ }
+
+- x, err := ReadUvarint(bytes.NewReader(buf))
+- if x != 0 || err != err0 {
+- t.Errorf("ReadUvarint(%v): got x = %d, err = %s; want 0, %s", buf, x, err, err0)
++ r := bytes.NewReader(buf)
++ len := r.Len()
++ x, err := ReadUvarint(r)
++ if x != x0 || err != err0 {
++ t.Errorf("ReadUvarint(%v): got x = %d, err = %s; want %d, %s", buf, x, err, x0, err0)
++ }
++ if read := len - r.Len(); read > MaxVarintLen64 {
++ t.Errorf("ReadUvarint(%v): read more than MaxVarintLen64 bytes, got %d", buf, read)
+ }
+ }
+
+ func TestOverflow(t *testing.T) {
+- testOverflow(t, []byte{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x2}, -10, overflow)
+- testOverflow(t, []byte{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x1, 0, 0}, -13, overflow)
++ testOverflow(t, []byte{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x2}, 0, -10, overflow)
++ testOverflow(t, []byte{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x1, 0, 0}, 0, -13, overflow)
++ testOverflow(t, []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 1<<64-1, 0, overflow) // 11 bytes, should overflow
+ }
+
+ func TestNonCanonicalZero(t *testing.T) {
+--
+2.17.0
+
diff --git a/meta/recipes-devtools/go/go-1.12/CVE-2020-24553.patch b/meta/recipes-devtools/go/go-1.12/CVE-2020-24553.patch
new file mode 100644
index 0000000000..18a218bc9a
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.12/CVE-2020-24553.patch
@@ -0,0 +1,429 @@
+From eb07103a083237414145a45f029c873d57037e06 Mon Sep 17 00:00:00 2001
+From: Roberto Clapis <roberto@golang.org>
+Date: Wed, 26 Aug 2020 08:53:03 +0200
+Subject: [PATCH] [release-branch.go1.15-security] net/http/cgi,net/http/fcgi:
+ add Content-Type detection
+
+This CL ensures that responses served via CGI and FastCGI
+have a Content-Type header based on the content of the
+response if not explicitly set by handlers.
+
+If the implementers of the handler did not explicitly
+specify a Content-Type both CGI implementations would default
+to "text/html", potentially causing cross-site scripting.
+
+Thanks to RedTeam Pentesting GmbH for reporting this.
+
+Fixes CVE-2020-24553
+
+Change-Id: I82cfc396309b5ab2e8d6e9a87eda8ea7e3799473
+Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/823217
+Reviewed-by: Russ Cox <rsc@google.com>
+(cherry picked from commit 23d675d07fdc56aafd67c0a0b63d5b7e14708ff0)
+Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/835311
+Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
+
+Upstream-Status: Backport
+CVE: CVE-2020-24553
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ src/net/http/cgi/child.go | 36 ++++++++++-----
+ src/net/http/cgi/child_test.go | 69 ++++++++++++++++++++++++++++
+ src/net/http/cgi/integration_test.go | 53 ++++++++++++++++++++-
+ src/net/http/fcgi/child.go | 39 ++++++++++++----
+ src/net/http/fcgi/fcgi_test.go | 52 +++++++++++++++++++++
+ 5 files changed, 227 insertions(+), 22 deletions(-)
+
+diff --git a/src/net/http/cgi/child.go b/src/net/http/cgi/child.go
+index 9474175f17..61de6165f6 100644
+--- a/src/net/http/cgi/child.go
++++ b/src/net/http/cgi/child.go
+@@ -163,10 +163,12 @@ func Serve(handler http.Handler) error {
+ }
+
+ type response struct {
+- req *http.Request
+- header http.Header
+- bufw *bufio.Writer
+- headerSent bool
++ req *http.Request
++ header http.Header
++ code int
++ wroteHeader bool
++ wroteCGIHeader bool
++ bufw *bufio.Writer
+ }
+
+ func (r *response) Flush() {
+@@ -178,26 +180,38 @@ func (r *response) Header() http.Header {
+ }
+
+ func (r *response) Write(p []byte) (n int, err error) {
+- if !r.headerSent {
++ if !r.wroteHeader {
+ r.WriteHeader(http.StatusOK)
+ }
++ if !r.wroteCGIHeader {
++ r.writeCGIHeader(p)
++ }
+ return r.bufw.Write(p)
+ }
+
+ func (r *response) WriteHeader(code int) {
+- if r.headerSent {
++ if r.wroteHeader {
+ // Note: explicitly using Stderr, as Stdout is our HTTP output.
+ fmt.Fprintf(os.Stderr, "CGI attempted to write header twice on request for %s", r.req.URL)
+ return
+ }
+- r.headerSent = true
+- fmt.Fprintf(r.bufw, "Status: %d %s\r\n", code, http.StatusText(code))
++ r.wroteHeader = true
++ r.code = code
++}
+
+- // Set a default Content-Type
++// writeCGIHeader finalizes the header sent to the client and writes it to the output.
++// p is not written by writeHeader, but is the first chunk of the body
++// that will be written. It is sniffed for a Content-Type if none is
++// set explicitly.
++func (r *response) writeCGIHeader(p []byte) {
++ if r.wroteCGIHeader {
++ return
++ }
++ r.wroteCGIHeader = true
++ fmt.Fprintf(r.bufw, "Status: %d %s\r\n", r.code, http.StatusText(r.code))
+ if _, hasType := r.header["Content-Type"]; !hasType {
+- r.header.Add("Content-Type", "text/html; charset=utf-8")
++ r.header.Set("Content-Type", http.DetectContentType(p))
+ }
+-
+ r.header.Write(r.bufw)
+ r.bufw.WriteString("\r\n")
+ r.bufw.Flush()
+diff --git a/src/net/http/cgi/child_test.go b/src/net/http/cgi/child_test.go
+index 14e0af475f..f6ecb6eb80 100644
+--- a/src/net/http/cgi/child_test.go
++++ b/src/net/http/cgi/child_test.go
+@@ -7,6 +7,11 @@
+ package cgi
+
+ import (
++ "bufio"
++ "bytes"
++ "net/http"
++ "net/http/httptest"
++ "strings"
+ "testing"
+ )
+
+@@ -148,3 +153,67 @@ func TestRequestWithoutRemotePort(t *testing.T) {
+ t.Errorf("RemoteAddr: got %q; want %q", g, e)
+ }
+ }
++
++type countingWriter int
++
++func (c *countingWriter) Write(p []byte) (int, error) {
++ *c += countingWriter(len(p))
++ return len(p), nil
++}
++func (c *countingWriter) WriteString(p string) (int, error) {
++ *c += countingWriter(len(p))
++ return len(p), nil
++}
++
++func TestResponse(t *testing.T) {
++ var tests = []struct {
++ name string
++ body string
++ wantCT string
++ }{
++ {
++ name: "no body",
++ wantCT: "text/plain; charset=utf-8",
++ },
++ {
++ name: "html",
++ body: "<html><head><title>test page</title></head><body>This is a body</body></html>",
++ wantCT: "text/html; charset=utf-8",
++ },
++ {
++ name: "text",
++ body: strings.Repeat("gopher", 86),
++ wantCT: "text/plain; charset=utf-8",
++ },
++ {
++ name: "jpg",
++ body: "\xFF\xD8\xFF" + strings.Repeat("B", 1024),
++ wantCT: "image/jpeg",
++ },
++ }
++ for _, tt := range tests {
++ t.Run(tt.name, func(t *testing.T) {
++ var buf bytes.Buffer
++ resp := response{
++ req: httptest.NewRequest("GET", "/", nil),
++ header: http.Header{},
++ bufw: bufio.NewWriter(&buf),
++ }
++ n, err := resp.Write([]byte(tt.body))
++ if err != nil {
++ t.Errorf("Write: unexpected %v", err)
++ }
++ if want := len(tt.body); n != want {
++ t.Errorf("reported short Write: got %v want %v", n, want)
++ }
++ resp.writeCGIHeader(nil)
++ resp.Flush()
++ if got := resp.Header().Get("Content-Type"); got != tt.wantCT {
++ t.Errorf("wrong content-type: got %q, want %q", got, tt.wantCT)
++ }
++ if !bytes.HasSuffix(buf.Bytes(), []byte(tt.body)) {
++ t.Errorf("body was not correctly written")
++ }
++ })
++ }
++}
+diff --git a/src/net/http/cgi/integration_test.go b/src/net/http/cgi/integration_test.go
+index 32d59c09a3..295c3b82d4 100644
+--- a/src/net/http/cgi/integration_test.go
++++ b/src/net/http/cgi/integration_test.go
+@@ -16,7 +16,9 @@ import (
+ "io"
+ "net/http"
+ "net/http/httptest"
++ "net/url"
+ "os"
++ "strings"
+ "testing"
+ "time"
+ )
+@@ -52,7 +54,7 @@ func TestHostingOurselves(t *testing.T) {
+ }
+ replay := runCgiTest(t, h, "GET /test.go?foo=bar&a=b HTTP/1.0\nHost: example.com\n\n", expectedMap)
+
+- if expected, got := "text/html; charset=utf-8", replay.Header().Get("Content-Type"); got != expected {
++ if expected, got := "text/plain; charset=utf-8", replay.Header().Get("Content-Type"); got != expected {
+ t.Errorf("got a Content-Type of %q; expected %q", got, expected)
+ }
+ if expected, got := "X-Test-Value", replay.Header().Get("X-Test-Header"); got != expected {
+@@ -152,6 +154,51 @@ func TestChildOnlyHeaders(t *testing.T) {
+ }
+ }
+
++func TestChildContentType(t *testing.T) {
++ testenv.MustHaveExec(t)
++
++ h := &Handler{
++ Path: os.Args[0],
++ Root: "/test.go",
++ Args: []string{"-test.run=TestBeChildCGIProcess"},
++ }
++ var tests = []struct {
++ name string
++ body string
++ wantCT string
++ }{
++ {
++ name: "no body",
++ wantCT: "text/plain; charset=utf-8",
++ },
++ {
++ name: "html",
++ body: "<html><head><title>test page</title></head><body>This is a body</body></html>",
++ wantCT: "text/html; charset=utf-8",
++ },
++ {
++ name: "text",
++ body: strings.Repeat("gopher", 86),
++ wantCT: "text/plain; charset=utf-8",
++ },
++ {
++ name: "jpg",
++ body: "\xFF\xD8\xFF" + strings.Repeat("B", 1024),
++ wantCT: "image/jpeg",
++ },
++ }
++ for _, tt := range tests {
++ t.Run(tt.name, func(t *testing.T) {
++ expectedMap := map[string]string{"_body": tt.body}
++ req := fmt.Sprintf("GET /test.go?exact-body=%s HTTP/1.0\nHost: example.com\n\n", url.QueryEscape(tt.body))
++ replay := runCgiTest(t, h, req, expectedMap)
++ if got := replay.Header().Get("Content-Type"); got != tt.wantCT {
++ t.Errorf("got a Content-Type of %q; expected it to start with %q", got, tt.wantCT)
++ }
++ })
++ }
++}
++
+ // golang.org/issue/7198
+ func Test500WithNoHeaders(t *testing.T) { want500Test(t, "/immediate-disconnect") }
+ func Test500WithNoContentType(t *testing.T) { want500Test(t, "/no-content-type") }
+@@ -203,6 +250,10 @@ func TestBeChildCGIProcess(t *testing.T) {
+ if req.FormValue("no-body") == "1" {
+ return
+ }
++ if eb, ok := req.Form["exact-body"]; ok {
++ io.WriteString(rw, eb[0])
++ return
++ }
+ if req.FormValue("write-forever") == "1" {
+ io.Copy(rw, neverEnding('a'))
+ for {
+diff --git a/src/net/http/fcgi/child.go b/src/net/http/fcgi/child.go
+index 30a6b2ce2d..a31273b3ec 100644
+--- a/src/net/http/fcgi/child.go
++++ b/src/net/http/fcgi/child.go
+@@ -74,10 +74,12 @@ func (r *request) parseParams() {
+
+ // response implements http.ResponseWriter.
+ type response struct {
+- req *request
+- header http.Header
+- w *bufWriter
+- wroteHeader bool
++ req *request
++ header http.Header
++ code int
++ wroteHeader bool
++ wroteCGIHeader bool
++ w *bufWriter
+ }
+
+ func newResponse(c *child, req *request) *response {
+@@ -92,11 +94,14 @@ func (r *response) Header() http.Header {
+ return r.header
+ }
+
+-func (r *response) Write(data []byte) (int, error) {
++func (r *response) Write(p []byte) (n int, err error) {
+ if !r.wroteHeader {
+ r.WriteHeader(http.StatusOK)
+ }
+- return r.w.Write(data)
++ if !r.wroteCGIHeader {
++ r.writeCGIHeader(p)
++ }
++ return r.w.Write(p)
+ }
+
+ func (r *response) WriteHeader(code int) {
+@@ -104,22 +109,34 @@ func (r *response) WriteHeader(code int) {
+ return
+ }
+ r.wroteHeader = true
++ r.code = code
+ if code == http.StatusNotModified {
+ // Must not have body.
+ r.header.Del("Content-Type")
+ r.header.Del("Content-Length")
+ r.header.Del("Transfer-Encoding")
+- } else if r.header.Get("Content-Type") == "" {
+- r.header.Set("Content-Type", "text/html; charset=utf-8")
+ }
+-
+ if r.header.Get("Date") == "" {
+ r.header.Set("Date", time.Now().UTC().Format(http.TimeFormat))
+ }
++}
+
+- fmt.Fprintf(r.w, "Status: %d %s\r\n", code, http.StatusText(code))
++// writeCGIHeader finalizes the header sent to the client and writes it to the output.
++// p is not written by writeHeader, but is the first chunk of the body
++// that will be written. It is sniffed for a Content-Type if none is
++// set explicitly.
++func (r *response) writeCGIHeader(p []byte) {
++ if r.wroteCGIHeader {
++ return
++ }
++ r.wroteCGIHeader = true
++ fmt.Fprintf(r.w, "Status: %d %s\r\n", r.code, http.StatusText(r.code))
++ if _, hasType := r.header["Content-Type"]; r.code != http.StatusNotModified && !hasType {
++ r.header.Set("Content-Type", http.DetectContentType(p))
++ }
+ r.header.Write(r.w)
+ r.w.WriteString("\r\n")
++ r.w.Flush()
+ }
+
+ func (r *response) Flush() {
+@@ -290,6 +307,8 @@ func (c *child) serveRequest(req *request, body io.ReadCloser) {
+ httpReq = httpReq.WithContext(envVarCtx)
+ c.handler.ServeHTTP(r, httpReq)
+ }
++ // Make sure we serve something even if nothing was written to r
++ r.Write(nil)
+ r.Close()
+ c.mu.Lock()
+ delete(c.requests, req.reqId)
+diff --git a/src/net/http/fcgi/fcgi_test.go b/src/net/http/fcgi/fcgi_test.go
+index e9d2b34023..4a27a12c35 100644
+--- a/src/net/http/fcgi/fcgi_test.go
++++ b/src/net/http/fcgi/fcgi_test.go
+@@ -10,6 +10,7 @@ import (
+ "io"
+ "io/ioutil"
+ "net/http"
++ "strings"
+ "testing"
+ )
+
+@@ -344,3 +345,54 @@ func TestChildServeReadsEnvVars(t *testing.T) {
+ <-done
+ }
+ }
++
++func TestResponseWriterSniffsContentType(t *testing.T) {
++ var tests = []struct {
++ name string
++ body string
++ wantCT string
++ }{
++ {
++ name: "no body",
++ wantCT: "text/plain; charset=utf-8",
++ },
++ {
++ name: "html",
++ body: "<html><head><title>test page</title></head><body>This is a body</body></html>",
++ wantCT: "text/html; charset=utf-8",
++ },
++ {
++ name: "text",
++ body: strings.Repeat("gopher", 86),
++ wantCT: "text/plain; charset=utf-8",
++ },
++ {
++ name: "jpg",
++ body: "\xFF\xD8\xFF" + strings.Repeat("B", 1024),
++ wantCT: "image/jpeg",
++ },
++ }
++ for _, tt := range tests {
++ t.Run(tt.name, func(t *testing.T) {
++ input := make([]byte, len(streamFullRequestStdin))
++ copy(input, streamFullRequestStdin)
++ rc := nopWriteCloser{bytes.NewBuffer(input)}
++ done := make(chan bool)
++ var resp *response
++ c := newChild(rc, http.HandlerFunc(func(
++ w http.ResponseWriter,
++ r *http.Request,
++ ) {
++ io.WriteString(w, tt.body)
++ resp = w.(*response)
++ done <- true
++ }))
++ defer c.cleanUp()
++ go c.serve()
++ <-done
++ if got := resp.Header().Get("Content-Type"); got != tt.wantCT {
++ t.Errorf("got a Content-Type of %q; expected it to start with %q", got, tt.wantCT)
++ }
++ })
++ }
++}
+--
+2.17.1
+
diff --git a/meta/recipes-devtools/mtd/mtd-utils/0001-mtd-utils-Fix-return-value-of-ubiformat.patch b/meta/recipes-devtools/mtd/mtd-utils/0001-mtd-utils-Fix-return-value-of-ubiformat.patch
new file mode 100644
index 0000000000..d43f7e1a7a
--- /dev/null
+++ b/meta/recipes-devtools/mtd/mtd-utils/0001-mtd-utils-Fix-return-value-of-ubiformat.patch
@@ -0,0 +1,62 @@
+From 4d19bffcfd66e25d3ee74536ae2d2da7ad52e8e2 Mon Sep 17 00:00:00 2001
+From: Barry Grussling <barry@grussling.com>
+Date: Sun, 12 Jan 2020 12:33:32 -0800
+Subject: [PATCH] mtd-utils: Fix return value of ubiformat
+Organization: O.S. Systems Software LTDA.
+
+This changeset fixes a feature regression in ubiformat. Older versions of
+ubiformat, when invoked with a flash-image, would return 0 in the case no error
+was encountered. Upon upgrading to latest, it was discovered that ubiformat
+returned 255 even without encountering an error condition.
+
+This changeset corrects the above issue and causes ubiformat, when given an
+image file, to return 0 when no errors are detected.
+
+Tested by running through my loading scripts and verifying ubiformat returned
+0.
+
+Upstream-Status: Backport [2.1.2]
+
+Signed-off-by: Barry Grussling <barry@grussling.com>
+Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ ubi-utils/ubiformat.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/ubi-utils/ubiformat.c b/ubi-utils/ubiformat.c
+index a90627c..5377b12 100644
+--- a/ubi-utils/ubiformat.c
++++ b/ubi-utils/ubiformat.c
+@@ -550,6 +550,7 @@ static int format(libmtd_t libmtd, const struct mtd_dev_info *mtd,
+ struct ubi_vtbl_record *vtbl;
+ int eb1 = -1, eb2 = -1;
+ long long ec1 = -1, ec2 = -1;
++ int ret = -1;
+
+ write_size = UBI_EC_HDR_SIZE + mtd->subpage_size - 1;
+ write_size /= mtd->subpage_size;
+@@ -643,8 +644,10 @@ static int format(libmtd_t libmtd, const struct mtd_dev_info *mtd,
+ if (!args.quiet && !args.verbose)
+ printf("\n");
+
+- if (novtbl)
++ if (novtbl) {
++ ret = 0;
+ goto out_free;
++ }
+
+ if (eb1 == -1 || eb2 == -1) {
+ errmsg("no eraseblocks for volume table");
+@@ -669,7 +672,7 @@ static int format(libmtd_t libmtd, const struct mtd_dev_info *mtd,
+
+ out_free:
+ free(hdr);
+- return -1;
++ return ret;
+ }
+
+ int main(int argc, char * const argv[])
+--
+2.27.0
+
diff --git a/meta/recipes-devtools/mtd/mtd-utils_git.bb b/meta/recipes-devtools/mtd/mtd-utils_git.bb
index 810fe40f4e..d1658a739b 100644
--- a/meta/recipes-devtools/mtd/mtd-utils_git.bb
+++ b/meta/recipes-devtools/mtd/mtd-utils_git.bb
@@ -15,6 +15,7 @@ PV = "2.1.1"
SRCREV = "4443221ce9b88440cd9f5bb78e6fe95621d36c8a"
SRC_URI = "git://git.infradead.org/mtd-utils.git \
file://add-exclusion-to-mkfs-jffs2-git-2.patch \
+ file://0001-mtd-utils-Fix-return-value-of-ubiformat.patch \
"
S = "${WORKDIR}/git/"
diff --git a/meta/recipes-devtools/nasm/nasm/CVE-2019-14248.patch b/meta/recipes-devtools/nasm/nasm/CVE-2019-14248.patch
new file mode 100644
index 0000000000..d45d2cb465
--- /dev/null
+++ b/meta/recipes-devtools/nasm/nasm/CVE-2019-14248.patch
@@ -0,0 +1,43 @@
+From 93d41d82963b2cfd0b24c906f5a8daf53281b559 Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin (Intel)" <hpa@zytor.com>
+Date: Fri, 16 Aug 2019 01:12:54 -0700
+Subject: [PATCH] BR 3392576: don't segfault on a bad %pragma limit
+
+Don't segfault on a bad %pragma limit. Instead treat a NULL pointer as
+an empty string.
+
+Reported-by: Ren Kimura <rkx1209dev@gmail.com>
+Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
+
+CVE: CVE-2019-14248
+Upstream-Status: Backport [https://repo.or.cz/nasm.git/commit/93d41d82963b2cfd0b24c906f5a8daf53281b559]
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ asm/nasm.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/asm/nasm.c b/asm/nasm.c
+index c84d675..65116ab 100644
+--- a/asm/nasm.c
++++ b/asm/nasm.c
+@@ -212,6 +212,11 @@ nasm_set_limit(const char *limit, const char *valstr)
+ bool rn_error;
+ int errlevel;
+
++ if (!limit)
++ limit = "";
++ if (!valstr)
++ valstr = "";
++
+ for (i = 0; i <= LIMIT_MAX; i++) {
+ if (!nasm_stricmp(limit, limit_info[i].name))
+ break;
+@@ -204,7 +209,7 @@ nasm_set_limit(const char *limit, const char *valstr)
+ errlevel = ERR_WARNING|ERR_NOFILE|ERR_USAGE;
+ else
+ errlevel = ERR_WARNING|ERR_PASS1|WARN_UNKNOWN_PRAGMA;
+- nasm_error(errlevel, "unknown limit: `%s'", limit);
++ nasm_error(errlevel, "invalid limit value: `%s'", valstr);
+ return DIRR_ERROR;
+ }
+
diff --git a/meta/recipes-devtools/nasm/nasm_2.14.02.bb b/meta/recipes-devtools/nasm/nasm_2.14.02.bb
index e4f964ce93..bd4ecea8b6 100644
--- a/meta/recipes-devtools/nasm/nasm_2.14.02.bb
+++ b/meta/recipes-devtools/nasm/nasm_2.14.02.bb
@@ -5,6 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=90904486f8fbf1861cf42752e1a39efe"
SRC_URI = "http://www.nasm.us/pub/nasm/releasebuilds/${PV}/nasm-${PV}.tar.bz2 \
file://CVE-2018-19755.patch \
+ file://CVE-2019-14248.patch \
"
SRC_URI[md5sum] = "3f489aa48ad2aa1f967dc5e293bbd06f"
diff --git a/meta/recipes-devtools/opkg-utils/opkg-utils/0001-Switch-all-scripts-to-use-Python-3.x.patch b/meta/recipes-devtools/opkg-utils/opkg-utils/0001-Switch-all-scripts-to-use-Python-3.x.patch
deleted file mode 100644
index 691ed50c2b..0000000000
--- a/meta/recipes-devtools/opkg-utils/opkg-utils/0001-Switch-all-scripts-to-use-Python-3.x.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-From d42b23f4fb5d6bd58e92e995fe5befc76efbae0c Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 27 Apr 2017 15:47:58 +0300
-Subject: [PATCH] Switch all scripts to use Python 3.x
-
-Upstream-Status: Pending
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- makePackage | 2 +-
- opkg-compare-indexes | 2 +-
- opkg-graph-deps | 2 +-
- opkg-list-fields | 2 +-
- opkg-make-index | 2 +-
- opkg-show-deps | 2 +-
- opkg-unbuild | 2 +-
- opkg-update-index | 2 +-
- opkg.py | 2 +-
- 9 files changed, 9 insertions(+), 9 deletions(-)
-
-diff --git a/makePackage b/makePackage
-index 4bdfc56..02124dd 100755
---- a/makePackage
-+++ b/makePackage
-@@ -1,4 +1,4 @@
--#!/usr/bin/python
-+#!/usr/bin/env python3
-
- # The general algorithm this program follows goes like this:
- # Run tar to extract control from control.tar.gz from the package.
-diff --git a/opkg-compare-indexes b/opkg-compare-indexes
-index b60d20a..80c1263 100755
---- a/opkg-compare-indexes
-+++ b/opkg-compare-indexes
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- from __future__ import absolute_import
- from __future__ import print_function
-
-diff --git a/opkg-graph-deps b/opkg-graph-deps
-index 6653fd5..f1e376a 100755
---- a/opkg-graph-deps
-+++ b/opkg-graph-deps
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- from __future__ import absolute_import
- from __future__ import print_function
-
-diff --git a/opkg-list-fields b/opkg-list-fields
-index c14a90f..24f7955 100755
---- a/opkg-list-fields
-+++ b/opkg-list-fields
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- from __future__ import absolute_import
- from __future__ import print_function
-
-diff --git a/opkg-make-index b/opkg-make-index
-index 3f757f6..2988f9f 100755
---- a/opkg-make-index
-+++ b/opkg-make-index
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- """
- Utility to create opkg compatible indexes
- """
-
-diff --git a/opkg-show-deps b/opkg-show-deps
-index 153f21e..4e18b4f 100755
---- a/opkg-show-deps
-+++ b/opkg-show-deps
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- from __future__ import absolute_import
- from __future__ import print_function
-
-diff --git a/opkg-unbuild b/opkg-unbuild
-index 4f36bec..57642c9 100755
---- a/opkg-unbuild
-+++ b/opkg-unbuild
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- from __future__ import absolute_import
- from __future__ import print_function
-
-diff --git a/opkg-update-index b/opkg-update-index
-index 341c1c2..7bff8a1 100755
---- a/opkg-update-index
-+++ b/opkg-update-index
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- from __future__ import absolute_import
-
- import sys, os
-diff --git a/opkg.py b/opkg.py
-index 2ecac8a..7e64de4 100644
---- a/opkg.py
-+++ b/opkg.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- # Copyright (C) 2001 Alexander S. Guy <a7r@andern.org>
- # Andern Research Labs
- #
---
-2.11.0
-
diff --git a/meta/recipes-devtools/opkg-utils/opkg-utils/0001-opkg-build-clamp-mtimes-to-SOURCE_DATE_EPOCH.patch b/meta/recipes-devtools/opkg-utils/opkg-utils/0001-opkg-build-clamp-mtimes-to-SOURCE_DATE_EPOCH.patch
deleted file mode 100644
index a181169d47..0000000000
--- a/meta/recipes-devtools/opkg-utils/opkg-utils/0001-opkg-build-clamp-mtimes-to-SOURCE_DATE_EPOCH.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 59da5577bf8df441c6ca958e50fcb83228702764 Mon Sep 17 00:00:00 2001
-From: Alejandro del Castillo <alejandro.delcastillo@ni.com>
-Date: Thu, 12 Sep 2019 10:24:58 -0500
-Subject: [PATCH] opkg-build: clamp mtimes to SOURCE_DATE_EPOCH
-
-For reproducible builds, clamp mtimes bigger than SOURCE_DATE_EPOCH to
-SOURCE_DATE_EPOCH (build generated files, usually).
-
-Fixes bugzilla 13450
-
-Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
-Signed-off-by: Ross Burton <ross.burton@intel.com>
----
- opkg-build | 9 ++++++++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/opkg-build b/opkg-build
-index dcd2d68..2517a2b 100755
---- a/opkg-build
-+++ b/opkg-build
-@@ -297,9 +297,16 @@ mkdir $tmp_dir
-
- build_date="${SOURCE_DATE_EPOCH:-$(date +%s)}"
-
-+mtime_args=""
-+# --clamp-mtime requires tar > 1.28. Only use it if SOURCE_DATE_EPOCH is set, to avoid having a generic case dependency on tar > 1.28.
-+# this setting will make sure files generated at build time have consistent mtimes, for reproducible builds.
-+if [ ! -z "$SOURCE_DATE_EPOCH" ]; then
-+ mtime_args="--mtime=@$build_date --clamp-mtime"
-+fi
-+
- ( cd $pkg_dir/$CONTROL && find . -type f > $tmp_dir/control_list )
- ( cd $pkg_dir && find . -path ./$CONTROL -prune -o -print > $tmp_dir/file_list )
--( cd $pkg_dir && tar $ogargs $tsortargs --no-recursion -c $tarformat -T $tmp_dir/file_list | $compressor $compressorargs > $tmp_dir/data.tar.$cext )
-+( cd $pkg_dir && tar $ogargs $tsortargs --no-recursion $mtime_args -c $tarformat -T $tmp_dir/file_list | $compressor $compressorargs > $tmp_dir/data.tar.$cext )
- ( cd $pkg_dir/$CONTROL && tar $ogargs $tsortargs --no-recursion --mtime=@$build_date -c $tarformat -T $tmp_dir/control_list | gzip $zipargs > $tmp_dir/control.tar.gz )
- rm $tmp_dir/file_list
- rm $tmp_dir/control_list
---
-2.20.1
-
diff --git a/meta/recipes-devtools/opkg-utils/opkg-utils/fix-reproducibility.patch b/meta/recipes-devtools/opkg-utils/opkg-utils/fix-reproducibility.patch
new file mode 100644
index 0000000000..945979bc8a
--- /dev/null
+++ b/meta/recipes-devtools/opkg-utils/opkg-utils/fix-reproducibility.patch
@@ -0,0 +1,32 @@
+Fix reproducibility issues in opkg-build
+
+There is a sorting problem with opkg-build where the ipk generated is depending
+upon the order of files on disk. The reason is the --sort option to tar only
+influences the orders of files tar reads, not those passed by the -T option.
+
+Add in a sort call to resolve this issue. To ensure consistent sorting we
+also need to force to a specific locale (C) else the results are still not
+deterministic.
+
+RP 2020/2/5
+
+Upstream-Status: Submitted [https://groups.google.com/forum/#!topic/opkg-devel/YttZ73NLrYQ]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: opkg-utils-0.4.2/opkg-build
+===================================================================
+--- opkg-utils-0.4.2.orig/opkg-build
++++ opkg-utils-0.4.2/opkg-build
+@@ -305,8 +305,10 @@ if [ ! -z "$SOURCE_DATE_EPOCH" ]; then
+ mtime_args="--mtime=@$build_date --clamp-mtime"
+ fi
+
+-( cd $pkg_dir/$CONTROL && find . -type f > $tmp_dir/control_list )
+-( cd $pkg_dir && find . -path ./$CONTROL -prune -o -path . -o -print > $tmp_dir/file_list )
++export LANG=C
++export LC_ALL=C
++( cd $pkg_dir/$CONTROL && find . -type f | sort > $tmp_dir/control_list )
++( cd $pkg_dir && find . -path ./$CONTROL -prune -o -path . -o -print | sort > $tmp_dir/file_list )
+ ( cd $pkg_dir && tar $ogargs $tsortargs --no-recursion $mtime_args -c $tarformat -T $tmp_dir/file_list | $compressor $compressorargs > $tmp_dir/data.tar.$cext )
+ ( cd $pkg_dir/$CONTROL && tar $ogargs $tsortargs --no-recursion --mtime=@$build_date -c $tarformat -T $tmp_dir/control_list | gzip $zipargs > $tmp_dir/control.tar.gz )
+ rm $tmp_dir/file_list
diff --git a/meta/recipes-devtools/opkg-utils/opkg-utils_0.4.1.bb b/meta/recipes-devtools/opkg-utils/opkg-utils_0.4.2.bb
index cf1e4670c6..042eec7e0e 100644
--- a/meta/recipes-devtools/opkg-utils/opkg-utils_0.4.1.bb
+++ b/meta/recipes-devtools/opkg-utils/opkg-utils_0.4.2.bb
@@ -4,21 +4,21 @@ SECTION = "base"
HOMEPAGE = "http://git.yoctoproject.org/cgit/cgit.cgi/opkg-utils"
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://opkg.py;beginline=2;endline=18;md5=63ce9e6bcc445181cd9e4baf4b4ccc35"
+ file://opkg.py;beginline=2;endline=18;md5=ffa11ff3c15eb31c6a7ceaa00cc9f986"
PROVIDES += "${@bb.utils.contains('PACKAGECONFIG', 'update-alternatives', 'virtual/update-alternatives', '', d)}"
-SRC_URI = "http://git.yoctoproject.org/cgit/cgit.cgi/${BPN}/snapshot/${BPN}-${PV}.tar.gz \
- file://0001-Switch-all-scripts-to-use-Python-3.x.patch \
- file://0001-opkg-build-clamp-mtimes-to-SOURCE_DATE_EPOCH.patch \
+SRC_URI = "http://git.yoctoproject.org/cgit/cgit.cgi/${BPN}/snapshot/${BPN}-${PV}.tar.gz \
+ file://fix-reproducibility.patch \
"
UPSTREAM_CHECK_URI = "http://git.yoctoproject.org/cgit/cgit.cgi/opkg-utils/refs/"
-
-SRC_URI[md5sum] = "8c140f835b694a0c27cfb23d2426a02b"
-SRC_URI[sha256sum] = "9ea9efdd9fe13661ad251e3a2860c1c93045adcfaa6659c3e86d9748ecda3b6e"
+SRC_URI[md5sum] = "cc210650644fcb9bba06ad5ec95a63ec"
+SRC_URI[sha256sum] = "5929ad87d541789e0b82d626db01a1201ac48df6f49f2262fcfb86cf815e5d6c"
TARGET_CC_ARCH += "${LDFLAGS}"
+RDEPENDS_${PN} += "bash"
+
# For native builds we use the host Python
PYTHONRDEPS = "python3 python3-shell python3-io python3-math python3-crypt python3-logging python3-fcntl python3-pickle python3-compression python3-stringold"
PYTHONRDEPS_class-native = ""
diff --git a/meta/recipes-devtools/opkg/opkg/open_inner.patch b/meta/recipes-devtools/opkg/opkg/open_inner.patch
new file mode 100644
index 0000000000..cf4cb2f74b
--- /dev/null
+++ b/meta/recipes-devtools/opkg/opkg/open_inner.patch
@@ -0,0 +1,46 @@
+From alejandro.delcastillo@ni.com Wed Nov 20 22:35:02 2019
+From: Alejandro del Castillo <alejandro.delcastillo@ni.com>
+To: <opkg-devel@googlegroups.com>, <richard.purdie@linuxfoundation.org>
+CC: Alejandro del Castillo <alejandro.delcastillo@ni.com>
+Subject: [opkg][PATCH 2/2] open_inner: add support for empty payloads
+Date: Wed, 20 Nov 2019 16:34:48 -0600
+Message-ID: <20191120223448.26522-3-alejandro.delcastillo@ni.com>
+X-Mailer: git-send-email 2.22.0
+In-Reply-To: <20191120223448.26522-1-alejandro.delcastillo@ni.com>
+References: <20191120223448.26522-1-alejandro.delcastillo@ni.com>
+MIME-Version: 1.0
+Content-Type: text/plain
+Content-Transfer-Encoding: 8bit
+
+Support for empty compressed payloads need to be explicitly enabled on
+libarchive.
+
+Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
+
+Upstream-Status: Backport
+---
+ libopkg/opkg_archive.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/libopkg/opkg_archive.c b/libopkg/opkg_archive.c
+index 0e9ccea..f19cece 100644
+--- a/libopkg/opkg_archive.c
++++ b/libopkg/opkg_archive.c
+@@ -618,6 +618,13 @@ static struct archive *open_inner(struct archive *outer)
+ goto err_cleanup;
+ }
+
++ r = archive_read_support_format_empty(inner);
++ if (r != ARCHIVE_OK) {
++ opkg_msg(ERROR, "Empty format not supported: %s\n",
++ archive_error_string(inner));
++ goto err_cleanup;
++ }
++
+ r = archive_read_open(inner, data, NULL, inner_read, inner_close);
+ if (r != ARCHIVE_OK) {
+ opkg_msg(ERROR, "Failed to open inner archive: %s\n",
+--
+2.22.0
+
+
diff --git a/meta/recipes-devtools/opkg/opkg/opkg_archive.patch b/meta/recipes-devtools/opkg/opkg/opkg_archive.patch
new file mode 100644
index 0000000000..76ba63739a
--- /dev/null
+++ b/meta/recipes-devtools/opkg/opkg/opkg_archive.patch
@@ -0,0 +1,54 @@
+From alejandro.delcastillo@ni.com Wed Nov 20 22:35:01 2019
+Return-Path: <richard.purdie+caf_=rpurdie=rpsys.net@linuxfoundation.org>
+From: Alejandro del Castillo <alejandro.delcastillo@ni.com>
+To: <opkg-devel@googlegroups.com>, <richard.purdie@linuxfoundation.org>
+CC: Alejandro del Castillo <alejandro.delcastillo@ni.com>
+Subject: [opkg][PATCH 1/2] opkg_archive.c: avoid double free on uncompress
+ error
+Date: Wed, 20 Nov 2019 16:34:47 -0600
+Message-ID: <20191120223448.26522-2-alejandro.delcastillo@ni.com>
+X-Mailer: git-send-email 2.22.0
+In-Reply-To: <20191120223448.26522-1-alejandro.delcastillo@ni.com>
+References: <20191120223448.26522-1-alejandro.delcastillo@ni.com>
+MIME-Version: 1.0
+Content-Type: text/plain
+Content-Transfer-Encoding: 8bit
+
+The open-inner function calls archive_read_open. On error,
+archive_read_open calls inner_close, which also closes the outter
+archive. On error, return NULL directly to avoid double free.
+
+
+Upstream-Status: Backport
+
+Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com>
+---
+ libopkg/opkg_archive.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libopkg/opkg_archive.c b/libopkg/opkg_archive.c
+index 3d87db1..0e9ccea 100644
+--- a/libopkg/opkg_archive.c
++++ b/libopkg/opkg_archive.c
+@@ -622,7 +622,7 @@ static struct archive *open_inner(struct archive *outer)
+ if (r != ARCHIVE_OK) {
+ opkg_msg(ERROR, "Failed to open inner archive: %s\n",
+ archive_error_string(inner));
+- goto err_cleanup;
++ return NULL;
+ }
+
+ return inner;
+@@ -683,7 +683,7 @@ static struct archive *extract_outer(const char *filename, const char *arname)
+
+ inner = open_inner(outer);
+ if (!inner)
+- goto err_cleanup;
++ return NULL;
+
+ return inner;
+
+--
+2.22.0
+
+
diff --git a/meta/recipes-devtools/opkg/opkg_0.4.1.bb b/meta/recipes-devtools/opkg/opkg_0.4.1.bb
index 104f07fda8..f6f0922b6a 100644
--- a/meta/recipes-devtools/opkg/opkg_0.4.1.bb
+++ b/meta/recipes-devtools/opkg/opkg_0.4.1.bb
@@ -5,7 +5,7 @@ HOMEPAGE = "http://code.google.com/p/opkg/"
BUGTRACKER = "http://code.google.com/p/opkg/issues/list"
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
- file://src/opkg.c;beginline=2;endline=21;md5=90435a519c6ea69ef22e4a88bcc52fa0"
+ file://src/opkg.c;beginline=4;endline=18;md5=9f5a1ad5395378a807d6d591e2f92d25"
DEPENDS = "libarchive"
@@ -14,6 +14,8 @@ PE = "1"
SRC_URI = "http://downloads.yoctoproject.org/releases/${BPN}/${BPN}-${PV}.tar.gz \
file://opkg.conf \
file://0001-opkg_conf-create-opkg.lock-in-run-instead-of-var-run.patch \
+ file://opkg_archive.patch \
+ file://open_inner.patch \
file://run-ptest \
"
diff --git a/meta/recipes-devtools/patch/patch/0001-Invoke-ed-directly-instead-of-using-the-shell.patch b/meta/recipes-devtools/patch/patch/0001-Invoke-ed-directly-instead-of-using-the-shell.patch
index f60dfe879a..d13d419f51 100644
--- a/meta/recipes-devtools/patch/patch/0001-Invoke-ed-directly-instead-of-using-the-shell.patch
+++ b/meta/recipes-devtools/patch/patch/0001-Invoke-ed-directly-instead-of-using-the-shell.patch
@@ -6,8 +6,8 @@ Subject: [PATCH] Invoke ed directly instead of using the shell
* src/pch.c (do_ed_script): Invoke ed directly instead of using a shell
command to avoid quoting vulnerabilities.
-CVE: CVE-2019-13638
-Upstream-Status: Backport[https://git.savannah.gnu.org/cgit/patch.git/patch/?id=3fcd042d26d70856e826a42b5f93dc4854d80bf0]
+CVE: CVE-2019-13638 CVE-2018-20969
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/patch.git/patch/?id=3fcd042d26d70856e826a42b5f93dc4854d80bf0]
Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
---
diff --git a/meta/recipes-devtools/patch/patch_2.7.6.bb b/meta/recipes-devtools/patch/patch_2.7.6.bb
index 5d7f55f8dc..b5897b357a 100644
--- a/meta/recipes-devtools/patch/patch_2.7.6.bb
+++ b/meta/recipes-devtools/patch/patch_2.7.6.bb
@@ -22,3 +22,6 @@ acpaths = "-I ${S}/m4 "
PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'xattr', d)}"
PACKAGECONFIG[xattr] = "--enable-xattr,--disable-xattr,attr,"
+PROVIDES_append_class-native = " patch-replacement-native"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/patchelf/patchelf/fix-phdrs.patch b/meta/recipes-devtools/patchelf/patchelf/fix-phdrs.patch
new file mode 100644
index 0000000000..d087bd7855
--- /dev/null
+++ b/meta/recipes-devtools/patchelf/patchelf/fix-phdrs.patch
@@ -0,0 +1,37 @@
+When running patchelf on some existing patchelf'd binaries to change to longer
+RPATHS, ldd would report the binaries as invalid. The output of objdump -x on
+those libraryies should show the top of the .dynamic section is getting trashed,
+something like:
+
+0x600000001 0x0000000000429000
+0x335000 0x0000000000335000
+0xc740 0x000000000000c740
+0x1000 0x0000000000009098
+SONAME libglib-2.0.so.0
+
+(which should be RPATH and DT_NEEDED entries)
+
+This was tracked down to the code which injects the PT_LOAD section.
+
+The issue is that if the program headers were previously relocated to the end
+of the file which was how patchelf operated previously, the relocation code
+wouldn't work properly on a second run as it now assumes they're located after
+the elf header. This change forces them back to immediately follow the elf
+header which is where the code has made space for them.
+
+Upstream-Status: Submitted [https://github.com/NixOS/patchelf/pull/202]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+RP 2020/6/2
+
+Index: git/src/patchelf.cc
+===================================================================
+--- git.orig/src/patchelf.cc
++++ git/src/patchelf.cc
+@@ -762,6 +762,7 @@ void ElfFile<ElfFileParamNames>::rewrite
+ }
+
+ /* Add a segment that maps the replaced sections into memory. */
++ wri(hdr->e_phoff, sizeof(Elf_Ehdr));
+ phdrs.resize(rdi(hdr->e_phnum) + 1);
+ wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1);
+ Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1];
diff --git a/meta/recipes-devtools/patchelf/patchelf_0.10.bb b/meta/recipes-devtools/patchelf/patchelf_0.10.bb
index 580108e8b8..e4a604ec70 100644
--- a/meta/recipes-devtools/patchelf/patchelf_0.10.bb
+++ b/meta/recipes-devtools/patchelf/patchelf_0.10.bb
@@ -1,6 +1,7 @@
-SRC_URI = "http://nixos.org/releases/${BPN}/${BPN}-${PV}/${BPN}-${PV}.tar.bz2 \
+SRC_URI = "https://nixos.org/releases/${BPN}/${BPN}-${PV}/${BPN}-${PV}.tar.bz2 \
file://handle-read-only-files.patch \
file://fix-adjusting-startPage.patch \
+ file://fix-phdrs.patch \
"
LICENSE = "GPLv3"
diff --git a/meta/recipes-devtools/perl/files/0001-tests-adjust-to-correctly-exclude-unbuilt-extensions.patch b/meta/recipes-devtools/perl/files/0001-tests-adjust-to-correctly-exclude-unbuilt-extensions.patch
new file mode 100644
index 0000000000..0f3a2c6327
--- /dev/null
+++ b/meta/recipes-devtools/perl/files/0001-tests-adjust-to-correctly-exclude-unbuilt-extensions.patch
@@ -0,0 +1,27 @@
+From b0d53cfd785f64002128ac5eecc4aed0663d9c30 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Thu, 9 Jan 2020 17:26:55 +0100
+Subject: [PATCH] tests: adjust to correctly exclude unbuilt extensions
+
+Issue is reported here:
+https://github.com/arsv/perl-cross/issues/85
+
+Upstream-Status: Inappropriate [issue caused by perl-cross]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ t/TEST | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/t/TEST b/t/TEST
+index a9c844f..8d3505f 100755
+--- a/t/TEST
++++ b/t/TEST
+@@ -419,7 +419,7 @@ sub _tests_from_manifest {
+ while (<MANI>) {
+ if (m!^((?:cpan|dist|ext)/(\S+)/+(?:[^/\s]+\.t|test\.pl)|lib/\S+?(?:\.t|test\.pl))\s!) {
+ my $t = $1;
+- my $extension = $2;
++ my $extension = $1."/".$2;
+
+ # XXX Generates way too many error lines currently. Skip for
+ # v5.22
diff --git a/meta/recipes-devtools/perl/files/CVE-2020-10543.patch b/meta/recipes-devtools/perl/files/CVE-2020-10543.patch
new file mode 100644
index 0000000000..36dff0aac9
--- /dev/null
+++ b/meta/recipes-devtools/perl/files/CVE-2020-10543.patch
@@ -0,0 +1,36 @@
+From 897d1f7fd515b828e4b198d8b8bef76c6faf03ed Mon Sep 17 00:00:00 2001
+From: John Lightsey <jd@cpanel.net>
+Date: Wed, 20 Nov 2019 20:02:45 -0600
+Subject: [PATCH] regcomp.c: Prevent integer overflow from nested regex
+ quantifiers.
+
+(CVE-2020-10543) On 32bit systems the size calculations for nested regular
+expression quantifiers could overflow causing heap memory corruption.
+
+Fixes: Perl/perl5-security#125
+(cherry picked from commit bfd31397db5dc1a5c5d3e0a1f753a4f89a736e71)
+
+Upstream-Status: Backport [https://github.com/perl/perl5/commit/897d1f7fd515b828e4b198d8b8bef76c6faf03ed]
+CVE: CVE-2020-10543
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ regcomp.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/regcomp.c b/regcomp.c
+index 93c8d98fbb0..5f86be8086d 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -5489,6 +5489,12 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+ RExC_precomp)));
+ }
+
++ if ( ( minnext > 0 && mincount >= SSize_t_MAX / minnext )
++ || min >= SSize_t_MAX - minnext * mincount )
++ {
++ FAIL("Regexp out of space");
++ }
++
+ min += minnext * mincount;
+ is_inf_internal |= deltanext == SSize_t_MAX
+ || (maxcount == REG_INFTY && minnext + deltanext > 0);
diff --git a/meta/recipes-devtools/perl/files/CVE-2020-10878_1.patch b/meta/recipes-devtools/perl/files/CVE-2020-10878_1.patch
new file mode 100644
index 0000000000..b86085a551
--- /dev/null
+++ b/meta/recipes-devtools/perl/files/CVE-2020-10878_1.patch
@@ -0,0 +1,152 @@
+From 0a320d753fe7fca03df259a4dfd8e641e51edaa8 Mon Sep 17 00:00:00 2001
+From: Hugo van der Sanden <hv@crypt.org>
+Date: Tue, 18 Feb 2020 13:51:16 +0000
+Subject: [PATCH] study_chunk: extract rck_elide_nothing
+
+(CVE-2020-10878)
+
+(cherry picked from commit 93dee06613d4e1428fb10905ce1c3c96f53113dc)
+
+Upstream-Status: Backport [https://github.com/perl/perl5/commit/0a320d753fe7fca03df259a4dfd8e641e51edaa8]
+CVE: CVE-2020-10878
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ embed.fnc | 1 +
+ embed.h | 1 +
+ proto.h | 3 +++
+ regcomp.c | 70 ++++++++++++++++++++++++++++++++++---------------------
+ 4 files changed, 48 insertions(+), 27 deletions(-)
+
+diff --git a/embed.fnc b/embed.fnc
+index aedb4baef19..d7cd04d3fc3 100644
+--- a/embed.fnc
++++ b/embed.fnc
+@@ -2481,6 +2481,7 @@ Es |SSize_t|study_chunk |NN RExC_state_t *pRExC_state \
+ |I32 stopparen|U32 recursed_depth \
+ |NULLOK regnode_ssc *and_withp \
+ |U32 flags|U32 depth
++Es |void |rck_elide_nothing|NN regnode *node
+ EsR |SV * |get_ANYOFM_contents|NN const regnode * n
+ EsRn |U32 |add_data |NN RExC_state_t* const pRExC_state \
+ |NN const char* const s|const U32 n
+diff --git a/embed.h b/embed.h
+index 75c91f77f45..356a8b98d96 100644
+--- a/embed.h
++++ b/embed.h
+@@ -1208,6 +1208,7 @@
+ #define parse_lparen_question_flags(a) S_parse_lparen_question_flags(aTHX_ a)
+ #define parse_uniprop_string(a,b,c,d,e,f,g,h,i) Perl_parse_uniprop_string(aTHX_ a,b,c,d,e,f,g,h,i)
+ #define populate_ANYOF_from_invlist(a,b) S_populate_ANYOF_from_invlist(aTHX_ a,b)
++#define rck_elide_nothing(a) S_rck_elide_nothing(aTHX_ a)
+ #define reg(a,b,c,d) S_reg(aTHX_ a,b,c,d)
+ #define reg2Lanode(a,b,c,d) S_reg2Lanode(aTHX_ a,b,c,d)
+ #define reg_node(a,b) S_reg_node(aTHX_ a,b)
+diff --git a/proto.h b/proto.h
+index 141ddbaee6d..f316fe134e1 100644
+--- a/proto.h
++++ b/proto.h
+@@ -5543,6 +5543,9 @@ PERL_CALLCONV SV * Perl_parse_uniprop_string(pTHX_ const char * const name, cons
+ STATIC void S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr);
+ #define PERL_ARGS_ASSERT_POPULATE_ANYOF_FROM_INVLIST \
+ assert(node); assert(invlist_ptr)
++STATIC void S_rck_elide_nothing(pTHX_ regnode *node);
++#define PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING \
++ assert(node)
+ PERL_STATIC_NO_RET void S_re_croak2(pTHX_ bool utf8, const char* pat1, const char* pat2, ...)
+ __attribute__noreturn__;
+ #define PERL_ARGS_ASSERT_RE_CROAK2 \
+diff --git a/regcomp.c b/regcomp.c
+index 5f86be8086d..4ba2980db66 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -4450,6 +4450,44 @@ S_unwind_scan_frames(pTHX_ const void *p)
+ } while (f);
+ }
+
++/* Follow the next-chain of the current node and optimize away
++ all the NOTHINGs from it.
++ */
++STATIC void
++S_rck_elide_nothing(pTHX_ regnode *node)
++{
++ dVAR;
++
++ PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING;
++
++ if (OP(node) != CURLYX) {
++ const int max = (reg_off_by_arg[OP(node)]
++ ? I32_MAX
++ /* I32 may be smaller than U16 on CRAYs! */
++ : (I32_MAX < U16_MAX ? I32_MAX : U16_MAX));
++ int off = (reg_off_by_arg[OP(node)] ? ARG(node) : NEXT_OFF(node));
++ int noff;
++ regnode *n = node;
++
++ /* Skip NOTHING and LONGJMP. */
++ while (
++ (n = regnext(n))
++ && (
++ (PL_regkind[OP(n)] == NOTHING && (noff = NEXT_OFF(n)))
++ || ((OP(n) == LONGJMP) && (noff = ARG(n)))
++ )
++ && off + noff < max
++ ) {
++ off += noff;
++ }
++ if (reg_off_by_arg[OP(node)])
++ ARG(node) = off;
++ else
++ NEXT_OFF(node) = off;
++ }
++ return;
++}
++
+ /* the return from this sub is the minimum length that could possibly match */
+ STATIC SSize_t
+ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+@@ -4550,28 +4588,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
+ */
+ JOIN_EXACT(scan,&min_subtract, &unfolded_multi_char, 0);
+
+- /* Follow the next-chain of the current node and optimize
+- away all the NOTHINGs from it. */
+- if (OP(scan) != CURLYX) {
+- const int max = (reg_off_by_arg[OP(scan)]
+- ? I32_MAX
+- /* I32 may be smaller than U16 on CRAYs! */
+- : (I32_MAX < U16_MAX ? I32_MAX : U16_MAX));
+- int off = (reg_off_by_arg[OP(scan)] ? ARG(scan) : NEXT_OFF(scan));
+- int noff;
+- regnode *n = scan;
+-
+- /* Skip NOTHING and LONGJMP. */
+- while ((n = regnext(n))
+- && ((PL_regkind[OP(n)] == NOTHING && (noff = NEXT_OFF(n)))
+- || ((OP(n) == LONGJMP) && (noff = ARG(n))))
+- && off + noff < max)
+- off += noff;
+- if (reg_off_by_arg[OP(scan)])
+- ARG(scan) = off;
+- else
+- NEXT_OFF(scan) = off;
+- }
++ /* Follow the next-chain of the current node and optimize
++ away all the NOTHINGs from it.
++ */
++ rck_elide_nothing(scan);
+
+ /* The principal pseudo-switch. Cannot be a switch, since we
+ look into several different things. */
+@@ -5745,11 +5765,7 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
+ if (data && (fl & SF_HAS_EVAL))
+ data->flags |= SF_HAS_EVAL;
+ optimize_curly_tail:
+- if (OP(oscan) != CURLYX) {
+- while (PL_regkind[OP(next = regnext(oscan))] == NOTHING
+- && NEXT_OFF(next))
+- NEXT_OFF(oscan) += NEXT_OFF(next);
+- }
++ rck_elide_nothing(oscan);
+ continue;
+
+ default:
diff --git a/meta/recipes-devtools/perl/files/CVE-2020-10878_2.patch b/meta/recipes-devtools/perl/files/CVE-2020-10878_2.patch
new file mode 100644
index 0000000000..0bacd6b192
--- /dev/null
+++ b/meta/recipes-devtools/perl/files/CVE-2020-10878_2.patch
@@ -0,0 +1,36 @@
+From 3295b48defa0f8570114877b063fe546dd348b3c Mon Sep 17 00:00:00 2001
+From: Karl Williamson <khw@cpan.org>
+Date: Thu, 20 Feb 2020 17:49:36 +0000
+Subject: [PATCH] regcomp: use long jumps if there is any possibility of
+ overflow
+
+(CVE-2020-10878) Be conservative for backporting, we'll aim to do
+something more aggressive for bleadperl.
+
+(cherry picked from commit 9d7759db46f3b31b1d3f79c44266b6ba42a47fc6)
+
+Upstream-Status: Backport [https://github.com/perl/perl5/commit/3295b48defa0f8570114877b063fe546dd348b3c]
+CVE: CVE-2020-10878
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ regcomp.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/regcomp.c b/regcomp.c
+index 4ba2980db66..73c35a67020 100644
+--- a/regcomp.c
++++ b/regcomp.c
+@@ -7762,6 +7762,13 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
+
+ /* We have that number in RExC_npar */
+ RExC_total_parens = RExC_npar;
++
++ /* XXX For backporting, use long jumps if there is any possibility of
++ * overflow */
++ if (RExC_size > U16_MAX && ! RExC_use_BRANCHJ) {
++ RExC_use_BRANCHJ = TRUE;
++ flags |= RESTART_PARSE;
++ }
+ }
+ else if (! MUST_RESTART(flags)) {
+ ReREFCNT_dec(Rx);
diff --git a/meta/recipes-devtools/perl/files/determinism.patch b/meta/recipes-devtools/perl/files/determinism.patch
new file mode 100644
index 0000000000..ed4d06f5ec
--- /dev/null
+++ b/meta/recipes-devtools/perl/files/determinism.patch
@@ -0,0 +1,81 @@
+Fixes to make the perl build reproducible:
+
+a) Remove the \n from configure_attr.sh since it gets quoted differently depending on
+ whether the shell is bash or dash which can cause the test result to be incorrect.
+ Reported upstream: https://github.com/arsv/perl-cross/issues/87
+
+b) Sort the order of the module lists from configure_mods.sh since otherwise
+ the result isn't the same leading to makefile differences.
+ Reported upstream: https://github.com/arsv/perl-cross/issues/88
+
+c) Sort the Encode::Byte byte_t.fnm file output (and the makefile depends whilst
+ there for good measure)
+ This needs to go to upstream perl (not done)
+
+d) Use bash for perl-cross configure since otherwise trnl gets set to "\n" with bash
+ and "" with dash
+ Reported upstream: https://github.com/arsv/perl-cross/issues/87
+
+RP 2020/2/7
+
+Upstream-Status: Pending [75% submitted]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org
+
+Index: perl-5.30.1/cnf/configure_attr.sh
+===================================================================
+--- perl-5.30.1.orig/cnf/configure_attr.sh
++++ perl-5.30.1/cnf/configure_attr.sh
+@@ -131,7 +131,7 @@ if not hinted d_c99_variadic_macros 'sup
+ try_start
+ try_add '#include <stdio.h>'
+ try_add '#define foo(fmt, ...) printf(fmt, __VA_ARGS__)'
+- try_add 'int main(void) { foo("%i\n", 1234); return 0; }'
++ try_add 'int main(void) { foo("%i", 1234); return 0; }'
+ try_compile
+ resdef d_c99_variadic_macros 'supported' 'missing'
+ fi
+Index: perl-5.30.1/cnf/configure_mods.sh
+===================================================================
+--- perl-5.30.1.orig/cnf/configure_mods.sh
++++ perl-5.30.1/cnf/configure_mods.sh
+@@ -82,7 +82,7 @@ extonlyif() {
+ }
+
+ definetrimspaces() {
+- v=`echo "$2" | sed -r -e 's/\s+/ /g' -e 's/^\s+//' -e 's/\s+$//'`
++ v=`echo "$2" | sed -r -e 's/\s+/ /g' -e 's/^\s+//' -e 's/\s+$//' | xargs -n1 | LANG=C sort | xargs`
+ define $1 "$v"
+ }
+
+Index: perl-5.30.1/cpan/Encode/Byte/Makefile.PL
+===================================================================
+--- perl-5.30.1.orig/cpan/Encode/Byte/Makefile.PL
++++ perl-5.30.1/cpan/Encode/Byte/Makefile.PL
+@@ -171,7 +171,7 @@ sub postamble
+ my $lengthsofar = length($str);
+ my $continuator = '';
+ $str .= "$table.c : $enc2xs Makefile.PL";
+- foreach my $file (@{$tables{$table}})
++ foreach my $file (sort (@{$tables{$table}}))
+ {
+ $str .= $continuator.' '.$self->catfile($dir,$file);
+ if ( length($str)-$lengthsofar > 128*$numlines )
+@@ -189,7 +189,7 @@ sub postamble
+ qq{\n\t\$(PERL) $plib $enc2xs $ucopts -o \$\@ -f $table.fnm\n\n};
+ open (FILELIST, ">$table.fnm")
+ || die "Could not open $table.fnm: $!";
+- foreach my $file (@{$tables{$table}})
++ foreach my $file (sort (@{$tables{$table}}))
+ {
+ print FILELIST $self->catfile($dir,$file) . "\n";
+ }
+Index: perl-5.30.1/cnf/configure
+===================================================================
+--- perl-5.30.1.orig/cnf/configure
++++ perl-5.30.1/cnf/configure
+@@ -1,4 +1,4 @@
+-#!/bin/sh
++#!/bin/bash
+
+ base=${0%/*}; test -z "$base" && base=.
+
diff --git a/meta/recipes-devtools/perl/files/encodefix.patch b/meta/recipes-devtools/perl/files/encodefix.patch
new file mode 100644
index 0000000000..396ed0d53e
--- /dev/null
+++ b/meta/recipes-devtools/perl/files/encodefix.patch
@@ -0,0 +1,20 @@
+The code is encoding host compiler parameters into target builds. Avoid
+this for our target builds (patch is target specific, not native)
+
+Upstream-Status: Inappropriate [Cross compile hack]
+RP 2020/2/18
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: perl-5.30.1/cpan/Encode/bin/enc2xs
+===================================================================
+--- perl-5.30.1.orig/cpan/Encode/bin/enc2xs
++++ perl-5.30.1/cpan/Encode/bin/enc2xs
+@@ -195,7 +195,7 @@ sub compiler_info {
+ # above becomes false.
+ my $sized = $declaration && !($compat && !$pedantic);
+
+- return ($cpp, $static, $sized);
++ return (0, 1, 1);
+ }
+
+
diff --git a/meta/recipes-devtools/perl/files/fix-setgroup.patch b/meta/recipes-devtools/perl/files/fix-setgroup.patch
deleted file mode 100644
index 2b490e6067..0000000000
--- a/meta/recipes-devtools/perl/files/fix-setgroup.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-Test script to reproduce the problem:
-
-#!/usr/bin/env perl
-$) = "2 2";
-print $!;
-
-Result from perl 5.28 under strace:
-
-setgroups(1, [2]) = 0
-setresgid(-1, 2, -1) = 0
-
-Result from perl 5.30 under strace:
-
-setgroups(1, [-1]) = -1 EINVAL (Invalid argument)
-setresgid(-1, 2, -1) = 0
-
-Patch which broke this upstream:
-https://perl5.git.perl.org/perl.git/commitdiff/5d4a52b5c68a11bfc97c2e24806993b84a61eade
-
-Issue is that the new function changes the endptr to the end of the
-scanned number and needs to be reset to the end of the string for
-each iteration of the loop.
-
-[YOCTO #13391]
-
-RP
-2019/6/14
-Upstream-Status: Pending
-
-Index: perl-5.30.0/mg.c
-===================================================================
---- perl-5.30.0.orig/mg.c
-+++ perl-5.30.0/mg.c
-@@ -3179,6 +3256,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
- const char *p = SvPV_const(sv, len);
- Groups_t *gary = NULL;
- const char* endptr = p + len;
-+ const char* realend = p + len;
- UV uv;
- #ifdef _SC_NGROUPS_MAX
- int maxgrp = sysconf(_SC_NGROUPS_MAX);
-@@ -3209,6 +3287,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
- Newx(gary, i + 1, Groups_t);
- else
- Renew(gary, i + 1, Groups_t);
-+ endptr = realend;
- if (grok_atoUV(p, &uv, &endptr))
- gary[i] = (Groups_t)uv;
- else {
diff --git a/meta/recipes-devtools/perl/files/perl-configpm-switch.patch b/meta/recipes-devtools/perl/files/perl-configpm-switch.patch
index 3c2cecb8c1..80ce4a6de7 100644
--- a/meta/recipes-devtools/perl/files/perl-configpm-switch.patch
+++ b/meta/recipes-devtools/perl/files/perl-configpm-switch.patch
@@ -1,4 +1,4 @@
-From 7f313cac31c55cbe62a4d0cdfa8321cc05a8eb3a Mon Sep 17 00:00:00 2001
+From 5120acaa2be5787d9657f6b91bc8ee3c2d664fbe Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Sun, 27 May 2007 21:04:11 +0000
Subject: [PATCH] perl: 5.8.7 -> 5.8.8 (from OE)
@@ -20,7 +20,7 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/configpm b/configpm
-index 09c4a3b..6a0a680 100755
+index c8de8bf..204613c 100755
--- a/configpm
+++ b/configpm
@@ -687,7 +687,7 @@ sub FETCH {
diff --git a/meta/recipes-devtools/perl/files/racefix.patch b/meta/recipes-devtools/perl/files/racefix.patch
new file mode 100644
index 0000000000..bac42d26ae
--- /dev/null
+++ b/meta/recipes-devtools/perl/files/racefix.patch
@@ -0,0 +1,24 @@
+In our builds Config_heavy.pl sometimes has lines:
+cwarnflags=XXX
+ccstdflags=XXX
+and sometimes does not.
+The reason is that this information is pulled from cflags by configpm and yet
+there is no dependency in the Makefile. Add one to fix this.
+
+Upstream-Status: Submitted [https://github.com/arsv/perl-cross/pull/89]
+RP 2020/2/19
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: perl-5.30.1/Makefile
+===================================================================
+--- perl-5.30.1.orig/Makefile
++++ perl-5.30.1/Makefile
+@@ -204,7 +204,7 @@ configpod: $(CONFIGPOD)
+ git_version.h lib/Config_git.pl: make_patchnum.pl | miniperl$X
+ ./miniperl_top make_patchnum.pl
+
+-lib/Config.pm lib/Config_heavy.pl lib/Config.pod: config.sh \
++lib/Config.pm lib/Config_heavy.pl lib/Config.pod: config.sh cflags \
+ lib/Config_git.pl Porting/Glossary | miniperl$X
+ ./miniperl_top configpm
+
diff --git a/meta/recipes-devtools/perl/liberror-perl_0.17027.bb b/meta/recipes-devtools/perl/liberror-perl_0.17029.bb
index cf1f6d685f..038808f0cd 100644
--- a/meta/recipes-devtools/perl/liberror-perl_0.17027.bb
+++ b/meta/recipes-devtools/perl/liberror-perl_0.17029.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "The Error package provides two interfaces. Firstly \
Error provides a procedural interface to exception handling. \
Secondly Error is a base class for errors/exceptions that can \
either be thrown, for subsequent catch, or can simply be recorded."
-HOMEPAGE = "https://bitbucket.org/shlomif/perl-error.pm"
+HOMEPAGE = "https://github.com/shlomif/perl-error.pm"
SECTION = "libs"
LICENSE = "Artistic-1.0 | GPL-1.0+"
@@ -32,8 +32,8 @@ RDEPENDS_${PN}-ptest += " \
SRC_URI = "http://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Error-${PV}.tar.gz"
-SRC_URI[md5sum] = "4ef9b2890fb144d804527ba32573dd56"
-SRC_URI[sha256sum] = "07b2ac8275dfa04144745a6c1900a596280f862b97d22bab0c5ce02682ebd3be"
+SRC_URI[md5sum] = "6732b1c6207e4a9a3e2987c88368039a"
+SRC_URI[sha256sum] = "1a23f7913032aed6d4b68321373a3899ca66590f4727391a091ec19c95bf7adc"
S = "${WORKDIR}/Error-${PV}"
diff --git a/meta/recipes-devtools/perl/libmodule-build-perl/run-ptest b/meta/recipes-devtools/perl/libmodule-build-perl/run-ptest
index 0d63d1513b..d802781f9e 100644
--- a/meta/recipes-devtools/perl/libmodule-build-perl/run-ptest
+++ b/meta/recipes-devtools/perl/libmodule-build-perl/run-ptest
@@ -6,8 +6,6 @@ for case in `find t -type f -name '*.t'`; do
cat $case.output
if [ $ret -ne 0 ]; then
echo "FAIL: ${case%.t}"
- elif grep -i 'SKIP' $case.output; then
- echo "SKIP: ${case%.t}"
else
echo "PASS: ${case%.t}"
fi
diff --git a/meta/recipes-devtools/perl/libmodule-build-perl_0.4229.bb b/meta/recipes-devtools/perl/libmodule-build-perl_0.4229.bb
index f759f862fb..e3ba40d96c 100644
--- a/meta/recipes-devtools/perl/libmodule-build-perl_0.4229.bb
+++ b/meta/recipes-devtools/perl/libmodule-build-perl_0.4229.bb
@@ -36,7 +36,10 @@ do_patch[postfuncs] += "do_patch_module_build"
do_install_ptest() {
cp -r ${B}/inc ${D}${PTEST_PATH}
cp -r ${B}/blib ${D}${PTEST_PATH}
+ cp -r ${B}/_build ${D}${PTEST_PATH}
+ cp -r ${B}/lib ${D}${PTEST_PATH}
chown -R root:root ${D}${PTEST_PATH}
+ sed -i -e "s,'perl' => .*,'perl' => '/usr/bin/perl'\,,g" ${D}${PTEST_PATH}/_build/build_params
}
RDEPENDS_${PN} += " \
diff --git a/meta/recipes-devtools/perl/perl-ptest.inc b/meta/recipes-devtools/perl/perl-ptest.inc
index 7152057762..98e3361fcc 100644
--- a/meta/recipes-devtools/perl/perl-ptest.inc
+++ b/meta/recipes-devtools/perl/perl-ptest.inc
@@ -42,6 +42,9 @@ do_install_ptest () {
# Remove a useless timestamp...
sed -i -e '/Autogenerated starting on/d' ${D}${PTEST_PATH}/lib/unicore/mktables.lst
+
+ # Remove files with host-specific configuration for building native binaries
+ rm ${D}${PTEST_PATH}/Makefile.config ${D}${PTEST_PATH}/xconfig.h ${D}${PTEST_PATH}/xconfig.sh
}
python populate_packages_prepend() {
diff --git a/meta/recipes-devtools/perl/perl_5.30.0.bb b/meta/recipes-devtools/perl/perl_5.30.1.bb
index ba2a8437d4..b633acfcea 100644
--- a/meta/recipes-devtools/perl/perl_5.30.0.bb
+++ b/meta/recipes-devtools/perl/perl_5.30.1.bb
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://Copying;md5=5b122a36d0f6dc55279a0ebc69f3c60b \
SRC_URI = "https://www.cpan.org/src/5.0/perl-${PV}.tar.gz;name=perl \
- https://github.com/arsv/perl-cross/releases/download/1.3/perl-cross-1.3.tar.gz;name=perl-cross \
+ https://github.com/arsv/perl-cross/releases/download/1.3.1/perl-cross-1.3.1.tar.gz;name=perl-cross \
file://perl-rdepends.txt \
file://0001-configure_tool.sh-do-not-quote-the-argument-to-comma.patch \
file://0001-ExtUtils-MakeMaker-add-LDFLAGS-when-linking-binary-m.patch \
@@ -18,18 +18,26 @@ SRC_URI = "https://www.cpan.org/src/5.0/perl-${PV}.tar.gz;name=perl \
file://0001-perl-cross-add-LDFLAGS-when-linking-libperl.patch \
file://perl-dynloader.patch \
file://0001-configure_path.sh-do-not-hardcode-prefix-lib-as-libr.patch \
- file://fix-setgroup.patch \
file://0001-enc2xs-Add-environment-variable-to-suppress-comments.patch \
file://0002-Constant-Fix-up-shebang.patch \
+ file://0001-tests-adjust-to-correctly-exclude-unbuilt-extensions.patch \
+ file://determinism.patch \
+ file://racefix.patch \
+ file://CVE-2020-10543.patch \
+ file://CVE-2020-10878_1.patch \
+ file://CVE-2020-10878_2.patch \
"
SRC_URI_append_class-native = " \
file://perl-configpm-switch.patch \
"
+SRC_URI_append_class-target = " \
+ file://encodefix.patch \
+"
-SRC_URI[perl.md5sum] = "9770584cdf9b5631c38097645ce33549"
-SRC_URI[perl.sha256sum] = "851213c754d98ccff042caa40ba7a796b2cee88c5325f121be5cbb61bbf975f2"
-SRC_URI[perl-cross.md5sum] = "4dda3daf9c4fe42b3d6a5dd052852a48"
-SRC_URI[perl-cross.sha256sum] = "49edea1ea2cd6c5c47386ca71beda8d150c748835781354dbe7f75b1df27e703"
+SRC_URI[perl.md5sum] = "6438eb7b8db9bbde28e01086de376a46"
+SRC_URI[perl.sha256sum] = "bf3d25571ff1ee94186177c2cdef87867fd6a14aa5a84f0b1fb7bf798f42f964"
+SRC_URI[perl-cross.md5sum] = "1e463b105cfa56d251a86979af23e3a7"
+SRC_URI[perl-cross.sha256sum] = "edce0b0c2f725e2db3f203d6d8e9f3f7161256f5d1590551e40694f21200141d"
S = "${WORKDIR}/perl-${PV}"
@@ -112,6 +120,14 @@ print(datetime.fromtimestamp($SOURCE_DATE_EPOCH, timezone.utc).strftime('%a %b %
do_compile() {
oe_runmake
+ # This isn't generated reliably so delete and re-generate.
+ # https://github.com/arsv/perl-cross/issues/86
+
+ if [ -e pod/perltoc.pod ]; then
+ bbnote Rebuilding perltoc.pod
+ rm -f pod/perltoc.pod
+ oe_runmake pod/perltoc.pod
+ fi
}
do_install() {
@@ -135,6 +151,9 @@ do_install_append_class-target() {
# This is used to substitute target configuration when running native perl via perl-configpm-switch.patch
ln -s Config_heavy.pl ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy-target.pl
+ # This contains host-specific information used for building miniperl (a helper executable built with host compiler)
+ # and therefore isn't reproducible. I believe the file isn't actually needed on target.
+ rm ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/xconfig.h
}
do_install_append_class-nativesdk() {
@@ -198,6 +217,7 @@ require perl-ptest.inc
FILES_${PN} = "${bindir}/perl ${bindir}/perl.real ${bindir}/perl${PV} ${libdir}/libperl.so* \
${libdir}/perl5/site_perl \
${libdir}/perl5/${PV}/Config.pm \
+ ${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pm \
${libdir}/perl5/${PV}/*/Config_git.pl \
${libdir}/perl5/${PV}/*/Config_heavy-target.pl \
${libdir}/perl5/config.sh \
@@ -206,6 +226,9 @@ FILES_${PN} = "${bindir}/perl ${bindir}/perl.real ${bindir}/perl${PV} ${libdir}/
${libdir}/perl5/${PV}/warnings \
${libdir}/perl5/${PV}/vars.pm \
${libdir}/perl5/site_perl \
+ ${libdir}/perl5/${PV}/ExtUtils/MANIFEST.SKIP \
+ ${libdir}/perl5/${PV}/ExtUtils/xsubpp \
+ ${libdir}/perl5/${PV}/ExtUtils/typemap \
"
RPROVIDES_${PN} += "perl-module-strict perl-module-vars perl-module-config perl-module-warnings \
perl-module-warnings-register"
@@ -216,9 +239,6 @@ FILES_${PN}-dev_append = " ${libdir}/perl5/${PV}/*/CORE"
FILES_${PN}-doc_append = " ${libdir}/perl5/${PV}/Unicode/Collate/*.txt \
${libdir}/perl5/${PV}/*/.packlist \
- ${libdir}/perl5/${PV}/ExtUtils/MANIFEST.SKIP \
- ${libdir}/perl5/${PV}/ExtUtils/xsubpp \
- ${libdir}/perl5/${PV}/ExtUtils/typemap \
${libdir}/perl5/${PV}/Encode/encode.h \
"
PACKAGES += "${PN}-misc"
@@ -254,7 +274,7 @@ python split_perl_packages () {
do_split_packages(d, libdir, r'Module/([^\/]*)\.pm', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
do_split_packages(d, libdir, r'Module/([^\/]*)/.*', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
do_split_packages(d, libdir, r'.*linux/([^\/].*)\.(pm|pl|e2x)', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
- do_split_packages(d, libdir, r'(^(?!(CPAN\/|CPANPLUS\/|Module\/|unicore\/)[^\/]).*)\.(pm|pl|e2x)', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
+ do_split_packages(d, libdir, r'(^(?!(CPAN\/|CPANPLUS\/|Module\/|unicore\/|.*linux\/)[^\/]).*)\.(pm|pl|e2x)', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
# perl-modules should recommend every perl module, and only the
# modules. Don't attempt to use the result of do_split_packages() as some
diff --git a/meta/recipes-devtools/pseudo/files/0001-Add-statx.patch b/meta/recipes-devtools/pseudo/files/0001-Add-statx.patch
new file mode 100644
index 0000000000..f01e699de7
--- /dev/null
+++ b/meta/recipes-devtools/pseudo/files/0001-Add-statx.patch
@@ -0,0 +1,106 @@
+From 4e41a05de1f34ba00a68ca4f20fb49c4d1cbd2d0 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Wed, 6 Nov 2019 12:17:46 +0000
+Subject: [PATCH] Add statx glibc/syscall support
+
+Modern distros (e.g. fedora30) are starting to use the new statx() syscall through
+the newly exposed glibc wrapper function in software like coreutils (e.g. the ls
+command). Add support to intercept this to pseudo.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Upstream-Status: Submitted [Emailed to seebs]
+---
+ ports/linux/guts/statx.c | 48 ++++++++++++++++++++++++++++++++++++++++
+ ports/linux/portdefs.h | 1 +
+ ports/linux/wrapfuncs.in | 1 +
+ 3 files changed, 50 insertions(+)
+ create mode 100644 ports/linux/guts/statx.c
+
+diff --git a/ports/linux/statx/guts/statx.c b/ports/linux/statx/guts/statx.c
+new file mode 100644
+index 0000000..a3259c4
+--- /dev/null
++++ b/ports/linux/statx/guts/statx.c
+@@ -0,0 +1,42 @@
++/*
++ * Copyright (c) 2019 Linux Foundation
++ * Author: Richard Purdie
++ *
++ * SPDX-License-Identifier: LGPL-2.1-only
++ *
++ * int
++ * statx(int dirfd, const char *pathname, int flags, unsigned int mask, struct statx *statxbuf) {
++ * int rc = -1;
++ */
++ pseudo_msg_t *msg;
++ PSEUDO_STATBUF buf;
++ int save_errno;
++
++ rc = real_statx(dirfd, pathname, flags, mask, statxbuf);
++ save_errno = errno;
++ if (rc == -1) {
++ return rc;
++ }
++
++ buf.st_uid = statxbuf->stx_uid;
++ buf.st_gid = statxbuf->stx_gid;
++ buf.st_dev = makedev(statxbuf->stx_dev_major, statxbuf->stx_dev_minor);
++ buf.st_ino = statxbuf->stx_ino;
++ buf.st_mode = statxbuf->stx_mode;
++ buf.st_rdev = makedev(statxbuf->stx_rdev_major, statxbuf->stx_rdev_minor);
++ buf.st_nlink = statxbuf->stx_nlink;
++ msg = pseudo_client_op(OP_STAT, 0, -1, dirfd, pathname, &buf);
++ if (msg && msg->result == RESULT_SUCCEED) {
++ pseudo_debug(PDBGF_FILE, "statx(path %s), flags %o, stat rc %d, stat uid %o\n", pathname, flags, rc, statxbuf->stx_uid);
++ statxbuf->stx_uid = msg->uid;
++ statxbuf->stx_gid = msg->gid;
++ statxbuf->stx_mode = msg->mode;
++ statxbuf->stx_rdev_major = major(msg->rdev);
++ statxbuf->stx_rdev_minor = minor(msg->rdev);
++ } else {
++ pseudo_debug(PDBGF_FILE, "statx(path %s) failed, flags %o, stat rc %d, stat uid %o\n", pathname, flags, rc, statxbuf->stx_uid);
++ }
++ errno = save_errno;
++/* return rc;
++ * }
++ */
+diff --git a/ports/linux/statx/portdefs.h b/ports/linux/statx/portdefs.h
+new file mode 100644
+index 0000000..bf934dc
+--- /dev/null
++++ b/ports/linux/statx/portdefs.h
+@@ -0,0 +1,6 @@
++/*
++ * SPDX-License-Identifier: LGPL-2.1-only
++ *
++ */
++#include <sys/stat.h>
++#include <sys/sysmacros.h>
+diff --git a/ports/linux/statx/wrapfuncs.in b/ports/linux/statx/wrapfuncs.in
+new file mode 100644
+index 0000000..c9cd4c3
+--- /dev/null
++++ b/ports/linux/statx/wrapfuncs.in
+@@ -0,0 +1 @@
++int statx(int dirfd, const char *pathname, int flags, unsigned int mask, struct statx *statxbuf);
+diff --git a/ports/linux/subports b/ports/linux/subports
+index a29044a..49081bf 100755
+--- a/ports/linux/subports
++++ b/ports/linux/subports
+@@ -54,3 +54,13 @@ else
+ fi
+ rm -f dummy.c dummy.o
+
++cat > dummy.c <<EOF
++#define _GNU_SOURCE
++#include <sys/stat.h>
++struct statx x;
++EOF
++if ${CC} -c -o dummy.o dummy.c >/dev/null 2>&1; then
++ echo "linux/statx"
++fi
++rm -f dummy.c dummy.o
++
+--
+2.17.1
+
diff --git a/meta/recipes-devtools/pseudo/files/0001-realpath.c-Remove-trailing-slashes.patch b/meta/recipes-devtools/pseudo/files/0001-realpath.c-Remove-trailing-slashes.patch
new file mode 100644
index 0000000000..17829ef3ac
--- /dev/null
+++ b/meta/recipes-devtools/pseudo/files/0001-realpath.c-Remove-trailing-slashes.patch
@@ -0,0 +1,57 @@
+From 86c9a5610e3333ad6aaadb1ac1e8b5a2c948d119 Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Mon, 25 Nov 2019 18:46:45 +0800
+Subject: [PATCH] realpath.c: Remove trailing slashes
+
+Linux system's realpath() remove trailing slashes, but pseudo's doesn't, need
+make them identical.
+
+E.g., the following code (rel.c) prints '/tmp' with system's realpath, but
+pseudo's realpath prints '/tmp/':
+
+ #include <stdio.h>
+ #include <limits.h>
+ #include <stdlib.h>
+
+ int main() {
+ char out[PATH_MAX];
+ printf("%s\n", realpath("/tmp/", out));
+ return 0;
+ }
+
+$ bitbake base-passwd -cdevshell # For pseudo env
+$ gcc rel.c
+$ ./a.out
+/tmp/ (but should be /tmp)
+
+This patch fixes the problem.
+
+Upstream-Status: Submitted [https://lists.yoctoproject.org/g/poky/message/11879]
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ ports/unix/guts/realpath.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/ports/unix/guts/realpath.c b/ports/unix/guts/realpath.c
+--- a/ports/unix/guts/realpath.c
++++ b/ports/unix/guts/realpath.c
+@@ -14,7 +14,14 @@
+ errno = ENAMETOOLONG;
+ return NULL;
+ }
+- if ((len = strlen(rname)) >= pseudo_sys_path_max()) {
++ len = strlen(rname);
++ char *ep = rname + len - 1;
++ while (ep > rname && *ep == '/') {
++ --len;
++ *(ep--) = '\0';
++ }
++
++ if (len >= pseudo_sys_path_max()) {
+ errno = ENAMETOOLONG;
+ return NULL;
+ }
+--
+2.7.4
+
diff --git a/meta/recipes-devtools/pseudo/pseudo.inc b/meta/recipes-devtools/pseudo/pseudo.inc
index 8b34909726..50e30064bd 100644
--- a/meta/recipes-devtools/pseudo/pseudo.inc
+++ b/meta/recipes-devtools/pseudo/pseudo.inc
@@ -16,6 +16,7 @@ INSANE_SKIP_${PN}-dbg += "libdir"
PROVIDES += "virtual/fakeroot"
MAKEOPTS = ""
+MAKEOPTS_class-native = "'RPATH=-Wl,--rpath=XORIGIN/../../../sqlite3-native/usr/lib/'"
inherit siteinfo pkgconfig
@@ -30,23 +31,10 @@ PSEUDO_EXTRA_OPTS ?= "--enable-force-async --without-passwd-fallback --enable-ep
# Compile for the local machine arch...
do_compile () {
- SQLITE_LDADD='$(SQLITE)/$(SQLITE_LIB)/libsqlite3.a'
- for sqlite_link_opt in $(pkg-config sqlite3 --libs --static)
- do
- case "$sqlite_link_opt" in
- -lsqlite3)
- ;;
- -l*)
- SQLITE_LDADD="${SQLITE_LDADD} ${sqlite_link_opt}"
- ;;
- *)
- ;;
- esac
- done
if [ "${SITEINFO_BITS}" = "64" ]; then
- ${S}/configure ${PSEUDO_EXTRA_OPTS} --prefix=${prefix} --libdir=${prefix}/lib/pseudo/lib${SITEINFO_BITS} --with-sqlite-lib=${baselib} --with-sqlite=${STAGING_DIR_TARGET}${exec_prefix} --cflags="${CFLAGS}" --bits=${SITEINFO_BITS} --with-static-sqlite="$SQLITE_LDADD" --without-rpath
+ ${S}/configure ${PSEUDO_EXTRA_OPTS} --prefix=${prefix} --libdir=${prefix}/lib/pseudo/lib${SITEINFO_BITS} --with-sqlite-lib=${baselib} --with-sqlite=${STAGING_DIR_TARGET}${exec_prefix} --cflags="${CFLAGS}" --bits=${SITEINFO_BITS} --without-rpath
else
- ${S}/configure ${PSEUDO_EXTRA_OPTS} --prefix=${prefix} --libdir=${prefix}/lib/pseudo/lib --with-sqlite-lib=${baselib} --with-sqlite=${STAGING_DIR_TARGET}${exec_prefix} --cflags="${CFLAGS}" --bits=${SITEINFO_BITS} --with-static-sqlite="$SQLITE_LDADD" --without-rpath
+ ${S}/configure ${PSEUDO_EXTRA_OPTS} --prefix=${prefix} --libdir=${prefix}/lib/pseudo/lib --with-sqlite-lib=${baselib} --with-sqlite=${STAGING_DIR_TARGET}${exec_prefix} --cflags="${CFLAGS}" --bits=${SITEINFO_BITS} --without-rpath
fi
oe_runmake ${MAKEOPTS}
}
@@ -128,6 +116,7 @@ do_install () {
}
do_install_append_class-native () {
+ chrpath ${D}${bindir}/pseudo -r `chrpath ${D}${bindir}/pseudo | cut -d = -f 2 | sed s/XORIGIN/\\$ORIGIN/`
install -d ${D}${sysconfdir}
# The fallback files should never be modified
install -m 444 ${WORKDIR}/fallback-passwd ${D}${sysconfdir}/passwd
diff --git a/meta/recipes-devtools/pseudo/pseudo_git.bb b/meta/recipes-devtools/pseudo/pseudo_git.bb
index 78500e1cc6..7c75293ef1 100644
--- a/meta/recipes-devtools/pseudo/pseudo_git.bb
+++ b/meta/recipes-devtools/pseudo/pseudo_git.bb
@@ -7,6 +7,8 @@ SRC_URI = "git://git.yoctoproject.org/pseudo \
file://moreretries.patch \
file://toomanyfiles.patch \
file://0001-maketables-wrappers-use-Python-3.patch \
+ file://0001-Add-statx.patch \
+ file://0001-realpath.c-Remove-trailing-slashes.patch \
"
SRCREV = "060058bb29f70b244e685b3c704eb0641b736f73"
diff --git a/meta/recipes-devtools/python-numpy/files/aarch64/_numpyconfig.h b/meta/recipes-devtools/python-numpy/files/aarch64/_numpyconfig.h
deleted file mode 100644
index 109deb0435..0000000000
--- a/meta/recipes-devtools/python-numpy/files/aarch64/_numpyconfig.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#define NPY_HAVE_ENDIAN_H 1
-#define NPY_SIZEOF_SHORT SIZEOF_SHORT
-#define NPY_SIZEOF_INT SIZEOF_INT
-#define NPY_SIZEOF_LONG SIZEOF_LONG
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_COMPLEX_FLOAT 8
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_COMPLEX_DOUBLE 16
-#define NPY_SIZEOF_LONGDOUBLE 16
-#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 32
-#define NPY_SIZEOF_PY_INTPTR_T 8
-#define NPY_SIZEOF_PY_LONG_LONG 8
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_SIZEOF_OFF_T 8
-#define NPY_NO_SMP 0
-#define NPY_HAVE_DECL_ISNAN
-#define NPY_HAVE_DECL_ISINF
-#define NPY_HAVE_DECL_ISFINITE
-#define NPY_HAVE_DECL_SIGNBIT
-#define NPY_USE_C99_COMPLEX 1
-#define NPY_HAVE_COMPLEX_DOUBLE 1
-#define NPY_HAVE_COMPLEX_FLOAT 1
-#define NPY_HAVE_COMPLEX_LONG_DOUBLE 1
-#define NPY_ENABLE_SEPARATE_COMPILATION 1
-#define NPY_USE_C99_FORMATS 1
-#define NPY_VISIBILITY_HIDDEN __attribute__((visibility("hidden")))
-#define NPY_ABI_VERSION 0x01000009
-#define NPY_API_VERSION 0x0000000A
-
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS 1
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/aarch64/config.h b/meta/recipes-devtools/python-numpy/files/aarch64/config.h
deleted file mode 100644
index c30b868f2f..0000000000
--- a/meta/recipes-devtools/python-numpy/files/aarch64/config.h
+++ /dev/null
@@ -1,139 +0,0 @@
-#define HAVE_ENDIAN_H 1
-#define SIZEOF_PY_INTPTR_T 8
-#define SIZEOF_PY_LONG_LONG 8
-#define MATHLIB m
-#define HAVE_SIN 1
-#define HAVE_COS 1
-#define HAVE_TAN 1
-#define HAVE_SINH 1
-#define HAVE_COSH 1
-#define HAVE_TANH 1
-#define HAVE_FABS 1
-#define HAVE_FLOOR 1
-#define HAVE_CEIL 1
-#define HAVE_SQRT 1
-#define HAVE_LOG10 1
-#define HAVE_LOG 1
-#define HAVE_EXP 1
-#define HAVE_ASIN 1
-#define HAVE_ACOS 1
-#define HAVE_ATAN 1
-#define HAVE_FMOD 1
-#define HAVE_MODF 1
-#define HAVE_FREXP 1
-#define HAVE_LDEXP 1
-#define HAVE_RINT 1
-#define HAVE_TRUNC 1
-#define HAVE_EXP2 1
-#define HAVE_LOG2 1
-#define HAVE_ATAN2 1
-#define HAVE_POW 1
-#define HAVE_NEXTAFTER 1
-#define HAVE_SINF 1
-#define HAVE_COSF 1
-#define HAVE_TANF 1
-#define HAVE_SINHF 1
-#define HAVE_COSHF 1
-#define HAVE_TANHF 1
-#define HAVE_FABSF 1
-#define HAVE_FLOORF 1
-#define HAVE_CEILF 1
-#define HAVE_RINTF 1
-#define HAVE_TRUNCF 1
-#define HAVE_SQRTF 1
-#define HAVE_LOG10F 1
-#define HAVE_LOGF 1
-#define HAVE_LOG1PF 1
-#define HAVE_EXPF 1
-#define HAVE_EXPM1F 1
-#define HAVE_ASINF 1
-#define HAVE_ACOSF 1
-#define HAVE_ATANF 1
-#define HAVE_ASINHF 1
-#define HAVE_ACOSHF 1
-#define HAVE_ATANHF 1
-#define HAVE_HYPOTF 1
-#define HAVE_ATAN2F 1
-#define HAVE_POWF 1
-#define HAVE_FMODF 1
-#define HAVE_MODFF 1
-#define HAVE_FREXPF 1
-#define HAVE_LDEXPF 1
-#define HAVE_EXP2F 1
-#define HAVE_LOG2F 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_NEXTAFTERF 1
-#define HAVE_SINL 1
-#define HAVE_COSL 1
-#define HAVE_TANL 1
-#define HAVE_SINHL 1
-#define HAVE_COSHL 1
-#define HAVE_TANHL 1
-#define HAVE_FABSL 1
-#define HAVE_FLOORL 1
-#define HAVE_CEILL 1
-#define HAVE_RINTL 1
-#define HAVE_TRUNCL 1
-#define HAVE_SQRTL 1
-#define HAVE_LOG10L 1
-#define HAVE_LOGL 1
-#define HAVE_LOG1PL 1
-#define HAVE_EXPL 1
-#define HAVE_EXPM1L 1
-#define HAVE_ASINL 1
-#define HAVE_ACOSL 1
-#define HAVE_ATANL 1
-#define HAVE_ASINHL 1
-#define HAVE_ACOSHL 1
-#define HAVE_ATANHL 1
-#define HAVE_HYPOTL 1
-#define HAVE_ATAN2L 1
-#define HAVE_POWL 1
-#define HAVE_FMODL 1
-#define HAVE_MODFL 1
-#define HAVE_FREXPL 1
-#define HAVE_LDEXPL 1
-#define HAVE_EXP2L 1
-#define HAVE_LOG2L 1
-#define HAVE_COPYSIGNL 1
-#define HAVE_NEXTAFTERL 1
-#define HAVE_DECL_SIGNBIT
-#define HAVE_COMPLEX_H 1
-#define HAVE_CREAL 1
-#define HAVE_CIMAG 1
-#define HAVE_CABS 1
-#define HAVE_CARG 1
-#define HAVE_CEXP 1
-#define HAVE_CSQRT 1
-#define HAVE_CLOG 1
-#define HAVE_CCOS 1
-#define HAVE_CSIN 1
-#define HAVE_CPOW 1
-#define HAVE_CREALF 1
-#define HAVE_CIMAGF 1
-#define HAVE_CABSF 1
-#define HAVE_CARGF 1
-#define HAVE_CEXPF 1
-#define HAVE_CSQRTF 1
-#define HAVE_CLOGF 1
-#define HAVE_CCOSF 1
-#define HAVE_CSINF 1
-#define HAVE_CPOWF 1
-#define HAVE_CREALL 1
-#define HAVE_CIMAGL 1
-#define HAVE_CABSL 1
-#define HAVE_CARGL 1
-#define HAVE_CEXPL 1
-#define HAVE_CSQRTL 1
-#define HAVE_CLOGL 1
-#define HAVE_CCOSL 1
-#define HAVE_CSINL 1
-#define HAVE_CPOWL 1
-#define HAVE_LDOUBLE_IEEE_QUAD_LE 1
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-#ifndef _NPY_NPY_CONFIG_H_
-#error config.h should never be included directly, include npy_config.h instead
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/arm/config.h b/meta/recipes-devtools/python-numpy/files/arm/config.h
deleted file mode 100644
index 17ef186d56..0000000000
--- a/meta/recipes-devtools/python-numpy/files/arm/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ./src.linux-i686-2.5/numpy/core/include/numpy/config.h */
-/* #define SIZEOF_SHORT 2 */
-/* #define SIZEOF_INT 4 */
-/* #define SIZEOF_LONG 4 */
-/* #define SIZEOF_FLOAT 4 */
-/* #define SIZEOF_DOUBLE 8 */
-#define SIZEOF_LONG_DOUBLE 12
-#define SIZEOF_PY_INTPTR_T 4
-/* #define SIZEOF_LONG_LONG 8 */
-#define SIZEOF_PY_LONG_LONG 8
-/* #define CHAR_BIT 8 */
-#define MATHLIB m
-#define HAVE_FLOAT_FUNCS
-#define HAVE_LOG1P
-#define HAVE_EXPM1
-#define HAVE_INVERSE_HYPERBOLIC
-#define HAVE_INVERSE_HYPERBOLIC_FLOAT
-#define HAVE_ISNAN
-#define HAVE_ISINF
-#define HAVE_RINT
-
diff --git a/meta/recipes-devtools/python-numpy/files/arm/numpyconfig.h b/meta/recipes-devtools/python-numpy/files/arm/numpyconfig.h
deleted file mode 100644
index c4bf6547f0..0000000000
--- a/meta/recipes-devtools/python-numpy/files/arm/numpyconfig.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* cat ./src.linux-i686-2.5/numpy/core/include/numpy/numpyconfig.h */
-/*
- * * This file is generated by numpy/core/setup.pyc. DO NOT EDIT
- * */
-#define NPY_SIZEOF_SHORT 2
-#define NPY_SIZEOF_INT 4
-#define NPY_SIZEOF_LONG 4
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_LONGDOUBLE 12
-#define NPY_SIZEOF_PY_INTPTR_T 4
-#define NPY_NO_SMP 0
-
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_SIZEOF_PY_LONG_LONG 8
-/* #define CHAR_BIT 8 */
-
diff --git a/meta/recipes-devtools/python-numpy/files/armeb/config.h b/meta/recipes-devtools/python-numpy/files/armeb/config.h
deleted file mode 100644
index 17ef186d56..0000000000
--- a/meta/recipes-devtools/python-numpy/files/armeb/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ./src.linux-i686-2.5/numpy/core/include/numpy/config.h */
-/* #define SIZEOF_SHORT 2 */
-/* #define SIZEOF_INT 4 */
-/* #define SIZEOF_LONG 4 */
-/* #define SIZEOF_FLOAT 4 */
-/* #define SIZEOF_DOUBLE 8 */
-#define SIZEOF_LONG_DOUBLE 12
-#define SIZEOF_PY_INTPTR_T 4
-/* #define SIZEOF_LONG_LONG 8 */
-#define SIZEOF_PY_LONG_LONG 8
-/* #define CHAR_BIT 8 */
-#define MATHLIB m
-#define HAVE_FLOAT_FUNCS
-#define HAVE_LOG1P
-#define HAVE_EXPM1
-#define HAVE_INVERSE_HYPERBOLIC
-#define HAVE_INVERSE_HYPERBOLIC_FLOAT
-#define HAVE_ISNAN
-#define HAVE_ISINF
-#define HAVE_RINT
-
diff --git a/meta/recipes-devtools/python-numpy/files/armeb/numpyconfig.h b/meta/recipes-devtools/python-numpy/files/armeb/numpyconfig.h
deleted file mode 100644
index c4bf6547f0..0000000000
--- a/meta/recipes-devtools/python-numpy/files/armeb/numpyconfig.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* cat ./src.linux-i686-2.5/numpy/core/include/numpy/numpyconfig.h */
-/*
- * * This file is generated by numpy/core/setup.pyc. DO NOT EDIT
- * */
-#define NPY_SIZEOF_SHORT 2
-#define NPY_SIZEOF_INT 4
-#define NPY_SIZEOF_LONG 4
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_LONGDOUBLE 12
-#define NPY_SIZEOF_PY_INTPTR_T 4
-#define NPY_NO_SMP 0
-
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_SIZEOF_PY_LONG_LONG 8
-/* #define CHAR_BIT 8 */
-
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarchn32eb/_numpyconfig.h b/meta/recipes-devtools/python-numpy/files/mipsarchn32eb/_numpyconfig.h
deleted file mode 100644
index debb390094..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarchn32eb/_numpyconfig.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#define NPY_HAVE_ENDIAN_H 1
-#define NPY_SIZEOF_SHORT SIZEOF_SHORT
-#define NPY_SIZEOF_INT SIZEOF_INT
-#define NPY_SIZEOF_LONG SIZEOF_LONG
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_COMPLEX_FLOAT 8
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_COMPLEX_DOUBLE 16
-#define NPY_SIZEOF_LONGDOUBLE 16
-#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 32
-#define NPY_ENABLE_SEPARATE_COMPILATION 1
-#define NPY_SIZEOF_PY_INTPTR_T 8
-#define NPY_SIZEOF_PY_LONG_LONG 8
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_SIZEOF_OFF_T 8
-#define NPY_NO_SMP 0
-#define NPY_HAVE_DECL_ISNAN
-#define NPY_HAVE_DECL_ISINF
-#define NPY_HAVE_DECL_ISFINITE
-#define NPY_HAVE_DECL_SIGNBIT
-#define NPY_USE_C99_COMPLEX 1
-#define NPY_HAVE_COMPLEX_DOUBLE 1
-#define NPY_HAVE_COMPLEX_FLOAT 1
-#define NPY_HAVE_COMPLEX_LONG_DOUBLE 1
-#define NPY_USE_C99_FORMATS 1
-#define NPY_VISIBILITY_HIDDEN __attribute__((visibility("hidden")))
-#define NPY_ABI_VERSION 0x01000009
-#define NPY_API_VERSION 0x0000000A
-
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS 1
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarchn32eb/config.h b/meta/recipes-devtools/python-numpy/files/mipsarchn32eb/config.h
deleted file mode 100644
index c30b868f2f..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarchn32eb/config.h
+++ /dev/null
@@ -1,139 +0,0 @@
-#define HAVE_ENDIAN_H 1
-#define SIZEOF_PY_INTPTR_T 8
-#define SIZEOF_PY_LONG_LONG 8
-#define MATHLIB m
-#define HAVE_SIN 1
-#define HAVE_COS 1
-#define HAVE_TAN 1
-#define HAVE_SINH 1
-#define HAVE_COSH 1
-#define HAVE_TANH 1
-#define HAVE_FABS 1
-#define HAVE_FLOOR 1
-#define HAVE_CEIL 1
-#define HAVE_SQRT 1
-#define HAVE_LOG10 1
-#define HAVE_LOG 1
-#define HAVE_EXP 1
-#define HAVE_ASIN 1
-#define HAVE_ACOS 1
-#define HAVE_ATAN 1
-#define HAVE_FMOD 1
-#define HAVE_MODF 1
-#define HAVE_FREXP 1
-#define HAVE_LDEXP 1
-#define HAVE_RINT 1
-#define HAVE_TRUNC 1
-#define HAVE_EXP2 1
-#define HAVE_LOG2 1
-#define HAVE_ATAN2 1
-#define HAVE_POW 1
-#define HAVE_NEXTAFTER 1
-#define HAVE_SINF 1
-#define HAVE_COSF 1
-#define HAVE_TANF 1
-#define HAVE_SINHF 1
-#define HAVE_COSHF 1
-#define HAVE_TANHF 1
-#define HAVE_FABSF 1
-#define HAVE_FLOORF 1
-#define HAVE_CEILF 1
-#define HAVE_RINTF 1
-#define HAVE_TRUNCF 1
-#define HAVE_SQRTF 1
-#define HAVE_LOG10F 1
-#define HAVE_LOGF 1
-#define HAVE_LOG1PF 1
-#define HAVE_EXPF 1
-#define HAVE_EXPM1F 1
-#define HAVE_ASINF 1
-#define HAVE_ACOSF 1
-#define HAVE_ATANF 1
-#define HAVE_ASINHF 1
-#define HAVE_ACOSHF 1
-#define HAVE_ATANHF 1
-#define HAVE_HYPOTF 1
-#define HAVE_ATAN2F 1
-#define HAVE_POWF 1
-#define HAVE_FMODF 1
-#define HAVE_MODFF 1
-#define HAVE_FREXPF 1
-#define HAVE_LDEXPF 1
-#define HAVE_EXP2F 1
-#define HAVE_LOG2F 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_NEXTAFTERF 1
-#define HAVE_SINL 1
-#define HAVE_COSL 1
-#define HAVE_TANL 1
-#define HAVE_SINHL 1
-#define HAVE_COSHL 1
-#define HAVE_TANHL 1
-#define HAVE_FABSL 1
-#define HAVE_FLOORL 1
-#define HAVE_CEILL 1
-#define HAVE_RINTL 1
-#define HAVE_TRUNCL 1
-#define HAVE_SQRTL 1
-#define HAVE_LOG10L 1
-#define HAVE_LOGL 1
-#define HAVE_LOG1PL 1
-#define HAVE_EXPL 1
-#define HAVE_EXPM1L 1
-#define HAVE_ASINL 1
-#define HAVE_ACOSL 1
-#define HAVE_ATANL 1
-#define HAVE_ASINHL 1
-#define HAVE_ACOSHL 1
-#define HAVE_ATANHL 1
-#define HAVE_HYPOTL 1
-#define HAVE_ATAN2L 1
-#define HAVE_POWL 1
-#define HAVE_FMODL 1
-#define HAVE_MODFL 1
-#define HAVE_FREXPL 1
-#define HAVE_LDEXPL 1
-#define HAVE_EXP2L 1
-#define HAVE_LOG2L 1
-#define HAVE_COPYSIGNL 1
-#define HAVE_NEXTAFTERL 1
-#define HAVE_DECL_SIGNBIT
-#define HAVE_COMPLEX_H 1
-#define HAVE_CREAL 1
-#define HAVE_CIMAG 1
-#define HAVE_CABS 1
-#define HAVE_CARG 1
-#define HAVE_CEXP 1
-#define HAVE_CSQRT 1
-#define HAVE_CLOG 1
-#define HAVE_CCOS 1
-#define HAVE_CSIN 1
-#define HAVE_CPOW 1
-#define HAVE_CREALF 1
-#define HAVE_CIMAGF 1
-#define HAVE_CABSF 1
-#define HAVE_CARGF 1
-#define HAVE_CEXPF 1
-#define HAVE_CSQRTF 1
-#define HAVE_CLOGF 1
-#define HAVE_CCOSF 1
-#define HAVE_CSINF 1
-#define HAVE_CPOWF 1
-#define HAVE_CREALL 1
-#define HAVE_CIMAGL 1
-#define HAVE_CABSL 1
-#define HAVE_CARGL 1
-#define HAVE_CEXPL 1
-#define HAVE_CSQRTL 1
-#define HAVE_CLOGL 1
-#define HAVE_CCOSL 1
-#define HAVE_CSINL 1
-#define HAVE_CPOWL 1
-#define HAVE_LDOUBLE_IEEE_QUAD_LE 1
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-#ifndef _NPY_NPY_CONFIG_H_
-#error config.h should never be included directly, include npy_config.h instead
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarchn32el/_numpyconfig.h b/meta/recipes-devtools/python-numpy/files/mipsarchn32el/_numpyconfig.h
deleted file mode 100644
index 8e2b5d0940..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarchn32el/_numpyconfig.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#define NPY_HAVE_ENDIAN_H 1
-#define NPY_SIZEOF_SHORT SIZEOF_SHORT
-#define NPY_SIZEOF_INT SIZEOF_INT
-#define NPY_SIZEOF_LONG SIZEOF_LONG
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_COMPLEX_FLOAT 8
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_COMPLEX_DOUBLE 16
-#define NPY_SIZEOF_LONGDOUBLE 16
-#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 32
-#define NPY_ENABLE_SEPARATE_COMPILATION 1
-#define NPY_SIZEOF_PY_INTPTR_T 8
-#define NPY_SIZEOF_PY_LONG_LONG 8
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_NO_SMP 0
-#define NPY_HAVE_DECL_ISNAN
-#define NPY_HAVE_DECL_ISINF
-#define NPY_HAVE_DECL_ISFINITE
-#define NPY_HAVE_DECL_SIGNBIT
-#define NPY_USE_C99_COMPLEX 1
-#define NPY_HAVE_COMPLEX_DOUBLE 1
-#define NPY_HAVE_COMPLEX_FLOAT 1
-#define NPY_HAVE_COMPLEX_LONG_DOUBLE 1
-#define NPY_USE_C99_FORMATS 1
-#define NPY_VISIBILITY_HIDDEN __attribute__((visibility("hidden")))
-#define NPY_ABI_VERSION 0x01000009
-#define NPY_API_VERSION 0x0000000A
-
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS 1
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarchn32el/config.h b/meta/recipes-devtools/python-numpy/files/mipsarchn32el/config.h
deleted file mode 100644
index 48727039ae..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarchn32el/config.h
+++ /dev/null
@@ -1,138 +0,0 @@
-#define SIZEOF_PY_INTPTR_T 8
-#define SIZEOF_PY_LONG_LONG 8
-#define MATHLIB m
-#define HAVE_SIN 1
-#define HAVE_COS 1
-#define HAVE_TAN 1
-#define HAVE_SINH 1
-#define HAVE_COSH 1
-#define HAVE_TANH 1
-#define HAVE_FABS 1
-#define HAVE_FLOOR 1
-#define HAVE_CEIL 1
-#define HAVE_SQRT 1
-#define HAVE_LOG10 1
-#define HAVE_LOG 1
-#define HAVE_EXP 1
-#define HAVE_ASIN 1
-#define HAVE_ACOS 1
-#define HAVE_ATAN 1
-#define HAVE_FMOD 1
-#define HAVE_MODF 1
-#define HAVE_FREXP 1
-#define HAVE_LDEXP 1
-#define HAVE_RINT 1
-#define HAVE_TRUNC 1
-#define HAVE_EXP2 1
-#define HAVE_LOG2 1
-#define HAVE_ATAN2 1
-#define HAVE_POW 1
-#define HAVE_NEXTAFTER 1
-#define HAVE_SINF 1
-#define HAVE_COSF 1
-#define HAVE_TANF 1
-#define HAVE_SINHF 1
-#define HAVE_COSHF 1
-#define HAVE_TANHF 1
-#define HAVE_FABSF 1
-#define HAVE_FLOORF 1
-#define HAVE_CEILF 1
-#define HAVE_RINTF 1
-#define HAVE_TRUNCF 1
-#define HAVE_SQRTF 1
-#define HAVE_LOG10F 1
-#define HAVE_LOGF 1
-#define HAVE_LOG1PF 1
-#define HAVE_EXPF 1
-#define HAVE_EXPM1F 1
-#define HAVE_ASINF 1
-#define HAVE_ACOSF 1
-#define HAVE_ATANF 1
-#define HAVE_ASINHF 1
-#define HAVE_ACOSHF 1
-#define HAVE_ATANHF 1
-#define HAVE_HYPOTF 1
-#define HAVE_ATAN2F 1
-#define HAVE_POWF 1
-#define HAVE_FMODF 1
-#define HAVE_MODFF 1
-#define HAVE_FREXPF 1
-#define HAVE_LDEXPF 1
-#define HAVE_EXP2F 1
-#define HAVE_LOG2F 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_NEXTAFTERF 1
-#define HAVE_SINL 1
-#define HAVE_COSL 1
-#define HAVE_TANL 1
-#define HAVE_SINHL 1
-#define HAVE_COSHL 1
-#define HAVE_TANHL 1
-#define HAVE_FABSL 1
-#define HAVE_FLOORL 1
-#define HAVE_CEILL 1
-#define HAVE_RINTL 1
-#define HAVE_TRUNCL 1
-#define HAVE_SQRTL 1
-#define HAVE_LOG10L 1
-#define HAVE_LOGL 1
-#define HAVE_LOG1PL 1
-#define HAVE_EXPL 1
-#define HAVE_EXPM1L 1
-#define HAVE_ASINL 1
-#define HAVE_ACOSL 1
-#define HAVE_ATANL 1
-#define HAVE_ASINHL 1
-#define HAVE_ACOSHL 1
-#define HAVE_ATANHL 1
-#define HAVE_HYPOTL 1
-#define HAVE_ATAN2L 1
-#define HAVE_POWL 1
-#define HAVE_FMODL 1
-#define HAVE_MODFL 1
-#define HAVE_FREXPL 1
-#define HAVE_LDEXPL 1
-#define HAVE_EXP2L 1
-#define HAVE_LOG2L 1
-#define HAVE_COPYSIGNL 1
-#define HAVE_NEXTAFTERL 1
-#define HAVE_DECL_SIGNBIT
-#define HAVE_COMPLEX_H 1
-#define HAVE_CREAL 1
-#define HAVE_CIMAG 1
-#define HAVE_CABS 1
-#define HAVE_CARG 1
-#define HAVE_CEXP 1
-#define HAVE_CSQRT 1
-#define HAVE_CLOG 1
-#define HAVE_CCOS 1
-#define HAVE_CSIN 1
-#define HAVE_CPOW 1
-#define HAVE_CREALF 1
-#define HAVE_CIMAGF 1
-#define HAVE_CABSF 1
-#define HAVE_CARGF 1
-#define HAVE_CEXPF 1
-#define HAVE_CSQRTF 1
-#define HAVE_CLOGF 1
-#define HAVE_CCOSF 1
-#define HAVE_CSINF 1
-#define HAVE_CPOWF 1
-#define HAVE_CREALL 1
-#define HAVE_CIMAGL 1
-#define HAVE_CABSL 1
-#define HAVE_CARGL 1
-#define HAVE_CEXPL 1
-#define HAVE_CSQRTL 1
-#define HAVE_CLOGL 1
-#define HAVE_CCOSL 1
-#define HAVE_CSINL 1
-#define HAVE_CPOWL 1
-#define HAVE_LDOUBLE_IEEE_QUAD_LE 1
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-#ifndef _NPY_NPY_CONFIG_H_
-#error config.h should never be included directly, include npy_config.h instead
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarchn64eb/_numpyconfig.h b/meta/recipes-devtools/python-numpy/files/mipsarchn64eb/_numpyconfig.h
deleted file mode 100644
index debb390094..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarchn64eb/_numpyconfig.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#define NPY_HAVE_ENDIAN_H 1
-#define NPY_SIZEOF_SHORT SIZEOF_SHORT
-#define NPY_SIZEOF_INT SIZEOF_INT
-#define NPY_SIZEOF_LONG SIZEOF_LONG
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_COMPLEX_FLOAT 8
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_COMPLEX_DOUBLE 16
-#define NPY_SIZEOF_LONGDOUBLE 16
-#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 32
-#define NPY_ENABLE_SEPARATE_COMPILATION 1
-#define NPY_SIZEOF_PY_INTPTR_T 8
-#define NPY_SIZEOF_PY_LONG_LONG 8
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_SIZEOF_OFF_T 8
-#define NPY_NO_SMP 0
-#define NPY_HAVE_DECL_ISNAN
-#define NPY_HAVE_DECL_ISINF
-#define NPY_HAVE_DECL_ISFINITE
-#define NPY_HAVE_DECL_SIGNBIT
-#define NPY_USE_C99_COMPLEX 1
-#define NPY_HAVE_COMPLEX_DOUBLE 1
-#define NPY_HAVE_COMPLEX_FLOAT 1
-#define NPY_HAVE_COMPLEX_LONG_DOUBLE 1
-#define NPY_USE_C99_FORMATS 1
-#define NPY_VISIBILITY_HIDDEN __attribute__((visibility("hidden")))
-#define NPY_ABI_VERSION 0x01000009
-#define NPY_API_VERSION 0x0000000A
-
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS 1
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarchn64eb/config.h b/meta/recipes-devtools/python-numpy/files/mipsarchn64eb/config.h
deleted file mode 100644
index c30b868f2f..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarchn64eb/config.h
+++ /dev/null
@@ -1,139 +0,0 @@
-#define HAVE_ENDIAN_H 1
-#define SIZEOF_PY_INTPTR_T 8
-#define SIZEOF_PY_LONG_LONG 8
-#define MATHLIB m
-#define HAVE_SIN 1
-#define HAVE_COS 1
-#define HAVE_TAN 1
-#define HAVE_SINH 1
-#define HAVE_COSH 1
-#define HAVE_TANH 1
-#define HAVE_FABS 1
-#define HAVE_FLOOR 1
-#define HAVE_CEIL 1
-#define HAVE_SQRT 1
-#define HAVE_LOG10 1
-#define HAVE_LOG 1
-#define HAVE_EXP 1
-#define HAVE_ASIN 1
-#define HAVE_ACOS 1
-#define HAVE_ATAN 1
-#define HAVE_FMOD 1
-#define HAVE_MODF 1
-#define HAVE_FREXP 1
-#define HAVE_LDEXP 1
-#define HAVE_RINT 1
-#define HAVE_TRUNC 1
-#define HAVE_EXP2 1
-#define HAVE_LOG2 1
-#define HAVE_ATAN2 1
-#define HAVE_POW 1
-#define HAVE_NEXTAFTER 1
-#define HAVE_SINF 1
-#define HAVE_COSF 1
-#define HAVE_TANF 1
-#define HAVE_SINHF 1
-#define HAVE_COSHF 1
-#define HAVE_TANHF 1
-#define HAVE_FABSF 1
-#define HAVE_FLOORF 1
-#define HAVE_CEILF 1
-#define HAVE_RINTF 1
-#define HAVE_TRUNCF 1
-#define HAVE_SQRTF 1
-#define HAVE_LOG10F 1
-#define HAVE_LOGF 1
-#define HAVE_LOG1PF 1
-#define HAVE_EXPF 1
-#define HAVE_EXPM1F 1
-#define HAVE_ASINF 1
-#define HAVE_ACOSF 1
-#define HAVE_ATANF 1
-#define HAVE_ASINHF 1
-#define HAVE_ACOSHF 1
-#define HAVE_ATANHF 1
-#define HAVE_HYPOTF 1
-#define HAVE_ATAN2F 1
-#define HAVE_POWF 1
-#define HAVE_FMODF 1
-#define HAVE_MODFF 1
-#define HAVE_FREXPF 1
-#define HAVE_LDEXPF 1
-#define HAVE_EXP2F 1
-#define HAVE_LOG2F 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_NEXTAFTERF 1
-#define HAVE_SINL 1
-#define HAVE_COSL 1
-#define HAVE_TANL 1
-#define HAVE_SINHL 1
-#define HAVE_COSHL 1
-#define HAVE_TANHL 1
-#define HAVE_FABSL 1
-#define HAVE_FLOORL 1
-#define HAVE_CEILL 1
-#define HAVE_RINTL 1
-#define HAVE_TRUNCL 1
-#define HAVE_SQRTL 1
-#define HAVE_LOG10L 1
-#define HAVE_LOGL 1
-#define HAVE_LOG1PL 1
-#define HAVE_EXPL 1
-#define HAVE_EXPM1L 1
-#define HAVE_ASINL 1
-#define HAVE_ACOSL 1
-#define HAVE_ATANL 1
-#define HAVE_ASINHL 1
-#define HAVE_ACOSHL 1
-#define HAVE_ATANHL 1
-#define HAVE_HYPOTL 1
-#define HAVE_ATAN2L 1
-#define HAVE_POWL 1
-#define HAVE_FMODL 1
-#define HAVE_MODFL 1
-#define HAVE_FREXPL 1
-#define HAVE_LDEXPL 1
-#define HAVE_EXP2L 1
-#define HAVE_LOG2L 1
-#define HAVE_COPYSIGNL 1
-#define HAVE_NEXTAFTERL 1
-#define HAVE_DECL_SIGNBIT
-#define HAVE_COMPLEX_H 1
-#define HAVE_CREAL 1
-#define HAVE_CIMAG 1
-#define HAVE_CABS 1
-#define HAVE_CARG 1
-#define HAVE_CEXP 1
-#define HAVE_CSQRT 1
-#define HAVE_CLOG 1
-#define HAVE_CCOS 1
-#define HAVE_CSIN 1
-#define HAVE_CPOW 1
-#define HAVE_CREALF 1
-#define HAVE_CIMAGF 1
-#define HAVE_CABSF 1
-#define HAVE_CARGF 1
-#define HAVE_CEXPF 1
-#define HAVE_CSQRTF 1
-#define HAVE_CLOGF 1
-#define HAVE_CCOSF 1
-#define HAVE_CSINF 1
-#define HAVE_CPOWF 1
-#define HAVE_CREALL 1
-#define HAVE_CIMAGL 1
-#define HAVE_CABSL 1
-#define HAVE_CARGL 1
-#define HAVE_CEXPL 1
-#define HAVE_CSQRTL 1
-#define HAVE_CLOGL 1
-#define HAVE_CCOSL 1
-#define HAVE_CSINL 1
-#define HAVE_CPOWL 1
-#define HAVE_LDOUBLE_IEEE_QUAD_LE 1
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-#ifndef _NPY_NPY_CONFIG_H_
-#error config.h should never be included directly, include npy_config.h instead
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarchn64el/_numpyconfig.h b/meta/recipes-devtools/python-numpy/files/mipsarchn64el/_numpyconfig.h
deleted file mode 100644
index debb390094..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarchn64el/_numpyconfig.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#define NPY_HAVE_ENDIAN_H 1
-#define NPY_SIZEOF_SHORT SIZEOF_SHORT
-#define NPY_SIZEOF_INT SIZEOF_INT
-#define NPY_SIZEOF_LONG SIZEOF_LONG
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_COMPLEX_FLOAT 8
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_COMPLEX_DOUBLE 16
-#define NPY_SIZEOF_LONGDOUBLE 16
-#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 32
-#define NPY_ENABLE_SEPARATE_COMPILATION 1
-#define NPY_SIZEOF_PY_INTPTR_T 8
-#define NPY_SIZEOF_PY_LONG_LONG 8
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_SIZEOF_OFF_T 8
-#define NPY_NO_SMP 0
-#define NPY_HAVE_DECL_ISNAN
-#define NPY_HAVE_DECL_ISINF
-#define NPY_HAVE_DECL_ISFINITE
-#define NPY_HAVE_DECL_SIGNBIT
-#define NPY_USE_C99_COMPLEX 1
-#define NPY_HAVE_COMPLEX_DOUBLE 1
-#define NPY_HAVE_COMPLEX_FLOAT 1
-#define NPY_HAVE_COMPLEX_LONG_DOUBLE 1
-#define NPY_USE_C99_FORMATS 1
-#define NPY_VISIBILITY_HIDDEN __attribute__((visibility("hidden")))
-#define NPY_ABI_VERSION 0x01000009
-#define NPY_API_VERSION 0x0000000A
-
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS 1
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarchn64el/config.h b/meta/recipes-devtools/python-numpy/files/mipsarchn64el/config.h
deleted file mode 100644
index 48727039ae..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarchn64el/config.h
+++ /dev/null
@@ -1,138 +0,0 @@
-#define SIZEOF_PY_INTPTR_T 8
-#define SIZEOF_PY_LONG_LONG 8
-#define MATHLIB m
-#define HAVE_SIN 1
-#define HAVE_COS 1
-#define HAVE_TAN 1
-#define HAVE_SINH 1
-#define HAVE_COSH 1
-#define HAVE_TANH 1
-#define HAVE_FABS 1
-#define HAVE_FLOOR 1
-#define HAVE_CEIL 1
-#define HAVE_SQRT 1
-#define HAVE_LOG10 1
-#define HAVE_LOG 1
-#define HAVE_EXP 1
-#define HAVE_ASIN 1
-#define HAVE_ACOS 1
-#define HAVE_ATAN 1
-#define HAVE_FMOD 1
-#define HAVE_MODF 1
-#define HAVE_FREXP 1
-#define HAVE_LDEXP 1
-#define HAVE_RINT 1
-#define HAVE_TRUNC 1
-#define HAVE_EXP2 1
-#define HAVE_LOG2 1
-#define HAVE_ATAN2 1
-#define HAVE_POW 1
-#define HAVE_NEXTAFTER 1
-#define HAVE_SINF 1
-#define HAVE_COSF 1
-#define HAVE_TANF 1
-#define HAVE_SINHF 1
-#define HAVE_COSHF 1
-#define HAVE_TANHF 1
-#define HAVE_FABSF 1
-#define HAVE_FLOORF 1
-#define HAVE_CEILF 1
-#define HAVE_RINTF 1
-#define HAVE_TRUNCF 1
-#define HAVE_SQRTF 1
-#define HAVE_LOG10F 1
-#define HAVE_LOGF 1
-#define HAVE_LOG1PF 1
-#define HAVE_EXPF 1
-#define HAVE_EXPM1F 1
-#define HAVE_ASINF 1
-#define HAVE_ACOSF 1
-#define HAVE_ATANF 1
-#define HAVE_ASINHF 1
-#define HAVE_ACOSHF 1
-#define HAVE_ATANHF 1
-#define HAVE_HYPOTF 1
-#define HAVE_ATAN2F 1
-#define HAVE_POWF 1
-#define HAVE_FMODF 1
-#define HAVE_MODFF 1
-#define HAVE_FREXPF 1
-#define HAVE_LDEXPF 1
-#define HAVE_EXP2F 1
-#define HAVE_LOG2F 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_NEXTAFTERF 1
-#define HAVE_SINL 1
-#define HAVE_COSL 1
-#define HAVE_TANL 1
-#define HAVE_SINHL 1
-#define HAVE_COSHL 1
-#define HAVE_TANHL 1
-#define HAVE_FABSL 1
-#define HAVE_FLOORL 1
-#define HAVE_CEILL 1
-#define HAVE_RINTL 1
-#define HAVE_TRUNCL 1
-#define HAVE_SQRTL 1
-#define HAVE_LOG10L 1
-#define HAVE_LOGL 1
-#define HAVE_LOG1PL 1
-#define HAVE_EXPL 1
-#define HAVE_EXPM1L 1
-#define HAVE_ASINL 1
-#define HAVE_ACOSL 1
-#define HAVE_ATANL 1
-#define HAVE_ASINHL 1
-#define HAVE_ACOSHL 1
-#define HAVE_ATANHL 1
-#define HAVE_HYPOTL 1
-#define HAVE_ATAN2L 1
-#define HAVE_POWL 1
-#define HAVE_FMODL 1
-#define HAVE_MODFL 1
-#define HAVE_FREXPL 1
-#define HAVE_LDEXPL 1
-#define HAVE_EXP2L 1
-#define HAVE_LOG2L 1
-#define HAVE_COPYSIGNL 1
-#define HAVE_NEXTAFTERL 1
-#define HAVE_DECL_SIGNBIT
-#define HAVE_COMPLEX_H 1
-#define HAVE_CREAL 1
-#define HAVE_CIMAG 1
-#define HAVE_CABS 1
-#define HAVE_CARG 1
-#define HAVE_CEXP 1
-#define HAVE_CSQRT 1
-#define HAVE_CLOG 1
-#define HAVE_CCOS 1
-#define HAVE_CSIN 1
-#define HAVE_CPOW 1
-#define HAVE_CREALF 1
-#define HAVE_CIMAGF 1
-#define HAVE_CABSF 1
-#define HAVE_CARGF 1
-#define HAVE_CEXPF 1
-#define HAVE_CSQRTF 1
-#define HAVE_CLOGF 1
-#define HAVE_CCOSF 1
-#define HAVE_CSINF 1
-#define HAVE_CPOWF 1
-#define HAVE_CREALL 1
-#define HAVE_CIMAGL 1
-#define HAVE_CABSL 1
-#define HAVE_CARGL 1
-#define HAVE_CEXPL 1
-#define HAVE_CSQRTL 1
-#define HAVE_CLOGL 1
-#define HAVE_CCOSL 1
-#define HAVE_CSINL 1
-#define HAVE_CPOWL 1
-#define HAVE_LDOUBLE_IEEE_QUAD_LE 1
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-#ifndef _NPY_NPY_CONFIG_H_
-#error config.h should never be included directly, include npy_config.h instead
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarcho32eb/_numpyconfig.h b/meta/recipes-devtools/python-numpy/files/mipsarcho32eb/_numpyconfig.h
deleted file mode 100644
index 4c465c216c..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarcho32eb/_numpyconfig.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#define NPY_HAVE_ENDIAN_H 1
-#define NPY_SIZEOF_SHORT SIZEOF_SHORT
-#define NPY_SIZEOF_INT SIZEOF_INT
-#define NPY_SIZEOF_LONG SIZEOF_LONG
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_COMPLEX_FLOAT 8
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_COMPLEX_DOUBLE 16
-#define NPY_SIZEOF_LONGDOUBLE 8
-#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 16
-#define NPY_ENABLE_SEPARATE_COMPILATION 1
-#define NPY_SIZEOF_PY_INTPTR_T 4
-#define NPY_SIZEOF_PY_LONG_LONG 8
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_SIZEOF_OFF_T 8
-#define NPY_NO_SMP 0
-#define NPY_HAVE_DECL_ISNAN
-#define NPY_HAVE_DECL_ISINF
-#define NPY_HAVE_DECL_ISFINITE
-#define NPY_HAVE_DECL_SIGNBIT
-#define NPY_USE_C99_COMPLEX 1
-#define NPY_HAVE_COMPLEX_DOUBLE 1
-#define NPY_HAVE_COMPLEX_FLOAT 1
-#define NPY_HAVE_COMPLEX_LONG_DOUBLE 1
-#define NPY_USE_C99_FORMATS 1
-#define NPY_VISIBILITY_HIDDEN __attribute__((visibility("hidden")))
-#define NPY_ABI_VERSION 0x01000009
-#define NPY_API_VERSION 0x0000000A
-
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS 1
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarcho32eb/config.h b/meta/recipes-devtools/python-numpy/files/mipsarcho32eb/config.h
deleted file mode 100644
index 2f6135adce..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarcho32eb/config.h
+++ /dev/null
@@ -1,139 +0,0 @@
-#define HAVE_ENDIAN_H 1
-#define SIZEOF_PY_INTPTR_T 4
-#define SIZEOF_PY_LONG_LONG 8
-#define MATHLIB m
-#define HAVE_SIN 1
-#define HAVE_COS 1
-#define HAVE_TAN 1
-#define HAVE_SINH 1
-#define HAVE_COSH 1
-#define HAVE_TANH 1
-#define HAVE_FABS 1
-#define HAVE_FLOOR 1
-#define HAVE_CEIL 1
-#define HAVE_SQRT 1
-#define HAVE_LOG10 1
-#define HAVE_LOG 1
-#define HAVE_EXP 1
-#define HAVE_ASIN 1
-#define HAVE_ACOS 1
-#define HAVE_ATAN 1
-#define HAVE_FMOD 1
-#define HAVE_MODF 1
-#define HAVE_FREXP 1
-#define HAVE_LDEXP 1
-#define HAVE_RINT 1
-#define HAVE_TRUNC 1
-#define HAVE_EXP2 1
-#define HAVE_LOG2 1
-#define HAVE_ATAN2 1
-#define HAVE_POW 1
-#define HAVE_NEXTAFTER 1
-#define HAVE_SINF 1
-#define HAVE_COSF 1
-#define HAVE_TANF 1
-#define HAVE_SINHF 1
-#define HAVE_COSHF 1
-#define HAVE_TANHF 1
-#define HAVE_FABSF 1
-#define HAVE_FLOORF 1
-#define HAVE_CEILF 1
-#define HAVE_RINTF 1
-#define HAVE_TRUNCF 1
-#define HAVE_SQRTF 1
-#define HAVE_LOG10F 1
-#define HAVE_LOGF 1
-#define HAVE_LOG1PF 1
-#define HAVE_EXPF 1
-#define HAVE_EXPM1F 1
-#define HAVE_ASINF 1
-#define HAVE_ACOSF 1
-#define HAVE_ATANF 1
-#define HAVE_ASINHF 1
-#define HAVE_ACOSHF 1
-#define HAVE_ATANHF 1
-#define HAVE_HYPOTF 1
-#define HAVE_ATAN2F 1
-#define HAVE_POWF 1
-#define HAVE_FMODF 1
-#define HAVE_MODFF 1
-#define HAVE_FREXPF 1
-#define HAVE_LDEXPF 1
-#define HAVE_EXP2F 1
-#define HAVE_LOG2F 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_NEXTAFTERF 1
-#define HAVE_SINL 1
-#define HAVE_COSL 1
-#define HAVE_TANL 1
-#define HAVE_SINHL 1
-#define HAVE_COSHL 1
-#define HAVE_TANHL 1
-#define HAVE_FABSL 1
-#define HAVE_FLOORL 1
-#define HAVE_CEILL 1
-#define HAVE_RINTL 1
-#define HAVE_TRUNCL 1
-#define HAVE_SQRTL 1
-#define HAVE_LOG10L 1
-#define HAVE_LOGL 1
-#define HAVE_LOG1PL 1
-#define HAVE_EXPL 1
-#define HAVE_EXPM1L 1
-#define HAVE_ASINL 1
-#define HAVE_ACOSL 1
-#define HAVE_ATANL 1
-#define HAVE_ASINHL 1
-#define HAVE_ACOSHL 1
-#define HAVE_ATANHL 1
-#define HAVE_HYPOTL 1
-#define HAVE_ATAN2L 1
-#define HAVE_POWL 1
-#define HAVE_FMODL 1
-#define HAVE_MODFL 1
-#define HAVE_FREXPL 1
-#define HAVE_LDEXPL 1
-#define HAVE_EXP2L 1
-#define HAVE_LOG2L 1
-#define HAVE_COPYSIGNL 1
-#define HAVE_NEXTAFTERL 1
-#define HAVE_DECL_SIGNBIT
-#define HAVE_COMPLEX_H 1
-#define HAVE_CREAL 1
-#define HAVE_CIMAG 1
-#define HAVE_CABS 1
-#define HAVE_CARG 1
-#define HAVE_CEXP 1
-#define HAVE_CSQRT 1
-#define HAVE_CLOG 1
-#define HAVE_CCOS 1
-#define HAVE_CSIN 1
-#define HAVE_CPOW 1
-#define HAVE_CREALF 1
-#define HAVE_CIMAGF 1
-#define HAVE_CABSF 1
-#define HAVE_CARGF 1
-#define HAVE_CEXPF 1
-#define HAVE_CSQRTF 1
-#define HAVE_CLOGF 1
-#define HAVE_CCOSF 1
-#define HAVE_CSINF 1
-#define HAVE_CPOWF 1
-#define HAVE_CREALL 1
-#define HAVE_CIMAGL 1
-#define HAVE_CABSL 1
-#define HAVE_CARGL 1
-#define HAVE_CEXPL 1
-#define HAVE_CSQRTL 1
-#define HAVE_CLOGL 1
-#define HAVE_CCOSL 1
-#define HAVE_CSINL 1
-#define HAVE_CPOWL 1
-#define HAVE_LDOUBLE_IEEE_DOUBLE_BE 1
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-#ifndef _NPY_NPY_CONFIG_H_
-#error config.h should never be included directly, include npy_config.h instead
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarcho32el/config.h b/meta/recipes-devtools/python-numpy/files/mipsarcho32el/config.h
deleted file mode 100644
index 17ef186d56..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarcho32el/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ./src.linux-i686-2.5/numpy/core/include/numpy/config.h */
-/* #define SIZEOF_SHORT 2 */
-/* #define SIZEOF_INT 4 */
-/* #define SIZEOF_LONG 4 */
-/* #define SIZEOF_FLOAT 4 */
-/* #define SIZEOF_DOUBLE 8 */
-#define SIZEOF_LONG_DOUBLE 12
-#define SIZEOF_PY_INTPTR_T 4
-/* #define SIZEOF_LONG_LONG 8 */
-#define SIZEOF_PY_LONG_LONG 8
-/* #define CHAR_BIT 8 */
-#define MATHLIB m
-#define HAVE_FLOAT_FUNCS
-#define HAVE_LOG1P
-#define HAVE_EXPM1
-#define HAVE_INVERSE_HYPERBOLIC
-#define HAVE_INVERSE_HYPERBOLIC_FLOAT
-#define HAVE_ISNAN
-#define HAVE_ISINF
-#define HAVE_RINT
-
diff --git a/meta/recipes-devtools/python-numpy/files/mipsarcho32el/numpyconfig.h b/meta/recipes-devtools/python-numpy/files/mipsarcho32el/numpyconfig.h
deleted file mode 100644
index 0b7cd51af4..0000000000
--- a/meta/recipes-devtools/python-numpy/files/mipsarcho32el/numpyconfig.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* cat ./src.linux-i686-2.5/numpy/core/include/numpy/numpyconfig.h */
-/*
- * * This file is generated by numpy/core/setup.pyc. DO NOT EDIT
- * */
-#define NPY_SIZEOF_SHORT 2
-#define NPY_SIZEOF_INT 4
-#define NPY_SIZEOF_LONG 4
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_LONGDOUBLE 12
-#define NPY_SIZEOF_PY_INTPTR_T 4
-#define NPY_NO_SMP 0
-
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_SIZEOF_PY_LONG_LONG 8
-#define NPY_SIZEOF_OFF_T 8
-/* #define CHAR_BIT 8 */
-
diff --git a/meta/recipes-devtools/python-numpy/files/powerpc/_numpyconfig.h b/meta/recipes-devtools/python-numpy/files/powerpc/_numpyconfig.h
deleted file mode 100644
index 6e7262ad91..0000000000
--- a/meta/recipes-devtools/python-numpy/files/powerpc/_numpyconfig.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#define NPY_HAVE_ENDIAN_H 1
-#define NPY_SIZEOF_SHORT SIZEOF_SHORT
-#define NPY_SIZEOF_INT SIZEOF_INT
-#define NPY_SIZEOF_LONG SIZEOF_LONG
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_COMPLEX_FLOAT 8
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_COMPLEX_DOUBLE 16
-#define NPY_SIZEOF_LONGDOUBLE 16
-#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 32
-#define NPY_ENABLE_SEPARATE_COMPILATION 1
-#define NPY_SIZEOF_PY_INTPTR_T 4
-#define NPY_SIZEOF_PY_LONG_LONG 8
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_SIZEOF_OFF_T 8
-#define NPY_NO_SMP 0
-#define NPY_HAVE_DECL_ISNAN
-#define NPY_HAVE_DECL_ISINF
-#define NPY_HAVE_DECL_ISFINITE
-#define NPY_HAVE_DECL_SIGNBIT
-#define NPY_USE_C99_COMPLEX 1
-#define NPY_HAVE_COMPLEX_DOUBLE 1
-#define NPY_HAVE_COMPLEX_FLOAT 1
-#define NPY_HAVE_COMPLEX_LONG_DOUBLE 1
-#define NPY_USE_C99_FORMATS 1
-#define NPY_VISIBILITY_HIDDEN __attribute__((visibility("hidden")))
-#define NPY_ABI_VERSION 0x01000009
-#define NPY_API_VERSION 0x0000000A
-
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS 1
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/powerpc/config.h b/meta/recipes-devtools/python-numpy/files/powerpc/config.h
deleted file mode 100644
index f65d39d5de..0000000000
--- a/meta/recipes-devtools/python-numpy/files/powerpc/config.h
+++ /dev/null
@@ -1,139 +0,0 @@
-#define HAVE_ENDIAN_H 1
-#define SIZEOF_PY_INTPTR_T 4
-#define SIZEOF_PY_LONG_LONG 8
-#define MATHLIB m
-#define HAVE_SIN 1
-#define HAVE_COS 1
-#define HAVE_TAN 1
-#define HAVE_SINH 1
-#define HAVE_COSH 1
-#define HAVE_TANH 1
-#define HAVE_FABS 1
-#define HAVE_FLOOR 1
-#define HAVE_CEIL 1
-#define HAVE_SQRT 1
-#define HAVE_LOG10 1
-#define HAVE_LOG 1
-#define HAVE_EXP 1
-#define HAVE_ASIN 1
-#define HAVE_ACOS 1
-#define HAVE_ATAN 1
-#define HAVE_FMOD 1
-#define HAVE_MODF 1
-#define HAVE_FREXP 1
-#define HAVE_LDEXP 1
-#define HAVE_RINT 1
-#define HAVE_TRUNC 1
-#define HAVE_EXP2 1
-#define HAVE_LOG2 1
-#define HAVE_ATAN2 1
-#define HAVE_POW 1
-#define HAVE_NEXTAFTER 1
-#define HAVE_SINF 1
-#define HAVE_COSF 1
-#define HAVE_TANF 1
-#define HAVE_SINHF 1
-#define HAVE_COSHF 1
-#define HAVE_TANHF 1
-#define HAVE_FABSF 1
-#define HAVE_FLOORF 1
-#define HAVE_CEILF 1
-#define HAVE_RINTF 1
-#define HAVE_TRUNCF 1
-#define HAVE_SQRTF 1
-#define HAVE_LOG10F 1
-#define HAVE_LOGF 1
-#define HAVE_LOG1PF 1
-#define HAVE_EXPF 1
-#define HAVE_EXPM1F 1
-#define HAVE_ASINF 1
-#define HAVE_ACOSF 1
-#define HAVE_ATANF 1
-#define HAVE_ASINHF 1
-#define HAVE_ACOSHF 1
-#define HAVE_ATANHF 1
-#define HAVE_HYPOTF 1
-#define HAVE_ATAN2F 1
-#define HAVE_POWF 1
-#define HAVE_FMODF 1
-#define HAVE_MODFF 1
-#define HAVE_FREXPF 1
-#define HAVE_LDEXPF 1
-#define HAVE_EXP2F 1
-#define HAVE_LOG2F 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_NEXTAFTERF 1
-#define HAVE_SINL 1
-#define HAVE_COSL 1
-#define HAVE_TANL 1
-#define HAVE_SINHL 1
-#define HAVE_COSHL 1
-#define HAVE_TANHL 1
-#define HAVE_FABSL 1
-#define HAVE_FLOORL 1
-#define HAVE_CEILL 1
-#define HAVE_RINTL 1
-#define HAVE_TRUNCL 1
-#define HAVE_SQRTL 1
-#define HAVE_LOG10L 1
-#define HAVE_LOGL 1
-#define HAVE_LOG1PL 1
-#define HAVE_EXPL 1
-#define HAVE_EXPM1L 1
-#define HAVE_ASINL 1
-#define HAVE_ACOSL 1
-#define HAVE_ATANL 1
-#define HAVE_ASINHL 1
-#define HAVE_ACOSHL 1
-#define HAVE_ATANHL 1
-#define HAVE_HYPOTL 1
-#define HAVE_ATAN2L 1
-#define HAVE_POWL 1
-#define HAVE_FMODL 1
-#define HAVE_MODFL 1
-#define HAVE_FREXPL 1
-#define HAVE_LDEXPL 1
-#define HAVE_EXP2L 1
-#define HAVE_LOG2L 1
-#define HAVE_COPYSIGNL 1
-#define HAVE_NEXTAFTERL 1
-#define HAVE_DECL_SIGNBIT
-#define HAVE_COMPLEX_H 1
-#define HAVE_CREAL 1
-#define HAVE_CIMAG 1
-#define HAVE_CABS 1
-#define HAVE_CARG 1
-#define HAVE_CEXP 1
-#define HAVE_CSQRT 1
-#define HAVE_CLOG 1
-#define HAVE_CCOS 1
-#define HAVE_CSIN 1
-#define HAVE_CPOW 1
-#define HAVE_CREALF 1
-#define HAVE_CIMAGF 1
-#define HAVE_CABSF 1
-#define HAVE_CARGF 1
-#define HAVE_CEXPF 1
-#define HAVE_CSQRTF 1
-#define HAVE_CLOGF 1
-#define HAVE_CCOSF 1
-#define HAVE_CSINF 1
-#define HAVE_CPOWF 1
-#define HAVE_CREALL 1
-#define HAVE_CIMAGL 1
-#define HAVE_CABSL 1
-#define HAVE_CARGL 1
-#define HAVE_CEXPL 1
-#define HAVE_CSQRTL 1
-#define HAVE_CLOGL 1
-#define HAVE_CCOSL 1
-#define HAVE_CSINL 1
-#define HAVE_CPOWL 1
-#define HAVE_LDOUBLE_DOUBLE_DOUBLE_BE 1
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-#ifndef _NPY_NPY_CONFIG_H_
-#error config.h should never be included directly, include npy_config.h instead
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/powerpc64/_numpyconfig.h b/meta/recipes-devtools/python-numpy/files/powerpc64/_numpyconfig.h
deleted file mode 100644
index debb390094..0000000000
--- a/meta/recipes-devtools/python-numpy/files/powerpc64/_numpyconfig.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#define NPY_HAVE_ENDIAN_H 1
-#define NPY_SIZEOF_SHORT SIZEOF_SHORT
-#define NPY_SIZEOF_INT SIZEOF_INT
-#define NPY_SIZEOF_LONG SIZEOF_LONG
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_COMPLEX_FLOAT 8
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_COMPLEX_DOUBLE 16
-#define NPY_SIZEOF_LONGDOUBLE 16
-#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 32
-#define NPY_ENABLE_SEPARATE_COMPILATION 1
-#define NPY_SIZEOF_PY_INTPTR_T 8
-#define NPY_SIZEOF_PY_LONG_LONG 8
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_SIZEOF_OFF_T 8
-#define NPY_NO_SMP 0
-#define NPY_HAVE_DECL_ISNAN
-#define NPY_HAVE_DECL_ISINF
-#define NPY_HAVE_DECL_ISFINITE
-#define NPY_HAVE_DECL_SIGNBIT
-#define NPY_USE_C99_COMPLEX 1
-#define NPY_HAVE_COMPLEX_DOUBLE 1
-#define NPY_HAVE_COMPLEX_FLOAT 1
-#define NPY_HAVE_COMPLEX_LONG_DOUBLE 1
-#define NPY_USE_C99_FORMATS 1
-#define NPY_VISIBILITY_HIDDEN __attribute__((visibility("hidden")))
-#define NPY_ABI_VERSION 0x01000009
-#define NPY_API_VERSION 0x0000000A
-
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS 1
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/powerpc64/config.h b/meta/recipes-devtools/python-numpy/files/powerpc64/config.h
deleted file mode 100644
index c30b868f2f..0000000000
--- a/meta/recipes-devtools/python-numpy/files/powerpc64/config.h
+++ /dev/null
@@ -1,139 +0,0 @@
-#define HAVE_ENDIAN_H 1
-#define SIZEOF_PY_INTPTR_T 8
-#define SIZEOF_PY_LONG_LONG 8
-#define MATHLIB m
-#define HAVE_SIN 1
-#define HAVE_COS 1
-#define HAVE_TAN 1
-#define HAVE_SINH 1
-#define HAVE_COSH 1
-#define HAVE_TANH 1
-#define HAVE_FABS 1
-#define HAVE_FLOOR 1
-#define HAVE_CEIL 1
-#define HAVE_SQRT 1
-#define HAVE_LOG10 1
-#define HAVE_LOG 1
-#define HAVE_EXP 1
-#define HAVE_ASIN 1
-#define HAVE_ACOS 1
-#define HAVE_ATAN 1
-#define HAVE_FMOD 1
-#define HAVE_MODF 1
-#define HAVE_FREXP 1
-#define HAVE_LDEXP 1
-#define HAVE_RINT 1
-#define HAVE_TRUNC 1
-#define HAVE_EXP2 1
-#define HAVE_LOG2 1
-#define HAVE_ATAN2 1
-#define HAVE_POW 1
-#define HAVE_NEXTAFTER 1
-#define HAVE_SINF 1
-#define HAVE_COSF 1
-#define HAVE_TANF 1
-#define HAVE_SINHF 1
-#define HAVE_COSHF 1
-#define HAVE_TANHF 1
-#define HAVE_FABSF 1
-#define HAVE_FLOORF 1
-#define HAVE_CEILF 1
-#define HAVE_RINTF 1
-#define HAVE_TRUNCF 1
-#define HAVE_SQRTF 1
-#define HAVE_LOG10F 1
-#define HAVE_LOGF 1
-#define HAVE_LOG1PF 1
-#define HAVE_EXPF 1
-#define HAVE_EXPM1F 1
-#define HAVE_ASINF 1
-#define HAVE_ACOSF 1
-#define HAVE_ATANF 1
-#define HAVE_ASINHF 1
-#define HAVE_ACOSHF 1
-#define HAVE_ATANHF 1
-#define HAVE_HYPOTF 1
-#define HAVE_ATAN2F 1
-#define HAVE_POWF 1
-#define HAVE_FMODF 1
-#define HAVE_MODFF 1
-#define HAVE_FREXPF 1
-#define HAVE_LDEXPF 1
-#define HAVE_EXP2F 1
-#define HAVE_LOG2F 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_NEXTAFTERF 1
-#define HAVE_SINL 1
-#define HAVE_COSL 1
-#define HAVE_TANL 1
-#define HAVE_SINHL 1
-#define HAVE_COSHL 1
-#define HAVE_TANHL 1
-#define HAVE_FABSL 1
-#define HAVE_FLOORL 1
-#define HAVE_CEILL 1
-#define HAVE_RINTL 1
-#define HAVE_TRUNCL 1
-#define HAVE_SQRTL 1
-#define HAVE_LOG10L 1
-#define HAVE_LOGL 1
-#define HAVE_LOG1PL 1
-#define HAVE_EXPL 1
-#define HAVE_EXPM1L 1
-#define HAVE_ASINL 1
-#define HAVE_ACOSL 1
-#define HAVE_ATANL 1
-#define HAVE_ASINHL 1
-#define HAVE_ACOSHL 1
-#define HAVE_ATANHL 1
-#define HAVE_HYPOTL 1
-#define HAVE_ATAN2L 1
-#define HAVE_POWL 1
-#define HAVE_FMODL 1
-#define HAVE_MODFL 1
-#define HAVE_FREXPL 1
-#define HAVE_LDEXPL 1
-#define HAVE_EXP2L 1
-#define HAVE_LOG2L 1
-#define HAVE_COPYSIGNL 1
-#define HAVE_NEXTAFTERL 1
-#define HAVE_DECL_SIGNBIT
-#define HAVE_COMPLEX_H 1
-#define HAVE_CREAL 1
-#define HAVE_CIMAG 1
-#define HAVE_CABS 1
-#define HAVE_CARG 1
-#define HAVE_CEXP 1
-#define HAVE_CSQRT 1
-#define HAVE_CLOG 1
-#define HAVE_CCOS 1
-#define HAVE_CSIN 1
-#define HAVE_CPOW 1
-#define HAVE_CREALF 1
-#define HAVE_CIMAGF 1
-#define HAVE_CABSF 1
-#define HAVE_CARGF 1
-#define HAVE_CEXPF 1
-#define HAVE_CSQRTF 1
-#define HAVE_CLOGF 1
-#define HAVE_CCOSF 1
-#define HAVE_CSINF 1
-#define HAVE_CPOWF 1
-#define HAVE_CREALL 1
-#define HAVE_CIMAGL 1
-#define HAVE_CABSL 1
-#define HAVE_CARGL 1
-#define HAVE_CEXPL 1
-#define HAVE_CSQRTL 1
-#define HAVE_CLOGL 1
-#define HAVE_CCOSL 1
-#define HAVE_CSINL 1
-#define HAVE_CPOWL 1
-#define HAVE_LDOUBLE_IEEE_QUAD_LE 1
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-#ifndef _NPY_NPY_CONFIG_H_
-#error config.h should never be included directly, include npy_config.h instead
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/riscv64/_numpyconfig.h b/meta/recipes-devtools/python-numpy/files/riscv64/_numpyconfig.h
deleted file mode 100644
index 109deb0435..0000000000
--- a/meta/recipes-devtools/python-numpy/files/riscv64/_numpyconfig.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#define NPY_HAVE_ENDIAN_H 1
-#define NPY_SIZEOF_SHORT SIZEOF_SHORT
-#define NPY_SIZEOF_INT SIZEOF_INT
-#define NPY_SIZEOF_LONG SIZEOF_LONG
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_COMPLEX_FLOAT 8
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_COMPLEX_DOUBLE 16
-#define NPY_SIZEOF_LONGDOUBLE 16
-#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 32
-#define NPY_SIZEOF_PY_INTPTR_T 8
-#define NPY_SIZEOF_PY_LONG_LONG 8
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_SIZEOF_OFF_T 8
-#define NPY_NO_SMP 0
-#define NPY_HAVE_DECL_ISNAN
-#define NPY_HAVE_DECL_ISINF
-#define NPY_HAVE_DECL_ISFINITE
-#define NPY_HAVE_DECL_SIGNBIT
-#define NPY_USE_C99_COMPLEX 1
-#define NPY_HAVE_COMPLEX_DOUBLE 1
-#define NPY_HAVE_COMPLEX_FLOAT 1
-#define NPY_HAVE_COMPLEX_LONG_DOUBLE 1
-#define NPY_ENABLE_SEPARATE_COMPILATION 1
-#define NPY_USE_C99_FORMATS 1
-#define NPY_VISIBILITY_HIDDEN __attribute__((visibility("hidden")))
-#define NPY_ABI_VERSION 0x01000009
-#define NPY_API_VERSION 0x0000000A
-
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS 1
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/riscv64/config.h b/meta/recipes-devtools/python-numpy/files/riscv64/config.h
deleted file mode 100644
index c30b868f2f..0000000000
--- a/meta/recipes-devtools/python-numpy/files/riscv64/config.h
+++ /dev/null
@@ -1,139 +0,0 @@
-#define HAVE_ENDIAN_H 1
-#define SIZEOF_PY_INTPTR_T 8
-#define SIZEOF_PY_LONG_LONG 8
-#define MATHLIB m
-#define HAVE_SIN 1
-#define HAVE_COS 1
-#define HAVE_TAN 1
-#define HAVE_SINH 1
-#define HAVE_COSH 1
-#define HAVE_TANH 1
-#define HAVE_FABS 1
-#define HAVE_FLOOR 1
-#define HAVE_CEIL 1
-#define HAVE_SQRT 1
-#define HAVE_LOG10 1
-#define HAVE_LOG 1
-#define HAVE_EXP 1
-#define HAVE_ASIN 1
-#define HAVE_ACOS 1
-#define HAVE_ATAN 1
-#define HAVE_FMOD 1
-#define HAVE_MODF 1
-#define HAVE_FREXP 1
-#define HAVE_LDEXP 1
-#define HAVE_RINT 1
-#define HAVE_TRUNC 1
-#define HAVE_EXP2 1
-#define HAVE_LOG2 1
-#define HAVE_ATAN2 1
-#define HAVE_POW 1
-#define HAVE_NEXTAFTER 1
-#define HAVE_SINF 1
-#define HAVE_COSF 1
-#define HAVE_TANF 1
-#define HAVE_SINHF 1
-#define HAVE_COSHF 1
-#define HAVE_TANHF 1
-#define HAVE_FABSF 1
-#define HAVE_FLOORF 1
-#define HAVE_CEILF 1
-#define HAVE_RINTF 1
-#define HAVE_TRUNCF 1
-#define HAVE_SQRTF 1
-#define HAVE_LOG10F 1
-#define HAVE_LOGF 1
-#define HAVE_LOG1PF 1
-#define HAVE_EXPF 1
-#define HAVE_EXPM1F 1
-#define HAVE_ASINF 1
-#define HAVE_ACOSF 1
-#define HAVE_ATANF 1
-#define HAVE_ASINHF 1
-#define HAVE_ACOSHF 1
-#define HAVE_ATANHF 1
-#define HAVE_HYPOTF 1
-#define HAVE_ATAN2F 1
-#define HAVE_POWF 1
-#define HAVE_FMODF 1
-#define HAVE_MODFF 1
-#define HAVE_FREXPF 1
-#define HAVE_LDEXPF 1
-#define HAVE_EXP2F 1
-#define HAVE_LOG2F 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_NEXTAFTERF 1
-#define HAVE_SINL 1
-#define HAVE_COSL 1
-#define HAVE_TANL 1
-#define HAVE_SINHL 1
-#define HAVE_COSHL 1
-#define HAVE_TANHL 1
-#define HAVE_FABSL 1
-#define HAVE_FLOORL 1
-#define HAVE_CEILL 1
-#define HAVE_RINTL 1
-#define HAVE_TRUNCL 1
-#define HAVE_SQRTL 1
-#define HAVE_LOG10L 1
-#define HAVE_LOGL 1
-#define HAVE_LOG1PL 1
-#define HAVE_EXPL 1
-#define HAVE_EXPM1L 1
-#define HAVE_ASINL 1
-#define HAVE_ACOSL 1
-#define HAVE_ATANL 1
-#define HAVE_ASINHL 1
-#define HAVE_ACOSHL 1
-#define HAVE_ATANHL 1
-#define HAVE_HYPOTL 1
-#define HAVE_ATAN2L 1
-#define HAVE_POWL 1
-#define HAVE_FMODL 1
-#define HAVE_MODFL 1
-#define HAVE_FREXPL 1
-#define HAVE_LDEXPL 1
-#define HAVE_EXP2L 1
-#define HAVE_LOG2L 1
-#define HAVE_COPYSIGNL 1
-#define HAVE_NEXTAFTERL 1
-#define HAVE_DECL_SIGNBIT
-#define HAVE_COMPLEX_H 1
-#define HAVE_CREAL 1
-#define HAVE_CIMAG 1
-#define HAVE_CABS 1
-#define HAVE_CARG 1
-#define HAVE_CEXP 1
-#define HAVE_CSQRT 1
-#define HAVE_CLOG 1
-#define HAVE_CCOS 1
-#define HAVE_CSIN 1
-#define HAVE_CPOW 1
-#define HAVE_CREALF 1
-#define HAVE_CIMAGF 1
-#define HAVE_CABSF 1
-#define HAVE_CARGF 1
-#define HAVE_CEXPF 1
-#define HAVE_CSQRTF 1
-#define HAVE_CLOGF 1
-#define HAVE_CCOSF 1
-#define HAVE_CSINF 1
-#define HAVE_CPOWF 1
-#define HAVE_CREALL 1
-#define HAVE_CIMAGL 1
-#define HAVE_CABSL 1
-#define HAVE_CARGL 1
-#define HAVE_CEXPL 1
-#define HAVE_CSQRTL 1
-#define HAVE_CLOGL 1
-#define HAVE_CCOSL 1
-#define HAVE_CSINL 1
-#define HAVE_CPOWL 1
-#define HAVE_LDOUBLE_IEEE_QUAD_LE 1
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-#ifndef _NPY_NPY_CONFIG_H_
-#error config.h should never be included directly, include npy_config.h instead
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/x86-64/_numpyconfig.h b/meta/recipes-devtools/python-numpy/files/x86-64/_numpyconfig.h
deleted file mode 100644
index b330361649..0000000000
--- a/meta/recipes-devtools/python-numpy/files/x86-64/_numpyconfig.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#define NPY_HAVE_ENDIAN_H 1
-#define NPY_SIZEOF_SHORT SIZEOF_SHORT
-#define NPY_SIZEOF_INT SIZEOF_INT
-#define NPY_SIZEOF_LONG SIZEOF_LONG
-#define NPY_SIZEOF_FLOAT 4
-#define NPY_SIZEOF_COMPLEX_FLOAT 8
-#define NPY_SIZEOF_DOUBLE 8
-#define NPY_SIZEOF_OFF_T 8
-#define NPY_SIZEOF_COMPLEX_DOUBLE 16
-#define NPY_SIZEOF_LONGDOUBLE 16
-#define NPY_SIZEOF_COMPLEX_LONGDOUBLE 32
-#define NPY_ENABLE_SEPARATE_COMPILATION 1
-#define NPY_SIZEOF_PY_INTPTR_T 8
-#define NPY_SIZEOF_PY_LONG_LONG 8
-#define NPY_SIZEOF_LONGLONG 8
-#define NPY_NO_SMP 0
-#define NPY_HAVE_DECL_ISNAN
-#define NPY_HAVE_DECL_ISINF
-#define NPY_HAVE_DECL_ISFINITE
-#define NPY_HAVE_DECL_SIGNBIT
-#define NPY_USE_C99_COMPLEX 1
-#define NPY_HAVE_COMPLEX_DOUBLE 1
-#define NPY_HAVE_COMPLEX_FLOAT 1
-#define NPY_HAVE_COMPLEX_LONG_DOUBLE 1
-#define NPY_USE_C99_FORMATS 1
-#define NPY_VISIBILITY_HIDDEN __attribute__((visibility("hidden")))
-#define NPY_ABI_VERSION 0x01000009
-#define NPY_API_VERSION 0x0000000A
-
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS 1
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/x86-64/config.h b/meta/recipes-devtools/python-numpy/files/x86-64/config.h
deleted file mode 100644
index 0ce63b7d22..0000000000
--- a/meta/recipes-devtools/python-numpy/files/x86-64/config.h
+++ /dev/null
@@ -1,139 +0,0 @@
-#define HAVE_ENDIAN_H 1
-#define SIZEOF_PY_INTPTR_T 8
-#define SIZEOF_PY_LONG_LONG 8
-#define MATHLIB m
-#define HAVE_SIN 1
-#define HAVE_COS 1
-#define HAVE_TAN 1
-#define HAVE_SINH 1
-#define HAVE_COSH 1
-#define HAVE_TANH 1
-#define HAVE_FABS 1
-#define HAVE_FLOOR 1
-#define HAVE_CEIL 1
-#define HAVE_SQRT 1
-#define HAVE_LOG10 1
-#define HAVE_LOG 1
-#define HAVE_EXP 1
-#define HAVE_ASIN 1
-#define HAVE_ACOS 1
-#define HAVE_ATAN 1
-#define HAVE_FMOD 1
-#define HAVE_MODF 1
-#define HAVE_FREXP 1
-#define HAVE_LDEXP 1
-#define HAVE_RINT 1
-#define HAVE_TRUNC 1
-#define HAVE_EXP2 1
-#define HAVE_LOG2 1
-#define HAVE_ATAN2 1
-#define HAVE_POW 1
-#define HAVE_NEXTAFTER 1
-#define HAVE_SINF 1
-#define HAVE_COSF 1
-#define HAVE_TANF 1
-#define HAVE_SINHF 1
-#define HAVE_COSHF 1
-#define HAVE_TANHF 1
-#define HAVE_FABSF 1
-#define HAVE_FLOORF 1
-#define HAVE_CEILF 1
-#define HAVE_RINTF 1
-#define HAVE_TRUNCF 1
-#define HAVE_SQRTF 1
-#define HAVE_LOG10F 1
-#define HAVE_LOGF 1
-#define HAVE_LOG1PF 1
-#define HAVE_EXPF 1
-#define HAVE_EXPM1F 1
-#define HAVE_ASINF 1
-#define HAVE_ACOSF 1
-#define HAVE_ATANF 1
-#define HAVE_ASINHF 1
-#define HAVE_ACOSHF 1
-#define HAVE_ATANHF 1
-#define HAVE_HYPOTF 1
-#define HAVE_ATAN2F 1
-#define HAVE_POWF 1
-#define HAVE_FMODF 1
-#define HAVE_MODFF 1
-#define HAVE_FREXPF 1
-#define HAVE_LDEXPF 1
-#define HAVE_EXP2F 1
-#define HAVE_LOG2F 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_NEXTAFTERF 1
-#define HAVE_SINL 1
-#define HAVE_COSL 1
-#define HAVE_TANL 1
-#define HAVE_SINHL 1
-#define HAVE_COSHL 1
-#define HAVE_TANHL 1
-#define HAVE_FABSL 1
-#define HAVE_FLOORL 1
-#define HAVE_CEILL 1
-#define HAVE_RINTL 1
-#define HAVE_TRUNCL 1
-#define HAVE_SQRTL 1
-#define HAVE_LOG10L 1
-#define HAVE_LOGL 1
-#define HAVE_LOG1PL 1
-#define HAVE_EXPL 1
-#define HAVE_EXPM1L 1
-#define HAVE_ASINL 1
-#define HAVE_ACOSL 1
-#define HAVE_ATANL 1
-#define HAVE_ASINHL 1
-#define HAVE_ACOSHL 1
-#define HAVE_ATANHL 1
-#define HAVE_HYPOTL 1
-#define HAVE_ATAN2L 1
-#define HAVE_POWL 1
-#define HAVE_FMODL 1
-#define HAVE_MODFL 1
-#define HAVE_FREXPL 1
-#define HAVE_LDEXPL 1
-#define HAVE_EXP2L 1
-#define HAVE_LOG2L 1
-#define HAVE_COPYSIGNL 1
-#define HAVE_NEXTAFTERL 1
-#define HAVE_DECL_SIGNBIT
-#define HAVE_COMPLEX_H 1
-#define HAVE_CREAL 1
-#define HAVE_CIMAG 1
-#define HAVE_CABS 1
-#define HAVE_CARG 1
-#define HAVE_CEXP 1
-#define HAVE_CSQRT 1
-#define HAVE_CLOG 1
-#define HAVE_CCOS 1
-#define HAVE_CSIN 1
-#define HAVE_CPOW 1
-#define HAVE_CREALF 1
-#define HAVE_CIMAGF 1
-#define HAVE_CABSF 1
-#define HAVE_CARGF 1
-#define HAVE_CEXPF 1
-#define HAVE_CSQRTF 1
-#define HAVE_CLOGF 1
-#define HAVE_CCOSF 1
-#define HAVE_CSINF 1
-#define HAVE_CPOWF 1
-#define HAVE_CREALL 1
-#define HAVE_CIMAGL 1
-#define HAVE_CABSL 1
-#define HAVE_CARGL 1
-#define HAVE_CEXPL 1
-#define HAVE_CSQRTL 1
-#define HAVE_CLOGL 1
-#define HAVE_CCOSL 1
-#define HAVE_CSINL 1
-#define HAVE_CPOWL 1
-#define HAVE_LDOUBLE_INTEL_EXTENDED_16_BYTES_LE 1
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-#ifndef _NPY_NPY_CONFIG_H_
-#error config.h should never be included directly, include npy_config.h instead
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/x86/config.h b/meta/recipes-devtools/python-numpy/files/x86/config.h
deleted file mode 100644
index 08e41e3d99..0000000000
--- a/meta/recipes-devtools/python-numpy/files/x86/config.h
+++ /dev/null
@@ -1,108 +0,0 @@
-#define SIZEOF_PY_INTPTR_T 4
-#define SIZEOF_PY_LONG_LONG 8
-#define MATHLIB m
-#define HAVE_SIN
-#define HAVE_COS
-#define HAVE_TAN
-#define HAVE_SINH
-#define HAVE_COSH
-#define HAVE_TANH
-#define HAVE_FABS
-#define HAVE_FLOOR
-#define HAVE_CEIL
-#define HAVE_SQRT
-#define HAVE_LOG10
-#define HAVE_LOG
-#define HAVE_EXP
-#define HAVE_ASIN
-#define HAVE_ACOS
-#define HAVE_ATAN
-#define HAVE_FMOD
-#define HAVE_MODF
-#define HAVE_FREXP
-#define HAVE_LDEXP
-#define HAVE_RINT
-#define HAVE_TRUNC
-#define HAVE_EXP2
-#define HAVE_LOG2
-#define HAVE_ATAN2
-#define HAVE_POW
-#define HAVE_NEXTAFTER
-#define HAVE_SINF
-#define HAVE_COSF
-#define HAVE_TANF
-#define HAVE_SINHF
-#define HAVE_COSHF
-#define HAVE_TANHF
-#define HAVE_FABSF
-#define HAVE_FLOORF
-#define HAVE_CEILF
-#define HAVE_RINTF
-#define HAVE_TRUNCF
-#define HAVE_SQRTF
-#define HAVE_LOG10F
-#define HAVE_LOGF
-#define HAVE_LOG1PF
-#define HAVE_EXPF
-#define HAVE_EXPM1F
-#define HAVE_ASINF
-#define HAVE_ACOSF
-#define HAVE_ATANF
-#define HAVE_ASINHF
-#define HAVE_ACOSHF
-#define HAVE_ATANHF
-#define HAVE_HYPOTF
-#define HAVE_ATAN2F
-#define HAVE_POWF
-#define HAVE_FMODF
-#define HAVE_MODFF
-#define HAVE_FREXPF
-#define HAVE_LDEXPF
-#define HAVE_EXP2F
-#define HAVE_LOG2F
-#define HAVE_COPYSIGNF
-#define HAVE_NEXTAFTERF
-#define HAVE_SINL
-#define HAVE_COSL
-#define HAVE_TANL
-#define HAVE_SINHL
-#define HAVE_COSHL
-#define HAVE_TANHL
-#define HAVE_FABSL
-#define HAVE_FLOORL
-#define HAVE_CEILL
-#define HAVE_RINTL
-#define HAVE_TRUNCL
-#define HAVE_SQRTL
-#define HAVE_LOG10L
-#define HAVE_LOGL
-#define HAVE_LOG1PL
-#define HAVE_EXPL
-#define HAVE_EXPM1L
-#define HAVE_ASINL
-#define HAVE_ACOSL
-#define HAVE_ATANL
-#define HAVE_ASINHL
-#define HAVE_ACOSHL
-#define HAVE_ATANHL
-#define HAVE_HYPOTL
-#define HAVE_ATAN2L
-#define HAVE_POWL
-#define HAVE_FMODL
-#define HAVE_MODFL
-#define HAVE_FREXPL
-#define HAVE_LDEXPL
-#define HAVE_EXP2L
-#define HAVE_LOG2L
-#define HAVE_COPYSIGNL
-#define HAVE_NEXTAFTERL
-#define HAVE_DECL_SIGNBIT
-#define HAVE_COMPLEX_H
-#define HAVE_LDOUBLE_INTEL_EXTENDED_12_BYTES_LE 1
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-#ifndef _NPY_NPY_CONFIG_H_
-#error config.h should never be included directly, include npy_config.h instead
-#endif
diff --git a/meta/recipes-devtools/python-numpy/files/x86/numpyconfig.h b/meta/recipes-devtools/python-numpy/files/x86/numpyconfig.h
deleted file mode 100644
index ff7938cd96..0000000000
--- a/meta/recipes-devtools/python-numpy/files/x86/numpyconfig.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef _NPY_NUMPYCONFIG_H_
-#define _NPY_NUMPYCONFIG_H_
-
-#include "_numpyconfig.h"
-
-/*
- * On Mac OS X, because there is only one configuration stage for all the archs
- * in universal builds, any macro which depends on the arch needs to be
- * harcoded
- */
-#ifdef __APPLE__
- #undef NPY_SIZEOF_LONG
- #undef NPY_SIZEOF_PY_INTPTR_T
-
- #ifdef __LP64__
- #define NPY_SIZEOF_LONG 8
- #define NPY_SIZEOF_PY_INTPTR_T 8
- #else
- #define NPY_SIZEOF_LONG 4
- #define NPY_SIZEOF_PY_INTPTR_T 4
- #endif
-#endif
-
-#endif
diff --git a/meta/recipes-devtools/python-numpy/python-numpy.inc b/meta/recipes-devtools/python-numpy/python-numpy.inc
index a12e72f964..f68b90e6b9 100644
--- a/meta/recipes-devtools/python-numpy/python-numpy.inc
+++ b/meta/recipes-devtools/python-numpy/python-numpy.inc
@@ -8,7 +8,6 @@ SRCNAME = "numpy"
SRC_URI = "https://github.com/${SRCNAME}/${SRCNAME}/releases/download/v${PV}/${SRCNAME}-${PV}.tar.gz \
file://0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch \
file://0001-npy_cpu-Add-riscv-support.patch \
- ${CONFIGFILESURI} \
file://0001-numpy-random-setup.py-remove-the-detection-of-x86-ta.patch \
"
SRC_URI[md5sum] = "c48b2ad785f82cdfe28c907ce35e2a71"
@@ -20,77 +19,10 @@ UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.tar"
# Needed for building with gcc 4.x from centos 7
CFLAGS_append_class-native = " -std=c99"
-CONFIGFILESURI ?= ""
-
-CONFIGFILESURI_aarch64 = " \
- file://config.h \
- file://_numpyconfig.h \
-"
-CONFIGFILESURI_arm = " \
- file://config.h \
- file://numpyconfig.h \
-"
-CONFIGFILESURI_armeb = " \
- file://config.h \
- file://numpyconfig.h \
-"
-CONFIGFILESURI_mipsarcho32el = " \
- file://config.h \
- file://numpyconfig.h \
-"
-CONFIGFILESURI_x86 = " \
- file://config.h \
- file://numpyconfig.h \
-"
-CONFIGFILESURI_x86-64 = " \
- file://config.h \
- file://_numpyconfig.h \
-"
-CONFIGFILESURI_mipsarcho32eb = " \
- file://config.h \
- file://_numpyconfig.h \
-"
-CONFIGFILESURI_powerpc = " \
- file://config.h \
- file://_numpyconfig.h \
-"
-CONFIGFILESURI_powerpc64 = " \
- file://config.h \
- file://_numpyconfig.h \
-"
-CONFIGFILESURI_mipsarchn64eb = " \
- file://config.h \
- file://_numpyconfig.h \
-"
-CONFIGFILESURI_mipsarchn64el = " \
- file://config.h \
- file://_numpyconfig.h \
-"
-CONFIGFILESURI_mipsarchn32eb = " \
- file://config.h \
- file://_numpyconfig.h \
-"
-CONFIGFILESURI_mipsarchn32el = " \
- file://config.h \
- file://_numpyconfig.h \
-"
-CONFIGFILESURI_riscv64 = " \
- file://config.h \
- file://_numpyconfig.h \
-"
-
S = "${WORKDIR}/numpy-${PV}"
CLEANBROKEN = "1"
-# Make the build fail and replace *config.h with proper one
-# This is a ugly, ugly hack - Koen
-do_compile_prepend_class-target() {
- ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} setup.py build ${DISTUTILS_BUILD_ARGS} || \
- true
- cp ${WORKDIR}/*config.h ${S}/build/$(ls ${S}/build | grep src)/numpy/core/include/numpy/
-}
-
FILES_${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/numpy/core/lib/*.a"
# install what is needed for numpy.test()
diff --git a/meta/recipes-devtools/python/python-native/0001-python-native-fix-one-do_populate_sysroot-warning.patch b/meta/recipes-devtools/python/python-native/0001-python-native-fix-one-do_populate_sysroot-warning.patch
index 989818927d..707ee596fa 100644
--- a/meta/recipes-devtools/python/python-native/0001-python-native-fix-one-do_populate_sysroot-warning.patch
+++ b/meta/recipes-devtools/python/python-native/0001-python-native-fix-one-do_populate_sysroot-warning.patch
@@ -1,4 +1,4 @@
-From 12292444e1b3662b994bc223d92b8338fb0895ff Mon Sep 17 00:00:00 2001
+From 6cbb7529cf7ff0da3ca649fb3486facd9620d625 Mon Sep 17 00:00:00 2001
From: Changqing Li <changqing.li@windriver.com>
Date: Thu, 25 Oct 2018 07:32:14 +0000
Subject: [PATCH] python-native: fix one do_populate_sysroot warning
@@ -17,23 +17,24 @@ when do_populate_sysroot. use append to fix it.
Upstream-Status: Inappropriate [oe-specific]
Signed-off-by: Changqing Li <changqing.li@windriver.com>
+
---
setup.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/setup.py b/setup.py
-index 7bf13ed..6c0f29b 100644
+index a2c8127..22f9e23 100644
--- a/setup.py
+++ b/setup.py
-@@ -40,7 +40,7 @@ def add_dir_to_list(dirlist, dir):
- 1) 'dir' is not already in 'dirlist'
- 2) 'dir' actually exists, and is a directory."""
- if dir is not None and os.path.isdir(dir) and dir not in dirlist:
-- dirlist.insert(0, dir)
-+ dirlist.append(dir)
-
- def macosx_sdk_root():
- """
+@@ -47,7 +47,7 @@ def add_dir_to_list(dirlist, dir):
+ else:
+ dir_exists = os.path.isdir(dir)
+ if dir_exists:
+- dirlist.insert(0, dir)
++ dirlist.append(dir)
+
+ MACOS_SDK_ROOT = None
+
--
-2.18.0
+2.17.1
diff --git a/meta/recipes-devtools/python/python-native_2.7.16.bb b/meta/recipes-devtools/python/python-native_2.7.18.bb
index b7442800d9..335318bab8 100644
--- a/meta/recipes-devtools/python/python-native_2.7.16.bb
+++ b/meta/recipes-devtools/python/python-native_2.7.18.bb
@@ -12,7 +12,7 @@ SRC_URI += "\
file://nohostlibs.patch \
file://multilib.patch \
file://add-md5module-support.patch \
- file://builddir.patch \
+ file://0001-python-Resolve-intermediate-staging-issues.patch \
file://parallel-makeinst-create-bindir.patch \
file://revert_use_of_sysconfigdata.patch \
file://0001-python-native-fix-one-do_populate_sysroot-warning.patch \
diff --git a/meta/recipes-devtools/python/python.inc b/meta/recipes-devtools/python/python.inc
index 1462b779e9..fe281586fc 100644
--- a/meta/recipes-devtools/python/python.inc
+++ b/meta/recipes-devtools/python/python.inc
@@ -5,19 +5,13 @@ SECTION = "devel/python"
# bump this on every change in contrib/python/generate-manifest-2.7.py
INC_PR = "r1"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=e466242989bd33c1bd2b6a526a742498"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=203a6dbc802ee896020a47161e759642"
SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
- file://bpo-35907-cve-2019-9948.patch \
- file://bpo-35907-cve-2019-9948-fix.patch \
- file://bpo-36216-cve-2019-9636.patch \
- file://bpo-36216-cve-2019-9636-fix.patch \
- file://CVE-2019-9740.patch \
- file://CVE-2018-20852.patch \
"
-SRC_URI[md5sum] = "30157d85a2c0479c09ea2cbe61f2aaf5"
-SRC_URI[sha256sum] = "f222ef602647eecb6853681156d32de4450a2c39f4de93bd5b20235f2e660ed7"
+SRC_URI[md5sum] = "fd6cc8ec0a78c44036f825e739f36e5a"
+SRC_URI[sha256sum] = "b62c0e7937551d0cc02b8fd5cb0f544f9405bafc9a54d3808ed4594812edef43"
# python recipe is actually python 2.x
# also, exclude pre-releases for both python 2.x and 3.x
@@ -25,6 +19,19 @@ UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>2(\.\d+)+).tar"
CVE_PRODUCT = "python"
+# Upstream agreement is that these are not security issues:
+# https://bugs.python.org/issue32367
+CVE_CHECK_WHITELIST += "CVE-2017-17522"
+# https://bugs.python.org/issue32056
+CVE_CHECK_WHITELIST += "CVE-2017-18207"
+
+# Windows-only, "It was determined that this is a longtime behavior
+# of Python that cannot really be altered at this point."
+CVE_CHECK_WHITELIST += "CVE-2015-5652"
+
+# This is not exploitable when glibc has CVE-2016-10739 fixed.
+CVE_CHECK_WHITELIST += "CVE-2019-18348"
+
PYTHON_MAJMIN = "2.7"
inherit autotools pkgconfig
diff --git a/meta/recipes-devtools/python/python/0001-2.7-bpo-34155-Dont-parse-domains-containing-GH-13079.patch b/meta/recipes-devtools/python/python/0001-2.7-bpo-34155-Dont-parse-domains-containing-GH-13079.patch
deleted file mode 100644
index 5415472a35..0000000000
--- a/meta/recipes-devtools/python/python/0001-2.7-bpo-34155-Dont-parse-domains-containing-GH-13079.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From 532ed09c5454bb789a301bb6f1339a0818255610 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Roberto=20C=2E=20S=C3=A1nchez?= <roberto@connexer.com>
-Date: Sat, 14 Sep 2019 13:26:38 -0400
-Subject: [PATCH] [2.7] bpo-34155: Dont parse domains containing @ (GH-13079)
- (GH-16006)
-
-This change skips parsing of email addresses where domains include a "@" character, which can be maliciously used since the local part is returned as a complete address.
-
-(cherry picked from commit 8cb65d1381b027f0b09ee36bfed7f35bb4dec9a9)
-
-Excludes changes to Lib/email/_header_value_parser.py, which did not
-exist in 2.7.
-
-Co-authored-by: jpic <jpic@users.noreply.github.com>
-
-https://bugs.python.org/issue34155
-
-Upstream-Status: Backport [https://github.com/python/cpython/commit/8cb65d1381b027f0b09ee36bfed7f35bb4dec9a9]
-
-CVE: CVE-2019-16056
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
----
- Lib/email/_parseaddr.py | 11 ++++++++++-
- Lib/email/test/test_email.py | 14 ++++++++++++++
- .../2019-05-04-13-33-37.bpo-34155.MJll68.rst | 1 +
- 3 files changed, 25 insertions(+), 1 deletion(-)
- create mode 100644 Misc/NEWS.d/next/Security/2019-05-04-13-33-37.bpo-34155.MJll68.rst
-
-diff --git a/Lib/email/_parseaddr.py b/Lib/email/_parseaddr.py
-index 690db2c22d..dc49d2e45a 100644
---- a/Lib/email/_parseaddr.py
-+++ b/Lib/email/_parseaddr.py
-@@ -336,7 +336,12 @@ class AddrlistClass:
- aslist.append('@')
- self.pos += 1
- self.gotonext()
-- return EMPTYSTRING.join(aslist) + self.getdomain()
-+ domain = self.getdomain()
-+ if not domain:
-+ # Invalid domain, return an empty address instead of returning a
-+ # local part to denote failed parsing.
-+ return EMPTYSTRING
-+ return EMPTYSTRING.join(aslist) + domain
-
- def getdomain(self):
- """Get the complete domain name from an address."""
-@@ -351,6 +356,10 @@ class AddrlistClass:
- elif self.field[self.pos] == '.':
- self.pos += 1
- sdlist.append('.')
-+ elif self.field[self.pos] == '@':
-+ # bpo-34155: Don't parse domains with two `@` like
-+ # `a@malicious.org@important.com`.
-+ return EMPTYSTRING
- elif self.field[self.pos] in self.atomends:
- break
- else:
-diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py
-index 4b4dee3d34..2efe44ac5a 100644
---- a/Lib/email/test/test_email.py
-+++ b/Lib/email/test/test_email.py
-@@ -2306,6 +2306,20 @@ class TestMiscellaneous(TestEmailBase):
- self.assertEqual(Utils.parseaddr('<>'), ('', ''))
- self.assertEqual(Utils.formataddr(Utils.parseaddr('<>')), '')
-
-+ def test_parseaddr_multiple_domains(self):
-+ self.assertEqual(
-+ Utils.parseaddr('a@b@c'),
-+ ('', '')
-+ )
-+ self.assertEqual(
-+ Utils.parseaddr('a@b.c@c'),
-+ ('', '')
-+ )
-+ self.assertEqual(
-+ Utils.parseaddr('a@172.17.0.1@c'),
-+ ('', '')
-+ )
-+
- def test_noquote_dump(self):
- self.assertEqual(
- Utils.formataddr(('A Silly Person', 'person@dom.ain')),
-diff --git a/Misc/NEWS.d/next/Security/2019-05-04-13-33-37.bpo-34155.MJll68.rst b/Misc/NEWS.d/next/Security/2019-05-04-13-33-37.bpo-34155.MJll68.rst
-new file mode 100644
-index 0000000000..50292e29ed
---- /dev/null
-+++ b/Misc/NEWS.d/next/Security/2019-05-04-13-33-37.bpo-34155.MJll68.rst
-@@ -0,0 +1 @@
-+Fix parsing of invalid email addresses with more than one ``@`` (e.g. a@b@c.com.) to not return the part before 2nd ``@`` as valid email address. Patch by maxking & jpic.
diff --git a/meta/recipes-devtools/python/python/builddir.patch b/meta/recipes-devtools/python/python/0001-python-Resolve-intermediate-staging-issues.patch
index ad629a022e..2ff2ccc43d 100644
--- a/meta/recipes-devtools/python/python/builddir.patch
+++ b/meta/recipes-devtools/python/python/0001-python-Resolve-intermediate-staging-issues.patch
@@ -1,5 +1,10 @@
-When cross compiling python, we used to need to install the Makefile, pyconfig.h
-and the python library to their final location before being able to compile the
+From 77bcb3238b2853d511714544e0f84a37be6c79bf Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Wed, 14 Nov 2012 14:31:24 +0000
+Subject: [PATCH] python: Resolve intermediate staging issues
+
+When cross compiling python, we used to need to install the Makefile, pyconfig.h
+and the python library to their final location before being able to compile the
rest of python. This change allows us to point python at its own source when
building, avoiding a variety of sysroot staging issues and simplifying the main
python recipe.
@@ -7,10 +12,29 @@ python recipe.
Upstream-Status: Inappropriate
RP 2012/11/13
-Index: Python-2.7.9/Lib/sysconfig.py
-===================================================================
---- Python-2.7.9.orig/Lib/sysconfig.py
-+++ Python-2.7.9/Lib/sysconfig.py
+---
+ Lib/distutils/sysconfig.py | 3 +++
+ Lib/sysconfig.py | 5 ++++-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
+index 2f4b8ca..15bceb5 100644
+--- a/Lib/distutils/sysconfig.py
++++ b/Lib/distutils/sysconfig.py
+@@ -31,6 +31,9 @@ else:
+ # sys.executable can be empty if argv[0] has been changed and Python is
+ # unable to retrieve the real program name
+ project_base = os.getcwd()
++_PYTHONBUILDDIR = os.environ.get("PYTHONBUILDDIR", None)
++if _PYTHONBUILDDIR:
++ project_base = _PYTHONBUILDDIR
+ if os.name == "nt" and "pcbuild" in project_base[-8:].lower():
+ project_base = os.path.abspath(os.path.join(project_base, os.path.pardir))
+ # PC/VS7.1
+diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
+index 9c8350d..bddbe2e 100644
+--- a/Lib/sysconfig.py
++++ b/Lib/sysconfig.py
@@ -93,6 +93,7 @@ _PREFIX = os.path.normpath(sys.prefix)
_EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
_CONFIG_VARS = None
@@ -30,17 +54,6 @@ Index: Python-2.7.9/Lib/sysconfig.py
_PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable))
else:
# sys.executable can be empty if argv[0] has been changed and Python is
-Index: Python-2.7.9/Lib/distutils/sysconfig.py
-===================================================================
---- Python-2.7.9.orig/Lib/distutils/sysconfig.py
-+++ Python-2.7.9/Lib/distutils/sysconfig.py
-@@ -26,6 +26,9 @@ EXEC_PREFIX = os.path.normpath(sys.exec_
- # live in project/PCBuild9. If we're dealing with an x64 Windows build,
- # it'll live in project/PCbuild/amd64.
- project_base = os.path.dirname(os.path.abspath(sys.executable))
-+_PYTHONBUILDDIR = os.environ.get("PYTHONBUILDDIR", None)
-+if _PYTHONBUILDDIR:
-+ project_base = _PYTHONBUILDDIR
- if os.name == "nt" and "pcbuild" in project_base[-8:].lower():
- project_base = os.path.abspath(os.path.join(project_base, os.path.pardir))
- # PC/VS7.1
+--
+2.17.1
+
diff --git a/meta/recipes-devtools/python/python/CVE-2018-20852.patch b/meta/recipes-devtools/python/python/CVE-2018-20852.patch
deleted file mode 100644
index 23c784a210..0000000000
--- a/meta/recipes-devtools/python/python/CVE-2018-20852.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From 979daae300916adb399ab5b51410b6ebd0888f13 Mon Sep 17 00:00:00 2001
-From: Xtreak <tir.karthi@gmail.com>
-Date: Sat, 15 Jun 2019 20:59:43 +0530
-Subject: [PATCH] [2.7] bpo-35121: prefix dot in domain for proper subdomain
- validation (GH-10258) (GH-13426)
-
-This is a manual backport of ca7fe5063593958e5efdf90f068582837f07bd14 since 2.7 has `http.cookiejar` in `cookielib`
-
-
-https://bugs.python.org/issue35121
-CVE: CVE-2018-20852
-Upstream-Status: Backport [https://github.com/python/cpython/pull/13426]
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
----
- Lib/cookielib.py | 13 ++++++--
- Lib/test/test_cookielib.py | 30 +++++++++++++++++++
- .../2019-05-20-00-35-12.bpo-35121.RRi-HU.rst | 4 +++
- 3 files changed, 45 insertions(+), 2 deletions(-)
- create mode 100644 Misc/NEWS.d/next/Security/2019-05-20-00-35-12.bpo-35121.RRi-HU.rst
-
-diff --git a/Lib/cookielib.py b/Lib/cookielib.py
-index 2dd7c48728e0..0b471a42f296 100644
---- a/Lib/cookielib.py
-+++ b/Lib/cookielib.py
-@@ -1139,6 +1139,11 @@ def return_ok_domain(self, cookie, request):
- req_host, erhn = eff_request_host(request)
- domain = cookie.domain
-
-+ if domain and not domain.startswith("."):
-+ dotdomain = "." + domain
-+ else:
-+ dotdomain = domain
-+
- # strict check of non-domain cookies: Mozilla does this, MSIE5 doesn't
- if (cookie.version == 0 and
- (self.strict_ns_domain & self.DomainStrictNonDomain) and
-@@ -1151,7 +1156,7 @@ def return_ok_domain(self, cookie, request):
- _debug(" effective request-host name %s does not domain-match "
- "RFC 2965 cookie domain %s", erhn, domain)
- return False
-- if cookie.version == 0 and not ("."+erhn).endswith(domain):
-+ if cookie.version == 0 and not ("."+erhn).endswith(dotdomain):
- _debug(" request-host %s does not match Netscape cookie domain "
- "%s", req_host, domain)
- return False
-@@ -1165,7 +1170,11 @@ def domain_return_ok(self, domain, request):
- req_host = "."+req_host
- if not erhn.startswith("."):
- erhn = "."+erhn
-- if not (req_host.endswith(domain) or erhn.endswith(domain)):
-+ if domain and not domain.startswith("."):
-+ dotdomain = "." + domain
-+ else:
-+ dotdomain = domain
-+ if not (req_host.endswith(dotdomain) or erhn.endswith(dotdomain)):
- #_debug(" request domain %s does not match cookie domain %s",
- # req_host, domain)
- return False
-diff --git a/Lib/test/test_cookielib.py b/Lib/test/test_cookielib.py
-index f2dd9727d137..7f7ff614d61d 100644
---- a/Lib/test/test_cookielib.py
-+++ b/Lib/test/test_cookielib.py
-@@ -368,6 +368,7 @@ def test_domain_return_ok(self):
- ("http://foo.bar.com/", ".foo.bar.com", True),
- ("http://foo.bar.com/", "foo.bar.com", True),
- ("http://foo.bar.com/", ".bar.com", True),
-+ ("http://foo.bar.com/", "bar.com", True),
- ("http://foo.bar.com/", "com", True),
- ("http://foo.com/", "rhubarb.foo.com", False),
- ("http://foo.com/", ".foo.com", True),
-@@ -378,6 +379,8 @@ def test_domain_return_ok(self):
- ("http://foo/", "foo", True),
- ("http://foo/", "foo.local", True),
- ("http://foo/", ".local", True),
-+ ("http://barfoo.com", ".foo.com", False),
-+ ("http://barfoo.com", "foo.com", False),
- ]:
- request = urllib2.Request(url)
- r = pol.domain_return_ok(domain, request)
-@@ -938,6 +941,33 @@ def test_domain_block(self):
- c.add_cookie_header(req)
- self.assertFalse(req.has_header("Cookie"))
-
-+ c.clear()
-+
-+ pol.set_blocked_domains([])
-+ req = Request("http://acme.com/")
-+ res = FakeResponse(headers, "http://acme.com/")
-+ cookies = c.make_cookies(res, req)
-+ c.extract_cookies(res, req)
-+ self.assertEqual(len(c), 1)
-+
-+ req = Request("http://acme.com/")
-+ c.add_cookie_header(req)
-+ self.assertTrue(req.has_header("Cookie"))
-+
-+ req = Request("http://badacme.com/")
-+ c.add_cookie_header(req)
-+ self.assertFalse(pol.return_ok(cookies[0], req))
-+ self.assertFalse(req.has_header("Cookie"))
-+
-+ p = pol.set_blocked_domains(["acme.com"])
-+ req = Request("http://acme.com/")
-+ c.add_cookie_header(req)
-+ self.assertFalse(req.has_header("Cookie"))
-+
-+ req = Request("http://badacme.com/")
-+ c.add_cookie_header(req)
-+ self.assertFalse(req.has_header("Cookie"))
-+
- def test_secure(self):
- from cookielib import CookieJar, DefaultCookiePolicy
-
-diff --git a/Misc/NEWS.d/next/Security/2019-05-20-00-35-12.bpo-35121.RRi-HU.rst b/Misc/NEWS.d/next/Security/2019-05-20-00-35-12.bpo-35121.RRi-HU.rst
-new file mode 100644
-index 000000000000..77251806163b
---- /dev/null
-+++ b/Misc/NEWS.d/next/Security/2019-05-20-00-35-12.bpo-35121.RRi-HU.rst
-@@ -0,0 +1,4 @@
-+Don't send cookies of domain A without Domain attribute to domain B when
-+domain A is a suffix match of domain B while using a cookiejar with
-+:class:`cookielib.DefaultCookiePolicy` policy. Patch by Karthikeyan
-+Singaravelan.
diff --git a/meta/recipes-devtools/python/python/CVE-2019-9740.patch b/meta/recipes-devtools/python/python/CVE-2019-9740.patch
deleted file mode 100644
index 95f43e0387..0000000000
--- a/meta/recipes-devtools/python/python/CVE-2019-9740.patch
+++ /dev/null
@@ -1,216 +0,0 @@
-From bb8071a4cae5ab3fe321481dd3d73662ffb26052 Mon Sep 17 00:00:00 2001
-From: Victor Stinner <victor.stinner@gmail.com>
-Date: Tue, 21 May 2019 15:12:33 +0200
-Subject: [PATCH] bpo-30458: Disallow control chars in http URLs (GH-12755)
- (GH-13154) (GH-13315)
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Disallow control chars in http URLs in urllib2.urlopen. This
-addresses a potential security problem for applications that do not
-sanity check their URLs where http request headers could be injected.
-
-Disable https related urllib tests on a build without ssl (GH-13032)
-These tests require an SSL enabled build. Skip these tests when
-python is built without SSL to fix test failures.
-
-Use httplib.InvalidURL instead of ValueError as the new error case's
-exception. (GH-13044)
-
-Backport Co-Authored-By: Miro Hrončok <miro@hroncok.cz>
-
-(cherry picked from commit 7e200e0763f5b71c199aaf98bd5588f291585619)
-
-Notes on backport to Python 2.7:
-
-* test_urllib tests urllib.urlopen() which quotes the URL and so is
- not vulerable to HTTP Header Injection.
-* Add tests to test_urllib2 on urllib2.urlopen().
-* Reject non-ASCII characters: range 0x80-0xff.
-
-Upstream-Status: Backport
-CVE: CVE-2019-9740
-CVE: CVE-2019-9947
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
----
- Lib/httplib.py | 16 ++++++
- Lib/test/test_urllib.py | 25 +++++++++
- Lib/test/test_urllib2.py | 51 ++++++++++++++++++-
- Lib/test/test_xmlrpc.py | 8 ++-
- .../2019-04-10-08-53-30.bpo-30458.51E-DA.rst | 1 +
- 5 files changed, 99 insertions(+), 2 deletions(-)
- create mode 100644 Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
-
-diff --git a/Lib/httplib.py b/Lib/httplib.py
-index 60a8fb4e355f..1b41c346e090 100644
---- a/Lib/httplib.py
-+++ b/Lib/httplib.py
-@@ -247,6 +247,16 @@
- _is_legal_header_name = re.compile(r'\A[^:\s][^:\r\n]*\Z').match
- _is_illegal_header_value = re.compile(r'\n(?![ \t])|\r(?![ \t\n])').search
-
-+# These characters are not allowed within HTTP URL paths.
-+# See https://tools.ietf.org/html/rfc3986#section-3.3 and the
-+# https://tools.ietf.org/html/rfc3986#appendix-A pchar definition.
-+# Prevents CVE-2019-9740. Includes control characters such as \r\n.
-+# Restrict non-ASCII characters above \x7f (0x80-0xff).
-+_contains_disallowed_url_pchar_re = re.compile('[\x00-\x20\x7f-\xff]')
-+# Arguably only these _should_ allowed:
-+# _is_allowed_url_pchars_re = re.compile(r"^[/!$&'()*+,;=:@%a-zA-Z0-9._~-]+$")
-+# We are more lenient for assumed real world compatibility purposes.
-+
- # We always set the Content-Length header for these methods because some
- # servers will otherwise respond with a 411
- _METHODS_EXPECTING_BODY = {'PATCH', 'POST', 'PUT'}
-@@ -927,6 +937,12 @@ def putrequest(self, method, url, skip_host=0, skip_accept_encoding=0):
- self._method = method
- if not url:
- url = '/'
-+ # Prevent CVE-2019-9740.
-+ match = _contains_disallowed_url_pchar_re.search(url)
-+ if match:
-+ raise InvalidURL("URL can't contain control characters. %r "
-+ "(found at least %r)"
-+ % (url, match.group()))
- hdr = '%s %s %s' % (method, url, self._http_vsn_str)
-
- self._output(hdr)
-diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
-index 1ce9201c0693..d7778d4194f3 100644
---- a/Lib/test/test_urllib.py
-+++ b/Lib/test/test_urllib.py
-@@ -257,6 +257,31 @@ def test_url_fragment(self):
- finally:
- self.unfakehttp()
-
-+ def test_url_with_control_char_rejected(self):
-+ for char_no in range(0, 0x21) + range(0x7f, 0x100):
-+ char = chr(char_no)
-+ schemeless_url = "//localhost:7777/test%s/" % char
-+ self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello.")
-+ try:
-+ # urllib quotes the URL so there is no injection.
-+ resp = urllib.urlopen("http:" + schemeless_url)
-+ self.assertNotIn(char, resp.geturl())
-+ finally:
-+ self.unfakehttp()
-+
-+ def test_url_with_newline_header_injection_rejected(self):
-+ self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello.")
-+ host = "localhost:7777?a=1 HTTP/1.1\r\nX-injected: header\r\nTEST: 123"
-+ schemeless_url = "//" + host + ":8080/test/?test=a"
-+ try:
-+ # urllib quotes the URL so there is no injection.
-+ resp = urllib.urlopen("http:" + schemeless_url)
-+ self.assertNotIn(' ', resp.geturl())
-+ self.assertNotIn('\r', resp.geturl())
-+ self.assertNotIn('\n', resp.geturl())
-+ finally:
-+ self.unfakehttp()
-+
- def test_read_bogus(self):
- # urlopen() should raise IOError for many error codes.
- self.fakehttp('''HTTP/1.1 401 Authentication Required
-diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
-index 6d24d5ddf83c..9531818e16b2 100644
---- a/Lib/test/test_urllib2.py
-+++ b/Lib/test/test_urllib2.py
-@@ -15,6 +15,9 @@
- except ImportError:
- ssl = None
-
-+from test.test_urllib import FakeHTTPMixin
-+
-+
- # XXX
- # Request
- # CacheFTPHandler (hard to write)
-@@ -1262,7 +1265,7 @@ def _test_basic_auth(self, opener, auth_handler, auth_header,
- self.assertEqual(len(http_handler.requests), 1)
- self.assertFalse(http_handler.requests[0].has_header(auth_header))
-
--class MiscTests(unittest.TestCase):
-+class MiscTests(unittest.TestCase, FakeHTTPMixin):
-
- def test_build_opener(self):
- class MyHTTPHandler(urllib2.HTTPHandler): pass
-@@ -1317,6 +1320,52 @@ def test_unsupported_algorithm(self):
- "Unsupported digest authentication algorithm 'invalid'"
- )
-
-+ @unittest.skipUnless(ssl, "ssl module required")
-+ def test_url_with_control_char_rejected(self):
-+ for char_no in range(0, 0x21) + range(0x7f, 0x100):
-+ char = chr(char_no)
-+ schemeless_url = "//localhost:7777/test%s/" % char
-+ self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello.")
-+ try:
-+ # We explicitly test urllib.request.urlopen() instead of the top
-+ # level 'def urlopen()' function defined in this... (quite ugly)
-+ # test suite. They use different url opening codepaths. Plain
-+ # urlopen uses FancyURLOpener which goes via a codepath that
-+ # calls urllib.parse.quote() on the URL which makes all of the
-+ # above attempts at injection within the url _path_ safe.
-+ escaped_char_repr = repr(char).replace('\\', r'\\')
-+ InvalidURL = httplib.InvalidURL
-+ with self.assertRaisesRegexp(
-+ InvalidURL, "contain control.*" + escaped_char_repr):
-+ urllib2.urlopen("http:" + schemeless_url)
-+ with self.assertRaisesRegexp(
-+ InvalidURL, "contain control.*" + escaped_char_repr):
-+ urllib2.urlopen("https:" + schemeless_url)
-+ finally:
-+ self.unfakehttp()
-+
-+ @unittest.skipUnless(ssl, "ssl module required")
-+ def test_url_with_newline_header_injection_rejected(self):
-+ self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello.")
-+ host = "localhost:7777?a=1 HTTP/1.1\r\nX-injected: header\r\nTEST: 123"
-+ schemeless_url = "//" + host + ":8080/test/?test=a"
-+ try:
-+ # We explicitly test urllib2.urlopen() instead of the top
-+ # level 'def urlopen()' function defined in this... (quite ugly)
-+ # test suite. They use different url opening codepaths. Plain
-+ # urlopen uses FancyURLOpener which goes via a codepath that
-+ # calls urllib.parse.quote() on the URL which makes all of the
-+ # above attempts at injection within the url _path_ safe.
-+ InvalidURL = httplib.InvalidURL
-+ with self.assertRaisesRegexp(
-+ InvalidURL, r"contain control.*\\r.*(found at least . .)"):
-+ urllib2.urlopen("http:" + schemeless_url)
-+ with self.assertRaisesRegexp(InvalidURL, r"contain control.*\\n"):
-+ urllib2.urlopen("https:" + schemeless_url)
-+ finally:
-+ self.unfakehttp()
-+
-+
-
- class RequestTests(unittest.TestCase):
-
-diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
-index 36b3be67fd6b..90ccb30716ff 100644
---- a/Lib/test/test_xmlrpc.py
-+++ b/Lib/test/test_xmlrpc.py
-@@ -659,7 +659,13 @@ def test_dotted_attribute(self):
- def test_partial_post(self):
- # Check that a partial POST doesn't make the server loop: issue #14001.
- conn = httplib.HTTPConnection(ADDR, PORT)
-- conn.request('POST', '/RPC2 HTTP/1.0\r\nContent-Length: 100\r\n\r\nbye')
-+ conn.send('POST /RPC2 HTTP/1.0\r\n'
-+ 'Content-Length: 100\r\n\r\n'
-+ 'bye HTTP/1.1\r\n'
-+ 'Host: %s:%s\r\n'
-+ 'Accept-Encoding: identity\r\n'
-+ 'Content-Length: 0\r\n\r\n'
-+ % (ADDR, PORT))
- conn.close()
-
- class SimpleServerEncodingTestCase(BaseServerTestCase):
-diff --git a/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst b/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
-new file mode 100644
-index 000000000000..47cb899df1af
---- /dev/null
-+++ b/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
-@@ -0,0 +1 @@
-+Address CVE-2019-9740 by disallowing URL paths with embedded whitespace or control characters through into the underlying http client request. Such potentially malicious header injection URLs now cause an httplib.InvalidURL exception to be raised.
diff --git a/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948-fix.patch b/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948-fix.patch
deleted file mode 100644
index b267237018..0000000000
--- a/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948-fix.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 179a5f75f1121dab271fe8f90eb35145f9dcbbda Mon Sep 17 00:00:00 2001
-From: Sihoon Lee <push0ebp@gmail.com>
-Date: Fri, 17 May 2019 02:41:06 +0900
-Subject: [PATCH] Update test_urllib.py and urllib.py\nchange assertEqual into
- assertRasies in DummyURLopener test, and simplify mitigation
-
-Upstream-Status: Submitted https://github.com/python/cpython/pull/11842
-
-CVE: CVE-2019-9948
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
----
- Lib/test/test_urllib.py | 11 +++--------
- Lib/urllib.py | 4 ++--
- 2 files changed, 5 insertions(+), 10 deletions(-)
-
-diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
-index e5f210e62a18..1e23dfb0bb16 100644
---- a/Lib/test/test_urllib.py
-+++ b/Lib/test/test_urllib.py
-@@ -1027,14 +1027,9 @@ def test_local_file_open(self):
- class DummyURLopener(urllib.URLopener):
- def open_local_file(self, url):
- return url
-- self.assertEqual(DummyURLopener().open(
-- 'local-file://example'), '//example')
-- self.assertEqual(DummyURLopener().open(
-- 'local_file://example'), '//example')
-- self.assertRaises(IOError, urllib.urlopen,
-- 'local-file://example')
-- self.assertRaises(IOError, urllib.urlopen,
-- 'local_file://example')
-+ for url in ('local_file://example', 'local-file://example'):
-+ self.assertRaises(IOError, DummyURLopener().open, url)
-+ self.assertRaises(IOError, urllib.urlopen, url)
-
- # Just commented them out.
- # Can't really tell why keep failing in windows and sparc.
-diff --git a/Lib/urllib.py b/Lib/urllib.py
-index a24e9a5c68fb..39b834054e9e 100644
---- a/Lib/urllib.py
-+++ b/Lib/urllib.py
-@@ -203,10 +203,10 @@ def open(self, fullurl, data=None):
- name = 'open_' + urltype
- self.type = urltype
- name = name.replace('-', '_')
--
-+
- # bpo-35907: # disallow the file reading with the type not allowed
- if not hasattr(self, name) or \
-- (self == _urlopener and name == 'open_local_file'):
-+ getattr(self, name) == self.open_local_file:
- if proxy:
- return self.open_unknown_proxy(proxy, fullurl, data)
- else:
diff --git a/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948.patch b/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948.patch
deleted file mode 100644
index f4c225d2fc..0000000000
--- a/meta/recipes-devtools/python/python/bpo-35907-cve-2019-9948.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 8f99cc799e4393bf1112b9395b2342f81b3f45ef Mon Sep 17 00:00:00 2001
-From: push0ebp <push0ebp@shl-MacBook-Pro.local>
-Date: Thu, 14 Feb 2019 02:05:46 +0900
-Subject: [PATCH] bpo-35907: Avoid file reading as disallowing the unnecessary
- URL scheme in urllib
-
-Upstream-Status: Submitted https://github.com/python/cpython/pull/11842
-
-CVE: CVE-2019-9948
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
----
- Lib/test/test_urllib.py | 12 ++++++++++++
- Lib/urllib.py | 5 ++++-
- 2 files changed, 16 insertions(+), 1 deletion(-)
-
-diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
-index 1ce9201c0693..e5f210e62a18 100644
---- a/Lib/test/test_urllib.py
-+++ b/Lib/test/test_urllib.py
-@@ -1023,6 +1023,18 @@ def open_spam(self, url):
- "spam://c:|windows%/:=&?~#+!$,;'@()*[]|/path/"),
- "//c:|windows%/:=&?~#+!$,;'@()*[]|/path/")
-
-+ def test_local_file_open(self):
-+ class DummyURLopener(urllib.URLopener):
-+ def open_local_file(self, url):
-+ return url
-+ self.assertEqual(DummyURLopener().open(
-+ 'local-file://example'), '//example')
-+ self.assertEqual(DummyURLopener().open(
-+ 'local_file://example'), '//example')
-+ self.assertRaises(IOError, urllib.urlopen,
-+ 'local-file://example')
-+ self.assertRaises(IOError, urllib.urlopen,
-+ 'local_file://example')
-
- # Just commented them out.
- # Can't really tell why keep failing in windows and sparc.
-diff --git a/Lib/urllib.py b/Lib/urllib.py
-index d85504a5cb7e..a24e9a5c68fb 100644
---- a/Lib/urllib.py
-+++ b/Lib/urllib.py
-@@ -203,7 +203,10 @@ def open(self, fullurl, data=None):
- name = 'open_' + urltype
- self.type = urltype
- name = name.replace('-', '_')
-- if not hasattr(self, name):
-+
-+ # bpo-35907: # disallow the file reading with the type not allowed
-+ if not hasattr(self, name) or \
-+ (self == _urlopener and name == 'open_local_file'):
- if proxy:
- return self.open_unknown_proxy(proxy, fullurl, data)
- else:
diff --git a/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636-fix.patch b/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636-fix.patch
deleted file mode 100644
index 2ce4d2cde7..0000000000
--- a/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636-fix.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 06b5ee585d6e76bdbb4002f642d864d860cbbd2b Mon Sep 17 00:00:00 2001
-From: Steve Dower <steve.dower@python.org>
-Date: Tue, 12 Mar 2019 08:23:33 -0700
-Subject: [PATCH] bpo-36216: Only print test messages when verbose
-
-CVE: CVE-2019-9636
-
-Upstream-Status: Backport https://github.com/python/cpython/pull/12291/commits/06b5ee585d6e76bdbb4002f642d864d860cbbd2b
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
----
- Lib/test/test_urlparse.py | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
-index 73b0228ea8e3..1830d0b28688 100644
---- a/Lib/test/test_urlparse.py
-+++ b/Lib/test/test_urlparse.py
-@@ -644,7 +644,8 @@ def test_urlsplit_normalization(self):
- for scheme in [u"http", u"https", u"ftp"]:
- for c in denorm_chars:
- url = u"{}://netloc{}false.netloc/path".format(scheme, c)
-- print "Checking %r" % url
-+ if test_support.verbose:
-+ print "Checking %r" % url
- with self.assertRaises(ValueError):
- urlparse.urlsplit(url)
-
diff --git a/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636.patch b/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636.patch
deleted file mode 100644
index 352b13ba9b..0000000000
--- a/meta/recipes-devtools/python/python/bpo-36216-cve-2019-9636.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-From 3e3669c9c41a27e1466e2c28b3906e3dd0ce3e7e Mon Sep 17 00:00:00 2001
-From: Steve Dower <steve.dower@python.org>
-Date: Thu, 7 Mar 2019 08:25:22 -0800
-Subject: [PATCH] bpo-36216: Add check for characters in netloc that normalize
- to separators (GH-12201)
-
-CVE: CVE-2019-9636
-
-Upstream-Status: Backport https://github.com/python/cpython/pull/12216/commits/3e3669c9c41a27e1466e2c28b3906e3dd0ce3e7e
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
----
- Doc/library/urlparse.rst | 20 ++++++++++++++++
- Lib/test/test_urlparse.py | 24 +++++++++++++++++++
- Lib/urlparse.py | 17 +++++++++++++
- .../2019-03-06-09-38-40.bpo-36216.6q1m4a.rst | 3 +++
- 4 files changed, 64 insertions(+)
- create mode 100644 Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
-
-diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
-index 4e1ded73c266..73b0228ea8e3 100644
---- a/Lib/test/test_urlparse.py
-+++ b/Lib/test/test_urlparse.py
-@@ -1,4 +1,6 @@
- from test import test_support
-+import sys
-+import unicodedata
- import unittest
- import urlparse
-
-@@ -624,6 +626,28 @@ def test_portseparator(self):
- self.assertEqual(urlparse.urlparse("http://www.python.org:80"),
- ('http','www.python.org:80','','','',''))
-
-+ def test_urlsplit_normalization(self):
-+ # Certain characters should never occur in the netloc,
-+ # including under normalization.
-+ # Ensure that ALL of them are detected and cause an error
-+ illegal_chars = u'/:#?@'
-+ hex_chars = {'{:04X}'.format(ord(c)) for c in illegal_chars}
-+ denorm_chars = [
-+ c for c in map(unichr, range(128, sys.maxunicode))
-+ if (hex_chars & set(unicodedata.decomposition(c).split()))
-+ and c not in illegal_chars
-+ ]
-+ # Sanity check that we found at least one such character
-+ self.assertIn(u'\u2100', denorm_chars)
-+ self.assertIn(u'\uFF03', denorm_chars)
-+
-+ for scheme in [u"http", u"https", u"ftp"]:
-+ for c in denorm_chars:
-+ url = u"{}://netloc{}false.netloc/path".format(scheme, c)
-+ print "Checking %r" % url
-+ with self.assertRaises(ValueError):
-+ urlparse.urlsplit(url)
-+
- def test_main():
- test_support.run_unittest(UrlParseTestCase)
-
-diff --git a/Lib/urlparse.py b/Lib/urlparse.py
-index f7c2b032b097..54eda08651ab 100644
---- a/Lib/urlparse.py
-+++ b/Lib/urlparse.py
-@@ -165,6 +165,21 @@ def _splitnetloc(url, start=0):
- delim = min(delim, wdelim) # use earliest delim position
- return url[start:delim], url[delim:] # return (domain, rest)
-
-+def _checknetloc(netloc):
-+ if not netloc or not isinstance(netloc, unicode):
-+ return
-+ # looking for characters like \u2100 that expand to 'a/c'
-+ # IDNA uses NFKC equivalence, so normalize for this check
-+ import unicodedata
-+ netloc2 = unicodedata.normalize('NFKC', netloc)
-+ if netloc == netloc2:
-+ return
-+ _, _, netloc = netloc.rpartition('@') # anything to the left of '@' is okay
-+ for c in '/?#@:':
-+ if c in netloc2:
-+ raise ValueError("netloc '" + netloc2 + "' contains invalid " +
-+ "characters under NFKC normalization")
-+
- def urlsplit(url, scheme='', allow_fragments=True):
- """Parse a URL into 5 components:
- <scheme>://<netloc>/<path>?<query>#<fragment>
-@@ -193,6 +208,7 @@ def urlsplit(url, scheme='', allow_fragments=True):
- url, fragment = url.split('#', 1)
- if '?' in url:
- url, query = url.split('?', 1)
-+ _checknetloc(netloc)
- v = SplitResult(scheme, netloc, url, query, fragment)
- _parse_cache[key] = v
- return v
-@@ -216,6 +232,7 @@ def urlsplit(url, scheme='', allow_fragments=True):
- url, fragment = url.split('#', 1)
- if '?' in url:
- url, query = url.split('?', 1)
-+ _checknetloc(netloc)
- v = SplitResult(scheme, netloc, url, query, fragment)
- _parse_cache[key] = v
- return v
-diff --git a/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst b/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
-new file mode 100644
-index 000000000000..1e1ad92c6feb
---- /dev/null
-+++ b/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
-@@ -0,0 +1,3 @@
-+Changes urlsplit() to raise ValueError when the URL contains characters that
-+decompose under IDNA encoding (NFKC-normalization) into characters that
-+affect how the URL is parsed.
-\ No newline at end of file
diff --git a/meta/recipes-devtools/python/python/bpo-36742-cve-2019-10160.patch b/meta/recipes-devtools/python/python/bpo-36742-cve-2019-10160.patch
deleted file mode 100644
index 1b6cb8cf3e..0000000000
--- a/meta/recipes-devtools/python/python/bpo-36742-cve-2019-10160.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From 5a1033fe5be764a135adcfff2fdc14edc3e5f327 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Thu, 10 Oct 2019 16:32:19 +0800
-Subject: [PATCH] bpo-36742: Fixes handling of pre-normalization characters in
- urlsplit() bpo-36742: Corrects fix to handle decomposition in usernames
-
-Upstream-Status: Backport
-
-https://github.com/python/cpython/commit/98a4dcefbbc3bce5ab07e7c0830a183157250259
-https://github.com/python/cpython/commit/f61599b050c621386a3fc6bc480359e2d3bb93de#diff-b577545d73dd0cdb2c337a4c5f89e1d7
-
-CVE: CVE-2019-10160
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- Lib/test/test_urlparse.py | 19 +++++++++++++------
- Lib/urlparse.py | 14 +++++++++-----
- 2 files changed, 22 insertions(+), 11 deletions(-)
-
-diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
-index 1830d0b..857ed96 100644
---- a/Lib/test/test_urlparse.py
-+++ b/Lib/test/test_urlparse.py
-@@ -641,13 +641,20 @@ class UrlParseTestCase(unittest.TestCase):
- self.assertIn(u'\u2100', denorm_chars)
- self.assertIn(u'\uFF03', denorm_chars)
-
-+ # bpo-36742: Verify port separators are ignored when they
-+ # existed prior to decomposition
-+ urlparse.urlsplit(u'http://\u30d5\u309a:80')
-+ with self.assertRaises(ValueError):
-+ urlparse.urlsplit(u'http://\u30d5\u309a\ufe1380')
-+
- for scheme in [u"http", u"https", u"ftp"]:
-- for c in denorm_chars:
-- url = u"{}://netloc{}false.netloc/path".format(scheme, c)
-- if test_support.verbose:
-- print "Checking %r" % url
-- with self.assertRaises(ValueError):
-- urlparse.urlsplit(url)
-+ for netloc in [u"netloc{}false.netloc", u"n{}user@netloc"]:
-+ for c in denorm_chars:
-+ url = u"{}://{}/path".format(scheme, netloc.format(c))
-+ if test_support.verbose:
-+ print "Checking %r" % url
-+ with self.assertRaises(ValueError):
-+ urlparse.urlsplit(url)
-
- def test_main():
- test_support.run_unittest(UrlParseTestCase)
-diff --git a/Lib/urlparse.py b/Lib/urlparse.py
-index 54eda08..e34b368 100644
---- a/Lib/urlparse.py
-+++ b/Lib/urlparse.py
-@@ -171,14 +171,18 @@ def _checknetloc(netloc):
- # looking for characters like \u2100 that expand to 'a/c'
- # IDNA uses NFKC equivalence, so normalize for this check
- import unicodedata
-- netloc2 = unicodedata.normalize('NFKC', netloc)
-- if netloc == netloc2:
-+ n = netloc.replace(u'@', u'') # ignore characters already included
-+ n = n.replace(u':', u'') # but not the surrounding text
-+ n = n.replace(u'#', u'')
-+ n = n.replace(u'?', u'')
-+
-+ netloc2 = unicodedata.normalize('NFKC', n)
-+ if n == netloc2:
- return
-- _, _, netloc = netloc.rpartition('@') # anything to the left of '@' is okay
- for c in '/?#@:':
- if c in netloc2:
-- raise ValueError("netloc '" + netloc2 + "' contains invalid " +
-- "characters under NFKC normalization")
-+ raise ValueError(u"netloc '" + netloc + u"' contains invalid " +
-+ u"characters under NFKC normalization")
-
- def urlsplit(url, scheme='', allow_fragments=True):
- """Parse a URL into 5 components:
---
-2.7.4
-
diff --git a/meta/recipes-devtools/python/python/python2-manifest.json b/meta/recipes-devtools/python/python/python2-manifest.json
index eb52e862ab..fd98774d00 100644
--- a/meta/recipes-devtools/python/python/python2-manifest.json
+++ b/meta/recipes-devtools/python/python/python2-manifest.json
@@ -267,6 +267,7 @@
"${libdir}/python2.7/lib-dynload/xreadlines.so",
"${libdir}/python2.7/linecache.py",
"${libdir}/python2.7/new.py",
+ "${libdir}/python2.7/ntpath.py",
"${libdir}/python2.7/os.py",
"${libdir}/python2.7/platform.py",
"${libdir}/python2.7/posixpath.py",
diff --git a/meta/recipes-devtools/python/python3-testtools/no_traceback2.patch b/meta/recipes-devtools/python/python3-testtools/no_traceback2.patch
new file mode 100644
index 0000000000..594510342b
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-testtools/no_traceback2.patch
@@ -0,0 +1,23 @@
+traceback2 adds traceback for python2. Rather than depend on traceback2, we're
+python3 only so just use traceback.
+This caused breakage in oe-selftest -j which uses testtools on the autobuilder
+using buildtools-tarball.
+
+Upstream-Status: Inappropriate [Our recipe is python3 specific]
+(Once py2 is EOL upstream probably could/should take this)
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: testtools-2.3.0/testtools/content.py
+===================================================================
+--- testtools-2.3.0.orig/testtools/content.py
++++ testtools-2.3.0/testtools/content.py
+@@ -19,8 +19,7 @@ import os
+ import sys
+
+ from extras import try_import
+-# To let setup.py work, make this a conditional import.
+-traceback = try_import('traceback2')
++import traceback
+
+ from testtools.compat import (
+ _b,
diff --git a/meta/recipes-devtools/python/python3-testtools_2.3.0.bb b/meta/recipes-devtools/python/python3-testtools_2.3.0.bb
index 896ecee65c..a254b90a75 100644
--- a/meta/recipes-devtools/python/python3-testtools_2.3.0.bb
+++ b/meta/recipes-devtools/python/python3-testtools_2.3.0.bb
@@ -1,2 +1,4 @@
inherit setuptools3
require python-testtools.inc
+
+SRC_URI += "file://no_traceback2.patch"
diff --git a/meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch b/meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch
index 661f52d01f..ea75262c4f 100644
--- a/meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch
+++ b/meta/recipes-devtools/python/python3/0001-Do-not-hardcode-lib-as-location-for-site-packages-an.patch
@@ -70,7 +70,7 @@ index 6e81b2f..671a20e 100644
Programs/python.o: $(srcdir)/Programs/python.c
@@ -856,7 +857,7 @@ regen-opcode:
- Python/compile.o Python/symtable.o Python/ast_unparse.o Python/ast.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h
+ Python/compile.o Python/symtable.o Python/ast_unparse.o Python/ast.o Python/future.o Parser/parsetok.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h
Python/getplatform.o: $(srcdir)/Python/getplatform.c
- $(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c
diff --git a/meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch b/meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch
new file mode 100644
index 0000000000..acf8e1e9b5
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Don-t-search-system-for-headers-libraries.patch
@@ -0,0 +1,29 @@
+From 85e8f86ad2b7dec0848cd55b8e810a5e2722b20a Mon Sep 17 00:00:00 2001
+From: Jeremy Puhlman <jpuhlman@mvista.com>
+Date: Wed, 4 Mar 2020 00:06:42 +0000
+Subject: [PATCH] Don't search system for headers/libraries
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
+---
+ setup.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 9da1b3a..59782c0 100644
+--- a/setup.py
++++ b/setup.py
+@@ -674,8 +674,8 @@ class PyBuildExt(build_ext):
+ add_dir_to_list(self.compiler.include_dirs,
+ sysconfig.get_config_var("INCLUDEDIR"))
+
+- system_lib_dirs = ['/lib64', '/usr/lib64', '/lib', '/usr/lib']
+- system_include_dirs = ['/usr/include']
++ system_lib_dirs = []
++ system_include_dirs = []
+ # lib_dirs and inc_dirs are used to search for files;
+ # if a file is found in one of those directories, it can
+ # be assumed that no additional -I,-L directives are needed.
+--
+2.24.1
+
diff --git a/meta/recipes-devtools/python/python3/0001-bpo-34155-Dont-parse-domains-containing-GH-13079.patch b/meta/recipes-devtools/python/python3/0001-bpo-34155-Dont-parse-domains-containing-GH-13079.patch
deleted file mode 100644
index 319e7ed07e..0000000000
--- a/meta/recipes-devtools/python/python3/0001-bpo-34155-Dont-parse-domains-containing-GH-13079.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-From 90d56127ae15b1e452755e62c77dc475dedf7161 Mon Sep 17 00:00:00 2001
-From: jpic <jpic@users.noreply.github.com>
-Date: Wed, 17 Jul 2019 23:54:25 +0200
-Subject: [PATCH] bpo-34155: Dont parse domains containing @ (GH-13079)
-
-Before:
-
- >>> email.message_from_string('From: a@malicious.org@important.com', policy=email.policy.default)['from'].addresses
- (Address(display_name='', username='a', domain='malicious.org'),)
-
- >>> parseaddr('a@malicious.org@important.com')
- ('', 'a@malicious.org')
-
- After:
-
- >>> email.message_from_string('From: a@malicious.org@important.com', policy=email.policy.default)['from'].addresses
- (Address(display_name='', username='', domain=''),)
-
- >>> parseaddr('a@malicious.org@important.com')
- ('', 'a@')
-
-https://bugs.python.org/issue34155
-
-Upstream-Status: Backport [https://github.com/python/cpython/commit/8cb65d1381b027f0b09ee36bfed7f35bb4dec9a9]
-
-CVE: CVE-2019-16056
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
----
- Lib/email/_header_value_parser.py | 2 ++
- Lib/email/_parseaddr.py | 11 ++++++++++-
- Lib/test/test_email/test__header_value_parser.py | 10 ++++++++++
- Lib/test/test_email/test_email.py | 14 ++++++++++++++
- .../2019-05-04-13-33-37.bpo-34155.MJll68.rst | 1 +
- 5 files changed, 37 insertions(+), 1 deletion(-)
- create mode 100644 Misc/NEWS.d/next/Security/2019-05-04-13-33-37.bpo-34155.MJll68.rst
-
-diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py
-index fc00b4a098..bbc026ec71 100644
---- a/Lib/email/_header_value_parser.py
-+++ b/Lib/email/_header_value_parser.py
-@@ -1582,6 +1582,8 @@ def get_domain(value):
- token, value = get_dot_atom(value)
- except errors.HeaderParseError:
- token, value = get_atom(value)
-+ if value and value[0] == '@':
-+ raise errors.HeaderParseError('Invalid Domain')
- if leader is not None:
- token[:0] = [leader]
- domain.append(token)
-diff --git a/Lib/email/_parseaddr.py b/Lib/email/_parseaddr.py
-index cdfa3729ad..41ff6f8c00 100644
---- a/Lib/email/_parseaddr.py
-+++ b/Lib/email/_parseaddr.py
-@@ -379,7 +379,12 @@ class AddrlistClass:
- aslist.append('@')
- self.pos += 1
- self.gotonext()
-- return EMPTYSTRING.join(aslist) + self.getdomain()
-+ domain = self.getdomain()
-+ if not domain:
-+ # Invalid domain, return an empty address instead of returning a
-+ # local part to denote failed parsing.
-+ return EMPTYSTRING
-+ return EMPTYSTRING.join(aslist) + domain
-
- def getdomain(self):
- """Get the complete domain name from an address."""
-@@ -394,6 +399,10 @@ class AddrlistClass:
- elif self.field[self.pos] == '.':
- self.pos += 1
- sdlist.append('.')
-+ elif self.field[self.pos] == '@':
-+ # bpo-34155: Don't parse domains with two `@` like
-+ # `a@malicious.org@important.com`.
-+ return EMPTYSTRING
- elif self.field[self.pos] in self.atomends:
- break
- else:
-diff --git a/Lib/test/test_email/test__header_value_parser.py b/Lib/test/test_email/test__header_value_parser.py
-index 693487bc96..7dc4de1b7b 100644
---- a/Lib/test/test_email/test__header_value_parser.py
-+++ b/Lib/test/test_email/test__header_value_parser.py
-@@ -1438,6 +1438,16 @@ class TestParser(TestParserMixin, TestEmailBase):
- self.assertEqual(addr_spec.domain, 'example.com')
- self.assertEqual(addr_spec.addr_spec, 'star.a.star@example.com')
-
-+ def test_get_addr_spec_multiple_domains(self):
-+ with self.assertRaises(errors.HeaderParseError):
-+ parser.get_addr_spec('star@a.star@example.com')
-+
-+ with self.assertRaises(errors.HeaderParseError):
-+ parser.get_addr_spec('star@a@example.com')
-+
-+ with self.assertRaises(errors.HeaderParseError):
-+ parser.get_addr_spec('star@172.17.0.1@example.com')
-+
- # get_obs_route
-
- def test_get_obs_route_simple(self):
-diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py
-index c29cc56203..aa775881c5 100644
---- a/Lib/test/test_email/test_email.py
-+++ b/Lib/test/test_email/test_email.py
-@@ -3041,6 +3041,20 @@ class TestMiscellaneous(TestEmailBase):
- self.assertEqual(utils.parseaddr('<>'), ('', ''))
- self.assertEqual(utils.formataddr(utils.parseaddr('<>')), '')
-
-+ def test_parseaddr_multiple_domains(self):
-+ self.assertEqual(
-+ utils.parseaddr('a@b@c'),
-+ ('', '')
-+ )
-+ self.assertEqual(
-+ utils.parseaddr('a@b.c@c'),
-+ ('', '')
-+ )
-+ self.assertEqual(
-+ utils.parseaddr('a@172.17.0.1@c'),
-+ ('', '')
-+ )
-+
- def test_noquote_dump(self):
- self.assertEqual(
- utils.formataddr(('A Silly Person', 'person@dom.ain')),
-diff --git a/Misc/NEWS.d/next/Security/2019-05-04-13-33-37.bpo-34155.MJll68.rst b/Misc/NEWS.d/next/Security/2019-05-04-13-33-37.bpo-34155.MJll68.rst
-new file mode 100644
-index 0000000000..50292e29ed
---- /dev/null
-+++ b/Misc/NEWS.d/next/Security/2019-05-04-13-33-37.bpo-34155.MJll68.rst
-@@ -0,0 +1 @@
-+Fix parsing of invalid email addresses with more than one ``@`` (e.g. a@b@c.com.) to not return the part before 2nd ``@`` as valid email address. Patch by maxking & jpic.
diff --git a/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch b/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch
index 5735954628..a0ea897f4e 100644
--- a/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch
+++ b/meta/recipes-devtools/python/python3/0001-python3-use-cc_basename-to-replace-CC-for-checking-c.patch
@@ -63,7 +63,7 @@ index a7de901..4a3681f 100644
+ case $cc_basename in
*clang*)
AC_SUBST(LLVM_AR)
- AC_PATH_TARGET_TOOL(LLVM_AR, llvm-ar, '', ${llvm_path})
+ AC_PATH_TOOL(LLVM_AR, llvm-ar, '', ${llvm_path})
@@ -1426,7 +1427,7 @@ then
fi
fi
diff --git a/meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch b/meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch
new file mode 100644
index 0000000000..c15295c034
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0017-setup.py-do-not-report-missing-dependencies-for-disa.patch
@@ -0,0 +1,31 @@
+From e3b59cb9658e1d3efa3535840939a0fa92a70a5a Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Mon, 7 Oct 2019 13:22:14 +0200
+Subject: [PATCH] setup.py: do not report missing dependencies for disabled
+ modules
+
+Reporting those missing dependencies is misleading as the modules would not
+have been built anyway. This particularly matters in oe-core's automated
+build completeness checker which relies on the report.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ setup.py | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/setup.py b/setup.py
+index 4b53668..0097643 100644
+--- a/setup.py
++++ b/setup.py
+@@ -365,6 +365,10 @@ class PyBuildExt(build_ext):
+ print("%-*s %-*s %-*s" % (longest, e, longest, f,
+ longest, g))
+
++ # There is no need to report missing module dependencies,
++ # if the modules have been disabled in the first place.
++ missing = list(set(missing) - set(sysconf_dis))
++
+ if missing:
+ print()
+ print("Python build finished successfully!")
diff --git a/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch b/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch
index 0bafec73c0..d49604ba4d 100644
--- a/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch
+++ b/meta/recipes-devtools/python/python3/12-distutils-prefix-is-inside-staging-area.patch
@@ -1,4 +1,4 @@
-From 6229502e5ae6cbb22240594f002638e9ef78f831 Mon Sep 17 00:00:00 2001
+From a274ba778838824efcacaba57c415b7262f779ec Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 14 May 2013 15:00:26 -0700
Subject: [PATCH] python3: Add target and native recipes
diff --git a/meta/recipes-devtools/python/python3/CVE-2020-14422.patch b/meta/recipes-devtools/python/python3/CVE-2020-14422.patch
new file mode 100644
index 0000000000..31ad82d7c5
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/CVE-2020-14422.patch
@@ -0,0 +1,79 @@
+From b98e7790c77a4378ec4b1c71b84138cb930b69b7 Mon Sep 17 00:00:00 2001
+From: Tapas Kundu <39723251+tapakund@users.noreply.github.com>
+Date: Wed, 1 Jul 2020 00:50:21 +0530
+Subject: [PATCH] [3.7] bpo-41004: Resolve hash collisions for IPv4Interface
+ and IPv6Interface (GH-21033) (GH-21231)
+
+CVE-2020-14422
+The __hash__() methods of classes IPv4Interface and IPv6Interface had issue
+of generating constant hash values of 32 and 128 respectively causing hash collisions.
+The fix uses the hash() function to generate hash values for the objects
+instead of XOR operation
+(cherry picked from commit b30ee26e366bf509b7538d79bfec6c6d38d53f28)
+
+Co-authored-by: Ravi Teja P <rvteja92@gmail.com>
+
+Signed-off-by: Tapas Kundu <tkundu@vmware.com>
+
+Upstream-Status: Backport [https://github.com/python/cpython/commit/b98e7790c77a4378ec4b1c71b84138cb930b69b7]
+CVE: CVE-2020-14422
+Signed-off-by: Chee Yang Lee <chee.yang.lee@intel.com>
+
+---
+ Lib/ipaddress.py | 4 ++--
+ Lib/test/test_ipaddress.py | 11 +++++++++++
+ .../Security/2020-06-29-16-02-29.bpo-41004.ovF0KZ.rst | 1 +
+ 3 files changed, 14 insertions(+), 2 deletions(-)
+ create mode 100644 Misc/NEWS.d/next/Security/2020-06-29-16-02-29.bpo-41004.ovF0KZ.rst
+
+diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py
+index 80249288d73ab..54882934c3dc1 100644
+--- a/Lib/ipaddress.py
++++ b/Lib/ipaddress.py
+@@ -1442,7 +1442,7 @@ def __lt__(self, other):
+ return False
+
+ def __hash__(self):
+- return self._ip ^ self._prefixlen ^ int(self.network.network_address)
++ return hash((self._ip, self._prefixlen, int(self.network.network_address)))
+
+ __reduce__ = _IPAddressBase.__reduce__
+
+@@ -2088,7 +2088,7 @@ def __lt__(self, other):
+ return False
+
+ def __hash__(self):
+- return self._ip ^ self._prefixlen ^ int(self.network.network_address)
++ return hash((self._ip, self._prefixlen, int(self.network.network_address)))
+
+ __reduce__ = _IPAddressBase.__reduce__
+
+diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py
+index 455b893fb126f..1fb6a929dc2d9 100644
+--- a/Lib/test/test_ipaddress.py
++++ b/Lib/test/test_ipaddress.py
+@@ -2091,6 +2091,17 @@ def testsixtofour(self):
+ sixtofouraddr.sixtofour)
+ self.assertFalse(bad_addr.sixtofour)
+
++ # issue41004 Hash collisions in IPv4Interface and IPv6Interface
++ def testV4HashIsNotConstant(self):
++ ipv4_address1 = ipaddress.IPv4Interface("1.2.3.4")
++ ipv4_address2 = ipaddress.IPv4Interface("2.3.4.5")
++ self.assertNotEqual(ipv4_address1.__hash__(), ipv4_address2.__hash__())
++
++ # issue41004 Hash collisions in IPv4Interface and IPv6Interface
++ def testV6HashIsNotConstant(self):
++ ipv6_address1 = ipaddress.IPv6Interface("2001:658:22a:cafe:200:0:0:1")
++ ipv6_address2 = ipaddress.IPv6Interface("2001:658:22a:cafe:200:0:0:2")
++ self.assertNotEqual(ipv6_address1.__hash__(), ipv6_address2.__hash__())
+
+ if __name__ == '__main__':
+ unittest.main()
+diff --git a/Misc/NEWS.d/next/Security/2020-06-29-16-02-29.bpo-41004.ovF0KZ.rst b/Misc/NEWS.d/next/Security/2020-06-29-16-02-29.bpo-41004.ovF0KZ.rst
+new file mode 100644
+index 0000000000000..f5a9db52fff52
+--- /dev/null
++++ b/Misc/NEWS.d/next/Security/2020-06-29-16-02-29.bpo-41004.ovF0KZ.rst
+@@ -0,0 +1 @@
++CVE-2020-14422: The __hash__() methods of ipaddress.IPv4Interface and ipaddress.IPv6Interface incorrectly generated constant hash values of 32 and 128 respectively. This resulted in always causing hash collisions. The fix uses hash() to generate hash values for the tuple of (address, mask length, network address).
diff --git a/meta/recipes-devtools/python/python3_3.7.4.bb b/meta/recipes-devtools/python/python3_3.7.8.bb
index 42818bfff2..b18b3cd47d 100644
--- a/meta/recipes-devtools/python/python3_3.7.4.bb
+++ b/meta/recipes-devtools/python/python3_3.7.8.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://www.python.org"
LICENSE = "PSFv2"
SECTION = "devel/python"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=e466242989bd33c1bd2b6a526a742498"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=203a6dbc802ee896020a47161e759642"
SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
file://run-ptest \
@@ -28,25 +28,30 @@ SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
file://reformat_sysconfig.py \
file://0001-Use-FLAG_REF-always-for-interned-strings.patch \
file://0001-test_locale.py-correct-the-test-output-format.patch \
- file://0001-bpo-34155-Dont-parse-domains-containing-GH-13079.patch \
+ file://0017-setup.py-do-not-report-missing-dependencies-for-disa.patch \
+ file://CVE-2020-14422.patch \
"
SRC_URI_append_class-native = " \
file://0001-distutils-sysconfig-append-STAGING_LIBDIR-python-sys.patch \
file://12-distutils-prefix-is-inside-staging-area.patch \
+ file://0001-Don-t-search-system-for-headers-libraries.patch \
"
SRC_URI_append_class-nativesdk = " \
file://0001-main.c-if-OEPYTHON3HOME-is-set-use-instead-of-PYTHON.patch \
"
-SRC_URI[md5sum] = "d33e4aae66097051c2eca45ee3604803"
-SRC_URI[sha256sum] = "fb799134b868199930b75f26678f18932214042639cd52b16da7fd134cd9b13f"
+SRC_URI[md5sum] = "a224ef2249a18824f48fba9812f4006f"
+SRC_URI[sha256sum] = "43a543404b363f0037f89df8478f19db2dbc0d6f3ffee310bc2997fa71854a63"
# exclude pre-releases for both python 2.x and 3.x
UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>\d+(\.\d+)+).tar"
CVE_PRODUCT = "python"
+# This is not exploitable when glibc has CVE-2016-10739 fixed.
+CVE_CHECK_WHITELIST += "CVE-2019-18348"
+
PYTHON_MAJMIN = "3.7"
PYTHON_BINABI = "${PYTHON_MAJMIN}m"
@@ -63,7 +68,7 @@ ALTERNATIVE_LINK_NAME[python-config] = "${bindir}/python${PYTHON_BINABI}-config"
ALTERNATIVE_TARGET[python-config] = "${bindir}/python${PYTHON_BINABI}-config-${MULTILIB_SUFFIX}"
-DEPENDS = "bzip2-replacement-native libffi bzip2 gdbm openssl sqlite3 zlib virtual/libintl xz virtual/crypt util-linux libtirpc libnsl2"
+DEPENDS = "bzip2-replacement-native libffi bzip2 openssl sqlite3 zlib virtual/libintl xz virtual/crypt util-linux libtirpc libnsl2"
DEPENDS_append_class-target = " python3-native"
DEPENDS_append_class-nativesdk = " python3-native"
@@ -88,13 +93,23 @@ python() {
d.setVar('PACKAGECONFIG_PGO', '')
}
-PACKAGECONFIG_class-target ??= "readline ${PACKAGECONFIG_PGO}"
-PACKAGECONFIG_class-native ??= "readline"
-PACKAGECONFIG_class-nativesdk ??= "readline"
+PACKAGECONFIG_class-target ??= "readline ${PACKAGECONFIG_PGO} gdbm"
+PACKAGECONFIG_class-native ??= "readline gdbm"
+PACKAGECONFIG_class-nativesdk ??= "readline gdbm"
PACKAGECONFIG[readline] = ",,readline"
# Use profile guided optimisation by running PyBench inside qemu-user
PACKAGECONFIG[pgo] = "--enable-optimizations,,qemu-native"
PACKAGECONFIG[tk] = ",,tk"
+PACKAGECONFIG[gdbm] = ",,gdbm"
+
+do_configure_prepend () {
+ mkdir -p ${B}/Modules
+ cat > ${B}/Modules/Setup.local << EOF
+*disabled*
+${@bb.utils.contains('PACKAGECONFIG', 'gdbm', '', '_gdbm _dbm', d)}
+${@bb.utils.contains('PACKAGECONFIG', 'readline', '', 'readline', d)}
+EOF
+}
CPPFLAGS_append = " -I${STAGING_INCDIR}/ncursesw -I${STAGING_INCDIR}/uuid"
@@ -320,6 +335,8 @@ FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN} ${libdir}/python${PYTHON_MA
PACKAGES += "${PN}-man"
FILES_${PN}-man = "${datadir}/man"
+# See https://bugs.python.org/issue18748 and https://bugs.python.org/issue37395
+RDEPENDS_libpython3_append_libc-glibc = " libgcc"
RDEPENDS_${PN}-ptest = "${PN}-modules ${PN}-tests unzip bzip2 libgcc tzdata-europe coreutils sed"
RDEPENDS_${PN}-ptest_append_libc-glibc = " locale-base-tr-tr.iso-8859-9"
RDEPENDS_${PN}-tkinter += "${@bb.utils.contains('PACKAGECONFIG', 'tk', 'tk tk-lib', '', d)}"
diff --git a/meta/recipes-devtools/python/python_2.7.16.bb b/meta/recipes-devtools/python/python_2.7.18.bb
index ebb4824cc1..5b856a5097 100644
--- a/meta/recipes-devtools/python/python_2.7.16.bb
+++ b/meta/recipes-devtools/python/python_2.7.18.bb
@@ -30,8 +30,6 @@ SRC_URI += " \
file://support_SOURCE_DATE_EPOCH_in_py_compile_2.7.patch \
file://float-endian.patch \
file://0001-python2-use-cc_basename-to-replace-CC-for-checking-c.patch \
- file://0001-2.7-bpo-34155-Dont-parse-domains-containing-GH-13079.patch \
- file://bpo-36742-cve-2019-10160.patch \
"
S = "${WORKDIR}/Python-${PV}"
diff --git a/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb b/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
index d9d9da0fad..372eebd886 100644
--- a/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
+++ b/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
@@ -12,7 +12,7 @@ S = "${WORKDIR}"
inherit native
do_compile() {
- ${CC} tunctl.c -o tunctl
+ ${CC} ${CFLAGS} ${LDFLAGS} -Wall tunctl.c -o tunctl
}
do_install() {
diff --git a/meta/recipes-devtools/qemu/qemu-helper/tunctl.c b/meta/recipes-devtools/qemu/qemu-helper/tunctl.c
index 16e24a2add..d745dd06cb 100644
--- a/meta/recipes-devtools/qemu/qemu-helper/tunctl.c
+++ b/meta/recipes-devtools/qemu/qemu-helper/tunctl.c
@@ -19,7 +19,7 @@
#define TUNSETGROUP _IOW('T', 206, int)
#endif
-static void Usage(char *name)
+static void Usage(char *name, int status)
{
fprintf(stderr, "Create: %s [-b] [-u owner] [-g group] [-t device-name] "
"[-f tun-clone-device]\n", name);
@@ -28,7 +28,7 @@ static void Usage(char *name)
fprintf(stderr, "The default tun clone device is /dev/net/tun - some systems"
" use\n/dev/misc/net/tun instead\n\n");
fprintf(stderr, "-b will result in brief output (just the device name)\n");
- exit(1);
+ exit(status);
}
int main(int argc, char **argv)
@@ -41,7 +41,7 @@ int main(int argc, char **argv)
int tap_fd, opt, delete = 0, brief = 0;
char *tun = "", *file = "/dev/net/tun", *name = argv[0], *end;
- while((opt = getopt(argc, argv, "bd:f:t:u:g:")) > 0){
+ while((opt = getopt(argc, argv, "bd:f:t:u:g:h")) > 0){
switch(opt) {
case 'b':
brief = 1;
@@ -63,7 +63,7 @@ int main(int argc, char **argv)
if(*end != '\0'){
fprintf(stderr, "'%s' is neither a username nor a numeric uid.\n",
optarg);
- Usage(name);
+ Usage(name, 1);
}
break;
case 'g':
@@ -76,7 +76,7 @@ int main(int argc, char **argv)
if(*end != '\0'){
fprintf(stderr, "'%s' is neither a groupname nor a numeric group.\n",
optarg);
- Usage(name);
+ Usage(name, 1);
}
break;
@@ -84,8 +84,10 @@ int main(int argc, char **argv)
tun = optarg;
break;
case 'h':
+ Usage(name, 0);
+ break;
default:
- Usage(name);
+ Usage(name, 1);
}
}
@@ -93,7 +95,7 @@ int main(int argc, char **argv)
argc -= optind;
if(argc > 0)
- Usage(name);
+ Usage(name, 1);
if((tap_fd = open(file, O_RDWR)) < 0){
fprintf(stderr, "Failed to open '%s' : ", file);
diff --git a/meta/recipes-devtools/qemu/qemu.inc b/meta/recipes-devtools/qemu/qemu.inc
index bb444b63d9..ec32c90ad5 100644
--- a/meta/recipes-devtools/qemu/qemu.inc
+++ b/meta/recipes-devtools/qemu/qemu.inc
@@ -27,9 +27,23 @@ SRC_URI = "https://download.qemu.org/${BPN}-${PV}.tar.xz \
file://0008-linux-user-Fix-webkitgtk-hangs-on-32-bit-x86-target.patch \
file://0009-Fix-webkitgtk-builds.patch \
file://0010-configure-Add-pkg-config-handling-for-libgcrypt.patch \
+ file://0011-linux-user-remove-host-stime-syscall.patch \
file://CVE-2019-15890.patch \
file://CVE-2019-12068.patch \
- "
+ file://CVE-2020-1711.patch \
+ file://CVE-2019-20382.patch \
+ file://CVE-2020-7039-1.patch \
+ file://CVE-2020-7039-2.patch \
+ file://CVE-2020-7039-3.patch \
+ file://CVE-2020-7211.patch \
+ file://CVE-2020-11869.patch \
+ file://CVE-2020-13765.patch \
+ file://CVE-2020-10702.patch \
+ file://CVE-2020-16092.patch \
+ file://CVE-2020-10756.patch \
+ file://CVE-2020-15863.patch \
+ file://CVE-2020-14364.patch \
+ "
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
SRC_URI[md5sum] = "cdf2b5ca52b9abac9bacb5842fa420f8"
@@ -164,6 +178,7 @@ PACKAGECONFIG[spice] = "--enable-spice,--disable-spice,spice"
# usbredir will be in meta-networking layer
PACKAGECONFIG[usb-redir] = "--enable-usb-redir,--disable-usb-redir,usbredir"
PACKAGECONFIG[snappy] = "--enable-snappy,--disable-snappy,snappy"
+PACKAGECONFIG[glusterfs] = "--enable-glusterfs,--disable-glusterfs,glusterfs"
INSANE_SKIP_${PN} = "arch"
diff --git a/meta/recipes-devtools/qemu/qemu/0011-linux-user-remove-host-stime-syscall.patch b/meta/recipes-devtools/qemu/qemu/0011-linux-user-remove-host-stime-syscall.patch
new file mode 100644
index 0000000000..659e6be45d
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/0011-linux-user-remove-host-stime-syscall.patch
@@ -0,0 +1,61 @@
+From 0f1f2d4596aee037d3ccbcf10592466daa54107f Mon Sep 17 00:00:00 2001
+From: Laurent Vivier <laurent@vivier.eu>
+Date: Tue, 12 Nov 2019 15:25:56 +0100
+Subject: [PATCH] linux-user: remove host stime() syscall
+
+stime() has been withdrawn from glibc
+(12cbde1dae6f "Use clock_settime to implement stime; withdraw stime.")
+
+Implement the target stime() syscall using host
+clock_settime(CLOCK_REALTIME, ...) as it is done internally in glibc.
+
+Tested qemu-ppc/x86_64 with:
+
+ #include <time.h>
+ #include <stdio.h>
+
+ int main(void)
+ {
+ time_t t;
+ int ret;
+
+ /* date -u -d"2019-11-12T15:11:00" "+%s" */
+ t = 1573571460;
+ ret = stime(&t);
+ printf("ret %d\n", ret);
+ return 0;
+ }
+
+ # date; ./stime; date
+ Tue Nov 12 14:18:32 UTC 2019
+ ret 0
+ Tue Nov 12 15:11:00 UTC 2019
+
+Upstream-Status: Backport [https://git.qemu.org/?p=qemu.git;a=commit;h=0f1f2d4596aee037d3ccbcf10592466daa54107f]
+Buglink: https://bugs.launchpad.net/qemu/+bug/1852115
+Reported-by: Cole Robinson <crobinso@redhat.com>
+Signed-off-by: Laurent Vivier <laurent@vivier.eu>
+Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
+Message-Id: <20191112142556.6335-1-laurent@vivier.eu>
+---
+ linux-user/syscall.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- a/linux-user/syscall.c
++++ b/linux-user/syscall.c
+@@ -7651,10 +7651,12 @@ static abi_long do_syscall1(void *cpu_en
+ #ifdef TARGET_NR_stime /* not on alpha */
+ case TARGET_NR_stime:
+ {
+- time_t host_time;
+- if (get_user_sal(host_time, arg1))
++ struct timespec ts;
++ ts.tv_nsec = 0;
++ if (get_user_sal(ts.tv_sec, arg1)) {
+ return -TARGET_EFAULT;
+- return get_errno(stime(&host_time));
++ }
++ return get_errno(clock_settime(CLOCK_REALTIME, &ts));
+ }
+ #endif
+ #ifdef TARGET_NR_alarm /* not on alpha */
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2019-20382.patch b/meta/recipes-devtools/qemu/qemu/CVE-2019-20382.patch
new file mode 100644
index 0000000000..183d100398
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2019-20382.patch
@@ -0,0 +1,1018 @@
+From 6bf21f3d83e95bcc4ba35a7a07cc6655e8b010b0 Mon Sep 17 00:00:00 2001
+From: Li Qiang <liq3ea@163.com>
+Date: Sat, 31 Aug 2019 08:39:22 -0700
+Subject: [PATCH] vnc: fix memory leak when vnc disconnect
+
+Currently when qemu receives a vnc connect, it creates a 'VncState' to
+represent this connection. In 'vnc_worker_thread_loop' it creates a
+local 'VncState'. The connection 'VcnState' and local 'VncState' exchange
+data in 'vnc_async_encoding_start' and 'vnc_async_encoding_end'.
+In 'zrle_compress_data' it calls 'deflateInit2' to allocate the libz library
+opaque data. The 'VncState' used in 'zrle_compress_data' is the local
+'VncState'. In 'vnc_zrle_clear' it calls 'deflateEnd' to free the libz
+library opaque data. The 'VncState' used in 'vnc_zrle_clear' is the connection
+'VncState'. In currently implementation there will be a memory leak when the
+vnc disconnect. Following is the asan output backtrack:
+
+Direct leak of 29760 byte(s) in 5 object(s) allocated from:
+ 0 0xffffa67ef3c3 in __interceptor_calloc (/lib64/libasan.so.4+0xd33c3)
+ 1 0xffffa65071cb in g_malloc0 (/lib64/libglib-2.0.so.0+0x571cb)
+ 2 0xffffa5e968f7 in deflateInit2_ (/lib64/libz.so.1+0x78f7)
+ 3 0xaaaacec58613 in zrle_compress_data ui/vnc-enc-zrle.c:87
+ 4 0xaaaacec58613 in zrle_send_framebuffer_update ui/vnc-enc-zrle.c:344
+ 5 0xaaaacec34e77 in vnc_send_framebuffer_update ui/vnc.c:919
+ 6 0xaaaacec5e023 in vnc_worker_thread_loop ui/vnc-jobs.c:271
+ 7 0xaaaacec5e5e7 in vnc_worker_thread ui/vnc-jobs.c:340
+ 8 0xaaaacee4d3c3 in qemu_thread_start util/qemu-thread-posix.c:502
+ 9 0xffffa544e8bb in start_thread (/lib64/libpthread.so.0+0x78bb)
+ 10 0xffffa53965cb in thread_start (/lib64/libc.so.6+0xd55cb)
+
+This is because the opaque allocated in 'deflateInit2' is not freed in
+'deflateEnd'. The reason is that the 'deflateEnd' calls 'deflateStateCheck'
+and in the latter will check whether 's->strm != strm'(libz's data structure).
+This check will be true so in 'deflateEnd' it just return 'Z_STREAM_ERROR' and
+not free the data allocated in 'deflateInit2'.
+
+The reason this happens is that the 'VncState' contains the whole 'VncZrle',
+so when calling 'deflateInit2', the 's->strm' will be the local address.
+So 's->strm != strm' will be true.
+
+To fix this issue, we need to make 'zrle' of 'VncState' to be a pointer.
+Then the connection 'VncState' and local 'VncState' exchange mechanism will
+work as expection. The 'tight' of 'VncState' has the same issue, let's also turn
+it to a pointer.
+
+Reported-by: Ying Fang <fangying1@huawei.com>
+Signed-off-by: Li Qiang <liq3ea@163.com>
+Message-id: 20190831153922.121308-1-liq3ea@163.com
+Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
+
+Upstream-Status: Backport [https://git.qemu.org/?p=qemu.git;a=commit;h=6bf21f3d83e95bcc4ba35a7a07cc6655e8b010b0]
+CVE: CVE-2019-20382
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+
+---
+ ui/vnc-enc-tight.c | 219 +++++++++++++++++++++++++-------------------------
+ ui/vnc-enc-zlib.c | 11 +--
+ ui/vnc-enc-zrle.c | 68 ++++++++--------
+ ui/vnc-enc-zrle.inc.c | 2 +-
+ ui/vnc.c | 28 ++++---
+ ui/vnc.h | 4 +-
+ 6 files changed, 170 insertions(+), 162 deletions(-)
+
+diff --git a/ui/vnc-enc-tight.c b/ui/vnc-enc-tight.c
+index 9084c22..1e08518 100644
+--- a/ui/vnc-enc-tight.c
++++ b/ui/vnc-enc-tight.c
+@@ -116,7 +116,7 @@ static int send_png_rect(VncState *vs, int x, int y, int w, int h,
+
+ static bool tight_can_send_png_rect(VncState *vs, int w, int h)
+ {
+- if (vs->tight.type != VNC_ENCODING_TIGHT_PNG) {
++ if (vs->tight->type != VNC_ENCODING_TIGHT_PNG) {
+ return false;
+ }
+
+@@ -144,7 +144,7 @@ tight_detect_smooth_image24(VncState *vs, int w, int h)
+ int pixels = 0;
+ int pix, left[3];
+ unsigned int errors;
+- unsigned char *buf = vs->tight.tight.buffer;
++ unsigned char *buf = vs->tight->tight.buffer;
+
+ /*
+ * If client is big-endian, color samples begin from the second
+@@ -215,7 +215,7 @@ tight_detect_smooth_image24(VncState *vs, int w, int h)
+ int pixels = 0; \
+ int sample, sum, left[3]; \
+ unsigned int errors; \
+- unsigned char *buf = vs->tight.tight.buffer; \
++ unsigned char *buf = vs->tight->tight.buffer; \
+ \
+ endian = 0; /* FIXME */ \
+ \
+@@ -296,8 +296,8 @@ static int
+ tight_detect_smooth_image(VncState *vs, int w, int h)
+ {
+ unsigned int errors;
+- int compression = vs->tight.compression;
+- int quality = vs->tight.quality;
++ int compression = vs->tight->compression;
++ int quality = vs->tight->quality;
+
+ if (!vs->vd->lossy) {
+ return 0;
+@@ -309,7 +309,7 @@ tight_detect_smooth_image(VncState *vs, int w, int h)
+ return 0;
+ }
+
+- if (vs->tight.quality != (uint8_t)-1) {
++ if (vs->tight->quality != (uint8_t)-1) {
+ if (w * h < VNC_TIGHT_JPEG_MIN_RECT_SIZE) {
+ return 0;
+ }
+@@ -320,9 +320,9 @@ tight_detect_smooth_image(VncState *vs, int w, int h)
+ }
+
+ if (vs->client_pf.bytes_per_pixel == 4) {
+- if (vs->tight.pixel24) {
++ if (vs->tight->pixel24) {
+ errors = tight_detect_smooth_image24(vs, w, h);
+- if (vs->tight.quality != (uint8_t)-1) {
++ if (vs->tight->quality != (uint8_t)-1) {
+ return (errors < tight_conf[quality].jpeg_threshold24);
+ }
+ return (errors < tight_conf[compression].gradient_threshold24);
+@@ -352,7 +352,7 @@ tight_detect_smooth_image(VncState *vs, int w, int h)
+ uint##bpp##_t c0, c1, ci; \
+ int i, n0, n1; \
+ \
+- data = (uint##bpp##_t *)vs->tight.tight.buffer; \
++ data = (uint##bpp##_t *)vs->tight->tight.buffer; \
+ \
+ c0 = data[0]; \
+ i = 1; \
+@@ -423,9 +423,9 @@ static int tight_fill_palette(VncState *vs, int x, int y,
+ {
+ int max;
+
+- max = count / tight_conf[vs->tight.compression].idx_max_colors_divisor;
++ max = count / tight_conf[vs->tight->compression].idx_max_colors_divisor;
+ if (max < 2 &&
+- count >= tight_conf[vs->tight.compression].mono_min_rect_size) {
++ count >= tight_conf[vs->tight->compression].mono_min_rect_size) {
+ max = 2;
+ }
+ if (max >= 256) {
+@@ -558,7 +558,7 @@ tight_filter_gradient24(VncState *vs, uint8_t *buf, int w, int h)
+ int x, y, c;
+
+ buf32 = (uint32_t *)buf;
+- memset(vs->tight.gradient.buffer, 0, w * 3 * sizeof(int));
++ memset(vs->tight->gradient.buffer, 0, w * 3 * sizeof(int));
+
+ if (1 /* FIXME */) {
+ shift[0] = vs->client_pf.rshift;
+@@ -575,7 +575,7 @@ tight_filter_gradient24(VncState *vs, uint8_t *buf, int w, int h)
+ upper[c] = 0;
+ here[c] = 0;
+ }
+- prev = (int *)vs->tight.gradient.buffer;
++ prev = (int *)vs->tight->gradient.buffer;
+ for (x = 0; x < w; x++) {
+ pix32 = *buf32++;
+ for (c = 0; c < 3; c++) {
+@@ -615,7 +615,7 @@ tight_filter_gradient24(VncState *vs, uint8_t *buf, int w, int h)
+ int prediction; \
+ int x, y, c; \
+ \
+- memset (vs->tight.gradient.buffer, 0, w * 3 * sizeof(int)); \
++ memset(vs->tight->gradient.buffer, 0, w * 3 * sizeof(int)); \
+ \
+ endian = 0; /* FIXME */ \
+ \
+@@ -631,7 +631,7 @@ tight_filter_gradient24(VncState *vs, uint8_t *buf, int w, int h)
+ upper[c] = 0; \
+ here[c] = 0; \
+ } \
+- prev = (int *)vs->tight.gradient.buffer; \
++ prev = (int *)vs->tight->gradient.buffer; \
+ for (x = 0; x < w; x++) { \
+ pix = *buf; \
+ if (endian) { \
+@@ -785,7 +785,7 @@ static void extend_solid_area(VncState *vs, int x, int y, int w, int h,
+ static int tight_init_stream(VncState *vs, int stream_id,
+ int level, int strategy)
+ {
+- z_streamp zstream = &vs->tight.stream[stream_id];
++ z_streamp zstream = &vs->tight->stream[stream_id];
+
+ if (zstream->opaque == NULL) {
+ int err;
+@@ -803,15 +803,15 @@ static int tight_init_stream(VncState *vs, int stream_id,
+ return -1;
+ }
+
+- vs->tight.levels[stream_id] = level;
++ vs->tight->levels[stream_id] = level;
+ zstream->opaque = vs;
+ }
+
+- if (vs->tight.levels[stream_id] != level) {
++ if (vs->tight->levels[stream_id] != level) {
+ if (deflateParams(zstream, level, strategy) != Z_OK) {
+ return -1;
+ }
+- vs->tight.levels[stream_id] = level;
++ vs->tight->levels[stream_id] = level;
+ }
+ return 0;
+ }
+@@ -839,11 +839,11 @@ static void tight_send_compact_size(VncState *vs, size_t len)
+ static int tight_compress_data(VncState *vs, int stream_id, size_t bytes,
+ int level, int strategy)
+ {
+- z_streamp zstream = &vs->tight.stream[stream_id];
++ z_streamp zstream = &vs->tight->stream[stream_id];
+ int previous_out;
+
+ if (bytes < VNC_TIGHT_MIN_TO_COMPRESS) {
+- vnc_write(vs, vs->tight.tight.buffer, vs->tight.tight.offset);
++ vnc_write(vs, vs->tight->tight.buffer, vs->tight->tight.offset);
+ return bytes;
+ }
+
+@@ -852,13 +852,13 @@ static int tight_compress_data(VncState *vs, int stream_id, size_t bytes,
+ }
+
+ /* reserve memory in output buffer */
+- buffer_reserve(&vs->tight.zlib, bytes + 64);
++ buffer_reserve(&vs->tight->zlib, bytes + 64);
+
+ /* set pointers */
+- zstream->next_in = vs->tight.tight.buffer;
+- zstream->avail_in = vs->tight.tight.offset;
+- zstream->next_out = vs->tight.zlib.buffer + vs->tight.zlib.offset;
+- zstream->avail_out = vs->tight.zlib.capacity - vs->tight.zlib.offset;
++ zstream->next_in = vs->tight->tight.buffer;
++ zstream->avail_in = vs->tight->tight.offset;
++ zstream->next_out = vs->tight->zlib.buffer + vs->tight->zlib.offset;
++ zstream->avail_out = vs->tight->zlib.capacity - vs->tight->zlib.offset;
+ previous_out = zstream->avail_out;
+ zstream->data_type = Z_BINARY;
+
+@@ -868,14 +868,14 @@ static int tight_compress_data(VncState *vs, int stream_id, size_t bytes,
+ return -1;
+ }
+
+- vs->tight.zlib.offset = vs->tight.zlib.capacity - zstream->avail_out;
++ vs->tight->zlib.offset = vs->tight->zlib.capacity - zstream->avail_out;
+ /* ...how much data has actually been produced by deflate() */
+ bytes = previous_out - zstream->avail_out;
+
+ tight_send_compact_size(vs, bytes);
+- vnc_write(vs, vs->tight.zlib.buffer, bytes);
++ vnc_write(vs, vs->tight->zlib.buffer, bytes);
+
+- buffer_reset(&vs->tight.zlib);
++ buffer_reset(&vs->tight->zlib);
+
+ return bytes;
+ }
+@@ -927,16 +927,17 @@ static int send_full_color_rect(VncState *vs, int x, int y, int w, int h)
+
+ vnc_write_u8(vs, stream << 4); /* no flushing, no filter */
+
+- if (vs->tight.pixel24) {
+- tight_pack24(vs, vs->tight.tight.buffer, w * h, &vs->tight.tight.offset);
++ if (vs->tight->pixel24) {
++ tight_pack24(vs, vs->tight->tight.buffer, w * h,
++ &vs->tight->tight.offset);
+ bytes = 3;
+ } else {
+ bytes = vs->client_pf.bytes_per_pixel;
+ }
+
+ bytes = tight_compress_data(vs, stream, w * h * bytes,
+- tight_conf[vs->tight.compression].raw_zlib_level,
+- Z_DEFAULT_STRATEGY);
++ tight_conf[vs->tight->compression].raw_zlib_level,
++ Z_DEFAULT_STRATEGY);
+
+ return (bytes >= 0);
+ }
+@@ -947,14 +948,14 @@ static int send_solid_rect(VncState *vs)
+
+ vnc_write_u8(vs, VNC_TIGHT_FILL << 4); /* no flushing, no filter */
+
+- if (vs->tight.pixel24) {
+- tight_pack24(vs, vs->tight.tight.buffer, 1, &vs->tight.tight.offset);
++ if (vs->tight->pixel24) {
++ tight_pack24(vs, vs->tight->tight.buffer, 1, &vs->tight->tight.offset);
+ bytes = 3;
+ } else {
+ bytes = vs->client_pf.bytes_per_pixel;
+ }
+
+- vnc_write(vs, vs->tight.tight.buffer, bytes);
++ vnc_write(vs, vs->tight->tight.buffer, bytes);
+ return 1;
+ }
+
+@@ -963,7 +964,7 @@ static int send_mono_rect(VncState *vs, int x, int y,
+ {
+ ssize_t bytes;
+ int stream = 1;
+- int level = tight_conf[vs->tight.compression].mono_zlib_level;
++ int level = tight_conf[vs->tight->compression].mono_zlib_level;
+
+ #ifdef CONFIG_VNC_PNG
+ if (tight_can_send_png_rect(vs, w, h)) {
+@@ -991,26 +992,26 @@ static int send_mono_rect(VncState *vs, int x, int y,
+ uint32_t buf[2] = {bg, fg};
+ size_t ret = sizeof (buf);
+
+- if (vs->tight.pixel24) {
++ if (vs->tight->pixel24) {
+ tight_pack24(vs, (unsigned char*)buf, 2, &ret);
+ }
+ vnc_write(vs, buf, ret);
+
+- tight_encode_mono_rect32(vs->tight.tight.buffer, w, h, bg, fg);
++ tight_encode_mono_rect32(vs->tight->tight.buffer, w, h, bg, fg);
+ break;
+ }
+ case 2:
+ vnc_write(vs, &bg, 2);
+ vnc_write(vs, &fg, 2);
+- tight_encode_mono_rect16(vs->tight.tight.buffer, w, h, bg, fg);
++ tight_encode_mono_rect16(vs->tight->tight.buffer, w, h, bg, fg);
+ break;
+ default:
+ vnc_write_u8(vs, bg);
+ vnc_write_u8(vs, fg);
+- tight_encode_mono_rect8(vs->tight.tight.buffer, w, h, bg, fg);
++ tight_encode_mono_rect8(vs->tight->tight.buffer, w, h, bg, fg);
+ break;
+ }
+- vs->tight.tight.offset = bytes;
++ vs->tight->tight.offset = bytes;
+
+ bytes = tight_compress_data(vs, stream, bytes, level, Z_DEFAULT_STRATEGY);
+ return (bytes >= 0);
+@@ -1040,7 +1041,7 @@ static void write_palette(int idx, uint32_t color, void *opaque)
+ static bool send_gradient_rect(VncState *vs, int x, int y, int w, int h)
+ {
+ int stream = 3;
+- int level = tight_conf[vs->tight.compression].gradient_zlib_level;
++ int level = tight_conf[vs->tight->compression].gradient_zlib_level;
+ ssize_t bytes;
+
+ if (vs->client_pf.bytes_per_pixel == 1) {
+@@ -1050,23 +1051,23 @@ static bool send_gradient_rect(VncState *vs, int x, int y, int w, int h)
+ vnc_write_u8(vs, (stream | VNC_TIGHT_EXPLICIT_FILTER) << 4);
+ vnc_write_u8(vs, VNC_TIGHT_FILTER_GRADIENT);
+
+- buffer_reserve(&vs->tight.gradient, w * 3 * sizeof (int));
++ buffer_reserve(&vs->tight->gradient, w * 3 * sizeof(int));
+
+- if (vs->tight.pixel24) {
+- tight_filter_gradient24(vs, vs->tight.tight.buffer, w, h);
++ if (vs->tight->pixel24) {
++ tight_filter_gradient24(vs, vs->tight->tight.buffer, w, h);
+ bytes = 3;
+ } else if (vs->client_pf.bytes_per_pixel == 4) {
+- tight_filter_gradient32(vs, (uint32_t *)vs->tight.tight.buffer, w, h);
++ tight_filter_gradient32(vs, (uint32_t *)vs->tight->tight.buffer, w, h);
+ bytes = 4;
+ } else {
+- tight_filter_gradient16(vs, (uint16_t *)vs->tight.tight.buffer, w, h);
++ tight_filter_gradient16(vs, (uint16_t *)vs->tight->tight.buffer, w, h);
+ bytes = 2;
+ }
+
+- buffer_reset(&vs->tight.gradient);
++ buffer_reset(&vs->tight->gradient);
+
+ bytes = w * h * bytes;
+- vs->tight.tight.offset = bytes;
++ vs->tight->tight.offset = bytes;
+
+ bytes = tight_compress_data(vs, stream, bytes,
+ level, Z_FILTERED);
+@@ -1077,7 +1078,7 @@ static int send_palette_rect(VncState *vs, int x, int y,
+ int w, int h, VncPalette *palette)
+ {
+ int stream = 2;
+- int level = tight_conf[vs->tight.compression].idx_zlib_level;
++ int level = tight_conf[vs->tight->compression].idx_zlib_level;
+ int colors;
+ ssize_t bytes;
+
+@@ -1104,12 +1105,12 @@ static int send_palette_rect(VncState *vs, int x, int y,
+ palette_iter(palette, write_palette, &priv);
+ vnc_write(vs, header, sizeof(header));
+
+- if (vs->tight.pixel24) {
++ if (vs->tight->pixel24) {
+ tight_pack24(vs, vs->output.buffer + old_offset, colors, &offset);
+ vs->output.offset = old_offset + offset;
+ }
+
+- tight_encode_indexed_rect32(vs->tight.tight.buffer, w * h, palette);
++ tight_encode_indexed_rect32(vs->tight->tight.buffer, w * h, palette);
+ break;
+ }
+ case 2:
+@@ -1119,7 +1120,7 @@ static int send_palette_rect(VncState *vs, int x, int y,
+
+ palette_iter(palette, write_palette, &priv);
+ vnc_write(vs, header, sizeof(header));
+- tight_encode_indexed_rect16(vs->tight.tight.buffer, w * h, palette);
++ tight_encode_indexed_rect16(vs->tight->tight.buffer, w * h, palette);
+ break;
+ }
+ default:
+@@ -1127,7 +1128,7 @@ static int send_palette_rect(VncState *vs, int x, int y,
+ break;
+ }
+ bytes = w * h;
+- vs->tight.tight.offset = bytes;
++ vs->tight->tight.offset = bytes;
+
+ bytes = tight_compress_data(vs, stream, bytes,
+ level, Z_DEFAULT_STRATEGY);
+@@ -1146,7 +1147,7 @@ static int send_palette_rect(VncState *vs, int x, int y,
+ static void jpeg_init_destination(j_compress_ptr cinfo)
+ {
+ VncState *vs = cinfo->client_data;
+- Buffer *buffer = &vs->tight.jpeg;
++ Buffer *buffer = &vs->tight->jpeg;
+
+ cinfo->dest->next_output_byte = (JOCTET *)buffer->buffer + buffer->offset;
+ cinfo->dest->free_in_buffer = (size_t)(buffer->capacity - buffer->offset);
+@@ -1156,7 +1157,7 @@ static void jpeg_init_destination(j_compress_ptr cinfo)
+ static boolean jpeg_empty_output_buffer(j_compress_ptr cinfo)
+ {
+ VncState *vs = cinfo->client_data;
+- Buffer *buffer = &vs->tight.jpeg;
++ Buffer *buffer = &vs->tight->jpeg;
+
+ buffer->offset = buffer->capacity;
+ buffer_reserve(buffer, 2048);
+@@ -1168,7 +1169,7 @@ static boolean jpeg_empty_output_buffer(j_compress_ptr cinfo)
+ static void jpeg_term_destination(j_compress_ptr cinfo)
+ {
+ VncState *vs = cinfo->client_data;
+- Buffer *buffer = &vs->tight.jpeg;
++ Buffer *buffer = &vs->tight->jpeg;
+
+ buffer->offset = buffer->capacity - cinfo->dest->free_in_buffer;
+ }
+@@ -1187,7 +1188,7 @@ static int send_jpeg_rect(VncState *vs, int x, int y, int w, int h, int quality)
+ return send_full_color_rect(vs, x, y, w, h);
+ }
+
+- buffer_reserve(&vs->tight.jpeg, 2048);
++ buffer_reserve(&vs->tight->jpeg, 2048);
+
+ cinfo.err = jpeg_std_error(&jerr);
+ jpeg_create_compress(&cinfo);
+@@ -1222,9 +1223,9 @@ static int send_jpeg_rect(VncState *vs, int x, int y, int w, int h, int quality)
+
+ vnc_write_u8(vs, VNC_TIGHT_JPEG << 4);
+
+- tight_send_compact_size(vs, vs->tight.jpeg.offset);
+- vnc_write(vs, vs->tight.jpeg.buffer, vs->tight.jpeg.offset);
+- buffer_reset(&vs->tight.jpeg);
++ tight_send_compact_size(vs, vs->tight->jpeg.offset);
++ vnc_write(vs, vs->tight->jpeg.buffer, vs->tight->jpeg.offset);
++ buffer_reset(&vs->tight->jpeg);
+
+ return 1;
+ }
+@@ -1240,7 +1241,7 @@ static void write_png_palette(int idx, uint32_t pix, void *opaque)
+ VncState *vs = priv->vs;
+ png_colorp color = &priv->png_palette[idx];
+
+- if (vs->tight.pixel24)
++ if (vs->tight->pixel24)
+ {
+ color->red = (pix >> vs->client_pf.rshift) & vs->client_pf.rmax;
+ color->green = (pix >> vs->client_pf.gshift) & vs->client_pf.gmax;
+@@ -1267,10 +1268,10 @@ static void png_write_data(png_structp png_ptr, png_bytep data,
+ {
+ VncState *vs = png_get_io_ptr(png_ptr);
+
+- buffer_reserve(&vs->tight.png, vs->tight.png.offset + length);
+- memcpy(vs->tight.png.buffer + vs->tight.png.offset, data, length);
++ buffer_reserve(&vs->tight->png, vs->tight->png.offset + length);
++ memcpy(vs->tight->png.buffer + vs->tight->png.offset, data, length);
+
+- vs->tight.png.offset += length;
++ vs->tight->png.offset += length;
+ }
+
+ static void png_flush_data(png_structp png_ptr)
+@@ -1295,8 +1296,8 @@ static int send_png_rect(VncState *vs, int x, int y, int w, int h,
+ png_infop info_ptr;
+ png_colorp png_palette = NULL;
+ pixman_image_t *linebuf;
+- int level = tight_png_conf[vs->tight.compression].png_zlib_level;
+- int filters = tight_png_conf[vs->tight.compression].png_filters;
++ int level = tight_png_conf[vs->tight->compression].png_zlib_level;
++ int filters = tight_png_conf[vs->tight->compression].png_filters;
+ uint8_t *buf;
+ int dy;
+
+@@ -1340,21 +1341,23 @@ static int send_png_rect(VncState *vs, int x, int y, int w, int h,
+ png_set_PLTE(png_ptr, info_ptr, png_palette, palette_size(palette));
+
+ if (vs->client_pf.bytes_per_pixel == 4) {
+- tight_encode_indexed_rect32(vs->tight.tight.buffer, w * h, palette);
++ tight_encode_indexed_rect32(vs->tight->tight.buffer, w * h,
++ palette);
+ } else {
+- tight_encode_indexed_rect16(vs->tight.tight.buffer, w * h, palette);
++ tight_encode_indexed_rect16(vs->tight->tight.buffer, w * h,
++ palette);
+ }
+ }
+
+ png_write_info(png_ptr, info_ptr);
+
+- buffer_reserve(&vs->tight.png, 2048);
++ buffer_reserve(&vs->tight->png, 2048);
+ linebuf = qemu_pixman_linebuf_create(PIXMAN_BE_r8g8b8, w);
+ buf = (uint8_t *)pixman_image_get_data(linebuf);
+ for (dy = 0; dy < h; dy++)
+ {
+ if (color_type == PNG_COLOR_TYPE_PALETTE) {
+- memcpy(buf, vs->tight.tight.buffer + (dy * w), w);
++ memcpy(buf, vs->tight->tight.buffer + (dy * w), w);
+ } else {
+ qemu_pixman_linebuf_fill(linebuf, vs->vd->server, w, x, y + dy);
+ }
+@@ -1372,27 +1375,27 @@ static int send_png_rect(VncState *vs, int x, int y, int w, int h,
+
+ vnc_write_u8(vs, VNC_TIGHT_PNG << 4);
+
+- tight_send_compact_size(vs, vs->tight.png.offset);
+- vnc_write(vs, vs->tight.png.buffer, vs->tight.png.offset);
+- buffer_reset(&vs->tight.png);
++ tight_send_compact_size(vs, vs->tight->png.offset);
++ vnc_write(vs, vs->tight->png.buffer, vs->tight->png.offset);
++ buffer_reset(&vs->tight->png);
+ return 1;
+ }
+ #endif /* CONFIG_VNC_PNG */
+
+ static void vnc_tight_start(VncState *vs)
+ {
+- buffer_reset(&vs->tight.tight);
++ buffer_reset(&vs->tight->tight);
+
+ // make the output buffer be the zlib buffer, so we can compress it later
+- vs->tight.tmp = vs->output;
+- vs->output = vs->tight.tight;
++ vs->tight->tmp = vs->output;
++ vs->output = vs->tight->tight;
+ }
+
+ static void vnc_tight_stop(VncState *vs)
+ {
+ // switch back to normal output/zlib buffers
+- vs->tight.tight = vs->output;
+- vs->output = vs->tight.tmp;
++ vs->tight->tight = vs->output;
++ vs->output = vs->tight->tmp;
+ }
+
+ static int send_sub_rect_nojpeg(VncState *vs, int x, int y, int w, int h,
+@@ -1426,9 +1429,9 @@ static int send_sub_rect_jpeg(VncState *vs, int x, int y, int w, int h,
+ int ret;
+
+ if (colors == 0) {
+- if (force || (tight_jpeg_conf[vs->tight.quality].jpeg_full &&
++ if (force || (tight_jpeg_conf[vs->tight->quality].jpeg_full &&
+ tight_detect_smooth_image(vs, w, h))) {
+- int quality = tight_conf[vs->tight.quality].jpeg_quality;
++ int quality = tight_conf[vs->tight->quality].jpeg_quality;
+
+ ret = send_jpeg_rect(vs, x, y, w, h, quality);
+ } else {
+@@ -1440,9 +1443,9 @@ static int send_sub_rect_jpeg(VncState *vs, int x, int y, int w, int h,
+ ret = send_mono_rect(vs, x, y, w, h, bg, fg);
+ } else if (colors <= 256) {
+ if (force || (colors > 96 &&
+- tight_jpeg_conf[vs->tight.quality].jpeg_idx &&
++ tight_jpeg_conf[vs->tight->quality].jpeg_idx &&
+ tight_detect_smooth_image(vs, w, h))) {
+- int quality = tight_conf[vs->tight.quality].jpeg_quality;
++ int quality = tight_conf[vs->tight->quality].jpeg_quality;
+
+ ret = send_jpeg_rect(vs, x, y, w, h, quality);
+ } else {
+@@ -1480,20 +1483,20 @@ static int send_sub_rect(VncState *vs, int x, int y, int w, int h)
+ qemu_thread_atexit_add(&vnc_tight_cleanup_notifier);
+ }
+
+- vnc_framebuffer_update(vs, x, y, w, h, vs->tight.type);
++ vnc_framebuffer_update(vs, x, y, w, h, vs->tight->type);
+
+ vnc_tight_start(vs);
+ vnc_raw_send_framebuffer_update(vs, x, y, w, h);
+ vnc_tight_stop(vs);
+
+ #ifdef CONFIG_VNC_JPEG
+- if (!vs->vd->non_adaptive && vs->tight.quality != (uint8_t)-1) {
++ if (!vs->vd->non_adaptive && vs->tight->quality != (uint8_t)-1) {
+ double freq = vnc_update_freq(vs, x, y, w, h);
+
+- if (freq < tight_jpeg_conf[vs->tight.quality].jpeg_freq_min) {
++ if (freq < tight_jpeg_conf[vs->tight->quality].jpeg_freq_min) {
+ allow_jpeg = false;
+ }
+- if (freq >= tight_jpeg_conf[vs->tight.quality].jpeg_freq_threshold) {
++ if (freq >= tight_jpeg_conf[vs->tight->quality].jpeg_freq_threshold) {
+ force_jpeg = true;
+ vnc_sent_lossy_rect(vs, x, y, w, h);
+ }
+@@ -1503,7 +1506,7 @@ static int send_sub_rect(VncState *vs, int x, int y, int w, int h)
+ colors = tight_fill_palette(vs, x, y, w * h, &bg, &fg, color_count_palette);
+
+ #ifdef CONFIG_VNC_JPEG
+- if (allow_jpeg && vs->tight.quality != (uint8_t)-1) {
++ if (allow_jpeg && vs->tight->quality != (uint8_t)-1) {
+ ret = send_sub_rect_jpeg(vs, x, y, w, h, bg, fg, colors,
+ color_count_palette, force_jpeg);
+ } else {
+@@ -1520,7 +1523,7 @@ static int send_sub_rect(VncState *vs, int x, int y, int w, int h)
+
+ static int send_sub_rect_solid(VncState *vs, int x, int y, int w, int h)
+ {
+- vnc_framebuffer_update(vs, x, y, w, h, vs->tight.type);
++ vnc_framebuffer_update(vs, x, y, w, h, vs->tight->type);
+
+ vnc_tight_start(vs);
+ vnc_raw_send_framebuffer_update(vs, x, y, w, h);
+@@ -1538,8 +1541,8 @@ static int send_rect_simple(VncState *vs, int x, int y, int w, int h,
+ int rw, rh;
+ int n = 0;
+
+- max_size = tight_conf[vs->tight.compression].max_rect_size;
+- max_width = tight_conf[vs->tight.compression].max_rect_width;
++ max_size = tight_conf[vs->tight->compression].max_rect_size;
++ max_width = tight_conf[vs->tight->compression].max_rect_width;
+
+ if (split && (w > max_width || w * h > max_size)) {
+ max_sub_width = (w > max_width) ? max_width : w;
+@@ -1648,16 +1651,16 @@ static int tight_send_framebuffer_update(VncState *vs, int x, int y,
+
+ if (vs->client_pf.bytes_per_pixel == 4 && vs->client_pf.rmax == 0xFF &&
+ vs->client_pf.bmax == 0xFF && vs->client_pf.gmax == 0xFF) {
+- vs->tight.pixel24 = true;
++ vs->tight->pixel24 = true;
+ } else {
+- vs->tight.pixel24 = false;
++ vs->tight->pixel24 = false;
+ }
+
+ #ifdef CONFIG_VNC_JPEG
+- if (vs->tight.quality != (uint8_t)-1) {
++ if (vs->tight->quality != (uint8_t)-1) {
+ double freq = vnc_update_freq(vs, x, y, w, h);
+
+- if (freq > tight_jpeg_conf[vs->tight.quality].jpeg_freq_threshold) {
++ if (freq > tight_jpeg_conf[vs->tight->quality].jpeg_freq_threshold) {
+ return send_rect_simple(vs, x, y, w, h, false);
+ }
+ }
+@@ -1669,8 +1672,8 @@ static int tight_send_framebuffer_update(VncState *vs, int x, int y,
+
+ /* Calculate maximum number of rows in one non-solid rectangle. */
+
+- max_rows = tight_conf[vs->tight.compression].max_rect_size;
+- max_rows /= MIN(tight_conf[vs->tight.compression].max_rect_width, w);
++ max_rows = tight_conf[vs->tight->compression].max_rect_size;
++ max_rows /= MIN(tight_conf[vs->tight->compression].max_rect_width, w);
+
+ return find_large_solid_color_rect(vs, x, y, w, h, max_rows);
+ }
+@@ -1678,33 +1681,33 @@ static int tight_send_framebuffer_update(VncState *vs, int x, int y,
+ int vnc_tight_send_framebuffer_update(VncState *vs, int x, int y,
+ int w, int h)
+ {
+- vs->tight.type = VNC_ENCODING_TIGHT;
++ vs->tight->type = VNC_ENCODING_TIGHT;
+ return tight_send_framebuffer_update(vs, x, y, w, h);
+ }
+
+ int vnc_tight_png_send_framebuffer_update(VncState *vs, int x, int y,
+ int w, int h)
+ {
+- vs->tight.type = VNC_ENCODING_TIGHT_PNG;
++ vs->tight->type = VNC_ENCODING_TIGHT_PNG;
+ return tight_send_framebuffer_update(vs, x, y, w, h);
+ }
+
+ void vnc_tight_clear(VncState *vs)
+ {
+ int i;
+- for (i=0; i<ARRAY_SIZE(vs->tight.stream); i++) {
+- if (vs->tight.stream[i].opaque) {
+- deflateEnd(&vs->tight.stream[i]);
++ for (i = 0; i < ARRAY_SIZE(vs->tight->stream); i++) {
++ if (vs->tight->stream[i].opaque) {
++ deflateEnd(&vs->tight->stream[i]);
+ }
+ }
+
+- buffer_free(&vs->tight.tight);
+- buffer_free(&vs->tight.zlib);
+- buffer_free(&vs->tight.gradient);
++ buffer_free(&vs->tight->tight);
++ buffer_free(&vs->tight->zlib);
++ buffer_free(&vs->tight->gradient);
+ #ifdef CONFIG_VNC_JPEG
+- buffer_free(&vs->tight.jpeg);
++ buffer_free(&vs->tight->jpeg);
+ #endif
+ #ifdef CONFIG_VNC_PNG
+- buffer_free(&vs->tight.png);
++ buffer_free(&vs->tight->png);
+ #endif
+ }
+diff --git a/ui/vnc-enc-zlib.c b/ui/vnc-enc-zlib.c
+index 33e9df2..900ae5b 100644
+--- a/ui/vnc-enc-zlib.c
++++ b/ui/vnc-enc-zlib.c
+@@ -76,7 +76,8 @@ static int vnc_zlib_stop(VncState *vs)
+ zstream->zalloc = vnc_zlib_zalloc;
+ zstream->zfree = vnc_zlib_zfree;
+
+- err = deflateInit2(zstream, vs->tight.compression, Z_DEFLATED, MAX_WBITS,
++ err = deflateInit2(zstream, vs->tight->compression, Z_DEFLATED,
++ MAX_WBITS,
+ MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY);
+
+ if (err != Z_OK) {
+@@ -84,16 +85,16 @@ static int vnc_zlib_stop(VncState *vs)
+ return -1;
+ }
+
+- vs->zlib.level = vs->tight.compression;
++ vs->zlib.level = vs->tight->compression;
+ zstream->opaque = vs;
+ }
+
+- if (vs->tight.compression != vs->zlib.level) {
+- if (deflateParams(zstream, vs->tight.compression,
++ if (vs->tight->compression != vs->zlib.level) {
++ if (deflateParams(zstream, vs->tight->compression,
+ Z_DEFAULT_STRATEGY) != Z_OK) {
+ return -1;
+ }
+- vs->zlib.level = vs->tight.compression;
++ vs->zlib.level = vs->tight->compression;
+ }
+
+ // reserve memory in output buffer
+diff --git a/ui/vnc-enc-zrle.c b/ui/vnc-enc-zrle.c
+index 7493a84..17fd28a 100644
+--- a/ui/vnc-enc-zrle.c
++++ b/ui/vnc-enc-zrle.c
+@@ -37,18 +37,18 @@ static const int bits_per_packed_pixel[] = {
+
+ static void vnc_zrle_start(VncState *vs)
+ {
+- buffer_reset(&vs->zrle.zrle);
++ buffer_reset(&vs->zrle->zrle);
+
+ /* make the output buffer be the zlib buffer, so we can compress it later */
+- vs->zrle.tmp = vs->output;
+- vs->output = vs->zrle.zrle;
++ vs->zrle->tmp = vs->output;
++ vs->output = vs->zrle->zrle;
+ }
+
+ static void vnc_zrle_stop(VncState *vs)
+ {
+ /* switch back to normal output/zlib buffers */
+- vs->zrle.zrle = vs->output;
+- vs->output = vs->zrle.tmp;
++ vs->zrle->zrle = vs->output;
++ vs->output = vs->zrle->tmp;
+ }
+
+ static void *zrle_convert_fb(VncState *vs, int x, int y, int w, int h,
+@@ -56,24 +56,24 @@ static void *zrle_convert_fb(VncState *vs, int x, int y, int w, int h,
+ {
+ Buffer tmp;
+
+- buffer_reset(&vs->zrle.fb);
+- buffer_reserve(&vs->zrle.fb, w * h * bpp + bpp);
++ buffer_reset(&vs->zrle->fb);
++ buffer_reserve(&vs->zrle->fb, w * h * bpp + bpp);
+
+ tmp = vs->output;
+- vs->output = vs->zrle.fb;
++ vs->output = vs->zrle->fb;
+
+ vnc_raw_send_framebuffer_update(vs, x, y, w, h);
+
+- vs->zrle.fb = vs->output;
++ vs->zrle->fb = vs->output;
+ vs->output = tmp;
+- return vs->zrle.fb.buffer;
++ return vs->zrle->fb.buffer;
+ }
+
+ static int zrle_compress_data(VncState *vs, int level)
+ {
+- z_streamp zstream = &vs->zrle.stream;
++ z_streamp zstream = &vs->zrle->stream;
+
+- buffer_reset(&vs->zrle.zlib);
++ buffer_reset(&vs->zrle->zlib);
+
+ if (zstream->opaque != vs) {
+ int err;
+@@ -93,13 +93,13 @@ static int zrle_compress_data(VncState *vs, int level)
+ }
+
+ /* reserve memory in output buffer */
+- buffer_reserve(&vs->zrle.zlib, vs->zrle.zrle.offset + 64);
++ buffer_reserve(&vs->zrle->zlib, vs->zrle->zrle.offset + 64);
+
+ /* set pointers */
+- zstream->next_in = vs->zrle.zrle.buffer;
+- zstream->avail_in = vs->zrle.zrle.offset;
+- zstream->next_out = vs->zrle.zlib.buffer + vs->zrle.zlib.offset;
+- zstream->avail_out = vs->zrle.zlib.capacity - vs->zrle.zlib.offset;
++ zstream->next_in = vs->zrle->zrle.buffer;
++ zstream->avail_in = vs->zrle->zrle.offset;
++ zstream->next_out = vs->zrle->zlib.buffer + vs->zrle->zlib.offset;
++ zstream->avail_out = vs->zrle->zlib.capacity - vs->zrle->zlib.offset;
+ zstream->data_type = Z_BINARY;
+
+ /* start encoding */
+@@ -108,8 +108,8 @@ static int zrle_compress_data(VncState *vs, int level)
+ return -1;
+ }
+
+- vs->zrle.zlib.offset = vs->zrle.zlib.capacity - zstream->avail_out;
+- return vs->zrle.zlib.offset;
++ vs->zrle->zlib.offset = vs->zrle->zlib.capacity - zstream->avail_out;
++ return vs->zrle->zlib.offset;
+ }
+
+ /* Try to work out whether to use RLE and/or a palette. We do this by
+@@ -259,14 +259,14 @@ static int zrle_send_framebuffer_update(VncState *vs, int x, int y,
+ size_t bytes;
+ int zywrle_level;
+
+- if (vs->zrle.type == VNC_ENCODING_ZYWRLE) {
+- if (!vs->vd->lossy || vs->tight.quality == (uint8_t)-1
+- || vs->tight.quality == 9) {
++ if (vs->zrle->type == VNC_ENCODING_ZYWRLE) {
++ if (!vs->vd->lossy || vs->tight->quality == (uint8_t)-1
++ || vs->tight->quality == 9) {
+ zywrle_level = 0;
+- vs->zrle.type = VNC_ENCODING_ZRLE;
+- } else if (vs->tight.quality < 3) {
++ vs->zrle->type = VNC_ENCODING_ZRLE;
++ } else if (vs->tight->quality < 3) {
+ zywrle_level = 3;
+- } else if (vs->tight.quality < 6) {
++ } else if (vs->tight->quality < 6) {
+ zywrle_level = 2;
+ } else {
+ zywrle_level = 1;
+@@ -337,30 +337,30 @@ static int zrle_send_framebuffer_update(VncState *vs, int x, int y,
+
+ vnc_zrle_stop(vs);
+ bytes = zrle_compress_data(vs, Z_DEFAULT_COMPRESSION);
+- vnc_framebuffer_update(vs, x, y, w, h, vs->zrle.type);
++ vnc_framebuffer_update(vs, x, y, w, h, vs->zrle->type);
+ vnc_write_u32(vs, bytes);
+- vnc_write(vs, vs->zrle.zlib.buffer, vs->zrle.zlib.offset);
++ vnc_write(vs, vs->zrle->zlib.buffer, vs->zrle->zlib.offset);
+ return 1;
+ }
+
+ int vnc_zrle_send_framebuffer_update(VncState *vs, int x, int y, int w, int h)
+ {
+- vs->zrle.type = VNC_ENCODING_ZRLE;
++ vs->zrle->type = VNC_ENCODING_ZRLE;
+ return zrle_send_framebuffer_update(vs, x, y, w, h);
+ }
+
+ int vnc_zywrle_send_framebuffer_update(VncState *vs, int x, int y, int w, int h)
+ {
+- vs->zrle.type = VNC_ENCODING_ZYWRLE;
++ vs->zrle->type = VNC_ENCODING_ZYWRLE;
+ return zrle_send_framebuffer_update(vs, x, y, w, h);
+ }
+
+ void vnc_zrle_clear(VncState *vs)
+ {
+- if (vs->zrle.stream.opaque) {
+- deflateEnd(&vs->zrle.stream);
++ if (vs->zrle->stream.opaque) {
++ deflateEnd(&vs->zrle->stream);
+ }
+- buffer_free(&vs->zrle.zrle);
+- buffer_free(&vs->zrle.fb);
+- buffer_free(&vs->zrle.zlib);
++ buffer_free(&vs->zrle->zrle);
++ buffer_free(&vs->zrle->fb);
++ buffer_free(&vs->zrle->zlib);
+ }
+diff --git a/ui/vnc-enc-zrle.inc.c b/ui/vnc-enc-zrle.inc.c
+index abf6b86..c107d8a 100644
+--- a/ui/vnc-enc-zrle.inc.c
++++ b/ui/vnc-enc-zrle.inc.c
+@@ -96,7 +96,7 @@ static void ZRLE_ENCODE(VncState *vs, int x, int y, int w, int h,
+ static void ZRLE_ENCODE_TILE(VncState *vs, ZRLE_PIXEL *data, int w, int h,
+ int zywrle_level)
+ {
+- VncPalette *palette = &vs->zrle.palette;
++ VncPalette *palette = &vs->zrle->palette;
+
+ int runs = 0;
+ int single_pixels = 0;
+diff --git a/ui/vnc.c b/ui/vnc.c
+index bc43c4c..87b8045 100644
+--- a/ui/vnc.c
++++ b/ui/vnc.c
+@@ -1307,6 +1307,8 @@ void vnc_disconnect_finish(VncState *vs)
+ object_unref(OBJECT(vs->sioc));
+ vs->sioc = NULL;
+ vs->magic = 0;
++ g_free(vs->zrle);
++ g_free(vs->tight);
+ g_free(vs);
+ }
+
+@@ -2058,8 +2060,8 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
+
+ vs->features = 0;
+ vs->vnc_encoding = 0;
+- vs->tight.compression = 9;
+- vs->tight.quality = -1; /* Lossless by default */
++ vs->tight->compression = 9;
++ vs->tight->quality = -1; /* Lossless by default */
+ vs->absolute = -1;
+
+ /*
+@@ -2127,11 +2129,11 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
+ vs->features |= VNC_FEATURE_LED_STATE_MASK;
+ break;
+ case VNC_ENCODING_COMPRESSLEVEL0 ... VNC_ENCODING_COMPRESSLEVEL0 + 9:
+- vs->tight.compression = (enc & 0x0F);
++ vs->tight->compression = (enc & 0x0F);
+ break;
+ case VNC_ENCODING_QUALITYLEVEL0 ... VNC_ENCODING_QUALITYLEVEL0 + 9:
+ if (vs->vd->lossy) {
+- vs->tight.quality = (enc & 0x0F);
++ vs->tight->quality = (enc & 0x0F);
+ }
+ break;
+ default:
+@@ -3034,6 +3036,8 @@ static void vnc_connect(VncDisplay *vd, QIOChannelSocket *sioc,
+ int i;
+
+ trace_vnc_client_connect(vs, sioc);
++ vs->zrle = g_new0(VncZrle, 1);
++ vs->tight = g_new0(VncTight, 1);
+ vs->magic = VNC_MAGIC;
+ vs->sioc = sioc;
+ object_ref(OBJECT(vs->sioc));
+@@ -3045,19 +3049,19 @@ static void vnc_connect(VncDisplay *vd, QIOChannelSocket *sioc,
+ buffer_init(&vs->output, "vnc-output/%p", sioc);
+ buffer_init(&vs->jobs_buffer, "vnc-jobs_buffer/%p", sioc);
+
+- buffer_init(&vs->tight.tight, "vnc-tight/%p", sioc);
+- buffer_init(&vs->tight.zlib, "vnc-tight-zlib/%p", sioc);
+- buffer_init(&vs->tight.gradient, "vnc-tight-gradient/%p", sioc);
++ buffer_init(&vs->tight->tight, "vnc-tight/%p", sioc);
++ buffer_init(&vs->tight->zlib, "vnc-tight-zlib/%p", sioc);
++ buffer_init(&vs->tight->gradient, "vnc-tight-gradient/%p", sioc);
+ #ifdef CONFIG_VNC_JPEG
+- buffer_init(&vs->tight.jpeg, "vnc-tight-jpeg/%p", sioc);
++ buffer_init(&vs->tight->jpeg, "vnc-tight-jpeg/%p", sioc);
+ #endif
+ #ifdef CONFIG_VNC_PNG
+- buffer_init(&vs->tight.png, "vnc-tight-png/%p", sioc);
++ buffer_init(&vs->tight->png, "vnc-tight-png/%p", sioc);
+ #endif
+ buffer_init(&vs->zlib.zlib, "vnc-zlib/%p", sioc);
+- buffer_init(&vs->zrle.zrle, "vnc-zrle/%p", sioc);
+- buffer_init(&vs->zrle.fb, "vnc-zrle-fb/%p", sioc);
+- buffer_init(&vs->zrle.zlib, "vnc-zrle-zlib/%p", sioc);
++ buffer_init(&vs->zrle->zrle, "vnc-zrle/%p", sioc);
++ buffer_init(&vs->zrle->fb, "vnc-zrle-fb/%p", sioc);
++ buffer_init(&vs->zrle->zlib, "vnc-zrle-zlib/%p", sioc);
+
+ if (skipauth) {
+ vs->auth = VNC_AUTH_NONE;
+diff --git a/ui/vnc.h b/ui/vnc.h
+index 8643860..fea79c2 100644
+--- a/ui/vnc.h
++++ b/ui/vnc.h
+@@ -338,10 +338,10 @@ struct VncState
+ /* Encoding specific, if you add something here, don't forget to
+ * update vnc_async_encoding_start()
+ */
+- VncTight tight;
++ VncTight *tight;
+ VncZlib zlib;
+ VncHextile hextile;
+- VncZrle zrle;
++ VncZrle *zrle;
+ VncZywrle zywrle;
+
+ Notifier mouse_mode_notifier;
+--
+1.8.3.1
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-10702.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-10702.patch
new file mode 100644
index 0000000000..21a3ceb30d
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-10702.patch
@@ -0,0 +1,52 @@
+From de0b1bae6461f67243282555475f88b2384a1eb9 Mon Sep 17 00:00:00 2001
+From: Vincent Dehors <vincent.dehors@smile.fr>
+Date: Thu, 23 Jan 2020 15:22:38 +0000
+Subject: [PATCH] target/arm: Fix PAuth sbox functions
+
+In the PAC computation, sbox was applied over wrong bits.
+As this is a 4-bit sbox, bit index should be incremented by 4 instead of 16.
+
+Test vector from QARMA paper (https://eprint.iacr.org/2016/444.pdf) was
+used to verify one computation of the pauth_computepac() function which
+uses sbox2.
+
+Launchpad: https://bugs.launchpad.net/bugs/1859713
+Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
+Signed-off-by: Vincent DEHORS <vincent.dehors@smile.fr>
+Signed-off-by: Adrien GRASSEIN <adrien.grassein@smile.fr>
+Message-id: 20200116230809.19078-2-richard.henderson@linaro.org
+Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
+Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
+
+Upstream-Status: Backport [https://git.qemu.org/?p=qemu.git;a=patch;h=de0b1bae6461f67243282555475f88b2384a1eb9]
+CVE: CVE-2020-10702
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ target/arm/pauth_helper.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/target/arm/pauth_helper.c b/target/arm/pauth_helper.c
+index d3194f2..0a5f41e 100644
+--- a/target/arm/pauth_helper.c
++++ b/target/arm/pauth_helper.c
+@@ -89,7 +89,7 @@ static uint64_t pac_sub(uint64_t i)
+ uint64_t o = 0;
+ int b;
+
+- for (b = 0; b < 64; b += 16) {
++ for (b = 0; b < 64; b += 4) {
+ o |= (uint64_t)sub[(i >> b) & 0xf] << b;
+ }
+ return o;
+@@ -104,7 +104,7 @@ static uint64_t pac_inv_sub(uint64_t i)
+ uint64_t o = 0;
+ int b;
+
+- for (b = 0; b < 64; b += 16) {
++ for (b = 0; b < 64; b += 4) {
+ o |= (uint64_t)inv_sub[(i >> b) & 0xf] << b;
+ }
+ return o;
+--
+1.8.3.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-10756.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-10756.patch
new file mode 100644
index 0000000000..306aef061b
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-10756.patch
@@ -0,0 +1,40 @@
+From c7ede54cbd2e2b25385325600958ba0124e31cc0 Mon Sep 17 00:00:00 2001
+From: Ralf Haferkamp <rhafer@suse.com>
+Date: Fri, 3 Jul 2020 14:51:16 +0200
+Subject: [PATCH] Drop bogus IPv6 messages
+
+Drop IPv6 message shorter than what's mentioned in the payload
+length header (+ the size of the IPv6 header). They're invalid an could
+lead to data leakage in icmp6_send_echoreply().
+
+CVE: CVE-2020-10756
+Upstream-Status: Backport
+https://gitlab.freedesktop.org/slirp/libslirp/-/commit/c7ede54cbd2e2b25385325600958ba0124e31cc0
+
+[SG: Based on libslirp commit c7ede54cbd2e2b25385325600958ba0124e31cc0 and adjusted context]
+Signed-off-by: Stefan Ghinea <stefan.ghinea@windriver.com>
+---
+ slirp/src/ip6_input.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/slirp/src/ip6_input.c b/slirp/src/ip6_input.c
+index d9d2b7e9..0f2b1785 100644
+--- a/slirp/src/ip6_input.c
++++ b/slirp/src/ip6_input.c
+@@ -49,6 +49,13 @@ void ip6_input(struct mbuf *m)
+ goto bad;
+ }
+
++ // Check if the message size is big enough to hold what's
++ // set in the payload length header. If not this is an invalid
++ // packet
++ if (m->m_len < ntohs(ip6->ip_pl) + sizeof(struct ip6)) {
++ goto bad;
++ }
++
+ /* check ip_ttl for a correct ICMP reply */
+ if (ip6->ip_hl == 0) {
+ icmp6_send_error(m, ICMP6_TIMXCEED, ICMP6_TIMXCEED_INTRANS);
+--
+2.17.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-11869.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-11869.patch
new file mode 100644
index 0000000000..ca7ffed934
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-11869.patch
@@ -0,0 +1,97 @@
+From ac2071c3791b67fc7af78b8ceb320c01ca1b5df7 Mon Sep 17 00:00:00 2001
+From: BALATON Zoltan <balaton@eik.bme.hu>
+Date: Mon, 6 Apr 2020 22:34:26 +0200
+Subject: [PATCH] ati-vga: Fix checks in ati_2d_blt() to avoid crash
+
+In some corner cases (that never happen during normal operation but a
+malicious guest could program wrong values) pixman functions were
+called with parameters that result in a crash. Fix this and add more
+checks to disallow such cases.
+
+Reported-by: Ziming Zhang <ezrakiez@gmail.com>
+Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
+Message-id: 20200406204029.19559747D5D@zero.eik.bme.hu
+Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
+
+Upstream-Status: Backport [https://git.qemu.org/?p=qemu.git;a=commit;h=ac2071c3791b67fc7af78b8ceb320c01ca1b5df7]
+CVE: CVE-2020-11869
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ hw/display/ati_2d.c | 37 ++++++++++++++++++++++++++-----------
+ 1 file changed, 26 insertions(+), 11 deletions(-)
+
+diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c
+index 42e8231..23a8ae0 100644
+--- a/hw/display/ati_2d.c
++++ b/hw/display/ati_2d.c
+@@ -53,12 +53,20 @@ void ati_2d_blt(ATIVGAState *s)
+ s->vga.vbe_start_addr, surface_data(ds), surface_stride(ds),
+ surface_bits_per_pixel(ds),
+ (s->regs.dp_mix & GMC_ROP3_MASK) >> 16);
+- int dst_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
+- s->regs.dst_x : s->regs.dst_x + 1 - s->regs.dst_width);
+- int dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
+- s->regs.dst_y : s->regs.dst_y + 1 - s->regs.dst_height);
++ unsigned dst_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
++ s->regs.dst_x : s->regs.dst_x + 1 - s->regs.dst_width);
++ unsigned dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
++ s->regs.dst_y : s->regs.dst_y + 1 - s->regs.dst_height);
+ int bpp = ati_bpp_from_datatype(s);
++ if (!bpp) {
++ qemu_log_mask(LOG_GUEST_ERROR, "Invalid bpp\n");
++ return;
++ }
+ int dst_stride = DEFAULT_CNTL ? s->regs.dst_pitch : s->regs.default_pitch;
++ if (!dst_stride) {
++ qemu_log_mask(LOG_GUEST_ERROR, "Zero dest pitch\n");
++ return;
++ }
+ uint8_t *dst_bits = s->vga.vram_ptr + (DEFAULT_CNTL ?
+ s->regs.dst_offset : s->regs.default_offset);
+
+@@ -82,12 +90,16 @@ void ati_2d_blt(ATIVGAState *s)
+ switch (s->regs.dp_mix & GMC_ROP3_MASK) {
+ case ROP3_SRCCOPY:
+ {
+- int src_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
+- s->regs.src_x : s->regs.src_x + 1 - s->regs.dst_width);
+- int src_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
+- s->regs.src_y : s->regs.src_y + 1 - s->regs.dst_height);
++ unsigned src_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
++ s->regs.src_x : s->regs.src_x + 1 - s->regs.dst_width);
++ unsigned src_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
++ s->regs.src_y : s->regs.src_y + 1 - s->regs.dst_height);
+ int src_stride = DEFAULT_CNTL ?
+ s->regs.src_pitch : s->regs.default_pitch;
++ if (!src_stride) {
++ qemu_log_mask(LOG_GUEST_ERROR, "Zero source pitch\n");
++ return;
++ }
+ uint8_t *src_bits = s->vga.vram_ptr + (DEFAULT_CNTL ?
+ s->regs.src_offset : s->regs.default_offset);
+
+@@ -137,8 +149,10 @@ void ati_2d_blt(ATIVGAState *s)
+ dst_y * surface_stride(ds),
+ s->regs.dst_height * surface_stride(ds));
+ }
+- s->regs.dst_x += s->regs.dst_width;
+- s->regs.dst_y += s->regs.dst_height;
++ s->regs.dst_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
++ dst_x + s->regs.dst_width : dst_x);
++ s->regs.dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
++ dst_y + s->regs.dst_height : dst_y);
+ break;
+ }
+ case ROP3_PATCOPY:
+@@ -179,7 +193,8 @@ void ati_2d_blt(ATIVGAState *s)
+ dst_y * surface_stride(ds),
+ s->regs.dst_height * surface_stride(ds));
+ }
+- s->regs.dst_y += s->regs.dst_height;
++ s->regs.dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
++ dst_y + s->regs.dst_height : dst_y);
+ break;
+ }
+ default:
+--
+1.8.3.1
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-13765.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-13765.patch
new file mode 100644
index 0000000000..9014ba0f13
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-13765.patch
@@ -0,0 +1,48 @@
+From e423455c4f23a1a828901c78fe6d03b7dde79319 Mon Sep 17 00:00:00 2001
+From: Thomas Huth <thuth@redhat.com>
+Date: Wed, 25 Sep 2019 14:16:43 +0200
+Subject: [PATCH] hw/core/loader: Fix possible crash in rom_copy()
+
+Both, "rom->addr" and "addr" are derived from the binary image
+that can be loaded with the "-kernel" paramer. The code in
+rom_copy() then calculates:
+
+ d = dest + (rom->addr - addr);
+
+and uses "d" as destination in a memcpy() some lines later. Now with
+bad kernel images, it is possible that rom->addr is smaller than addr,
+thus "rom->addr - addr" gets negative and the memcpy() then tries to
+copy contents from the image to a bad memory location. This could
+maybe be used to inject code from a kernel image into the QEMU binary,
+so we better fix it with an additional sanity check here.
+
+Cc: qemu-stable@nongnu.org
+Reported-by: Guangming Liu
+Buglink: https://bugs.launchpad.net/qemu/+bug/1844635
+Message-Id: <20190925130331.27825-1-thuth@redhat.com>
+Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
+Signed-off-by: Thomas Huth <thuth@redhat.com>
+
+Upstream-Status: Backport [https://git.qemu.org/?p=qemu.git;a=patch;h=e423455c4f23a1a828901c78fe6d03b7dde79319]
+CVE: CVE-2020-13765
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ hw/core/loader.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/hw/core/loader.c b/hw/core/loader.c
+index 0d60219..5099f27 100644
+--- a/hw/core/loader.c
++++ b/hw/core/loader.c
+@@ -1281,7 +1281,7 @@ int rom_copy(uint8_t *dest, hwaddr addr, size_t size)
+ if (rom->addr + rom->romsize < addr) {
+ continue;
+ }
+- if (rom->addr > end) {
++ if (rom->addr > end || rom->addr < addr) {
+ break;
+ }
+
+--
+1.8.3.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-14364.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-14364.patch
new file mode 100644
index 0000000000..a109ac08d6
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-14364.patch
@@ -0,0 +1,93 @@
+From b946434f2659a182afc17e155be6791ebfb302eb Mon Sep 17 00:00:00 2001
+From: Gerd Hoffmann <kraxel@redhat.com>
+Date: Tue, 25 Aug 2020 07:36:36 +0200
+Subject: [PATCH] usb: fix setup_len init (CVE-2020-14364)
+
+Store calculated setup_len in a local variable, verify it, and only
+write it to the struct (USBDevice->setup_len) in case it passed the
+sanity checks.
+
+This prevents other code (do_token_{in,out} functions specifically)
+from working with invalid USBDevice->setup_len values and overrunning
+the USBDevice->setup_buf[] buffer.
+
+Fixes: CVE-2020-14364
+Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
+Tested-by: Gonglei <arei.gonglei@huawei.com>
+Reviewed-by: Li Qiang <liq3ea@gmail.com>
+Message-id: 20200825053636.29648-1-kraxel@redhat.com
+
+Upstream-Status: Backport
+CVE: CVE-2020-14364
+[https://git.qemu.org/?p=qemu.git;a=patch;h=b946434f2659a182afc17e155be6791ebfb302eb]
+Signed-off-by: Li Wang <li.wang@windriver.com>
+---
+ hw/usb/core.c | 16 ++++++++++------
+ 1 file changed, 10 insertions(+), 6 deletions(-)
+
+diff --git a/hw/usb/core.c b/hw/usb/core.c
+index 5abd128..5234dcc 100644
+--- a/hw/usb/core.c
++++ b/hw/usb/core.c
+@@ -129,6 +129,7 @@ void usb_wakeup(USBEndpoint *ep, unsigned int stream)
+ static void do_token_setup(USBDevice *s, USBPacket *p)
+ {
+ int request, value, index;
++ unsigned int setup_len;
+
+ if (p->iov.size != 8) {
+ p->status = USB_RET_STALL;
+@@ -138,14 +139,15 @@ static void do_token_setup(USBDevice *s, USBPacket *p)
+ usb_packet_copy(p, s->setup_buf, p->iov.size);
+ s->setup_index = 0;
+ p->actual_length = 0;
+- s->setup_len = (s->setup_buf[7] << 8) | s->setup_buf[6];
+- if (s->setup_len > sizeof(s->data_buf)) {
++ setup_len = (s->setup_buf[7] << 8) | s->setup_buf[6];
++ if (setup_len > sizeof(s->data_buf)) {
+ fprintf(stderr,
+ "usb_generic_handle_packet: ctrl buffer too small (%d > %zu)\n",
+- s->setup_len, sizeof(s->data_buf));
++ setup_len, sizeof(s->data_buf));
+ p->status = USB_RET_STALL;
+ return;
+ }
++ s->setup_len = setup_len;
+
+ request = (s->setup_buf[0] << 8) | s->setup_buf[1];
+ value = (s->setup_buf[3] << 8) | s->setup_buf[2];
+@@ -259,26 +261,28 @@ static void do_token_out(USBDevice *s, USBPacket *p)
+ static void do_parameter(USBDevice *s, USBPacket *p)
+ {
+ int i, request, value, index;
++ unsigned int setup_len;
+
+ for (i = 0; i < 8; i++) {
+ s->setup_buf[i] = p->parameter >> (i*8);
+ }
+
+ s->setup_state = SETUP_STATE_PARAM;
+- s->setup_len = (s->setup_buf[7] << 8) | s->setup_buf[6];
+ s->setup_index = 0;
+
+ request = (s->setup_buf[0] << 8) | s->setup_buf[1];
+ value = (s->setup_buf[3] << 8) | s->setup_buf[2];
+ index = (s->setup_buf[5] << 8) | s->setup_buf[4];
+
+- if (s->setup_len > sizeof(s->data_buf)) {
++ setup_len = (s->setup_buf[7] << 8) | s->setup_buf[6];
++ if (setup_len > sizeof(s->data_buf)) {
+ fprintf(stderr,
+ "usb_generic_handle_packet: ctrl buffer too small (%d > %zu)\n",
+- s->setup_len, sizeof(s->data_buf));
++ setup_len, sizeof(s->data_buf));
+ p->status = USB_RET_STALL;
+ return;
+ }
++ s->setup_len = setup_len;
+
+ if (p->pid == USB_TOKEN_OUT) {
+ usb_packet_copy(p, s->data_buf, s->setup_len);
+--
+2.17.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-15863.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-15863.patch
new file mode 100644
index 0000000000..9927584d11
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-15863.patch
@@ -0,0 +1,64 @@
+From 5519724a13664b43e225ca05351c60b4468e4555 Mon Sep 17 00:00:00 2001
+From: Mauro Matteo Cascella <mcascell@redhat.com>
+Date: Fri, 10 Jul 2020 11:19:41 +0200
+Subject: [PATCH] hw/net/xgmac: Fix buffer overflow in xgmac_enet_send()
+
+A buffer overflow issue was reported by Mr. Ziming Zhang, CC'd here. It
+occurs while sending an Ethernet frame due to missing break statements
+and improper checking of the buffer size.
+
+Reported-by: Ziming Zhang <ezrakiez@gmail.com>
+Signed-off-by: Mauro Matteo Cascella <mcascell@redhat.com>
+Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
+Signed-off-by: Jason Wang <jasowang@redhat.com>
+
+CVE: CVE-2020-15863
+Upstream-Status: Backport
+[https://git.qemu.org/?p=qemu.git;a=commit;h=5519724a13664b43e225ca05351c60b4468e4555]
+Signed-off-by: Chee Yang Lee <chee.yang.lee@intel.com>
+Signed-off-by: Li Wang <li.wang@windriver.com>
+---
+ hw/net/xgmac.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c
+index f49df95..f496f7e 100644
+--- a/hw/net/xgmac.c
++++ b/hw/net/xgmac.c
+@@ -217,21 +217,31 @@ static void xgmac_enet_send(XgmacState *s)
+ }
+ len = (bd.buffer1_size & 0xfff) + (bd.buffer2_size & 0xfff);
+
++ /*
++ * FIXME: these cases of malformed tx descriptors (bad sizes)
++ * should probably be reported back to the guest somehow
++ * rather than simply silently stopping processing, but we
++ * don't know what the hardware does in this situation.
++ * This will only happen for buggy guests anyway.
++ */
+ if ((bd.buffer1_size & 0xfff) > 2048) {
+ DEBUGF_BRK("qemu:%s:ERROR...ERROR...ERROR... -- "
+ "xgmac buffer 1 len on send > 2048 (0x%x)\n",
+ __func__, bd.buffer1_size & 0xfff);
++ break;
+ }
+ if ((bd.buffer2_size & 0xfff) != 0) {
+ DEBUGF_BRK("qemu:%s:ERROR...ERROR...ERROR... -- "
+ "xgmac buffer 2 len on send != 0 (0x%x)\n",
+ __func__, bd.buffer2_size & 0xfff);
++ break;
+ }
+- if (len >= sizeof(frame)) {
++ if (frame_size + len >= sizeof(frame)) {
+ DEBUGF_BRK("qemu:%s: buffer overflow %d read into %zu "
+- "buffer\n" , __func__, len, sizeof(frame));
++ "buffer\n" , __func__, frame_size + len, sizeof(frame));
+ DEBUGF_BRK("qemu:%s: buffer1.size=%d; buffer2.size=%d\n",
+ __func__, bd.buffer1_size, bd.buffer2_size);
++ break;
+ }
+
+ cpu_physical_memory_read(bd.buffer1_addr, ptr, len);
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-16092.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-16092.patch
new file mode 100644
index 0000000000..8ce01e26ad
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-16092.patch
@@ -0,0 +1,49 @@
+From 035e69b063835a5fd23cacabd63690a3d84532a8 Mon Sep 17 00:00:00 2001
+From: Mauro Matteo Cascella <mcascell@redhat.com>
+Date: Sat, 1 Aug 2020 18:42:38 +0200
+Subject: [PATCH] hw/net/net_tx_pkt: fix assertion failure in
+ net_tx_pkt_add_raw_fragment()
+
+An assertion failure issue was found in the code that processes network
+packets
+while adding data fragments into the packet context. It could be abused
+by a
+malicious guest to abort the QEMU process on the host. This patch
+replaces the
+affected assert() with a conditional statement, returning false if the
+current
+data fragment exceeds max_raw_frags.
+
+Reported-by: Alexander Bulekov <alxndr@bu.edu>
+Reported-by: Ziming Zhang <ezrakiez@gmail.com>
+Reviewed-by: Dmitry Fleytman <dmitry.fleytman@gmail.com>
+Signed-off-by: Mauro Matteo Cascella <mcascell@redhat.com>
+Signed-off-by: Jason Wang <jasowang@redhat.com>
+
+Upstream-Status: Backport
+CVE: CVE-2020-16092
+[https://git.qemu.org/?p=qemu.git;a=commit;h=035e69b063835a5fd23cacabd63690a3d84532a8]
+Signed-off-by: Li Wang <li.wang@windriver.com>
+---
+ hw/net/net_tx_pkt.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/hw/net/net_tx_pkt.c b/hw/net/net_tx_pkt.c
+index 162f802..54d4c3b 100644
+--- a/hw/net/net_tx_pkt.c
++++ b/hw/net/net_tx_pkt.c
+@@ -379,7 +379,10 @@ bool net_tx_pkt_add_raw_fragment(struct NetTxPkt *pkt, hwaddr pa,
+ hwaddr mapped_len = 0;
+ struct iovec *ventry;
+ assert(pkt);
+- assert(pkt->max_raw_frags > pkt->raw_frags);
++
++ if (pkt->raw_frags >= pkt->max_raw_frags) {
++ return false;
++ }
+
+ if (!len) {
+ return true;
+--
+2.17.1
+
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-1711.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-1711.patch
new file mode 100644
index 0000000000..aa7bc82329
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-1711.patch
@@ -0,0 +1,64 @@
+From 693fd2acdf14dd86c0bf852610f1c2cca80a74dc Mon Sep 17 00:00:00 2001
+From: Felipe Franciosi <felipe@nutanix.com>
+Date: Thu, 23 Jan 2020 12:44:59 +0000
+Subject: [PATCH] iscsi: Cap block count from GET LBA STATUS (CVE-2020-1711)
+
+When querying an iSCSI server for the provisioning status of blocks (via
+GET LBA STATUS), Qemu only validates that the response descriptor zero's
+LBA matches the one requested. Given the SCSI spec allows servers to
+respond with the status of blocks beyond the end of the LUN, Qemu may
+have its heap corrupted by clearing/setting too many bits at the end of
+its allocmap for the LUN.
+
+A malicious guest in control of the iSCSI server could carefully program
+Qemu's heap (by selectively setting the bitmap) and then smash it.
+
+This limits the number of bits that iscsi_co_block_status() will try to
+update in the allocmap so it can't overflow the bitmap.
+
+Upstream-Status: Backport [https://git.qemu.org/?p=qemu.git;a=patch;h=693fd2acdf14dd86c0bf852610f1c2cca80a74dc]
+CVE: CVE-2020-1711
+
+Fixes: CVE-2020-1711
+Cc: qemu-stable@nongnu.org
+Signed-off-by: Felipe Franciosi <felipe@nutanix.com>
+Signed-off-by: Peter Turschmid <peter.turschm@nutanix.com>
+Signed-off-by: Raphael Norwitz <raphael.norwitz@nutanix.com>
+Signed-off-by: Kevin Wolf <kwolf@redhat.com>
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ block/iscsi.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/block/iscsi.c b/block/iscsi.c
+index 2aea7e3..cbd5729 100644
+--- a/block/iscsi.c
++++ b/block/iscsi.c
+@@ -701,7 +701,7 @@ static int coroutine_fn iscsi_co_block_status(BlockDriverState *bs,
+ struct scsi_get_lba_status *lbas = NULL;
+ struct scsi_lba_status_descriptor *lbasd = NULL;
+ struct IscsiTask iTask;
+- uint64_t lba;
++ uint64_t lba, max_bytes;
+ int ret;
+
+ iscsi_co_init_iscsitask(iscsilun, &iTask);
+@@ -721,6 +721,7 @@ static int coroutine_fn iscsi_co_block_status(BlockDriverState *bs,
+ }
+
+ lba = offset / iscsilun->block_size;
++ max_bytes = (iscsilun->num_blocks - lba) * iscsilun->block_size;
+
+ qemu_mutex_lock(&iscsilun->mutex);
+ retry:
+@@ -764,7 +765,7 @@ retry:
+ goto out_unlock;
+ }
+
+- *pnum = (int64_t) lbasd->num_blocks * iscsilun->block_size;
++ *pnum = MIN((int64_t) lbasd->num_blocks * iscsilun->block_size, max_bytes);
+
+ if (lbasd->provisioning == SCSI_PROVISIONING_TYPE_DEALLOCATED ||
+ lbasd->provisioning == SCSI_PROVISIONING_TYPE_ANCHORED) {
+--
+1.8.3.1
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-7039-1.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-7039-1.patch
new file mode 100644
index 0000000000..df6bca6db6
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-7039-1.patch
@@ -0,0 +1,44 @@
+From b2663d527a1992ba98c0266458b21ada3b9d0d2e Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Thu, 27 Feb 2020 12:07:35 +0800
+Subject: [PATCH] tcp_emu: Fix oob access
+
+The main loop only checks for one available byte, while we sometimes
+need two bytes.
+
+CVE: CVE-2020-7039
+Upstream-Status: Backport
+[https://gitlab.freedesktop.org/slirp/libslirp/commit/2655fffed7a9e765bcb4701dd876e9dab975f289]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ slirp/src/tcp_subr.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/slirp/src/tcp_subr.c b/slirp/src/tcp_subr.c
+index d6dd133..4bea2d4 100644
+--- a/slirp/src/tcp_subr.c
++++ b/slirp/src/tcp_subr.c
+@@ -886,6 +886,8 @@ int tcp_emu(struct socket *so, struct mbuf *m)
+ break;
+
+ case 5:
++ if (bptr == m->m_data + m->m_len - 1)
++ return 1; /* We need two bytes */
+ /*
+ * The difference between versions 1.0 and
+ * 2.0 is here. For future versions of
+@@ -901,6 +903,10 @@ int tcp_emu(struct socket *so, struct mbuf *m)
+ /* This is the field containing the port
+ * number that RA-player is listening to.
+ */
++
++ if (bptr == m->m_data + m->m_len - 1)
++ return 1; /* We need two bytes */
++
+ lport = (((uint8_t *)bptr)[0] << 8) + ((uint8_t *)bptr)[1];
+ if (lport < 6970)
+ lport += 256; /* don't know why */
+--
+2.7.4
+
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-7039-2.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-7039-2.patch
new file mode 100644
index 0000000000..4a00fa2afd
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-7039-2.patch
@@ -0,0 +1,59 @@
+From 8f67e76e4148e37f3d8d2bcbdee7417fdedb7669 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Thu, 27 Feb 2020 12:10:34 +0800
+Subject: [PATCH] slirp: use correct size while emulating commands
+
+While emulating services in tcp_emu(), it uses 'mbuf' size
+'m->m_size' to write commands via snprintf(3). Use M_FREEROOM(m)
+size to avoid possible OOB access.
+Signed-off-by: default avatarPrasad J Pandit <pjp@fedoraproject.org>
+Signed-off-by: Samuel Thibault's avatarSamuel Thibault
+<samuel.thibault@ens-lyon.org>
+Message-Id: <20200109094228.79764-3-ppandit@redhat.com>
+
+CVE: CVE-2020-7039
+Upstream-Status: Backport
+[https://gitlab.freedesktop.org/slirp/libslirp/commit/82ebe9c370a0e2970fb5695aa19aa5214a6a1c80]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ slirp/src/tcp_subr.c | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/slirp/src/tcp_subr.c b/slirp/src/tcp_subr.c
+index 4bea2d4..e8ed4ef 100644
+--- a/slirp/src/tcp_subr.c
++++ b/slirp/src/tcp_subr.c
+@@ -696,7 +696,7 @@ int tcp_emu(struct socket *so, struct mbuf *m)
+ n4 = (laddr & 0xff);
+
+ m->m_len = bptr - m->m_data; /* Adjust length */
+- m->m_len += snprintf(bptr, m->m_size - m->m_len,
++ m->m_len += snprintf(bptr, M_FREEROOM(m),
+ "ORT %d,%d,%d,%d,%d,%d\r\n%s", n1, n2, n3, n4,
+ n5, n6, x == 7 ? buff : "");
+ return 1;
+@@ -731,8 +731,7 @@ int tcp_emu(struct socket *so, struct mbuf *m)
+ n4 = (laddr & 0xff);
+
+ m->m_len = bptr - m->m_data; /* Adjust length */
+- m->m_len +=
+- snprintf(bptr, m->m_size - m->m_len,
++ m->m_len += snprintf(bptr, M_FREEROOM(m),
+ "27 Entering Passive Mode (%d,%d,%d,%d,%d,%d)\r\n%s",
+ n1, n2, n3, n4, n5, n6, x == 7 ? buff : "");
+
+@@ -758,8 +757,8 @@ int tcp_emu(struct socket *so, struct mbuf *m)
+ if (m->m_data[m->m_len - 1] == '\0' && lport != 0 &&
+ (so = tcp_listen(slirp, INADDR_ANY, 0, so->so_laddr.s_addr,
+ htons(lport), SS_FACCEPTONCE)) != NULL)
+- m->m_len =
+- snprintf(m->m_data, m->m_size, "%d", ntohs(so->so_fport)) + 1;
++ m->m_len = snprintf(m->m_data, M_ROOM(m),
++ "%d", ntohs(so->so_fport)) + 1;
+ return 1;
+
+ case EMU_IRC:
+--
+2.7.4
+
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-7039-3.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-7039-3.patch
new file mode 100644
index 0000000000..70ce480d80
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-7039-3.patch
@@ -0,0 +1,64 @@
+From 0b03959b72036afce151783720d9e54988cf76ef Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Thu, 27 Feb 2020 12:15:04 +0800
+Subject: [PATCH] slirp: use correct size while emulating IRC commands
+
+While emulating IRC DCC commands, tcp_emu() uses 'mbuf' size
+'m->m_size' to write DCC commands via snprintf(3). This may
+lead to OOB write access, because 'bptr' points somewhere in
+the middle of 'mbuf' buffer, not at the start. Use M_FREEROOM(m)
+size to avoid OOB access.
+Reported-by: default avatarVishnu Dev TJ <vishnudevtj@gmail.com>
+Signed-off-by: default avatarPrasad J Pandit <pjp@fedoraproject.org>
+Reviewed-by: Samuel Thibault's avatarSamuel Thibault
+<samuel.thibault@ens-lyon.org>
+Message-Id: <20200109094228.79764-2-ppandit@redhat.com>
+
+CVE: CVE-2020-7039
+Upstream-Status: Backport
+[https://gitlab.freedesktop.org/slirp/libslirp/commit/ce131029d6d4a405cb7d3ac6716d03e58fb4a5d9]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ slirp/src/tcp_subr.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/slirp/src/tcp_subr.c b/slirp/src/tcp_subr.c
+index e8ed4ef..3a4a8ee 100644
+--- a/slirp/src/tcp_subr.c
++++ b/slirp/src/tcp_subr.c
+@@ -777,7 +777,8 @@ int tcp_emu(struct socket *so, struct mbuf *m)
+ return 1;
+ }
+ m->m_len = bptr - m->m_data; /* Adjust length */
+- m->m_len += snprintf(bptr, m->m_size, "DCC CHAT chat %lu %u%c\n",
++ m->m_len += snprintf(bptr, M_FREEROOM(m),
++ "DCC CHAT chat %lu %u%c\n",
+ (unsigned long)ntohl(so->so_faddr.s_addr),
+ ntohs(so->so_fport), 1);
+ } else if (sscanf(bptr, "DCC SEND %256s %u %u %u", buff, &laddr, &lport,
+@@ -787,8 +788,8 @@ int tcp_emu(struct socket *so, struct mbuf *m)
+ return 1;
+ }
+ m->m_len = bptr - m->m_data; /* Adjust length */
+- m->m_len +=
+- snprintf(bptr, m->m_size, "DCC SEND %s %lu %u %u%c\n", buff,
++ m->m_len += snprintf(bptr, M_FREEROOM(m),
++ "DCC SEND %s %lu %u %u%c\n", buff,
+ (unsigned long)ntohl(so->so_faddr.s_addr),
+ ntohs(so->so_fport), n1, 1);
+ } else if (sscanf(bptr, "DCC MOVE %256s %u %u %u", buff, &laddr, &lport,
+@@ -798,8 +799,8 @@ int tcp_emu(struct socket *so, struct mbuf *m)
+ return 1;
+ }
+ m->m_len = bptr - m->m_data; /* Adjust length */
+- m->m_len +=
+- snprintf(bptr, m->m_size, "DCC MOVE %s %lu %u %u%c\n", buff,
++ m->m_len += snprintf(bptr, M_FREEROOM(m),
++ "DCC MOVE %s %lu %u %u%c\n", buff,
+ (unsigned long)ntohl(so->so_faddr.s_addr),
+ ntohs(so->so_fport), n1, 1);
+ }
+--
+2.7.4
+
diff --git a/meta/recipes-devtools/qemu/qemu/CVE-2020-7211.patch b/meta/recipes-devtools/qemu/qemu/CVE-2020-7211.patch
new file mode 100644
index 0000000000..11be4c92e7
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/CVE-2020-7211.patch
@@ -0,0 +1,46 @@
+From 14ec36e107a8c9af7d0a80c3571fe39b291ff1d4 Mon Sep 17 00:00:00 2001
+From: Prasad J Pandit <pjp@fedoraproject.org>
+Date: Mon, 13 Jan 2020 17:44:31 +0530
+Subject: [PATCH] slirp: tftp: restrict relative path access
+
+tftp restricts relative or directory path access on Linux systems.
+Apply same restrictions on Windows systems too. It helps to avoid
+directory traversal issue.
+
+Fixes: https://bugs.launchpad.net/qemu/+bug/1812451
+Reported-by: Peter Maydell <peter.maydell@linaro.org>
+Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
+Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Message-Id: <20200113121431.156708-1-ppandit@redhat.com>
+
+Upstream-Status: Backport [https://gitlab.freedesktop.org/slirp/libslirp/-/commit/14ec36e107a8c9af7d0a80c3571fe39b291ff1d4.patch]
+CVE: CVE-2020-7211
+Signed-off-by: Chee Yang Lee <chee.yang.lee@intel.com>
+
+---
+ slirp/src/tftp.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/slirp/src/tftp.c b/slirp/src/tftp.c
+index 093c2e0..e52e71b 100644
+--- a/slirp/src/tftp.c
++++ b/slirp/src/tftp.c
+@@ -344,8 +344,13 @@ static void tftp_handle_rrq(Slirp *slirp, struct sockaddr_storage *srcsas,
+ k += 6; /* skipping octet */
+
+ /* do sanity checks on the filename */
+- if (!strncmp(req_fname, "../", 3) ||
+- req_fname[strlen(req_fname) - 1] == '/' || strstr(req_fname, "/../")) {
++ if (
++#ifdef G_OS_WIN32
++ strstr(req_fname, "..\\") ||
++ req_fname[strlen(req_fname) - 1] == '\\' ||
++#endif
++ strstr(req_fname, "../") ||
++ req_fname[strlen(req_fname) - 1] == '/') {
+ tftp_send_error(spt, 2, "Access violation", tp);
+ return;
+ }
+--
+2.24.1
+
diff --git a/meta/recipes-devtools/rsync/rsync_3.1.3.bb b/meta/recipes-devtools/rsync/rsync_3.1.3.bb
index ffb1d061c0..152ff02a25 100644
--- a/meta/recipes-devtools/rsync/rsync_3.1.3.bb
+++ b/meta/recipes-devtools/rsync/rsync_3.1.3.bb
@@ -20,6 +20,9 @@ SRC_URI = "https://download.samba.org/pub/${BPN}/src/${BP}.tar.gz \
SRC_URI[md5sum] = "1581a588fde9d89f6bc6201e8129afaf"
SRC_URI[sha256sum] = "55cc554efec5fdaad70de921cd5a5eeb6c29a95524c715f3bbf849235b0800c0"
+# -16548 required for v3.1.3pre1. Already in v3.1.3.
+CVE_CHECK_WHITELIST += " CVE-2017-16548 "
+
inherit autotools
PACKAGECONFIG ??= "acl attr \
diff --git a/meta/recipes-devtools/ruby/ruby/fix-CVE-2019-16254.patch b/meta/recipes-devtools/ruby/ruby/fix-CVE-2019-16254.patch
new file mode 100644
index 0000000000..704c850c50
--- /dev/null
+++ b/meta/recipes-devtools/ruby/ruby/fix-CVE-2019-16254.patch
@@ -0,0 +1,106 @@
+From 18d5289b4579822e391b3f5c16541e6552e9f06c Mon Sep 17 00:00:00 2001
+From: Yusuke Endoh <mame@ruby-lang.org>
+Date: Tue, 1 Oct 2019 12:29:18 +0900
+Subject: [PATCH] WEBrick: prevent response splitting and header injection
+
+This is a follow up to d9d4a28f1cdd05a0e8dabb36d747d40bbcc30f16.
+The commit prevented CRLR, but did not address an isolated CR or an
+isolated LF.
+
+Upstream-Status: Backport https://github.com/ruby/ruby/commit/3ce238b5f9795581eb84114dcfbdf4aa086bfecc
+CVE: CVE-2019-16254
+
+Co-Authored-By: NARUSE, Yui <naruse@airemix.jp>
+Signed-off-by: Rahul Chauhan <rahulchauhankitps@gmail.com>
+---
+ lib/webrick/httpresponse.rb | 3 ++-
+ test/webrick/test_httpresponse.rb | 46 +++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 46 insertions(+), 3 deletions(-)
+
+diff --git a/lib/webrick/httpresponse.rb b/lib/webrick/httpresponse.rb
+index 6d77692..d26324c 100644
+--- a/lib/webrick/httpresponse.rb
++++ b/lib/webrick/httpresponse.rb
+@@ -367,7 +367,8 @@ def set_error(ex, backtrace=false)
+ private
+
+ def check_header(header_value)
+- if header_value =~ /\r\n/
++ header_value = header_value.to_s
++ if /[\r\n]/ =~ header_value
+ raise InvalidHeader
+ else
+ header_value
+diff --git a/test/webrick/test_httpresponse.rb b/test/webrick/test_httpresponse.rb
+index 6263e0a..24a6968 100644
+--- a/test/webrick/test_httpresponse.rb
++++ b/test/webrick/test_httpresponse.rb
+@@ -29,7 +29,7 @@ def setup
+ @res.keep_alive = true
+ end
+
+- def test_prevent_response_splitting_headers
++ def test_prevent_response_splitting_headers_crlf
+ res['X-header'] = "malicious\r\nCookie: hack"
+ io = StringIO.new
+ res.send_response io
+@@ -39,7 +39,7 @@ def test_prevent_response_splitting_headers
+ refute_match 'hack', io.string
+ end
+
+- def test_prevent_response_splitting_cookie_headers
++ def test_prevent_response_splitting_cookie_headers_crlf
+ user_input = "malicious\r\nCookie: hack"
+ res.cookies << WEBrick::Cookie.new('author', user_input)
+ io = StringIO.new
+@@ -50,6 +50,48 @@ def test_prevent_response_splitting_cookie_headers
+ refute_match 'hack', io.string
+ end
+
++ def test_prevent_response_splitting_headers_cr
++ res['X-header'] = "malicious\rCookie: hack"
++ io = StringIO.new
++ res.send_response io
++ io.rewind
++ res = Net::HTTPResponse.read_new(Net::BufferedIO.new(io))
++ assert_equal '500', res.code
++ refute_match 'hack', io.string
++ end
++
++ def test_prevent_response_splitting_cookie_headers_cr
++ user_input = "malicious\rCookie: hack"
++ res.cookies << WEBrick::Cookie.new('author', user_input)
++ io = StringIO.new
++ res.send_response io
++ io.rewind
++ res = Net::HTTPResponse.read_new(Net::BufferedIO.new(io))
++ assert_equal '500', res.code
++ refute_match 'hack', io.string
++ end
++
++ def test_prevent_response_splitting_headers_lf
++ res['X-header'] = "malicious\nCookie: hack"
++ io = StringIO.new
++ res.send_response io
++ io.rewind
++ res = Net::HTTPResponse.read_new(Net::BufferedIO.new(io))
++ assert_equal '500', res.code
++ refute_match 'hack', io.string
++ end
++
++ def test_prevent_response_splitting_cookie_headers_lf
++ user_input = "malicious\nCookie: hack"
++ res.cookies << WEBrick::Cookie.new('author', user_input)
++ io = StringIO.new
++ res.send_response io
++ io.rewind
++ res = Net::HTTPResponse.read_new(Net::BufferedIO.new(io))
++ assert_equal '500', res.code
++ refute_match 'hack', io.string
++ end
++
+ def test_304_does_not_log_warning
+ res.status = 304
+ res.setup_header
+--
+2.7.4
diff --git a/meta/recipes-devtools/ruby/ruby_2.5.5.bb b/meta/recipes-devtools/ruby/ruby_2.5.5.bb
index 223b0371eb..58bb97f4bd 100644
--- a/meta/recipes-devtools/ruby/ruby_2.5.5.bb
+++ b/meta/recipes-devtools/ruby/ruby_2.5.5.bb
@@ -3,6 +3,7 @@ require ruby.inc
SRC_URI += " \
file://0001-configure.ac-check-finite-isinf-isnan-as-macros-firs.patch \
file://run-ptest \
+ file://fix-CVE-2019-16254.patch \
"
SRC_URI[md5sum] = "7e156fb526b8f4bb1b30a3dd8a7ce400"
diff --git a/meta/recipes-devtools/strace/strace/Makefile-ptest.patch b/meta/recipes-devtools/strace/strace/Makefile-ptest.patch
index 08fa5c53b8..36e93a2dcf 100644
--- a/meta/recipes-devtools/strace/strace/Makefile-ptest.patch
+++ b/meta/recipes-devtools/strace/strace/Makefile-ptest.patch
@@ -44,6 +44,6 @@ index 825c989..4623c48 100644
+ done
+ for file in $(EXTRA_DIST); do \
+ install $(srcdir)/$$file $(DESTDIR)/$(TESTDIR); \
-+ sed -i -e 's/$${srcdir=.}/./g' $(DESTDIR)/$(TESTDIR)/$$file; \
++ #sed -i -e 's/$${srcdir=.}/./g' $(DESTDIR)/$(TESTDIR)/$$file; \
+ done
+ for i in net scm_rights-fd rt_sigaction; do sed -i -e 's/$$srcdir/./g' $(DESTDIR)/$(TESTDIR)/$$i.test; done
diff --git a/meta/recipes-devtools/strace/strace/run-ptest b/meta/recipes-devtools/strace/strace/run-ptest
index 2fed984e90..4660207220 100755
--- a/meta/recipes-devtools/strace/strace/run-ptest
+++ b/meta/recipes-devtools/strace/strace/run-ptest
@@ -1,3 +1,6 @@
#!/bin/sh
-export TIMEOUT_DURATION=30
-make -B -C tests -k test-suite.log
+export TIMEOUT_DURATION=120
+chown nobody tests
+chown nobody tests/*
+chown nobody ../ptest
+su nobody -c "make -B -C tests -k test-suite.log"
diff --git a/meta/recipes-extended/cpio/cpio-2.12/CVE-2019-14866.patch b/meta/recipes-extended/cpio/cpio-2.12/CVE-2019-14866.patch
new file mode 100644
index 0000000000..5d587fc832
--- /dev/null
+++ b/meta/recipes-extended/cpio/cpio-2.12/CVE-2019-14866.patch
@@ -0,0 +1,316 @@
+CVE: CVE-2019-14866
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/cpio.git/commit/?id=7554e3e42cd72f6f8304410c47fe6f8918e9bfd7]
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+
+From a052401293e45a13cded5959b258204dae6d0af5 Mon Sep 17 00:00:00 2001
+From: Sergey Poznyakoff <gray@gnu.org>
+Date: Sun, 3 Nov 2019 23:59:39 +0200
+Subject: [PATCH] Fix CVE-2019-14866
+
+* src/copyout.c (to_ascii): Additional argument nul controls whether
+to add the terminating nul character.
+(field_width_error): Improve diagnostics: print the actual and the
+maximum allowed field value.
+* src/extern.h (to_ascii, field_width_error): New prototypes.
+* src/tar.c (to_oct): Remove.
+(to_oct_or_error): New function.
+(TO_OCT): New macro.
+(write_out_tar_header): Use TO_OCT and to_ascii. Return 0 on
+success, 1 on error.
+---
+ src/copyout.c | 49 ++++++++++++++++++++++--------------
+ src/extern.h | 15 +++++++++--
+ src/tar.c | 69 ++++++++++++++++++++++++---------------------------
+ 3 files changed, 75 insertions(+), 58 deletions(-)
+
+diff --git a/src/copyout.c b/src/copyout.c
+index 1f0987a..1ae5477 100644
+--- a/src/copyout.c
++++ b/src/copyout.c
+@@ -269,26 +269,32 @@ writeout_final_defers (int out_des)
+ so it should be moved to paxutils too.
+ Allowed values for logbase are: 1 (binary), 2, 3 (octal), 4 (hex) */
+ int
+-to_ascii (char *where, uintmax_t v, size_t digits, unsigned logbase)
++to_ascii (char *where, uintmax_t v, size_t digits, unsigned logbase, bool nul)
+ {
+ static char codetab[] = "0123456789ABCDEF";
+- int i = digits;
+-
+- do
++
++ if (nul)
++ where[--digits] = 0;
++ while (digits > 0)
+ {
+- where[--i] = codetab[(v & ((1 << logbase) - 1))];
++ where[--digits] = codetab[(v & ((1 << logbase) - 1))];
+ v >>= logbase;
+ }
+- while (i);
+
+ return v != 0;
+ }
+
+-static void
+-field_width_error (const char *filename, const char *fieldname)
++void
++field_width_error (const char *filename, const char *fieldname,
++ uintmax_t value, size_t width, bool nul)
+ {
+- error (0, 0, _("%s: field width not sufficient for storing %s"),
+- filename, fieldname);
++ char valbuf[UINTMAX_STRSIZE_BOUND + 1];
++ char maxbuf[UINTMAX_STRSIZE_BOUND + 1];
++ error (0, 0, _("%s: value %s %s out of allowed range 0..%s"),
++ filename, fieldname,
++ STRINGIFY_BIGINT (value, valbuf),
++ STRINGIFY_BIGINT (MAX_VAL_WITH_DIGITS (width - nul, LG_8),
++ maxbuf));
+ }
+
+ static void
+@@ -303,7 +309,7 @@ to_ascii_or_warn (char *where, uintmax_t n, size_t digits,
+ unsigned logbase,
+ const char *filename, const char *fieldname)
+ {
+- if (to_ascii (where, n, digits, logbase))
++ if (to_ascii (where, n, digits, logbase, false))
+ field_width_warning (filename, fieldname);
+ }
+
+@@ -312,9 +318,9 @@ to_ascii_or_error (char *where, uintmax_t n, size_t digits,
+ unsigned logbase,
+ const char *filename, const char *fieldname)
+ {
+- if (to_ascii (where, n, digits, logbase))
++ if (to_ascii (where, n, digits, logbase, false))
+ {
+- field_width_error (filename, fieldname);
++ field_width_error (filename, fieldname, n, digits, false);
+ return 1;
+ }
+ return 0;
+@@ -371,7 +377,7 @@ write_out_new_ascii_header (const char *magic_string,
+ _("name size")))
+ return 1;
+ p += 8;
+- to_ascii (p, file_hdr->c_chksum & 0xffffffff, 8, LG_16);
++ to_ascii (p, file_hdr->c_chksum & 0xffffffff, 8, LG_16, false);
+
+ tape_buffered_write (ascii_header, out_des, sizeof ascii_header);
+
+@@ -388,7 +394,7 @@ write_out_old_ascii_header (dev_t dev, dev_t rdev,
+ char ascii_header[76];
+ char *p = ascii_header;
+
+- to_ascii (p, file_hdr->c_magic, 6, LG_8);
++ to_ascii (p, file_hdr->c_magic, 6, LG_8, false);
+ p += 6;
+ to_ascii_or_warn (p, dev, 6, LG_8, file_hdr->c_name, _("device number"));
+ p += 6;
+@@ -492,7 +498,10 @@ write_out_binary_header (dev_t rdev,
+ short_hdr.c_namesize = file_hdr->c_namesize & 0xFFFF;
+ if (short_hdr.c_namesize != file_hdr->c_namesize)
+ {
+- field_width_error (file_hdr->c_name, _("name size"));
++ char maxbuf[UINTMAX_STRSIZE_BOUND + 1];
++ error (0, 0, _("%s: value %s %s out of allowed range 0..%u"),
++ file_hdr->c_name, _("name size"),
++ STRINGIFY_BIGINT (file_hdr->c_namesize, maxbuf), 0xFFFFu);
+ return 1;
+ }
+
+@@ -502,7 +511,10 @@ write_out_binary_header (dev_t rdev,
+ if (((off_t)short_hdr.c_filesizes[0] << 16) + short_hdr.c_filesizes[1]
+ != file_hdr->c_filesize)
+ {
+- field_width_error (file_hdr->c_name, _("file size"));
++ char maxbuf[UINTMAX_STRSIZE_BOUND + 1];
++ error (0, 0, _("%s: value %s %s out of allowed range 0..%lu"),
++ file_hdr->c_name, _("file size"),
++ STRINGIFY_BIGINT (file_hdr->c_namesize, maxbuf), 0xFFFFFFFFlu);
+ return 1;
+ }
+
+@@ -552,8 +564,7 @@ write_out_header (struct cpio_file_stat *file_hdr, int out_des)
+ error (0, 0, _("%s: file name too long"), file_hdr->c_name);
+ return 1;
+ }
+- write_out_tar_header (file_hdr, out_des); /* FIXME: No error checking */
+- return 0;
++ return write_out_tar_header (file_hdr, out_des);
+
+ case arf_binary:
+ return write_out_binary_header (makedev (file_hdr->c_rdev_maj,
+diff --git a/src/extern.h b/src/extern.h
+index e27d662..f9ef56a 100644
+--- a/src/extern.h
++++ b/src/extern.h
+@@ -117,6 +117,10 @@ void print_name_with_quoting (char *p);
+ /* copyout.c */
+ int write_out_header (struct cpio_file_stat *file_hdr, int out_des);
+ void process_copy_out (void);
++int to_ascii (char *where, uintmax_t v, size_t digits, unsigned logbase,
++ bool nul);
++void field_width_error (const char *filename, const char *fieldname,
++ uintmax_t value, size_t width, bool nul);
+
+ /* copypass.c */
+ void process_copy_pass (void);
+@@ -145,7 +149,7 @@ int make_path (char *argpath, uid_t owner, gid_t group,
+ const char *verbose_fmt_string);
+
+ /* tar.c */
+-void write_out_tar_header (struct cpio_file_stat *file_hdr, int out_des);
++int write_out_tar_header (struct cpio_file_stat *file_hdr, int out_des);
+ int null_block (long *block, int size);
+ void read_in_tar_header (struct cpio_file_stat *file_hdr, int in_des);
+ int otoa (char *s, unsigned long *n);
+@@ -204,9 +208,16 @@ void cpio_safer_name_suffix (char *name, bool link_target,
+ int cpio_create_dir (struct cpio_file_stat *file_hdr, int existing_dir);
+ void change_dir (void);
+
+-/* FIXME: These two defines should be defined in paxutils */
++/* FIXME: The following three should be defined in paxutils */
+ #define LG_8 3
+ #define LG_16 4
++/* The maximum uintmax_t value that can be represented with DIGITS digits,
++ assuming that each digit is BITS_PER_DIGIT wide. */
++#define MAX_VAL_WITH_DIGITS(digits, bits_per_digit) \
++ ((digits) * (bits_per_digit) < sizeof (uintmax_t) * CHAR_BIT \
++ ? ((uintmax_t) 1 << ((digits) * (bits_per_digit))) - 1 \
++ : (uintmax_t) -1)
++
+
+ uintmax_t from_ascii (char const *where, size_t digs, unsigned logbase);
+
+diff --git a/src/tar.c b/src/tar.c
+index a2ce171..ef58027 100644
+--- a/src/tar.c
++++ b/src/tar.c
+@@ -79,36 +79,17 @@ stash_tar_filename (char *prefix, char *filename)
+ return hold_tar_filename;
+ }
+
+-/* Convert a number into a string of octal digits.
+- Convert long VALUE into a DIGITS-digit field at WHERE,
+- including a trailing space and room for a NUL. DIGITS==3 means
+- 1 digit, a space, and room for a NUL.
+-
+- We assume the trailing NUL is already there and don't fill it in.
+- This fact is used by start_header and finish_header, so don't change it!
+-
+- This is be equivalent to:
+- sprintf (where, "%*lo ", digits - 2, value);
+- except that sprintf fills in the trailing NUL and we don't. */
+-
+-static void
+-to_oct (register long value, register int digits, register char *where)
++static int
++to_oct_or_error (uintmax_t value, size_t digits, char *where, char const *field,
++ char const *file)
+ {
+- --digits; /* Leave the trailing NUL slot alone. */
+-
+- /* Produce the digits -- at least one. */
+- do
++ if (to_ascii (where, value, digits, LG_8, true))
+ {
+- where[--digits] = '0' + (char) (value & 7); /* One octal digit. */
+- value >>= 3;
++ field_width_error (file, field, value, digits, true);
++ return 1;
+ }
+- while (digits > 0 && value != 0);
+-
+- /* Add leading zeroes, if necessary. */
+- while (digits > 0)
+- where[--digits] = '0';
++ return 0;
+ }
+-
+
+
+ /* Compute and return a checksum for TAR_HDR,
+@@ -134,10 +115,22 @@ tar_checksum (struct tar_header *tar_hdr)
+ return sum;
+ }
+
++#define TO_OCT(file_hdr, c_fld, digits, tar_hdr, tar_field) \
++ do \
++ { \
++ if (to_oct_or_error (file_hdr -> c_fld, \
++ digits, \
++ tar_hdr -> tar_field, \
++ #tar_field, \
++ file_hdr->c_name)) \
++ return 1; \
++ } \
++ while (0)
++
+ /* Write out header FILE_HDR, including the file name, to file
+ descriptor OUT_DES. */
+
+-void
++int
+ write_out_tar_header (struct cpio_file_stat *file_hdr, int out_des)
+ {
+ int name_len;
+@@ -166,11 +159,11 @@ write_out_tar_header (struct cpio_file_stat *file_hdr, int out_des)
+
+ /* Ustar standard (POSIX.1-1988) requires the mode to contain only 3 octal
+ digits */
+- to_oct (file_hdr->c_mode & MODE_ALL, 8, tar_hdr->mode);
+- to_oct (file_hdr->c_uid, 8, tar_hdr->uid);
+- to_oct (file_hdr->c_gid, 8, tar_hdr->gid);
+- to_oct (file_hdr->c_filesize, 12, tar_hdr->size);
+- to_oct (file_hdr->c_mtime, 12, tar_hdr->mtime);
++ TO_OCT (file_hdr, c_mode & MODE_ALL, 8, tar_hdr, mode);
++ TO_OCT (file_hdr, c_uid, 8, tar_hdr, uid);
++ TO_OCT (file_hdr, c_gid, 8, tar_hdr, gid);
++ TO_OCT (file_hdr, c_filesize, 12, tar_hdr, size);
++ TO_OCT (file_hdr, c_mtime, 12, tar_hdr, mtime);
+
+ switch (file_hdr->c_mode & CP_IFMT)
+ {
+@@ -182,7 +175,7 @@ write_out_tar_header (struct cpio_file_stat *file_hdr, int out_des)
+ strncpy (tar_hdr->linkname, file_hdr->c_tar_linkname,
+ TARLINKNAMESIZE);
+ tar_hdr->typeflag = LNKTYPE;
+- to_oct (0, 12, tar_hdr->size);
++ to_ascii (tar_hdr->size, 0, 12, LG_8, true);
+ }
+ else
+ tar_hdr->typeflag = REGTYPE;
+@@ -208,7 +201,7 @@ write_out_tar_header (struct cpio_file_stat *file_hdr, int out_des)
+ than TARLINKNAMESIZE. */
+ strncpy (tar_hdr->linkname, file_hdr->c_tar_linkname,
+ TARLINKNAMESIZE);
+- to_oct (0, 12, tar_hdr->size);
++ to_ascii (tar_hdr->size, 0, 12, LG_8, true);
+ break;
+ #endif /* CP_IFLNK */
+ }
+@@ -227,13 +220,15 @@ write_out_tar_header (struct cpio_file_stat *file_hdr, int out_des)
+ if (name)
+ strcpy (tar_hdr->gname, name);
+
+- to_oct (file_hdr->c_rdev_maj, 8, tar_hdr->devmajor);
+- to_oct (file_hdr->c_rdev_min, 8, tar_hdr->devminor);
++ TO_OCT (file_hdr, c_rdev_maj, 8, tar_hdr, devmajor);
++ TO_OCT (file_hdr, c_rdev_min, 8, tar_hdr, devminor);
+ }
+
+- to_oct (tar_checksum (tar_hdr), 8, tar_hdr->chksum);
++ to_ascii (tar_hdr->chksum, tar_checksum (tar_hdr), 8, LG_8, true);
+
+ tape_buffered_write ((char *) &tar_rec, out_des, TARRECORDSIZE);
++
++ return 0;
+ }
+
+ /* Return nonzero iff all the bytes in BLOCK are NUL.
+--
+2.24.1
+
diff --git a/meta/recipes-extended/cpio/cpio_2.12.bb b/meta/recipes-extended/cpio/cpio_2.12.bb
index 3713bf0b1f..5abe494ebc 100644
--- a/meta/recipes-extended/cpio/cpio_2.12.bb
+++ b/meta/recipes-extended/cpio/cpio_2.12.bb
@@ -11,6 +11,7 @@ SRC_URI = "${GNU_MIRROR}/cpio/cpio-${PV}.tar.gz \
file://0001-Fix-CVE-2015-1197.patch \
file://0001-CVE-2016-2037-1-byte-out-of-bounds-write.patch \
file://0001-Fix-segfault-with-append.patch \
+ file://CVE-2019-14866.patch \
"
SRC_URI[md5sum] = "fc207561a86b63862eea4b8300313e86"
diff --git a/meta/recipes-extended/ghostscript/ghostscript/CVE-2019-10216.patch b/meta/recipes-extended/ghostscript/ghostscript/CVE-2019-10216.patch
new file mode 100644
index 0000000000..9bec7343f5
--- /dev/null
+++ b/meta/recipes-extended/ghostscript/ghostscript/CVE-2019-10216.patch
@@ -0,0 +1,53 @@
+From 5b85ddd19a8420a1bd2d5529325be35d78e94234 Mon Sep 17 00:00:00 2001
+From: Chris Liddell <chris.liddell@artifex.com>
+Date: Fri, 2 Aug 2019 15:18:26 +0100
+Subject: [PATCH] Bug 701394: protect use of .forceput with executeonly
+
+Upstream-Status: Backport [http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5b85ddd19]
+CVE: CVE-2019-10216
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+
+---
+ Resource/Init/gs_type1.ps | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/Resource/Init/gs_type1.ps b/Resource/Init/gs_type1.ps
+index 6c7735bc0..a039ccee3 100644
+--- a/Resource/Init/gs_type1.ps
++++ b/Resource/Init/gs_type1.ps
+@@ -118,25 +118,25 @@
+ ( to be the same as glyph: ) print 1 index //== exec } if
+ 3 index exch 3 index .forceput
+ % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname
+- }
++ }executeonly
+ {pop} ifelse
+- } forall
++ } executeonly forall
+ pop pop
+- }
++ } executeonly
+ {
+ pop pop pop
+ } ifelse
+- }
++ } executeonly
+ {
+ % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname
+ pop pop
+ } ifelse
+- } forall
++ } executeonly forall
+ 3 1 roll pop pop
+- } if
++ } executeonly if
+ pop
+ dup /.AGLprocessed~GS //true .forceput
+- } if
++ } executeonly if
+
+ %% We need to excute the C .buildfont1 in a stopped context so that, if there
+ %% are errors we can put the stack back sanely and exit. Otherwise callers won't
+--
+2.17.1
+
diff --git a/meta/recipes-extended/ghostscript/ghostscript/CVE-2019-14811-0001.patch b/meta/recipes-extended/ghostscript/ghostscript/CVE-2019-14811-0001.patch
index 3f28555e8a..d4ef0996ec 100644
--- a/meta/recipes-extended/ghostscript/ghostscript/CVE-2019-14811-0001.patch
+++ b/meta/recipes-extended/ghostscript/ghostscript/CVE-2019-14811-0001.patch
@@ -12,6 +12,7 @@ handler being used, but nevertheless, prevent access to .forceput from
.setuserparams2.
CVE: CVE-2019-14811
+CVE: CVE-2019-14813
Upstream-Status: Backport [git://git.ghostscript.com/ghostpdl.git]
Signed-off-by: Stefan Ghinea <stefan.ghinea@windriver.com>
diff --git a/meta/recipes-extended/ghostscript/ghostscript/CVE-2019-14869-0001.patch b/meta/recipes-extended/ghostscript/ghostscript/CVE-2019-14869-0001.patch
new file mode 100644
index 0000000000..715ec1c450
--- /dev/null
+++ b/meta/recipes-extended/ghostscript/ghostscript/CVE-2019-14869-0001.patch
@@ -0,0 +1,70 @@
+From 485904772c5f0aa1140032746e5a0abfc40f4cef Mon Sep 17 00:00:00 2001
+From: Chris Liddell <chris.liddell@artifex.com>
+Date: Tue, 5 Nov 2019 09:45:27 +0000
+Subject: [PATCH] Bug 701841: remove .forceput from /.charkeys
+
+When loading Type 1 or Truetype fonts from disk, we attempt to extend the glyph
+name table to include all identifiable glyph names from the Adobe Glyph List.
+
+In the case of Type 1 fonts, the font itself (almost always) marks the
+CharStrings dictionary as read-only, hence we have to use .forceput for that
+case.
+
+But for Truetype fonts, the CharStrings dictionary is created internally and is
+not read-only until *after* we have fully populated it (including the extended
+glyph names from the AGL), hence there is no need for .forceput, and no need to
+carry the security risk of using it.
+
+Replace with regular put.
+
+CVE: CVE-2019-14869
+Upstream-Status: Backport [git://git.ghostscript.com/ghostpdl.git]
+
+Signed-off-by: Stefan Ghinea <stefan.ghinea@windriver.com>
+---
+ Resource/Init/gs_ttf.ps | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/Resource/Init/gs_ttf.ps b/Resource/Init/gs_ttf.ps
+index e34967d..5354ff0 100644
+--- a/Resource/Init/gs_ttf.ps
++++ b/Resource/Init/gs_ttf.ps
+@@ -1301,7 +1301,7 @@ currentdict /.pickcmap_with_no_xlatmap .undef
+ TTFDEBUG { (\n1 setting alias: ) print dup ==only
+ ( to be the same as ) print 2 index //== exec } if
+
+- 7 index 2 index 3 -1 roll exch .forceput
++ 7 index 2 index 3 -1 roll exch put
+ } forall
+ pop pop pop
+ }
+@@ -1319,7 +1319,7 @@ currentdict /.pickcmap_with_no_xlatmap .undef
+ exch pop
+ TTFDEBUG { (\n2 setting alias: ) print 1 index ==only
+ ( to use glyph index: ) print dup //== exec } if
+- 5 index 3 1 roll .forceput
++ 5 index 3 1 roll put
+ //false
+ }
+ {
+@@ -1336,7 +1336,7 @@ currentdict /.pickcmap_with_no_xlatmap .undef
+ { % CharStrings(dict) isunicode(boolean) cmap(dict) RAGL(dict) gname(name) codep(integer) gindex(integer)
+ TTFDEBUG { (\3 nsetting alias: ) print 1 index ==only
+ ( to be index: ) print dup //== exec } if
+- exch pop 5 index 3 1 roll .forceput
++ exch pop 5 index 3 1 roll put
+ }
+ {
+ pop pop
+@@ -1366,7 +1366,7 @@ currentdict /.pickcmap_with_no_xlatmap .undef
+ } ifelse
+ ]
+ TTFDEBUG { (Encoding: ) print dup === flush } if
+-} .bind executeonly odef % hides .forceput
++} .bind odef
+
+ % ---------------- CIDFontType 2 font loading ---------------- %
+
+--
+2.20.1
+
diff --git a/meta/recipes-extended/ghostscript/ghostscript_9.27.bb b/meta/recipes-extended/ghostscript/ghostscript_9.27.bb
index 9e1f3e2f49..bbd17104e1 100644
--- a/meta/recipes-extended/ghostscript/ghostscript_9.27.bb
+++ b/meta/recipes-extended/ghostscript/ghostscript_9.27.bb
@@ -28,6 +28,8 @@ SRC_URI_BASE = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/d
file://CVE-2019-14811-0001.patch \
file://CVE-2019-14817-0001.patch \
file://CVE-2019-14817-0002.patch \
+ file://CVE-2019-14869-0001.patch \
+ file://CVE-2019-10216.patch \
"
SRC_URI = "${SRC_URI_BASE} \
diff --git a/meta/recipes-extended/iputils/iputils_s20190709.bb b/meta/recipes-extended/iputils/iputils_s20190709.bb
index d8f2470d0c..42260f531e 100644
--- a/meta/recipes-extended/iputils/iputils_s20190709.bb
+++ b/meta/recipes-extended/iputils/iputils_s20190709.bb
@@ -17,6 +17,10 @@ S = "${WORKDIR}/git"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>s\d+)"
+# Fixed in 2000-10-10, but the versioning of iputils
+# breaks the version order.
+CVE_CHECK_WHITELIST += "CVE-2000-1213 CVE-2000-1214"
+
PACKAGECONFIG ??= "libcap libgcrypt rarpd traceroute6"
PACKAGECONFIG[libcap] = "-DUSE_CAP=true, -DUSE_CAP=false, libcap"
PACKAGECONFIG[libgcrypt] = "-DUSE_CRYPTO=gcrypt, -DUSE_CRYPTO=none, libgcrypt"
@@ -28,7 +32,8 @@ PACKAGECONFIG[docs] = "-DBUILD_HTML_MANS=true -DBUILD_MANS=true,-DBUILD_HTML_MAN
inherit meson update-alternatives
-EXTRA_OEMESON += "--prefix=${root_prefix}/"
+# Have to disable setcap/suid as its not deterministic
+EXTRA_OEMESON += "--prefix=${root_prefix}/ -DNO_SETCAP_OR_SUID=true"
ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-extended/libarchive/libarchive/0001-RAR5-reader-reject-files-that-declare-invalid-header.patch b/meta/recipes-extended/libarchive/libarchive/0001-RAR5-reader-reject-files-that-declare-invalid-header.patch
new file mode 100644
index 0000000000..a84c1f1f76
--- /dev/null
+++ b/meta/recipes-extended/libarchive/libarchive/0001-RAR5-reader-reject-files-that-declare-invalid-header.patch
@@ -0,0 +1,124 @@
+From c1fe0a8cc8dde8ba3eae3d17e34060d2d6e4eb96 Mon Sep 17 00:00:00 2001
+From: Grzegorz Antoniak <ga@anadoxin.org>
+Date: Sun, 2 Feb 2020 08:04:41 +0100
+Subject: [PATCH] RAR5 reader: reject files that declare invalid header flags
+
+One of the fields in RAR5's base block structure is the size of the
+header. Some invalid files declare a 0 header size setting, which can
+confuse the unpacker. Minimum header size for RAR5 base blocks is 7
+bytes (4 bytes for CRC, and 3 bytes for the rest), so block size of 0
+bytes should be rejected at header parsing stage.
+
+The fix adds an error condition if header size of 0 bytes is detected.
+In this case, the unpacker will not attempt to unpack the file, as the
+header is corrupted.
+
+The commit also adds OSSFuzz #20459 sample to test further regressions
+in this area.
+
+Upstream-Status: Backport[https://github.com/libarchive/libarchive/commit/94821008d6eea81e315c5881cdf739202961040a]
+CVE: CVE-2020-9308
+
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ Makefile.am | 1 +
+ libarchive/archive_read_support_format_rar5.c | 17 +++++++++++++++--
+ libarchive/test/test_read_format_rar5.c | 15 +++++++++++++++
+ ...d_format_rar5_block_size_is_too_small.rar.uu | 8 ++++++++
+ 4 files changed, 39 insertions(+), 2 deletions(-)
+ create mode 100644 libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu
+
+diff --git a/Makefile.am b/Makefile.am
+index da78b24..01abf20 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -863,6 +863,7 @@ libarchive_test_EXTRA_DIST=\
+ libarchive/test/test_read_format_rar5_symlink.rar.uu \
+ libarchive/test/test_read_format_rar5_truncated_huff.rar.uu \
+ libarchive/test/test_read_format_rar5_win32.rar.uu \
++ libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu \
+ libarchive/test/test_read_format_raw.bufr.uu \
+ libarchive/test/test_read_format_raw.data.gz.uu \
+ libarchive/test/test_read_format_raw.data.Z.uu \
+diff --git a/libarchive/archive_read_support_format_rar5.c b/libarchive/archive_read_support_format_rar5.c
+index 7c24627..f73393c 100644
+--- a/libarchive/archive_read_support_format_rar5.c
++++ b/libarchive/archive_read_support_format_rar5.c
+@@ -2034,6 +2034,8 @@ static int scan_for_signature(struct archive_read* a);
+ static int process_base_block(struct archive_read* a,
+ struct archive_entry* entry)
+ {
++ const size_t SMALLEST_RAR5_BLOCK_SIZE = 3;
++
+ struct rar5* rar = get_context(a);
+ uint32_t hdr_crc, computed_crc;
+ size_t raw_hdr_size = 0, hdr_size_len, hdr_size;
+@@ -2057,15 +2059,26 @@ static int process_base_block(struct archive_read* a,
+ return ARCHIVE_EOF;
+ }
+
++ hdr_size = raw_hdr_size + hdr_size_len;
++
+ /* Sanity check, maximum header size for RAR5 is 2MB. */
+- if(raw_hdr_size > (2 * 1024 * 1024)) {
++ if(hdr_size > (2 * 1024 * 1024)) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Base block header is too large");
+
+ return ARCHIVE_FATAL;
+ }
+
+- hdr_size = raw_hdr_size + hdr_size_len;
++ /* Additional sanity checks to weed out invalid files. */
++ if(raw_hdr_size == 0 || hdr_size_len == 0 ||
++ hdr_size < SMALLEST_RAR5_BLOCK_SIZE)
++ {
++ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
++ "Too small block encountered (%ld bytes)",
++ raw_hdr_size);
++
++ return ARCHIVE_FATAL;
++ }
+
+ /* Read the whole header data into memory, maximum memory use here is
+ * 2MB. */
+diff --git a/libarchive/test/test_read_format_rar5.c b/libarchive/test/test_read_format_rar5.c
+index 1408f37..32e7ed8 100644
+--- a/libarchive/test/test_read_format_rar5.c
++++ b/libarchive/test/test_read_format_rar5.c
+@@ -1194,3 +1194,18 @@ DEFINE_TEST(test_read_format_rar5_fileattr)
+
+ EPILOGUE();
+ }
++
++DEFINE_TEST(test_read_format_rar5_block_size_is_too_small)
++{
++ char buf[4096];
++ PROLOGUE("test_read_format_rar5_block_size_is_too_small.rar");
++
++ /* This file is damaged, so those functions should return failure.
++ * Additionally, SIGSEGV shouldn't be raised during execution
++ * of those functions. */
++
++ assertA(archive_read_next_header(a, &ae) != ARCHIVE_OK);
++ assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
++
++ EPILOGUE();
++}
+diff --git a/libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu b/libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu
+new file mode 100644
+index 0000000..5cad219
+--- /dev/null
++++ b/libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu
+@@ -0,0 +1,8 @@
++begin 644 test_read_format_rar5_block_size_is_too_small.rar
++M4F%R(1H'`0"-[P+2``+'(!P,("`@N`,!`B`@("`@("`@("`@("`@("#_("`@
++M("`@("`@("`@((:Q;2!4-'-^4B`!((WO`M(``O\@$/\@-R`@("`@("`@("`@
++M``X@("`@("`@____("`@("`@(/\@("`@("`@("`@("#_(+6U,2"UM;6UM[CU
++M)B`@*(0G(`!.`#D\3R``(/__(,+_````-0#_($&%*/HE=C+N`"```"```"`D
++J`)$#("#_("#__P`@__\@_R#_("`@("`@("#_("#__R`@(/__("#__R`"
++`
++end
+--
+2.23.0
+
diff --git a/meta/recipes-extended/libarchive/libarchive/CVE-2019-19221.patch b/meta/recipes-extended/libarchive/libarchive/CVE-2019-19221.patch
new file mode 100644
index 0000000000..b57e87874f
--- /dev/null
+++ b/meta/recipes-extended/libarchive/libarchive/CVE-2019-19221.patch
@@ -0,0 +1,101 @@
+From 22b1db9d46654afc6f0c28f90af8cdc84a199f41 Mon Sep 17 00:00:00 2001
+From: Martin Matuska <martin@matuska.org>
+Date: Thu, 21 Nov 2019 03:08:40 +0100
+Subject: [PATCH] Bugfix and optimize archive_wstring_append_from_mbs()
+
+The cal to mbrtowc() or mbtowc() should read up to mbs_length
+bytes and not wcs_length. This avoids out-of-bounds reads.
+
+mbrtowc() and mbtowc() return (size_t)-1 wit errno EILSEQ when
+they encounter an invalid multibyte character and (size_t)-2 when
+they they encounter an incomplete multibyte character. As we return
+failure and all our callers error out it makes no sense to continue
+parsing mbs.
+
+As we allocate `len` wchars at the beginning and each wchar has
+at least one byte, there will never be need to grow the buffer,
+so the code can be left out. On the other hand, we are always
+allocatng more memory than we need.
+
+As long as wcs_length == mbs_length == len we can omit wcs_length.
+We keep the old code commented if we decide to save memory and
+use autoexpanding wcs_length in the future.
+
+Fixes #1276
+
+Upstream-Status: Backport [https://github.com/libarchive/libarchive/commit/22b1db9d46654afc6f0c28f90af8cdc84a199f41]
+CVE: CVE-2019-19221
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ libarchive/archive_string.c | 28 +++++++++++++++++-----------
+ 1 file changed, 17 insertions(+), 11 deletions(-)
+
+diff --git a/libarchive/archive_string.c b/libarchive/archive_string.c
+index 979a418b6..bd39c96f1 100644
+--- a/libarchive/archive_string.c
++++ b/libarchive/archive_string.c
+@@ -591,7 +591,7 @@ archive_wstring_append_from_mbs(struct archive_wstring *dest,
+ * No single byte will be more than one wide character,
+ * so this length estimate will always be big enough.
+ */
+- size_t wcs_length = len;
++ // size_t wcs_length = len;
+ size_t mbs_length = len;
+ const char *mbs = p;
+ wchar_t *wcs;
+@@ -600,7 +600,11 @@ archive_wstring_append_from_mbs(struct archive_wstring *dest,
+
+ memset(&shift_state, 0, sizeof(shift_state));
+ #endif
+- if (NULL == archive_wstring_ensure(dest, dest->length + wcs_length + 1))
++ /*
++ * As we decided to have wcs_length == mbs_length == len
++ * we can use len here instead of wcs_length
++ */
++ if (NULL == archive_wstring_ensure(dest, dest->length + len + 1))
+ return (-1);
+ wcs = dest->s + dest->length;
+ /*
+@@ -609,6 +613,12 @@ archive_wstring_append_from_mbs(struct archive_wstring *dest,
+ * multi bytes.
+ */
+ while (*mbs && mbs_length > 0) {
++ /*
++ * The buffer we allocated is always big enough.
++ * Keep this code path in a comment if we decide to choose
++ * smaller wcs_length in the future
++ */
++/*
+ if (wcs_length == 0) {
+ dest->length = wcs - dest->s;
+ dest->s[dest->length] = L'\0';
+@@ -618,24 +628,20 @@ archive_wstring_append_from_mbs(struct archive_wstring *dest,
+ return (-1);
+ wcs = dest->s + dest->length;
+ }
++*/
+ #if HAVE_MBRTOWC
+- r = mbrtowc(wcs, mbs, wcs_length, &shift_state);
++ r = mbrtowc(wcs, mbs, mbs_length, &shift_state);
+ #else
+- r = mbtowc(wcs, mbs, wcs_length);
++ r = mbtowc(wcs, mbs, mbs_length);
+ #endif
+ if (r == (size_t)-1 || r == (size_t)-2) {
+ ret_val = -1;
+- if (errno == EILSEQ) {
+- ++mbs;
+- --mbs_length;
+- continue;
+- } else
+- break;
++ break;
+ }
+ if (r == 0 || r > mbs_length)
+ break;
+ wcs++;
+- wcs_length--;
++ // wcs_length--;
+ mbs += r;
+ mbs_length -= r;
+ }
diff --git a/meta/recipes-extended/libarchive/libarchive_3.4.0.bb b/meta/recipes-extended/libarchive/libarchive_3.4.0.bb
index c789cd44d2..db45ccf654 100644
--- a/meta/recipes-extended/libarchive/libarchive_3.4.0.bb
+++ b/meta/recipes-extended/libarchive/libarchive_3.4.0.bb
@@ -32,6 +32,8 @@ PACKAGECONFIG[lz4] = "--with-lz4,--without-lz4,lz4,"
EXTRA_OECONF += "--enable-largefile"
SRC_URI = "http://libarchive.org/downloads/libarchive-${PV}.tar.gz \
+ file://CVE-2019-19221.patch \
+ file://0001-RAR5-reader-reject-files-that-declare-invalid-header.patch \
"
SRC_URI[md5sum] = "6046396255bd7cf6d0f6603a9bda39ac"
diff --git a/meta/recipes-extended/libidn/libidn2_2.2.0.bb b/meta/recipes-extended/libidn/libidn2_2.2.0.bb
index bcbfdd85b9..71314149e1 100644
--- a/meta/recipes-extended/libidn/libidn2_2.2.0.bb
+++ b/meta/recipes-extended/libidn/libidn2_2.2.0.bb
@@ -22,7 +22,8 @@ EXTRA_OECONF += "--disable-rpath \
"
do_install_append() {
- sed -i -e 's|-L${STAGING_LIBDIR}||' ${D}${libdir}/pkgconfig/libidn2.pc
+ # Need to remove any duplicate whitespace too for reproducibility
+ sed -i -e 's|-L${STAGING_LIBDIR}||' -e 's/ */ /g' ${D}${libdir}/pkgconfig/libidn2.pc
}
LICENSE_${PN} = "(GPLv2+ | LGPLv3)"
diff --git a/meta/recipes-extended/libmnl/libmnl_1.0.4.bb b/meta/recipes-extended/libmnl/libmnl_1.0.4.bb
index 23262e8c6f..b55bb311f6 100644
--- a/meta/recipes-extended/libmnl/libmnl_1.0.4.bb
+++ b/meta/recipes-extended/libmnl/libmnl_1.0.4.bb
@@ -1,12 +1,12 @@
SUMMARY = "Minimalistic user-space Netlink utility library"
DESCRIPTION = "Minimalistic user-space library oriented to Netlink developers, providing \
functions for common tasks in parsing, validating, and constructing both the Netlink header and TLVs."
-HOMEPAGE = "http://www.netfilter.org/projects/libmnl/index.html"
+HOMEPAGE = "https://www.netfilter.org/projects/libmnl/index.html"
SECTION = "libs"
LICENSE = "LGPLv2.1+"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-SRC_URI = "http://www.netfilter.org/projects/libmnl/files/libmnl-${PV}.tar.bz2;name=tar"
+SRC_URI = "https://netfilter.org/projects/libmnl/files/libmnl-${PV}.tar.bz2;name=tar"
SRC_URI[tar.md5sum] = "be9b4b5328c6da1bda565ac5dffadb2d"
SRC_URI[tar.sha256sum] = "171f89699f286a5854b72b91d06e8f8e3683064c5901fb09d954a9ab6f551f81"
diff --git a/meta/recipes-extended/libtirpc/libtirpc_1.1.4.bb b/meta/recipes-extended/libtirpc/libtirpc_1.1.4.bb
index 9c480b825f..692f0d9f9c 100644
--- a/meta/recipes-extended/libtirpc/libtirpc_1.1.4.bb
+++ b/meta/recipes-extended/libtirpc/libtirpc_1.1.4.bb
@@ -22,7 +22,7 @@ inherit autotools pkgconfig
EXTRA_OECONF = "--disable-gssapi"
do_install_append() {
- chown root:root ${D}${sysconfdir}/netconfig
+ chown root:root ${D}${sysconfdir}/netconfig
}
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-extended/ltp/ltp/0001-overcommit_memory-update-for-mm-fix-false-positive-O.patch b/meta/recipes-extended/ltp/ltp/0001-overcommit_memory-update-for-mm-fix-false-positive-O.patch
new file mode 100644
index 0000000000..bed84712a1
--- /dev/null
+++ b/meta/recipes-extended/ltp/ltp/0001-overcommit_memory-update-for-mm-fix-false-positive-O.patch
@@ -0,0 +1,57 @@
+From d656a447893dccc310c975a239f482278550c3e0 Mon Sep 17 00:00:00 2001
+From: Jan Stancek <jstancek@redhat.com>
+Date: Tue, 21 May 2019 10:10:44 +0200
+Subject: [PATCH] overcommit_memory: update for "mm: fix false-positive
+ OVERCOMMIT_GUESS failures"
+
+commit 8c7829b04c52 ("mm: fix false-positive OVERCOMMIT_GUESS failures")
+changes logic of __vm_enough_memory(), simplifying it to:
+ When in GUESS mode, catch wild allocations by comparing their request
+ size to total amount of ram and swap in the system.
+
+Testcase currently allocates mem_total + swap_total, which doesn't trigger
+new condition. Make it more extreme, but assuming free_total / 2 will PASS,
+and 2*sum_total will FAIL.
+
+Signed-off-by: Jan Stancek <jstancek@redhat.com>
+Acked-by: Cyril Hrubis <chrubis@suse.cz>
+
+Upstream-Status: Backport [https://github.com/linux-test-project/ltp/commit/d656a447893dccc310c975a239f482278550c3e0]
+Signed-off-by: He Zhe <zhe.he@windriver.com>
+---
+ testcases/kernel/mem/tunable/overcommit_memory.c | 11 ++++-------
+ 1 file changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/testcases/kernel/mem/tunable/overcommit_memory.c b/testcases/kernel/mem/tunable/overcommit_memory.c
+index 555298f..345764d 100644
+--- a/testcases/kernel/mem/tunable/overcommit_memory.c
++++ b/testcases/kernel/mem/tunable/overcommit_memory.c
+@@ -36,11 +36,10 @@
+ *
+ * The program is designed to test the two tunables:
+ *
+- * When overcommit_memory = 0, allocatable memory can't overextends
+- * the amount of free memory. I choose the three cases:
++ * When overcommit_memory = 0, allocatable memory can't overextend
++ * the amount of total memory:
+ * a. less than free_total: free_total / 2, alloc should pass.
+- * b. greater than free_total: free_total * 2, alloc should fail.
+- * c. equal to sum_total: sum_tatal, alloc should fail
++ * b. greater than sum_total: sum_total * 2, alloc should fail.
+ *
+ * When overcommit_memory = 1, it can alloc enough much memory, I
+ * choose the three cases:
+@@ -164,9 +163,7 @@ static void overcommit_memory_test(void)
+
+ update_mem();
+ alloc_and_check(free_total / 2, EXPECT_PASS);
+- update_mem();
+- alloc_and_check(free_total * 2, EXPECT_FAIL);
+- alloc_and_check(sum_total, EXPECT_FAIL);
++ alloc_and_check(sum_total * 2, EXPECT_FAIL);
+
+ /* start to test overcommit_memory=1 */
+ set_sys_tune("overcommit_memory", 1, 1);
+--
+2.7.4
+
diff --git a/meta/recipes-extended/ltp/ltp_20190517.bb b/meta/recipes-extended/ltp/ltp_20190517.bb
index 4650715607..5915b1c72a 100644
--- a/meta/recipes-extended/ltp/ltp_20190517.bb
+++ b/meta/recipes-extended/ltp/ltp_20190517.bb
@@ -49,6 +49,7 @@ SRC_URI = "git://github.com/linux-test-project/ltp.git \
file://0001-testcases-use-python3-everywhere-to-run-python-scrip.patch \
file://0001-syscall-rt_sigtimedwait01-Fix-wrong-sigset-length-fo.patch \
file://0001-cve-2017-17052-Avoid-unsafe-exits-in-threads.patch \
+ file://0001-overcommit_memory-update-for-mm-fix-false-positive-O.patch \
"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-extended/man-db/man-db_2.8.7.bb b/meta/recipes-extended/man-db/man-db_2.8.7.bb
index 083b2374aa..0d73b03482 100644
--- a/meta/recipes-extended/man-db/man-db_2.8.7.bb
+++ b/meta/recipes-extended/man-db/man-db_2.8.7.bb
@@ -10,7 +10,7 @@ SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/man-db/man-db-${PV}.tar.xz \
SRC_URI[md5sum] = "ec0b23c8314a1654c4d059b2c18ce43d"
SRC_URI[sha256sum] = "b9cd5bb996305d08bfe9e1114edc30b4c97be807093b88af8033ed1cf9beb326"
-DEPENDS = "libpipeline gdbm groff-native base-passwd"
+DEPENDS = "libpipeline gdbm groff-native base-passwd flex-native"
RDEPENDS_${PN} += "base-passwd"
# | /usr/src/debug/man-db/2.8.0-r0/man-db-2.8.0/src/whatis.c:939: undefined reference to `_nl_msg_cat_cntr'
diff --git a/meta/recipes-extended/mc/files/0001-Add-option-to-control-configure-args.patch b/meta/recipes-extended/mc/files/0001-Add-option-to-control-configure-args.patch
new file mode 100644
index 0000000000..e76aac8161
--- /dev/null
+++ b/meta/recipes-extended/mc/files/0001-Add-option-to-control-configure-args.patch
@@ -0,0 +1,99 @@
+From a54501d3c9541bc8600225aa2d42531f93c6def7 Mon Sep 17 00:00:00 2001
+From: Joshua Watt <JPEWhacker@gmail.com>
+Date: Sat, 9 Nov 2019 20:01:48 -0600
+Subject: [PATCH] Add option to control configure args
+
+Embedding the configure time options into the executable can lead to
+non-reproducible builds, since configure options often have embedded
+paths. Add a configure time option to control if the configure args are
+embedded so this can be disabled.
+
+Upstream-Status: Submitted [https://midnight-commander.org/ticket/4031]
+Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
+---
+ configure.ac | 6 ++++++
+ src/args.c | 6 ++++++
+ src/textconf.c | 2 ++
+ 3 files changed, 14 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 19d1a76be..a1948f6b9 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -544,6 +544,12 @@ dnl Clarify do we really need GModule
+ AM_CONDITIONAL([HAVE_GMODULE], [test -n "$g_module_supported" && \
+ test x"$textmode_x11_support" = x"yes" -o x"$enable_aspell" = x"yes"])
+
++AC_ARG_ENABLE([configure-args],
++ AS_HELP_STRING([--enable-configure-args], [Handle all compiler warnings as errors]))
++if test "x$enable_configure_args" != xno; then
++ AC_DEFINE([ENABLE_CONFIGURE_ARGS], 1, [Define to enable showing configure arguments in help])
++fi
++
+ AC_DEFINE_UNQUOTED([MC_CONFIGURE_ARGS], ["$ac_configure_args"], [MC configure arguments])
+
+ AC_CONFIG_FILES(
+diff --git a/src/args.c b/src/args.c
+index baef1a1c8..f8dc24020 100644
+--- a/src/args.c
++++ b/src/args.c
+@@ -95,7 +95,9 @@ static gboolean mc_args__nouse_subshell = FALSE;
+ #endif /* ENABLE_SUBSHELL */
+ static gboolean mc_args__show_datadirs = FALSE;
+ static gboolean mc_args__show_datadirs_extended = FALSE;
++#ifdef ENABLE_CONFIGURE_ARGS
+ static gboolean mc_args__show_configure_opts = FALSE;
++#endif
+
+ static GOptionGroup *main_group;
+
+@@ -125,6 +127,7 @@ static const GOptionEntry argument_main_table[] = {
+ NULL
+ },
+
++#ifdef ENABLE_CONFIGURE_ARGS
+ /* show configure options */
+ {
+ "configure-options", '\0', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE,
+@@ -132,6 +135,7 @@ static const GOptionEntry argument_main_table[] = {
+ N_("Print configure options"),
+ NULL
+ },
++#endif
+
+ {
+ "printwd", 'P', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING,
+@@ -758,11 +762,13 @@ mc_args_show_info (void)
+ return FALSE;
+ }
+
++#ifdef ENABLE_CONFIGURE_ARGS
+ if (mc_args__show_configure_opts)
+ {
+ show_configure_options ();
+ return FALSE;
+ }
++#endif
+
+ return TRUE;
+ }
+diff --git a/src/textconf.c b/src/textconf.c
+index 1e0613e58..f39b9e028 100644
+--- a/src/textconf.c
++++ b/src/textconf.c
+@@ -232,10 +232,12 @@ show_datadirs_extended (void)
+
+ /* --------------------------------------------------------------------------------------------- */
+
++#ifdef ENABLE_CONFIGURE_ARGS
+ void
+ show_configure_options (void)
+ {
+ (void) printf ("%s\n", MC_CONFIGURE_ARGS);
+ }
++#endif
+
+ /* --------------------------------------------------------------------------------------------- */
+--
+2.23.0
+
diff --git a/meta/recipes-extended/mc/files/nomandate.patch b/meta/recipes-extended/mc/files/nomandate.patch
new file mode 100644
index 0000000000..48bd73b110
--- /dev/null
+++ b/meta/recipes-extended/mc/files/nomandate.patch
@@ -0,0 +1,21 @@
+The man page date can vary depending upon the host perl, e.g. in Russian
+some versions print 'июня', others 'Июнь' or Polish 'czerwca' or 'czerwiec'.
+Rather than depend upon perl-native to fix this, just remove the date from
+the manpages.
+
+RP 2020/2/4
+
+Upstream-Status: Inappropriate [OE specficic reproducibility workaround]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: mc-4.8.23/doc/man/date-of-man-include.am
+===================================================================
+--- mc-4.8.23.orig/doc/man/date-of-man-include.am
++++ mc-4.8.23/doc/man/date-of-man-include.am
+@@ -1,5 +1,5 @@
+ SED_PARAMETERS = \
+- -e "s/%DATE_OF_MAN_PAGE%/$${MAN_DATE}/g" \
++ -e "s/%DATE_OF_MAN_PAGE%//g" \
+ -e "s/%DISTR_VERSION%/@DISTR_VERSION@/g" \
+ -e "s{%prefix%{@prefix@{g" \
+ -e "s{%sysconfdir%{@sysconfdir@{g" \
diff --git a/meta/recipes-extended/mc/mc_4.8.23.bb b/meta/recipes-extended/mc/mc_4.8.23.bb
index 83de8dbb2c..de76591d9b 100644
--- a/meta/recipes-extended/mc/mc_4.8.23.bb
+++ b/meta/recipes-extended/mc/mc_4.8.23.bb
@@ -8,6 +8,8 @@ RDEPENDS_${PN} = "ncurses-terminfo"
SRC_URI = "http://www.midnight-commander.org/downloads/${BPN}-${PV}.tar.bz2 \
file://0001-mc-replace-perl-w-with-use-warnings.patch \
+ file://0001-Add-option-to-control-configure-args.patch \
+ file://nomandate.patch \
"
SRC_URI[md5sum] = "152927ac29cf0e61d7d019f261bb7d89"
SRC_URI[sha256sum] = "238c4552545dcf3065359bd50753abbb150c1b22ec5a36eaa02c82808293267d"
@@ -21,9 +23,12 @@ PACKAGECONFIG ??= ""
PACKAGECONFIG[smb] = "--enable-vfs-smb,--disable-vfs-smb,samba,"
PACKAGECONFIG[sftp] = "--enable-vfs-sftp,--disable-vfs-sftp,libssh2,"
-EXTRA_OECONF = "--with-screen=ncurses --without-gpm-mouse --without-x"
+EXTRA_OECONF = "--with-screen=ncurses --without-gpm-mouse --without-x --disable-configure-args"
CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
+CACHED_CONFIGUREVARS += "ac_cv_path_PYTHON='/usr/bin/env python'"
+CACHED_CONFIGUREVARS += "ac_cv_path_GREP='/usr/bin/env grep'"
+CACHED_CONFIGUREVARS += "mc_cv_have_zipinfo=yes"
do_install_append () {
sed -i -e '1s,#!.*perl,#!${bindir}/env perl,' ${D}${libexecdir}/mc/extfs.d/*
diff --git a/meta/recipes-extended/mdadm/mdadm_4.1.bb b/meta/recipes-extended/mdadm/mdadm_4.1.bb
index 639382e137..64f519e750 100644
--- a/meta/recipes-extended/mdadm/mdadm_4.1.bb
+++ b/meta/recipes-extended/mdadm/mdadm_4.1.bb
@@ -43,13 +43,12 @@ CFLAGS_append_powerpc64 = ' -D__SANE_USERSPACE_TYPES__'
CFLAGS_append_mipsarchn64 = ' -D__SANE_USERSPACE_TYPES__'
CFLAGS_append_mipsarchn32 = ' -D__SANE_USERSPACE_TYPES__'
-EXTRA_OEMAKE = 'CHECK_RUN_DIR=0 CXFLAGS="${CFLAGS}"'
+EXTRA_OEMAKE = 'CHECK_RUN_DIR=0 CXFLAGS="${CFLAGS}" SYSTEMD_DIR=${systemd_unitdir}/system \
+ BINDIR="${base_sbindir}" UDEVDIR="${nonarch_base_libdir}/udev"'
DEBUG_OPTIMIZATION_append = " -Wno-error"
do_compile() {
- # Point to right sbindir
- sed -i -e "s;BINDIR = /sbin;BINDIR = $base_sbindir;" -e "s;UDEVDIR = /lib;UDEVDIR = $nonarch_base_libdir;" -e "s;SYSTEMD_DIR=/lib/systemd/system;SYSTEMD_DIR=${systemd_unitdir}/system;" ${S}/Makefile
oe_runmake SYSROOT="${STAGING_DIR_TARGET}"
}
diff --git a/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb b/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb
index 2d96d1ba38..15a8e6dedc 100644
--- a/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb
+++ b/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb
@@ -81,6 +81,7 @@ RDEPENDS_packagegroup-core-full-cmdline-utils = "\
gawk \
gmp \
grep \
+ less \
makedevs \
mc \
mc-fish \
diff --git a/meta/recipes-extended/pam/libpam/pam.d/common-password b/meta/recipes-extended/pam/libpam/pam.d/common-password
index 3896057328..52478dae77 100644
--- a/meta/recipes-extended/pam/libpam/pam.d/common-password
+++ b/meta/recipes-extended/pam/libpam/pam.d/common-password
@@ -10,13 +10,10 @@
# The "sha512" option enables salted SHA512 passwords. Without this option,
# the default is Unix crypt. Prior releases used the option "md5".
#
-# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
-# login.defs.
-#
# See the pam_unix manpage for other options.
# here are the per-package modules (the "Primary" block)
-password [success=1 default=ignore] pam_unix.so obscure sha512
+password [success=1 default=ignore] pam_unix.so sha512
# here's the fallback if no module succeeds
password requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
diff --git a/meta/recipes-extended/pam/libpam_1.3.1.bb b/meta/recipes-extended/pam/libpam_1.3.1.bb
index 6b73f0a2fe..a2aa1ecd16 100644
--- a/meta/recipes-extended/pam/libpam_1.3.1.bb
+++ b/meta/recipes-extended/pam/libpam_1.3.1.bb
@@ -163,3 +163,5 @@ CONFFILES_${PN}-runtime += "${sysconfdir}/pam.d/common-account"
CONFFILES_${PN}-runtime += "${sysconfdir}/security/limits.conf"
UPSTREAM_CHECK_URI = "https://github.com/linux-pam/linux-pam/releases"
+
+CVE_PRODUCT = "linux-pam"
diff --git a/meta/recipes-extended/procps/procps_3.3.15.bb b/meta/recipes-extended/procps/procps_3.3.15.bb
index 9756db0e7b..f240e54fd8 100644
--- a/meta/recipes-extended/procps/procps_3.3.15.bb
+++ b/meta/recipes-extended/procps/procps_3.3.15.bb
@@ -4,9 +4,9 @@ the /proc filesystem. The package includes the programs ps, top, vmstat, w, kill
HOMEPAGE = "https://gitlab.com/procps-ng/procps"
SECTION = "base"
LICENSE = "GPLv2+ & LGPLv2+"
-LIC_FILES_CHKSUM="file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://COPYING.LIB;md5=4cf66a4984120007c9881cc871cf49db \
- "
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.LIB;md5=4cf66a4984120007c9881cc871cf49db \
+ "
DEPENDS = "ncurses"
@@ -64,3 +64,6 @@ python __anonymous() {
d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog))
}
+# 'ps' isn't suitable for use as a security tool so whitelist this CVE.
+# https://bugzilla.redhat.com/show_bug.cgi?id=1575473#c3
+CVE_CHECK_WHITELIST += "CVE-2018-1121"
diff --git a/meta/recipes-extended/psmisc/psmisc.inc b/meta/recipes-extended/psmisc/psmisc.inc
index 594a10cf22..6de5acb71b 100644
--- a/meta/recipes-extended/psmisc/psmisc.inc
+++ b/meta/recipes-extended/psmisc/psmisc.inc
@@ -7,7 +7,7 @@ command sends a specified signal (SIGTERM if nothing is specified) to \
processes identified by name. The fuser command identifies the PIDs \
of processes that are using specified files or filesystems."
SECTION = "base"
-DEPENDS = "ncurses virtual/libintl gettext-native"
+DEPENDS = "ncurses virtual/libintl gettext-native xz-native"
LICENSE = "GPLv2"
SRC_URI = "${SOURCEFORGE_MIRROR}/psmisc/psmisc-${PV}.tar.gz"
diff --git a/meta/recipes-extended/screen/screen/CVE-2020-9366.patch b/meta/recipes-extended/screen/screen/CVE-2020-9366.patch
new file mode 100644
index 0000000000..a52b9e6e68
--- /dev/null
+++ b/meta/recipes-extended/screen/screen/CVE-2020-9366.patch
@@ -0,0 +1,48 @@
+From 8ce90c1d3d5bece150479d8bc9303fd9d9f45e03 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Amadeusz=20S=C5=82awi=C5=84ski?= <amade@asmblr.net>
+Date: Thu, 30 Jan 2020 17:56:27 +0100
+Subject: [PATCH] Fix out of bounds access when setting w_xtermosc after OSC 49
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: =?UTF-8?q?Amadeusz=20S=C5=82awi=C5=84ski?= <amade@asmblr.net>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+echo -e "\e]49\e; \n\ec"
+crashes screen.
+
+This happens because 49 is divided by 10 and used as table index
+resulting in access to w_xtermosc[4], which is out of bounds with table
+itself being size 4. Increase size of table by 1 to 5, which is enough
+for all current uses.
+
+As this overwrites memory based on user input it is potential security
+issue.
+
+Reported-by: pippin@gimp.org
+Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/screen.git/commit/?h=v.4.8.0&id=68386dfb1fa33471372a8cd2e74686758a2f527b]
+CVE: CVE-2020-9366
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+
+---
+ window.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/window.h b/window.h
+index bd10dcd..a8afa19 100644
+--- a/window.h
++++ b/window.h
+@@ -237,7 +237,7 @@ struct win
+ char w_vbwait;
+ char w_norefresh; /* dont redisplay when switching to that win */
+ #ifdef RXVT_OSC
+- char w_xtermosc[4][MAXSTR]; /* special xterm/rxvt escapes */
++ char w_xtermosc[5][MAXSTR]; /* special xterm/rxvt escapes */
+ #endif
+ int w_mouse; /* mouse mode 0,9,1000 */
+ #ifdef HAVE_BRAILLE
diff --git a/meta/recipes-extended/screen/screen_4.6.2.bb b/meta/recipes-extended/screen/screen_4.6.2.bb
index 21b476ddb0..d00b849021 100644
--- a/meta/recipes-extended/screen/screen_4.6.2.bb
+++ b/meta/recipes-extended/screen/screen_4.6.2.bb
@@ -25,6 +25,7 @@ SRC_URI = "${GNU_MIRROR}/screen/screen-${PV}.tar.gz \
file://0001-fix-for-multijob-build.patch \
file://0001-configure.ac-fix-configure-failed-while-build-dir-ha.patch \
file://0001-Remove-more-compatibility-stuff.patch \
+ file://CVE-2020-9366.patch \
"
SRC_URI[md5sum] = "a0f529d3333b128dfaa324d978ba73a8"
diff --git a/meta/recipes-extended/sudo/sudo.inc b/meta/recipes-extended/sudo/sudo.inc
index 15075bcefd..4edfabe510 100644
--- a/meta/recipes-extended/sudo/sudo.inc
+++ b/meta/recipes-extended/sudo/sudo.inc
@@ -26,7 +26,7 @@ PACKAGECONFIG[pam-wheel] = ",,,pam-plugin-wheel"
CONFFILES_${PN} = "${sysconfdir}/sudoers"
-EXTRA_OECONF = "--with-editor=/bin/vi --with-env-editor"
+EXTRA_OECONF = "--with-editor=${base_bindir}/vi --with-env-editor"
EXTRA_OECONF_append_libc-musl = " --disable-hardening "
diff --git a/meta/recipes-extended/sudo/sudo_1.8.27.bb b/meta/recipes-extended/sudo/sudo_1.8.27.bb
index 8b3be55c20..6d470d0373 100644
--- a/meta/recipes-extended/sudo/sudo_1.8.27.bb
+++ b/meta/recipes-extended/sudo/sudo_1.8.27.bb
@@ -1,6 +1,6 @@
require sudo.inc
-SRC_URI = "http://www.sudo.ws/sudo/dist/sudo-${PV}.tar.gz \
+SRC_URI = "https://www.sudo.ws/dist/sudo-${PV}.tar.gz \
${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
file://0001-Include-sys-types.h-for-id_t-definition.patch \
file://CVE-2019-14287-1.patch \
@@ -15,10 +15,18 @@ SRC_URI[sha256sum] = "7beb68b94471ef56d8a1036dbcdc09a7b58a949a68ffce48b83f837dd3
DEPENDS += " virtual/crypt ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
RDEPENDS_${PN} += " ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam-plugin-limits pam-plugin-keyinit', '', d)}"
+CACHED_CONFIGUREVARS = " \
+ ac_cv_type_rsize_t=no \
+ ac_cv_path_MVPROG=${base_bindir}/mv \
+ ac_cv_path_BSHELLPROG=${base_bindir}/sh \
+ ac_cv_path_SENDMAILPROG=${sbindir}/sendmail \
+ ac_cv_path_VIPROG=${base_bindir}/vi \
+ "
+
EXTRA_OECONF += " \
- ac_cv_type_rsize_t=no \
${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--with-pam', '--without-pam', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--enable-tmpfiles.d=${nonarch_libdir}/tmpfiles.d', '--disable-tmpfiles.d', d)} \
+ --with-vardir=/var/lib/sudo \
"
do_install_append () {
diff --git a/meta/recipes-extended/sysstat/sysstat.inc b/meta/recipes-extended/sysstat/sysstat.inc
index 5a7d2114ca..62de36b44b 100644
--- a/meta/recipes-extended/sysstat/sysstat.inc
+++ b/meta/recipes-extended/sysstat/sysstat.inc
@@ -17,7 +17,7 @@ DEPENDS += "base-passwd"
# autotools-brokensep as this package doesn't use automake
inherit autotools-brokensep gettext systemd upstream-version-is-even
-PACKAGECONFIG ??= ""
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
PACKAGECONFIG[lm-sensors] = "--enable-sensors,--disable-sensors,lmsensors,lmsensors-libsensors"
PACKAGECONFIG[cron] = "--enable-install-cron --enable-copy-only,--disable-install-cron --disable-copy-only"
PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_system_unitdir}"
@@ -46,10 +46,12 @@ do_install() {
echo "d ${localstatedir}/log/sa - - - -" \
> ${D}${sysconfdir}/tmpfiles.d/sysstat.conf
- if ${@bb.utils.contains('PACKAGECONFIG', 'cron', 'false', 'true', d)}; then
+ # Unless both cron and systemd are enabled, install our own
+ # systemd unit file. Otherwise the package will install one.
+ if ${@bb.utils.contains('PACKAGECONFIG', 'cron systemd', 'false', 'true', d)}; then
install -d ${D}${systemd_unitdir}/system
install -m 0644 ${WORKDIR}/sysstat.service ${D}${systemd_unitdir}/system
- sed -i -e 's#@LIBDIR@#${libdir}#g' ${D}${systemd_unitdir}/system/sysstat.service
+ sed -i -e 's#@LIBEXECDIR@#${libexecdir}#g' ${D}${systemd_unitdir}/system/sysstat.service
fi
fi
}
@@ -62,6 +64,6 @@ pkg_postinst_${PN} () {
fi
}
-FILES_${PN} += "${libdir}/sa ${systemd_system_unitdir}"
+FILES_${PN} += "${systemd_system_unitdir}"
TARGET_CC_ARCH += "${LDFLAGS}"
diff --git a/meta/recipes-extended/sysstat/sysstat/CVE-2019-19725.patch b/meta/recipes-extended/sysstat/sysstat/CVE-2019-19725.patch
new file mode 100644
index 0000000000..2aa12724f8
--- /dev/null
+++ b/meta/recipes-extended/sysstat/sysstat/CVE-2019-19725.patch
@@ -0,0 +1,28 @@
+From a5c8abd4a481ee6e27a3acf00e6d9b0f023e20ed Mon Sep 17 00:00:00 2001
+From: Sebastien GODARD <sysstat@users.noreply.github.com>
+Date: Mon, 9 Dec 2019 17:54:07 +0100
+Subject: [PATCH] Fix #242: Double free in check_file_actlst()
+
+Avoid freeing buffer() twice.
+
+Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
+
+Upstream-Status: Backport [https://github.com/sysstat/sysstat/commit/a5c8abd4a481ee6e27a3acf00e6d9b0f023e20ed]
+CVE: CVE-2019-19725
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ sa_common.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/sa_common.c b/sa_common.c
+index cf52aefe..856a3715 100644
+--- a/sa_common.c
++++ b/sa_common.c
+@@ -2153,6 +2153,7 @@ void check_file_actlst(int *ifd, char *dfile, struct activity *act[], uint64_t f
+ }
+
+ free(buffer);
++ buffer = NULL;
+
+ /* Check that at least one activity selected by the user is available in file */
+ for (i = 0; i < NR_ACT; i++) {
diff --git a/meta/recipes-extended/sysstat/sysstat/sysstat.service b/meta/recipes-extended/sysstat/sysstat/sysstat.service
index aff07109f5..ca46befb99 100644
--- a/meta/recipes-extended/sysstat/sysstat/sysstat.service
+++ b/meta/recipes-extended/sysstat/sysstat/sysstat.service
@@ -5,7 +5,7 @@ Description=Resets System Activity Logs
Type=oneshot
RemainAfterExit=yes
User=root
-ExecStart=@LIBDIR@/sa/sa1 --boot
+ExecStart=@LIBEXECDIR@/sa/sa1 --boot
[Install]
WantedBy=multi-user.target
diff --git a/meta/recipes-extended/sysstat/sysstat_12.1.6.bb b/meta/recipes-extended/sysstat/sysstat_12.1.6.bb
index 362888d506..674addb4df 100644
--- a/meta/recipes-extended/sysstat/sysstat_12.1.6.bb
+++ b/meta/recipes-extended/sysstat/sysstat_12.1.6.bb
@@ -4,6 +4,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=a23a74b3f4caf9616230789d94217acb"
SRC_URI += "file://0001-Include-needed-headers-explicitly.patch \
file://0001-Fix-232-Memory-corruption-bug-due-to-Integer-Overflo.patch \
+ file://CVE-2019-19725.patch \
"
SRC_URI[md5sum] = "d8e3bbb9c873dd370f6d33664e326570"
diff --git a/meta/recipes-extended/tar/tar_1.32.bb b/meta/recipes-extended/tar/tar_1.32.bb
index 18f09b5711..ebe6cb0dbd 100644
--- a/meta/recipes-extended/tar/tar_1.32.bb
+++ b/meta/recipes-extended/tar/tar_1.32.bb
@@ -22,6 +22,8 @@ PACKAGECONFIG[acl] = "--with-posix-acls,--without-posix-acls,acl"
EXTRA_OECONF += "DEFAULT_RMT_DIR=${sbindir}"
+CACHED_CONFIGUREVARS += "tar_cv_path_RSH=no"
+
# Let aclocal use the relative path for the m4 file rather than the
# absolute since tar has a lot of m4 files, otherwise there might
# be an "Argument list too long" error when it is built in a long/deep
diff --git a/meta/recipes-extended/timezone/timezone.inc b/meta/recipes-extended/timezone/timezone.inc
index f6bab1acb4..e542290c3c 100644
--- a/meta/recipes-extended/timezone/timezone.inc
+++ b/meta/recipes-extended/timezone/timezone.inc
@@ -4,7 +4,7 @@ SECTION = "base"
LICENSE = "PD & BSD & BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c679c9d6b02bc2757b3eaf8f53c43fba"
-PV = "2019c"
+PV = "2020a"
SRC_URI =" http://www.iana.org/time-zones/repository/releases/tzcode${PV}.tar.gz;name=tzcode \
http://www.iana.org/time-zones/repository/releases/tzdata${PV}.tar.gz;name=tzdata \
@@ -12,7 +12,7 @@ SRC_URI =" http://www.iana.org/time-zones/repository/releases/tzcode${PV}.tar.gz
UPSTREAM_CHECK_URI = "http://www.iana.org/time-zones"
-SRC_URI[tzcode.md5sum] = "195a17454c5db05cab96595380650391"
-SRC_URI[tzcode.sha256sum] = "f6ebd3668e02d5ed223d3b7b1947561bf2d2da2f4bd1db61efefd9e06c167ed4"
-SRC_URI[tzdata.md5sum] = "f6987e6dfdb2eb83a1b5076a50b80894"
-SRC_URI[tzdata.sha256sum] = "79c7806dab09072308da0e3d22c37d3b245015a591891ea147d3b133b60ffc7c"
+SRC_URI[tzcode.md5sum] = "f87c3477e85a5c4b00df0def6c6a0055"
+SRC_URI[tzcode.sha256sum] = "7d2af7120ee03df71fbca24031ccaf42404752e639196fe93c79a41b38a6d669"
+SRC_URI[tzdata.md5sum] = "96a985bb8eeab535fb8aa2132296763a"
+SRC_URI[tzdata.sha256sum] = "547161eca24d344e0b5f96aff6a76b454da295dc14ed4ca50c2355043fb899a2"
diff --git a/meta/recipes-extended/xdg-utils/xdg-utils_1.1.3.bb b/meta/recipes-extended/xdg-utils/xdg-utils_1.1.3.bb
index 8e46638197..37834baeda 100644
--- a/meta/recipes-extended/xdg-utils/xdg-utils_1.1.3.bb
+++ b/meta/recipes-extended/xdg-utils/xdg-utils_1.1.3.bb
@@ -17,7 +17,7 @@ xdg-terminal \
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=a5367a90934098d6b05af3b746405014"
-SRC_URI = "http://portland.freedesktop.org/download/${BPN}-${PV}.tar.gz \
+SRC_URI = "https://portland.freedesktop.org/download/${BPN}-${PV}.tar.gz \
file://0001-Reinstate-xdg-terminal.patch \
file://0001-Don-t-build-the-in-script-manual.patch \
"
diff --git a/meta/recipes-extended/xz/xz_5.2.4.bb b/meta/recipes-extended/xz/xz_5.2.4.bb
index 791746e1cf..83e8fe0cd1 100644
--- a/meta/recipes-extended/xz/xz_5.2.4.bb
+++ b/meta/recipes-extended/xz/xz_5.2.4.bb
@@ -1,5 +1,5 @@
SUMMARY = "Utilities for managing LZMA compressed files"
-HOMEPAGE = "http://tukaani.org/xz/"
+HOMEPAGE = "https://tukaani.org/xz/"
SECTION = "base"
# The source includes bits of PD, GPLv2, GPLv3, LGPLv2.1+, but the only file
@@ -22,7 +22,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=97d554a32881fee0aa283d96e47cb24a \
file://lib/getopt.c;endline=23;md5=2069b0ee710572c03bb3114e4532cd84 \
"
-SRC_URI = "http://tukaani.org/xz/xz-${PV}.tar.gz"
+SRC_URI = "https://tukaani.org/xz/xz-${PV}.tar.gz"
SRC_URI[md5sum] = "5ace3264bdd00c65eeec2891346f65e6"
SRC_URI[sha256sum] = "b512f3b726d3b37b6dc4c8570e137b9311e7552e8ccbab4d39d47ce5f4177145"
UPSTREAM_CHECK_REGEX = "xz-(?P<pver>\d+(\.\d+)+)\.tar"
diff --git a/meta/recipes-gnome/gcr/gcr_3.28.1.bb b/meta/recipes-gnome/gcr/gcr_3.28.1.bb
index 2299199c31..64b0569f04 100644
--- a/meta/recipes-gnome/gcr/gcr_3.28.1.bb
+++ b/meta/recipes-gnome/gcr/gcr_3.28.1.bb
@@ -5,7 +5,7 @@ BUGTRACKER = "https://bugzilla.gnome.org/"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
-DEPENDS = "intltool-native gtk+3 p11-kit glib-2.0 libgcrypt \
+DEPENDS = "intltool-native gtk+3 p11-kit glib-2.0 libgcrypt gnupg-native \
${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'libxslt-native', '', d)}"
inherit gnomebase gtk-icon-cache gtk-doc distro_features_check upstream-version-is-even vala gobject-introspection
diff --git a/meta/recipes-gnome/gtk+/gtk+3/sort-resources.patch b/meta/recipes-gnome/gtk+/gtk+3/sort-resources.patch
new file mode 100644
index 0000000000..7f87372c52
--- /dev/null
+++ b/meta/recipes-gnome/gtk+/gtk+3/sort-resources.patch
@@ -0,0 +1,19 @@
+If the resources file isn't sorted in some way then libgdk.so will differ
+depending on the inode order of the resource files.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+diff --git a/gdk/Makefile.am b/gdk/Makefile.am
+index e25b57ba50..26f2d57c6e 100644
+--- a/gdk/Makefile.am
++++ b/gdk/Makefile.am
+@@ -465,7 +465,7 @@ stamp-gc-h: $(top_builddir)/config.status
+ # Resources
+ #
+
+-glsl_sources := $(wildcard $(srcdir)/resources/glsl/*.glsl)
++glsl_sources := $(sort $(wildcard $(srcdir)/resources/glsl/*.glsl))
+
+ gdk.gresource.xml: Makefile.am
+ $(AM_V_GEN) echo "<?xml version='1.0' encoding='UTF-8'?>" > $@; \
diff --git a/meta/recipes-gnome/gtk+/gtk+3_3.24.8.bb b/meta/recipes-gnome/gtk+/gtk+3_3.24.8.bb
index d79b18bee0..596dee6264 100644
--- a/meta/recipes-gnome/gtk+/gtk+3_3.24.8.bb
+++ b/meta/recipes-gnome/gtk+/gtk+3_3.24.8.bb
@@ -7,6 +7,7 @@ SRC_URI = "http://ftp.gnome.org/pub/gnome/sources/gtk+/${MAJ_VER}/gtk+-${PV}.tar
file://0002-Do-not-try-to-initialize-GL-without-libGL.patch \
file://0003-Add-disable-opengl-configure-option.patch \
file://link_fribidi.patch \
+ file://sort-resources.patch \
"
SRC_URI[md5sum] = "eeedde01856238114dcf4df3ebc942a5"
SRC_URI[sha256sum] = "666962de9b9768fe9ca785b0e2f42c8b9db3868a12fa9b356b167238d70ac799"
diff --git a/meta/recipes-gnome/hicolor-icon-theme/hicolor-icon-theme_0.17.bb b/meta/recipes-gnome/hicolor-icon-theme/hicolor-icon-theme_0.17.bb
index fb8033448d..6872069241 100644
--- a/meta/recipes-gnome/hicolor-icon-theme/hicolor-icon-theme_0.17.bb
+++ b/meta/recipes-gnome/hicolor-icon-theme/hicolor-icon-theme_0.17.bb
@@ -5,7 +5,7 @@ BUGTRACKER = "https://bugs.freedesktop.org/"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=f08a446809913fc9b3c718f0eaea0426"
-SRC_URI = "http://icon-theme.freedesktop.org/releases/${BPN}-${PV}.tar.xz"
+SRC_URI = "https://icon-theme.freedesktop.org/releases/${BPN}-${PV}.tar.xz"
SRC_URI[md5sum] = "84eec8d6f810240a069c731f1870b474"
SRC_URI[sha256sum] = "317484352271d18cbbcfac3868eab798d67fff1b8402e740baa6ff41d588a9d8"
diff --git a/meta/recipes-graphics/cairo/cairo_1.16.0.bb b/meta/recipes-graphics/cairo/cairo_1.16.0.bb
index f32e9ba1bc..e3de3f6164 100644
--- a/meta/recipes-graphics/cairo/cairo_1.16.0.bb
+++ b/meta/recipes-graphics/cairo/cairo_1.16.0.bb
@@ -10,12 +10,12 @@ HOMEPAGE = "http://cairographics.org"
BUGTRACKER = "http://bugs.freedesktop.org"
SECTION = "libs"
-LICENSE = "MPL-1.1 & LGPLv2.1 & GPLv3+"
-LICENSE_${PN} = "MPL-1.1 & LGPLv2.1"
-LICENSE_${PN}-dev = "MPL-1.1 & LGPLv2.1"
-LICENSE_${PN}-doc = "MPL-1.1 & LGPLv2.1"
-LICENSE_${PN}-gobject = "MPL-1.1 & LGPLv2.1"
-LICENSE_${PN}-script-interpreter = "MPL-1.1 & LGPLv2.1"
+LICENSE = "(MPL-1.1 | LGPLv2.1) & GPLv3+"
+LICENSE_${PN} = "MPL-1.1 | LGPLv2.1"
+LICENSE_${PN}-dev = "MPL-1.1 | LGPLv2.1"
+LICENSE_${PN}-doc = "MPL-1.1 | LGPLv2.1"
+LICENSE_${PN}-gobject = "MPL-1.1 | LGPLv2.1"
+LICENSE_${PN}-script-interpreter = "MPL-1.1 | LGPLv2.1"
LICENSE_${PN}-perf-utils = "GPLv3+"
LIC_FILES_CHKSUM = "file://COPYING;md5=e73e999e0c72b5ac9012424fa157ad77"
diff --git a/meta/recipes-graphics/jpeg/files/0001-rdppm.c-Fix-buf-overrun-caused-by-bad-binary-PPM.patch b/meta/recipes-graphics/jpeg/files/0001-rdppm.c-Fix-buf-overrun-caused-by-bad-binary-PPM.patch
new file mode 100644
index 0000000000..03b6dba153
--- /dev/null
+++ b/meta/recipes-graphics/jpeg/files/0001-rdppm.c-Fix-buf-overrun-caused-by-bad-binary-PPM.patch
@@ -0,0 +1,81 @@
+From ade1818b7542ef9e11ece5ce98df91fab45d674c Mon Sep 17 00:00:00 2001
+From: DRC <information@libjpeg-turbo.org>
+Date: Tue, 2 Jun 2020 14:15:37 -0500
+Subject: [PATCH] rdppm.c: Fix buf overrun caused by bad binary PPM
+
+This extends the fix in 1e81b0c3ea26f4ea8f56de05367469333de64a9f to
+include binary PPM files with maximum values < 255, thus preventing a
+malformed binary PPM input file with those specifications from
+triggering an overrun of the rescale array and potentially crashing
+cjpeg, TJBench, or any program that uses the tjLoadImage() function.
+
+Fixes #433
+
+CVE: CVE-2020-13790
+
+Signed-off-by: Liu Haitao <haitao.liu@windriver.com>
+---
+ ChangeLog.md | 20 ++++++++++++++++----
+ rdppm.c | 4 ++--
+ 2 files changed, 18 insertions(+), 6 deletions(-)
+
+diff --git a/ChangeLog.md b/ChangeLog.md
+index 3667d12..198c7b8 100644
+--- a/ChangeLog.md
++++ b/ChangeLog.md
+@@ -1,3 +1,15 @@
++2.0.4
++=====
++
++### Significant changes relative to 2.0.3:
++
++1. Fixed an issue in the PPM reader that caused a buffer overrun in cjpeg,
++TJBench, or the `tjLoadImage()` function if one of the values in a binary
++PPM/PGM input file exceeded the maximum value defined in the file's header and
++that maximum value was less than 255. libjpeg-turbo 1.5.0 already included a
++similar fix for binary PPM/PGM files with maximum values greater than 255.
++
++
+ 2.0.3
+ =====
+
+@@ -520,10 +532,10 @@ application was linked against.
+
+ 3. Fixed a couple of issues in the PPM reader that would cause buffer overruns
+ in cjpeg if one of the values in a binary PPM/PGM input file exceeded the
+-maximum value defined in the file's header. libjpeg-turbo 1.4.2 already
+-included a similar fix for ASCII PPM/PGM files. Note that these issues were
+-not security bugs, since they were confined to the cjpeg program and did not
+-affect any of the libjpeg-turbo libraries.
++maximum value defined in the file's header and that maximum value was greater
++than 255. libjpeg-turbo 1.4.2 already included a similar fix for ASCII PPM/PGM
++files. Note that these issues were not security bugs, since they were confined
++to the cjpeg program and did not affect any of the libjpeg-turbo libraries.
+
+ 4. Fixed an issue whereby attempting to decompress a JPEG file with a corrupt
+ header using the `tjDecompressToYUV2()` function would cause the function to
+diff --git a/rdppm.c b/rdppm.c
+index 87bc330..a8507b9 100644
+--- a/rdppm.c
++++ b/rdppm.c
+@@ -5,7 +5,7 @@
+ * Copyright (C) 1991-1997, Thomas G. Lane.
+ * Modified 2009 by Bill Allombert, Guido Vollbeding.
+ * libjpeg-turbo Modifications:
+- * Copyright (C) 2015-2017, D. R. Commander.
++ * Copyright (C) 2015-2017, 2020, D. R. Commander.
+ * For conditions of distribution and use, see the accompanying README.ijg
+ * file.
+ *
+@@ -720,7 +720,7 @@ start_input_ppm(j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
+ /* On 16-bit-int machines we have to be careful of maxval = 65535 */
+ source->rescale = (JSAMPLE *)
+ (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
+- (size_t)(((long)maxval + 1L) *
++ (size_t)(((long)MAX(maxval, 255) + 1L) *
+ sizeof(JSAMPLE)));
+ half_maxval = maxval / 2;
+ for (val = 0; val <= (long)maxval; val++) {
+--
+2.17.0
+
diff --git a/meta/recipes-graphics/jpeg/libjpeg-turbo_2.0.3.bb b/meta/recipes-graphics/jpeg/libjpeg-turbo_2.0.3.bb
index 1cf854de62..8ea81f386f 100644
--- a/meta/recipes-graphics/jpeg/libjpeg-turbo_2.0.3.bb
+++ b/meta/recipes-graphics/jpeg/libjpeg-turbo_2.0.3.bb
@@ -12,6 +12,7 @@ DEPENDS_append_x86_class-target = " nasm-native"
SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz \
file://0001-libjpeg-turbo-fix-package_qa-error.patch \
+ file://0001-rdppm.c-Fix-buf-overrun-caused-by-bad-binary-PPM.patch \
"
SRC_URI[md5sum] = "bd07fddf26f9def7bab02739eb655116"
diff --git a/meta/recipes-graphics/libsdl2/libsdl2/0001-configure-check-for-build-dir-when-building-version-.patch b/meta/recipes-graphics/libsdl2/libsdl2/0001-configure-check-for-build-dir-when-building-version-.patch
new file mode 100644
index 0000000000..bba3a6d240
--- /dev/null
+++ b/meta/recipes-graphics/libsdl2/libsdl2/0001-configure-check-for-build-dir-when-building-version-.patch
@@ -0,0 +1,45 @@
+From 6a4cc6d0a53402f646045c2994844237d978f9b5 Mon Sep 17 00:00:00 2001
+From: Anuj Mittal <anuj.mittal@intel.com>
+Date: Fri, 8 Nov 2019 15:07:22 +0800
+Subject: [PATCH] configure: check for build dir when building version res
+
+Fixes a race where we try to build version res file in build directory
+before it has even been created. Prevents errors like:
+
+/bin/bash ../SDL2-2.0.10/build-scripts/updaterev.sh
+/bin/bash ../SDL2-2.0.10/build-scripts/mkinstalldirs build
+mkdir -p -- build
+x86_64-pokysdk-mingw32-windres --include-dir=/home/pokybuild/yocto-worker/meta-mingw/build/build/tmp/work/x86_64-nativesdk-mingw32-pokysdk-mingw32/nativesdk-libsdl2/2.0.10-r0/recipe-sysroot/opt/poky/3.0/sysroots/x86_64-pokysdk-mingw32/usr/include ../SDL2-2.0.10/src/main/windows/version.rc build/version.o
+x86_64-pokysdk-mingw32-windres: build/version.o: No such file or directory
+Makefile:692: recipe for target 'build/version.o' failed
+make: *** [build/version.o] Error 1
+make: *** Waiting for unfinished jobs....
+touch build/.created
+WARNING: exit code 1 from a shell command.
+
+Extension of upstream fix:
+https://hg.libsdl.org/SDL/rev/99d8b18acf8a
+
+Upstream-Status: Pending
+
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 1aea11fbd..186229ab0 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -4177,7 +4177,7 @@ VERSION_OBJECTS=`echo $VERSION_SOURCES`
+ VERSION_DEPENDS=`echo $VERSION_SOURCES`
+ VERSION_OBJECTS=`echo "$VERSION_OBJECTS" | sed 's,[[^ ]]*/\([[^ ]]*\)\.rc,$(objects)/\1.o,g'`
+ VERSION_DEPENDS=`echo "$VERSION_DEPENDS" | sed "s,\\([[^ ]]*\\)/\\([[^ ]]*\\)\\.rc,\\\\
+-\\$(objects)/\\2.o: \\1/\\2.rc\\\\
++\\$(objects)/\\2.o: \\1/\\2.rc \\$(objects)/.created\\\\
+ \\$(WINDRES) \\$< \\$@,g"`
+
+ SDLMAIN_OBJECTS=`echo $SDLMAIN_SOURCES`
+--
+2.21.0
+
diff --git a/meta/recipes-graphics/libsdl2/libsdl2_2.0.10.bb b/meta/recipes-graphics/libsdl2/libsdl2_2.0.10.bb
index cdc8650e17..ed87cd71c3 100644
--- a/meta/recipes-graphics/libsdl2/libsdl2_2.0.10.bb
+++ b/meta/recipes-graphics/libsdl2/libsdl2_2.0.10.bb
@@ -15,6 +15,7 @@ PROVIDES = "virtual/libsdl2"
SRC_URI = "http://www.libsdl.org/release/SDL2-${PV}.tar.gz \
file://more-gen-depends.patch \
file://0001-Fixed-bug-4538-validate-image-size-when-loading-BMP-.patch \
+ file://0001-configure-check-for-build-dir-when-building-version-.patch \
"
S = "${WORKDIR}/SDL2-${PV}"
@@ -35,6 +36,7 @@ EXTRA_OECONF = "--disable-oss --disable-esd --disable-arts \
--enable-sdl-dlopen \
--disable-rpath \
--disable-sndio \
+ --disable-fcitx --disable-ibus \
"
# opengl packageconfig factored out to make it easy for distros
diff --git a/meta/recipes-graphics/mesa/files/0003-Allow-enable-DRI-without-DRI-drivers.patch b/meta/recipes-graphics/mesa/files/0003-Allow-enable-DRI-without-DRI-drivers.patch
index 3458c19199..346b217585 100644
--- a/meta/recipes-graphics/mesa/files/0003-Allow-enable-DRI-without-DRI-drivers.patch
+++ b/meta/recipes-graphics/mesa/files/0003-Allow-enable-DRI-without-DRI-drivers.patch
@@ -23,7 +23,7 @@ index 0e50bb26c0a..de065c290d6 100644
with_dri_swrast = dri_drivers.contains('swrast')
-with_dri = dri_drivers.length() != 0 and dri_drivers != ['']
-+with_dri = get_option('dri') or (_drivers.length() != 0 and _drivers != [''])
++with_dri = get_option('dri') or (dri_drivers.length() != 0 and dri_drivers != [''])
gallium_drivers = get_option('gallium-drivers')
if gallium_drivers.contains('auto')
diff --git a/meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2019-18390.patch b/meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2019-18390.patch
new file mode 100644
index 0000000000..ad61c95be3
--- /dev/null
+++ b/meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2019-18390.patch
@@ -0,0 +1,66 @@
+From 24f67de7a9088a873844a39be03cee6882260ac9 Mon Sep 17 00:00:00 2001
+From: Gert Wollny <gert.wollny@collabora.com>
+Date: Mon, 7 Oct 2019 10:59:56 +0200
+Subject: [PATCH] vrend: check info formats in blits
+
+Closes #141
+Closes #142
+
+v2 : drop colon in error description (Emil)
+
+Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
+Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
+
+Upstream-Status: Backport
+[https://gitlab.freedesktop.org/virgl/virglrenderer/commit/24f67de7a9088a873844a39be03cee6882260ac9]
+CVE: CVE-2019-18390
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ src/virgl_hw.h | 1 +
+ src/vrend_renderer.c | 11 +++++++++++
+ 2 files changed, 12 insertions(+)
+
+diff --git a/src/virgl_hw.h b/src/virgl_hw.h
+index 145780bf..5ccf3073 100644
+--- a/src/virgl_hw.h
++++ b/src/virgl_hw.h
+@@ -426,6 +426,7 @@ enum virgl_ctx_errors {
+ VIRGL_ERROR_CTX_ILLEGAL_CMD_BUFFER,
+ VIRGL_ERROR_CTX_GLES_HAVE_TES_BUT_MISS_TCS,
+ VIRGL_ERROR_GL_ANY_SAMPLES_PASSED,
++ VIRGL_ERROR_CTX_ILLEGAL_FORMAT,
+ };
+
+ #define VIRGL_RESOURCE_Y_0_TOP (1 << 0)
+diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
+index 14fefb38..aa6a89c1 100644
+--- a/src/vrend_renderer.c
++++ b/src/vrend_renderer.c
+@@ -758,6 +758,7 @@ static const char *vrend_ctx_error_strings[] = {
+ [VIRGL_ERROR_CTX_ILLEGAL_CMD_BUFFER] = "Illegal command buffer",
+ [VIRGL_ERROR_CTX_GLES_HAVE_TES_BUT_MISS_TCS] = "On GLES context and shader program has tesselation evaluation shader but no tesselation control shader",
+ [VIRGL_ERROR_GL_ANY_SAMPLES_PASSED] = "Query for ANY_SAMPLES_PASSED not supported",
++ [VIRGL_ERROR_CTX_ILLEGAL_FORMAT] = "Illegal format ID",
+ };
+
+ static void __report_context_error(const char *fname, struct vrend_context *ctx,
+@@ -8492,6 +8493,16 @@ void vrend_renderer_blit(struct vrend_context *ctx,
+ if (ctx->in_error)
+ return;
+
++ if (!info->src.format || (enum virgl_formats)info->src.format >= VIRGL_FORMAT_MAX) {
++ report_context_error(ctx, VIRGL_ERROR_CTX_ILLEGAL_FORMAT, info->src.format);
++ return;
++ }
++
++ if (!info->dst.format || (enum virgl_formats)info->dst.format >= VIRGL_FORMAT_MAX) {
++ report_context_error(ctx, VIRGL_ERROR_CTX_ILLEGAL_FORMAT, info->dst.format);
++ return;
++ }
++
+ if (info->render_condition_enable == false)
+ vrend_pause_render_condition(ctx, true);
+
+--
+2.24.1
+
diff --git a/meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2019-18391.patch b/meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2019-18391.patch
new file mode 100644
index 0000000000..cc641d8293
--- /dev/null
+++ b/meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2019-18391.patch
@@ -0,0 +1,51 @@
+From 2abeb1802e3c005b17a7123e382171b3fb665971 Mon Sep 17 00:00:00 2001
+From: Gert Wollny <gert.wollny@collabora.com>
+Date: Tue, 8 Oct 2019 17:27:01 +0200
+Subject: [PATCH] vrend: check that the transfer iov holds enough data for the
+ data upload
+
+Closes #140
+
+Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
+Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
+
+Upstream-Status: Backport
+[https://gitlab.freedesktop.org/virgl/virglrenderer/commit/2abeb1802e3c005b17a7123e382171b3fb665971]
+CVE: CVE-2019-18391
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ src/vrend_renderer.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
+index 694e1d0e..fe23846b 100644
+--- a/src/vrend_renderer.c
++++ b/src/vrend_renderer.c
+@@ -7005,15 +7005,22 @@ static int vrend_renderer_transfer_write_iov(struct vrend_context *ctx,
+ invert = true;
+ }
+
++ send_size = util_format_get_nblocks(res->base.format, info->box->width,
++ info->box->height) * elsize;
++ if (res->target == GL_TEXTURE_3D ||
++ res->target == GL_TEXTURE_2D_ARRAY ||
++ res->target == GL_TEXTURE_CUBE_MAP_ARRAY)
++ send_size *= info->box->depth;
++
+ if (need_temp) {
+- send_size = util_format_get_nblocks(res->base.format, info->box->width,
+- info->box->height) * elsize * info->box->depth;
+ data = malloc(send_size);
+ if (!data)
+ return ENOMEM;
+ read_transfer_data(iov, num_iovs, data, res->base.format, info->offset,
+ stride, layer_stride, info->box, invert);
+ } else {
++ if (send_size > iov[0].iov_len - info->offset)
++ return EINVAL;
+ data = (char*)iov[0].iov_base + info->offset;
+ }
+
+--
+2.24.1
+
diff --git a/meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2020-8002.patch b/meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2020-8002.patch
new file mode 100644
index 0000000000..925f2c8eb0
--- /dev/null
+++ b/meta/recipes-graphics/virglrenderer/virglrenderer/CVE-2020-8002.patch
@@ -0,0 +1,39 @@
+From 63bcca251f093d83da7e290ab4bbd38ae69089b5 Mon Sep 17 00:00:00 2001
+From: Gert Wollny <gert.wollny@collabora.com>
+Date: Wed, 15 Jan 2020 13:43:58 +0100
+Subject: [PATCH] vrend: Don't try launching a grid if no CS is available
+
+Closes #155
+
+Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
+Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
+
+Upstream-Status: Backport
+[https://gitlab.freedesktop.org/virgl/virglrenderer/-/commit/63bcca251f093d83da7e290ab4bbd38ae69089b5.patch]
+CVE: CVE-2020-8002
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ src/vrend_renderer.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
+index a054bad8..2280fc43 100644
+--- a/src/vrend_renderer.c
++++ b/src/vrend_renderer.c
+@@ -4604,6 +4604,13 @@ void vrend_launch_grid(struct vrend_context *ctx,
+ }
+ ctx->sub->shader_dirty = true;
+ }
++
++ if (!ctx->sub->prog) {
++ vrend_printf("%s: Skipping compute shader execution due to missing shaders: %s\n",
++ __func__, ctx->debug_name);
++ return;
++ }
++
+ vrend_use_program(ctx, ctx->sub->prog->id);
+
+ vrend_draw_bind_ubo_shader(ctx, PIPE_SHADER_COMPUTE, 0);
+--
+2.24.1
+
diff --git a/meta/recipes-graphics/virglrenderer/virglrenderer_0.8.0.bb b/meta/recipes-graphics/virglrenderer/virglrenderer_0.8.0.bb
index d2b11c103a..e91ccc6c57 100644
--- a/meta/recipes-graphics/virglrenderer/virglrenderer_0.8.0.bb
+++ b/meta/recipes-graphics/virglrenderer/virglrenderer_0.8.0.bb
@@ -8,6 +8,9 @@ DEPENDS = "libdrm mesa libepoxy"
SRCREV = "48cc96c9aebb9d0164830a157efc8916f08f00c0"
SRC_URI = "git://anongit.freedesktop.org/virglrenderer \
file://0001-gallium-Expand-libc-check-to-be-platform-OS-check.patch \
+ file://CVE-2019-18390.patch \
+ file://CVE-2019-18391.patch \
+ file://CVE-2020-8002.patch \
"
S = "${WORKDIR}/git"
diff --git a/meta/recipes-graphics/waffle/waffle_1.6.0.bb b/meta/recipes-graphics/waffle/waffle_1.6.0.bb
index 8a1d5748f6..82cead9ad1 100644
--- a/meta/recipes-graphics/waffle/waffle_1.6.0.bb
+++ b/meta/recipes-graphics/waffle/waffle_1.6.0.bb
@@ -35,3 +35,8 @@ PACKAGECONFIG[x11-egl] = "-Dx11_egl=enabled,-Dx11_egl=disabled,virtual/${MLPREFI
PACKAGECONFIG[surfaceless-egl] = "-Dsurfaceless_egl=enabled,-Dsurfaceless_egl=disabled,virtual/${MLPREFIX}libgl"
# TODO: optionally build manpages and examples
+
+# Unset these to stop python trying to report the target Python setup
+_PYTHON_SYSCONFIGDATA_NAME[unexport] = "1"
+STAGING_INCDIR[unexport] = "1"
+STAGING_LIBDIR[unexport] = "1"
diff --git a/meta/recipes-graphics/wayland/libinput/determinism.patch b/meta/recipes-graphics/wayland/libinput/determinism.patch
new file mode 100644
index 0000000000..cb554030cf
--- /dev/null
+++ b/meta/recipes-graphics/wayland/libinput/determinism.patch
@@ -0,0 +1,21 @@
+This finds our outer git tree and that version information breaks
+determinism of this recipe. Disable it.
+
+RP 2020/2/6
+
+Upstream-Status: Pending
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: libinput-1.14.3/meson.build
+===================================================================
+--- libinput-1.14.3.orig/meson.build
++++ libinput-1.14.3/meson.build
+@@ -387,7 +387,7 @@ pkgconfig.generate(
+ libraries : lib_libinput
+ )
+
+-git_version_h = vcs_tag(command : ['git', 'describe'],
++git_version_h = vcs_tag(command : ['false'],
+ fallback : 'unknown',
+ input : 'src/libinput-git-version.h.in',
+ output :'libinput-git-version.h')
diff --git a/meta/recipes-graphics/wayland/libinput_1.14.1.bb b/meta/recipes-graphics/wayland/libinput_1.14.1.bb
index 38bc8d2c33..2c5733f33a 100644
--- a/meta/recipes-graphics/wayland/libinput_1.14.1.bb
+++ b/meta/recipes-graphics/wayland/libinput_1.14.1.bb
@@ -7,7 +7,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=1f2ea9ebff3a2c6d458faf58492efb63"
DEPENDS = "libevdev udev mtdev"
-SRC_URI = "http://www.freedesktop.org/software/${BPN}/${BP}.tar.xz"
+SRC_URI = "http://www.freedesktop.org/software/${BPN}/${BP}.tar.xz \
+ file://determinism.patch \
+"
SRC_URI[md5sum] = "da29a704dc6f7ea2d5aac754db046340"
SRC_URI[sha256sum] = "e333a3242835c019ca37d2cef8b51a87d3138eb47444119c0153dc7a8656ee70"
diff --git a/meta/recipes-graphics/x11-common/xserver-nodm-init/capability.conf b/meta/recipes-graphics/x11-common/xserver-nodm-init/capability.conf
new file mode 100644
index 0000000000..7ab7460816
--- /dev/null
+++ b/meta/recipes-graphics/x11-common/xserver-nodm-init/capability.conf
@@ -0,0 +1,2 @@
+cap_sys_admin @USER@
+none *
diff --git a/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm b/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm
index 6c548551b8..116bb278bc 100755
--- a/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm
+++ b/meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm
@@ -38,6 +38,14 @@ case "$1" in
if [ -e /dev/hidraw0 ]; then
chmod o+rw /dev/hidraw*
fi
+ # Make sure that the Xorg has the cap_sys_admin capability which is
+ # needed for setting the drm master
+ if ! grep -q "^auth.*pam_cap\.so" /etc/pam.d/su; then
+ echo "auth optional pam_cap.so" >>/etc/pam.d/su
+ fi
+ if ! /usr/sbin/getcap $XSERVER | grep -q cap_sys_admin; then
+ /usr/sbin/setcap cap_sys_admin+eip $XSERVER
+ fi
fi
# Using su rather than sudo as latest 1.8.1 cause failure [YOCTO #1211]
diff --git a/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb b/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb
index a77c56445c..7f4e1e29f1 100644
--- a/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb
+++ b/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb
@@ -10,6 +10,7 @@ SRC_URI = "file://xserver-nodm \
file://gplv2-license.patch \
file://xserver-nodm.service.in \
file://xserver-nodm.conf.in \
+ file://capability.conf \
"
S = "${WORKDIR}"
@@ -19,7 +20,7 @@ PACKAGE_ARCH = "${MACHINE_ARCH}"
inherit update-rc.d systemd distro_features_check
-REQUIRED_DISTRO_FEATURES = "x11"
+REQUIRED_DISTRO_FEATURES = "x11 ${@oe.utils.conditional('ROOTLESS_X', '1', 'pam', '', d)}"
PACKAGECONFIG ??= "blank"
# dpms and screen saver will be on only if 'blank' is in PACKAGECONFIG
@@ -40,6 +41,8 @@ do_install() {
if [ "${ROOTLESS_X}" = "1" ] ; then
XUSER_HOME="/home/xuser"
XUSER="xuser"
+ install -D capability.conf ${D}${sysconfdir}/security/capability.conf
+ sed -i "s:@USER@:${XUSER}:" ${D}${sysconfdir}/security/capability.conf
else
XUSER_HOME=${ROOT_HOME}
XUSER="root"
@@ -60,7 +63,7 @@ do_install() {
fi
}
-RDEPENDS_${PN} = "xinit ${@oe.utils.conditional('ROOTLESS_X', '1', 'xuser-account', '', d)}"
+RDEPENDS_${PN} = "xinit ${@oe.utils.conditional('ROOTLESS_X', '1', 'xuser-account libcap libcap-bin', '', d)}"
INITSCRIPT_NAME = "xserver-nodm"
INITSCRIPT_PARAMS = "start 9 5 . stop 20 0 1 2 3 6 ."
diff --git a/meta/recipes-graphics/xorg-app/xorg-app-common.inc b/meta/recipes-graphics/xorg-app/xorg-app-common.inc
index 3529cb26ef..211e399cf0 100644
--- a/meta/recipes-graphics/xorg-app/xorg-app-common.inc
+++ b/meta/recipes-graphics/xorg-app/xorg-app-common.inc
@@ -12,6 +12,6 @@ INC_PR = "r8"
SRC_URI = "${XORG_MIRROR}/individual/app/${BPN}-${PV}.tar.bz2"
-inherit autotools pkgconfig distro_features_check
+inherit autotools pkgconfig distro_features_check gettext
FILES_${PN} += " ${libdir}/X11/${BPN} ${datadir}/X11/app-defaults/"
diff --git a/meta/recipes-graphics/xorg-font/encodings_1.0.5.bb b/meta/recipes-graphics/xorg-font/encodings_1.0.5.bb
index a39609b5da..74014ff91b 100644
--- a/meta/recipes-graphics/xorg-font/encodings_1.0.5.bb
+++ b/meta/recipes-graphics/xorg-font/encodings_1.0.5.bb
@@ -19,3 +19,7 @@ SRC_URI[sha256sum] = "bd96e16143a044b19e87f217cf6a3763a70c561d1076aad6f6d862ec41
inherit allarch
EXTRA_OECONF += "--with-encodingsdir=${datadir}/fonts/X11/encodings"
+
+# postinst from .inc doesn't apply to this recipe
+pkg_postinst_${PN} () {
+}
diff --git a/meta/recipes-graphics/xorg-lib/libxshmfence_1.3.bb b/meta/recipes-graphics/xorg-lib/libxshmfence_1.3.bb
index 85a48e4c58..cc45696530 100644
--- a/meta/recipes-graphics/xorg-lib/libxshmfence_1.3.bb
+++ b/meta/recipes-graphics/xorg-lib/libxshmfence_1.3.bb
@@ -11,6 +11,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=47e508ca280fde97906eacb77892c3ac"
DEPENDS += "virtual/libx11"
+EXTRA_OECONF += "--with-shared-memory-dir=/dev/shm"
+
BBCLASSEXTEND = "native nativesdk"
SRC_URI[md5sum] = "42dda8016943dc12aff2c03a036e0937"
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2020-14347.patch b/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2020-14347.patch
new file mode 100644
index 0000000000..20a604869b
--- /dev/null
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xorg/CVE-2020-14347.patch
@@ -0,0 +1,37 @@
+From aac28e162e5108510065ad4c323affd6deffd816 Mon Sep 17 00:00:00 2001
+From: Matthieu Herrb <matthieu@herrb.eu>
+Date: Sat, 25 Jul 2020 19:33:50 +0200
+Subject: [PATCH] fix for ZDI-11426
+
+Avoid leaking un-initalized memory to clients by zeroing the
+whole pixmap on initial allocation.
+
+This vulnerability was discovered by:
+Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
+
+Signed-off-by: Matthieu Herrb <matthieu@herrb.eu>
+Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+Upstream-Status: Backport
+CVE: CVE-2020-14347
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ dix/pixmap.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dix/pixmap.c b/dix/pixmap.c
+index 1186d7dbb..5a0146bbb 100644
+--- a/dix/pixmap.c
++++ b/dix/pixmap.c
+@@ -116,7 +116,7 @@ AllocatePixmap(ScreenPtr pScreen, int pixDataSize)
+ if (pScreen->totalPixmapSize > ((size_t) - 1) - pixDataSize)
+ return NullPixmap;
+
+- pPixmap = malloc(pScreen->totalPixmapSize + pixDataSize);
++ pPixmap = calloc(1, pScreen->totalPixmapSize + pixDataSize);
+ if (!pPixmap)
+ return NullPixmap;
+
+--
+2.17.1
+
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.20.5.bb b/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.20.5.bb
index 3de6d22e57..f0f15a2584 100644
--- a/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.20.5.bb
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.20.5.bb
@@ -5,6 +5,7 @@ SRC_URI += "file://0001-xf86pciBus.c-use-Intel-ddx-only-for-pre-gen4-hardwar.pat
file://0001-test-xtest-Initialize-array-with-braces.patch \
file://0001-compiler.h-Do-not-include-sys-io.h-on-ARM-with-glibc.patch \
file://sdksyms-no-build-path.patch \
+ file://CVE-2020-14347.patch \
"
SRC_URI[md5sum] = "c9fc7e21e11286dbedd22c00df652130"
SRC_URI[sha256sum] = "a81d8243f37e75a03d4f8c55f96d0bc25802be6ec45c3bfa5cb614c6d01bac9d"
diff --git a/meta/recipes-kernel/linux-firmware/linux-firmware_20190815.bb b/meta/recipes-kernel/linux-firmware/linux-firmware_20190815.bb
index 518638806f..d83000b64f 100644
--- a/meta/recipes-kernel/linux-firmware/linux-firmware_20190815.bb
+++ b/meta/recipes-kernel/linux-firmware/linux-firmware_20190815.bb
@@ -273,6 +273,7 @@ PACKAGES =+ "${PN}-ralink-license ${PN}-ralink \
${PN}-bcm4358 \
${PN}-bcm43602 \
${PN}-bcm4366b \
+ ${PN}-bcm4366c \
${PN}-bcm4371 \
${PN}-bcm4373 \
${PN}-bcm43xx \
@@ -571,7 +572,7 @@ FILES_${PN}-bcm43xx-hdr = "${nonarch_base_libdir}/firmware/brcm/bcm43xx_hdr-0.fw
FILES_${PN}-bcm4329-fullmac = "${nonarch_base_libdir}/firmware/brcm/bcm4329-fullmac-4.bin"
FILES_${PN}-bcm43236b = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43236b.bin"
FILES_${PN}-bcm4329 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4329-sdio.bin"
-FILES_${PN}-bcm4330 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4330-sdio.bin"
+FILES_${PN}-bcm4330 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4330-sdio.*"
FILES_${PN}-bcm4334 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4334-sdio.bin"
FILES_${PN}-bcm4335 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4335-sdio.bin"
FILES_${PN}-bcm4339 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4339-sdio.bin"
@@ -582,8 +583,8 @@ FILES_${PN}-bcm43242a = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43242a.bin
FILES_${PN}-bcm43143 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43143.bin \
${nonarch_base_libdir}/firmware/brcm/brcmfmac43143-sdio.bin \
"
-FILES_${PN}-bcm43430a0 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43430a0-sdio.bin"
-FILES_${PN}-bcm43455 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43455-sdio.bin"
+FILES_${PN}-bcm43430a0 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43430a0-sdio.*"
+FILES_${PN}-bcm43455 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43455-sdio.*"
FILES_${PN}-bcm4350c2 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4350c2-pcie.bin"
FILES_${PN}-bcm4350 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4350-pcie.bin"
FILES_${PN}-bcm4356 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4356-sdio.bin"
@@ -594,6 +595,7 @@ FILES_${PN}-bcm43602 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43602-pcie.
${nonarch_base_libdir}/firmware/brcm/brcmfmac43602-pcie.ap.bin \
"
FILES_${PN}-bcm4366b = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4366b-pcie.bin"
+FILES_${PN}-bcm4366c = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4366c-pcie.bin"
FILES_${PN}-bcm4371 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4371-pcie.bin"
# for i in `grep brcm WHENCE | grep ^File | sed 's/File: brcm.//g'`; do pkg=`echo $i | sed 's/-[sp40].*//g; s/\.bin//g; s/brcmfmac/bcm/g; s/_hdr/-hdr/g; s/BCM/bcm-0bb4-0306/g'`; echo -e "LICENSE_\${PN}-$pkg = \"Firmware-broadcom_bcm43xx\"\nRDEPENDS_\${PN}-$pkg += \"\${PN}-broadcom-license\""; done
@@ -647,6 +649,8 @@ LICENSE_${PN}-bcm43602 = "Firmware-broadcom_bcm43xx"
RDEPENDS_${PN}-bcm43602 += "${PN}-broadcom-license"
LICENSE_${PN}-bcm4366b = "Firmware-broadcom_bcm43xx"
RDEPENDS_${PN}-bcm4366b += "${PN}-broadcom-license"
+LICENSE_${PN}-bcm4366c = "Firmware-broadcom_bcm43xx"
+RDEPENDS_${PN}-bcm4366c += "${PN}-broadcom-license"
LICENSE_${PN}-bcm4371 = "Firmware-broadcom_bcm43xx"
RDEPENDS_${PN}-bcm4371 += "${PN}-broadcom-license"
@@ -656,11 +660,11 @@ LICENSE_${PN}-cypress-license = "Firmware-cypress"
FILES_${PN}-cypress-license = "${nonarch_base_libdir}/firmware/LICENCE.cypress"
FILES_${PN}-bcm-0bb4-0306 = "${nonarch_base_libdir}/firmware/brcm/BCM-0bb4-0306.hcd"
-FILES_${PN}-bcm43340 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43340-sdio.bin"
-FILES_${PN}-bcm43362 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43362-sdio.bin"
-FILES_${PN}-bcm43430 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.bin"
+FILES_${PN}-bcm43340 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43340-sdio.*"
+FILES_${PN}-bcm43362 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43362-sdio.*"
+FILES_${PN}-bcm43430 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.*"
FILES_${PN}-bcm4354 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4354-sdio.bin"
-FILES_${PN}-bcm4356-pcie = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4356-pcie.bin"
+FILES_${PN}-bcm4356-pcie = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4356-pcie.*"
FILES_${PN}-bcm4373 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4373-sdio.bin \
${nonarch_base_libdir}/firmware/brcm/brcmfmac4373.bin \
"
diff --git a/meta/recipes-kernel/linux/linux-yocto-rt_4.19.bb b/meta/recipes-kernel/linux/linux-yocto-rt_4.19.bb
index 1edcd7edae..93c4472316 100644
--- a/meta/recipes-kernel/linux/linux-yocto-rt_4.19.bb
+++ b/meta/recipes-kernel/linux/linux-yocto-rt_4.19.bb
@@ -11,13 +11,13 @@ python () {
raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
}
-SRCREV_machine ?= "02f0c38dd20819c0e9d279e3b1e95280101ea8ab"
-SRCREV_meta ?= "a7cb57afb9fb9787079c28a1028d797632105e56"
+SRCREV_machine ?= "40e34fdcb540e35b1a97e8e52c11dfe52bd68b16"
+SRCREV_meta ?= "7cb520d405cd5ca8f21a333941fbc0861bbb36b0"
SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine \
git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-4.19;destsuffix=${KMETA}"
-LINUX_VERSION ?= "4.19.72"
+LINUX_VERSION ?= "4.19.107"
LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
diff --git a/meta/recipes-kernel/linux/linux-yocto-rt_5.2.bb b/meta/recipes-kernel/linux/linux-yocto-rt_5.2.bb
index e3fe54441f..a23a5e6f93 100644
--- a/meta/recipes-kernel/linux/linux-yocto-rt_5.2.bb
+++ b/meta/recipes-kernel/linux/linux-yocto-rt_5.2.bb
@@ -11,13 +11,13 @@ python () {
raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
}
-SRCREV_machine ?= "0a9f6ee2443b54c614107728ca76485916010023"
-SRCREV_meta ?= "b867b78b5019ae455af97dec7794cff7527d7624"
+SRCREV_machine ?= "78e147f949b5b18524aa7bd72f1cc8f7ae8039f8"
+SRCREV_meta ?= "bb2776d6beaae64b1a0fc902b64376f082085498"
SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine \
git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-5.2;destsuffix=${KMETA}"
-LINUX_VERSION ?= "5.2.17"
+LINUX_VERSION ?= "5.2.32"
LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
diff --git a/meta/recipes-kernel/linux/linux-yocto-tiny_4.19.bb b/meta/recipes-kernel/linux/linux-yocto-tiny_4.19.bb
index 446bce3a82..76b2467ef5 100644
--- a/meta/recipes-kernel/linux/linux-yocto-tiny_4.19.bb
+++ b/meta/recipes-kernel/linux/linux-yocto-tiny_4.19.bb
@@ -6,7 +6,7 @@ KCONFIG_MODE = "--allnoconfig"
require recipes-kernel/linux/linux-yocto.inc
-LINUX_VERSION ?= "4.19.72"
+LINUX_VERSION ?= "4.19.107"
LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
@@ -15,9 +15,9 @@ DEPENDS += "openssl-native util-linux-native"
KMETA = "kernel-meta"
KCONF_BSP_AUDIT_LEVEL = "2"
-SRCREV_machine_qemuarm ?= "283b870cef5f79a6f07465828a51f27a6aed4c50"
-SRCREV_machine ?= "2d7c98a6748a64ca36fd1d2e60c517b16326df61"
-SRCREV_meta ?= "a7cb57afb9fb9787079c28a1028d797632105e56"
+SRCREV_machine_qemuarm ?= "e2c947b59c650f2aa2f0f88d6af90f9dfb336e04"
+SRCREV_machine ?= "16ae5406361af8329b74580697cb738dadeb1ecb"
+SRCREV_meta ?= "7cb520d405cd5ca8f21a333941fbc0861bbb36b0"
PV = "${LINUX_VERSION}+git${SRCPV}"
diff --git a/meta/recipes-kernel/linux/linux-yocto-tiny_5.2.bb b/meta/recipes-kernel/linux/linux-yocto-tiny_5.2.bb
index f3f546866b..ac9904f415 100644
--- a/meta/recipes-kernel/linux/linux-yocto-tiny_5.2.bb
+++ b/meta/recipes-kernel/linux/linux-yocto-tiny_5.2.bb
@@ -6,7 +6,7 @@ KCONFIG_MODE = "--allnoconfig"
require recipes-kernel/linux/linux-yocto.inc
-LINUX_VERSION ?= "5.2.17"
+LINUX_VERSION ?= "5.2.32"
LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
@@ -15,9 +15,9 @@ DEPENDS += "openssl-native util-linux-native"
KMETA = "kernel-meta"
KCONF_BSP_AUDIT_LEVEL = "2"
-SRCREV_machine_qemuarm ?= "aaa66d462ec17345dadd69b1ec0f3fcc83e82536"
-SRCREV_machine ?= "255a750d28cd45df8923c3aba1e82c322757a50d"
-SRCREV_meta ?= "b867b78b5019ae455af97dec7794cff7527d7624"
+SRCREV_machine_qemuarm ?= "e0a3a01b24070b15121e938ea19755091bf0d662"
+SRCREV_machine ?= "73b12de4c879e4569bef3b2d0ee9c783a9788b27"
+SRCREV_meta ?= "bb2776d6beaae64b1a0fc902b64376f082085498"
PV = "${LINUX_VERSION}+git${SRCPV}"
diff --git a/meta/recipes-kernel/linux/linux-yocto_4.19.bb b/meta/recipes-kernel/linux/linux-yocto_4.19.bb
index 96debc42d8..6e3b00e0e5 100644
--- a/meta/recipes-kernel/linux/linux-yocto_4.19.bb
+++ b/meta/recipes-kernel/linux/linux-yocto_4.19.bb
@@ -11,22 +11,22 @@ KBRANCH_qemux86 ?= "v4.19/standard/base"
KBRANCH_qemux86-64 ?= "v4.19/standard/base"
KBRANCH_qemumips64 ?= "v4.19/standard/mti-malta64"
-SRCREV_machine_qemuarm ?= "b0be447bc9053d07f3438999778bd077679ae756"
-SRCREV_machine_qemuarm64 ?= "2d7c98a6748a64ca36fd1d2e60c517b16326df61"
-SRCREV_machine_qemumips ?= "3c8b21d0a335b5f418682969448574dfd0011f02"
-SRCREV_machine_qemuppc ?= "2d7c98a6748a64ca36fd1d2e60c517b16326df61"
-SRCREV_machine_qemux86 ?= "2d7c98a6748a64ca36fd1d2e60c517b16326df61"
-SRCREV_machine_qemux86-64 ?= "2d7c98a6748a64ca36fd1d2e60c517b16326df61"
-SRCREV_machine_qemumips64 ?= "2854797711fee4061fb760c2b6e0e3d3135195ab"
-SRCREV_machine ?= "2d7c98a6748a64ca36fd1d2e60c517b16326df61"
-SRCREV_meta ?= "a7cb57afb9fb9787079c28a1028d797632105e56"
+SRCREV_machine_qemuarm ?= "c8b87f4d12eb957d8a95442a928ef4820037bb55"
+SRCREV_machine_qemuarm64 ?= "16ae5406361af8329b74580697cb738dadeb1ecb"
+SRCREV_machine_qemumips ?= "94f102eaca76ffdcc3d47ea94b47486d7157c531"
+SRCREV_machine_qemuppc ?= "16ae5406361af8329b74580697cb738dadeb1ecb"
+SRCREV_machine_qemux86 ?= "16ae5406361af8329b74580697cb738dadeb1ecb"
+SRCREV_machine_qemux86-64 ?= "16ae5406361af8329b74580697cb738dadeb1ecb"
+SRCREV_machine_qemumips64 ?= "98288b7e79bc8130c2a889d763c9c1aa15ff4939"
+SRCREV_machine ?= "16ae5406361af8329b74580697cb738dadeb1ecb"
+SRCREV_meta ?= "7cb520d405cd5ca8f21a333941fbc0861bbb36b0"
SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRANCH}; \
git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-4.19;destsuffix=${KMETA} \
"
LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
-LINUX_VERSION ?= "4.19.72"
+LINUX_VERSION ?= "4.19.107"
DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
DEPENDS += "openssl-native util-linux-native"
diff --git a/meta/recipes-kernel/linux/linux-yocto_5.2.bb b/meta/recipes-kernel/linux/linux-yocto_5.2.bb
index 1a2c3ffcd2..eab142e1c6 100644
--- a/meta/recipes-kernel/linux/linux-yocto_5.2.bb
+++ b/meta/recipes-kernel/linux/linux-yocto_5.2.bb
@@ -12,16 +12,16 @@ KBRANCH_qemux86 ?= "v5.2/standard/base"
KBRANCH_qemux86-64 ?= "v5.2/standard/base"
KBRANCH_qemumips64 ?= "v5.2/standard/mti-malta64"
-SRCREV_machine_qemuarm ?= "47b80ef7bd932830f299ed76e2302df631ae4fbe"
-SRCREV_machine_qemuarm64 ?= "255a750d28cd45df8923c3aba1e82c322757a50d"
-SRCREV_machine_qemumips ?= "45ff64cb3f87c38db6f46353ea93005d049b0cf6"
-SRCREV_machine_qemuppc ?= "255a750d28cd45df8923c3aba1e82c322757a50d"
-SRCREV_machine_qemuriscv64 ?= "255a750d28cd45df8923c3aba1e82c322757a50d"
-SRCREV_machine_qemux86 ?= "255a750d28cd45df8923c3aba1e82c322757a50d"
-SRCREV_machine_qemux86-64 ?= "255a750d28cd45df8923c3aba1e82c322757a50d"
-SRCREV_machine_qemumips64 ?= "ea0fd387a459803ac60e9b8a1729f2fc7d3215f1"
-SRCREV_machine ?= "255a750d28cd45df8923c3aba1e82c322757a50d"
-SRCREV_meta ?= "b867b78b5019ae455af97dec7794cff7527d7624"
+SRCREV_machine_qemuarm ?= "fdb7cd1bb5e4238e5b3d120ce9db31119ec2b5ee"
+SRCREV_machine_qemuarm64 ?= "73b12de4c879e4569bef3b2d0ee9c783a9788b27"
+SRCREV_machine_qemumips ?= "eb7faee13cfce200e9add4ba1852a3fe5d8b92e6"
+SRCREV_machine_qemuppc ?= "73b12de4c879e4569bef3b2d0ee9c783a9788b27"
+SRCREV_machine_qemuriscv64 ?= "73b12de4c879e4569bef3b2d0ee9c783a9788b27"
+SRCREV_machine_qemux86 ?= "73b12de4c879e4569bef3b2d0ee9c783a9788b27"
+SRCREV_machine_qemux86-64 ?= "73b12de4c879e4569bef3b2d0ee9c783a9788b27"
+SRCREV_machine_qemumips64 ?= "8e3bfeb7e9b5aa92c5bea941d361ff5b081a2aaa"
+SRCREV_machine ?= "73b12de4c879e4569bef3b2d0ee9c783a9788b27"
+SRCREV_meta ?= "bb2776d6beaae64b1a0fc902b64376f082085498"
# remap qemuarm to qemuarma15 for the 5.2 kernel
# KMACHINE_qemuarm ?= "qemuarma15"
@@ -30,7 +30,7 @@ SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRA
git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-5.2;destsuffix=${KMETA}"
LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
-LINUX_VERSION ?= "5.2.17"
+LINUX_VERSION ?= "5.2.32"
DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
DEPENDS += "openssl-native util-linux-native"
diff --git a/meta/recipes-kernel/lttng/lttng-modules_2.10.11.bb b/meta/recipes-kernel/lttng/lttng-modules_2.10.14.bb
index 789a3be850..1c24e94902 100644
--- a/meta/recipes-kernel/lttng/lttng-modules_2.10.11.bb
+++ b/meta/recipes-kernel/lttng/lttng-modules_2.10.14.bb
@@ -16,8 +16,8 @@ SRC_URI = "https://lttng.org/files/${BPN}/${BPN}-${PV}.tar.bz2 \
file://BUILD_RUNTIME_BUG_ON-vs-gcc7.patch \
"
-SRC_URI[md5sum] = "c618fb646514dfc1bf910cfd7cda4256"
-SRC_URI[sha256sum] = "7f91e39b2e8e46d8bbba2b4c8c1614f1fb380611cd1a1fccc1d1859be26112f1"
+SRC_URI[md5sum] = "3e9ed67a2da17edf93194f8a5e75a246"
+SRC_URI[sha256sum] = "d0ba614a9cac3daf8ac034837f8b786e6be2ce0242aeecef7096bed5e03b762c"
export INSTALL_MOD_DIR="kernel/lttng-modules"
@@ -40,7 +40,7 @@ SRC_URI_class-devupstream = "git://git.lttng.org/lttng-modules;branch=stable-2.1
file://Makefile-Do-not-fail-if-CONFIG_TRACEPOINTS-is-not-en.patch \
file://BUILD_RUNTIME_BUG_ON-vs-gcc7.patch \
"
-SRCREV_class-devupstream = "624aca5d7507fbd11ea4a1a474c3aa1031bd9a31"
-PV_class-devupstream = "2.10.10+git${SRCPV}"
+SRCREV_class-devupstream = "b34304f146ea234ea764580d7ce1b03d05a215f9"
+PV_class-devupstream = "2.10.14+git${SRCPV}"
S_class-devupstream = "${WORKDIR}/git"
SRCREV_FORMAT ?= "lttng_git"
diff --git a/meta/recipes-kernel/perf/perf.bb b/meta/recipes-kernel/perf/perf.bb
index 8201c0cb60..904aca95de 100644
--- a/meta/recipes-kernel/perf/perf.bb
+++ b/meta/recipes-kernel/perf/perf.bb
@@ -51,7 +51,7 @@ export PYTHON_SITEPACKAGES_DIR
#kernel 3.1+ supports WERROR to disable warnings as errors
export WERROR = "0"
-do_populate_lic[depends] += "virtual/kernel:do_patch"
+do_populate_lic[depends] += "virtual/kernel:do_shared_workdir"
# needed for building the tools/perf Perl binding
include ${@bb.utils.contains('PACKAGECONFIG', 'scripting', 'perf-perl.inc', '', d)}
@@ -233,10 +233,8 @@ do_configure_prepend () {
fi
# use /usr/bin/env instead of version specific python
- for s in `find ${S}/tools/perf/ -name '*.py'`; do
- sed -i 's,/usr/bin/python,/usr/bin/env python3,' "${s}"
- sed -i 's,/usr/bin/python2,/usr/bin/env python3,' "${s}"
- sed -i 's,/usr/bin/env python2,/usr/bin/env python3,' "${s}"
+ for s in `find ${S}/tools/perf/ -name '*.py'` `find ${S}/scripts/ -name 'bpf_helpers_doc.py'`; do
+ sed -i -e "s,#!.*python.*,#!${USRBINPATH}/env python3," ${s}
done
# unistd.h can be out of sync between libc-headers and the captured version in the perf source
diff --git a/meta/recipes-kernel/powertop/powertop_2.10.bb b/meta/recipes-kernel/powertop/powertop_2.10.bb
index 5be8d23111..7b7b3929b3 100644
--- a/meta/recipes-kernel/powertop/powertop_2.10.bb
+++ b/meta/recipes-kernel/powertop/powertop_2.10.bb
@@ -1,12 +1,12 @@
SUMMARY = "Power usage tool"
DESCRIPTION = "Linux tool to diagnose issues with power consumption and power management."
-HOMEPAGE = "http://01.org/powertop/"
-BUGTRACKER = "http://bugzilla.lesswatts.org/"
+HOMEPAGE = "https://01.org/powertop/"
+BUGTRACKER = "https://app.devzing.com/powertopbugs/bugzilla"
DEPENDS = "ncurses libnl pciutils"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"
-SRC_URI = "http://01.org/sites/default/files/downloads/powertop-v${PV}.tar.gz \
+SRC_URI = "https://01.org/sites/default/files/downloads/powertop-v${PV}.tar.gz \
file://0001-wakeup_xxx.h-include-limits.h.patch \
"
diff --git a/meta/recipes-kernel/wireless-regdb/wireless-regdb_2019.06.03.bb b/meta/recipes-kernel/wireless-regdb/wireless-regdb_2020.04.29.bb
index 9076d94601..a5827b9ef0 100644
--- a/meta/recipes-kernel/wireless-regdb/wireless-regdb_2019.06.03.bb
+++ b/meta/recipes-kernel/wireless-regdb/wireless-regdb_2020.04.29.bb
@@ -5,8 +5,7 @@ LICENSE = "ISC"
LIC_FILES_CHKSUM = "file://LICENSE;md5=07c4f6dea3845b02a18dc00c8c87699c"
SRC_URI = "https://www.kernel.org/pub/software/network/${BPN}/${BP}.tar.xz"
-SRC_URI[md5sum] = "4b5ba3f089db7fdb7b9daae6a7c1f2cb"
-SRC_URI[sha256sum] = "cd917ed86b63ce8d93947979f1f18948f03a4ac0ad89ec25227b36ac00dc54bf"
+SRC_URI[sha256sum] = "89fd031aed5977c219a71501e144375a10e7c90d1005d5d086ea7972886a2c7a"
inherit bin_package allarch
diff --git a/meta/recipes-multimedia/alsa/alsa-lib_1.1.9.bb b/meta/recipes-multimedia/alsa/alsa-lib_1.1.9.bb
index 2c63ee7522..ba7e978dbe 100644
--- a/meta/recipes-multimedia/alsa/alsa-lib_1.1.9.bb
+++ b/meta/recipes-multimedia/alsa/alsa-lib_1.1.9.bb
@@ -4,7 +4,7 @@ BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
SECTION = "libs/multimedia"
LICENSE = "LGPLv2.1 & GPLv2+"
LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \
- file://src/socket.c;md5=dd1bc7f44872690224d89c1a9806e495;beginline=1;endline=26 \
+ file://src/socket.c;md5=285675b45e83f571c6a957fe4ab79c93;beginline=9;endline=24 \
"
SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
diff --git a/meta/recipes-multimedia/alsa/alsa-utils_1.1.9.bb b/meta/recipes-multimedia/alsa/alsa-utils_1.1.9.bb
index 03b5c8de30..c443d3594d 100644
--- a/meta/recipes-multimedia/alsa/alsa-utils_1.1.9.bb
+++ b/meta/recipes-multimedia/alsa/alsa-utils_1.1.9.bb
@@ -4,7 +4,7 @@ BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
SECTION = "console/utils"
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
- file://alsactl/utils.c;beginline=1;endline=20;md5=2ce7f7b6739487fb72c689d46521f958"
+ file://alsactl/utils.c;beginline=3;endline=18;md5=96cc06a4cebe5eb7975688ffb0e65642"
DEPENDS = "alsa-lib ncurses libsamplerate0"
PACKAGECONFIG ??= "udev"
diff --git a/meta/recipes-multimedia/gstreamer/gst-validate_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gst-validate_1.16.2.bb
index 1f4370619c..35492fe861 100644
--- a/meta/recipes-multimedia/gstreamer/gst-validate_1.16.0.bb
+++ b/meta/recipes-multimedia/gstreamer/gst-validate_1.16.2.bb
@@ -9,8 +9,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343"
SRC_URI = "https://gstreamer.freedesktop.org/src/${BPN}/${BP}.tar.xz \
file://0001-connect-has-a-different-signature-on-musl.patch \
"
-SRC_URI[md5sum] = "c5c57f3325a2e62aae4a8ec4931f7711"
-SRC_URI[sha256sum] = "9331ae48a173a048243539730cc7a88607777762dea4aebbc3ab55981e68d6c9"
+SRC_URI[md5sum] = "688f42c52d62e8c5e506df911553fb2c"
+SRC_URI[sha256sum] = "4861ccb9326200e74d98007e316b387d48dd49f072e0b78cb9d3303fdecfeeca"
DEPENDS = "json-glib glib-2.0 glib-2.0-native gstreamer1.0 gstreamer1.0-plugins-base"
RRECOMMENDS_${PN} = "git"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/gtkdoc-no-tree.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/gtkdoc-no-tree.patch
deleted file mode 100644
index a36fdc9a14..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/gtkdoc-no-tree.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 6f720cebe632d7dc187c6907857d67ce1f7313d6 Mon Sep 17 00:00:00 2001
-From: Ross Burton <ross.burton@intel.com>
-Date: Mon, 9 Sep 2019 22:48:49 +0100
-Subject: [PATCH] docs: don't include the type hierarchy
-
-gtk-doc can't generate a type hierarchy when scanning gst-libav, and gtk-doc
-1.30 onwards doesn't write a file if there is no type hierarchy (unlike previous
-releases, which wrote an empty file). This results in the build failing with
-gtk-doc 1.30 onwards, so remove the type hierarchy section from the
-documentation as it doesn't serve any purpose.
-
-Fixes https://gitlab.freedesktop.org/gstreamer/gst-libav/issues/57
----
- docs/plugins/gst-libav-plugins-docs.sgml | 5 -----
- 1 file changed, 5 deletions(-)
-
-diff --git a/docs/plugins/gst-libav-plugins-docs.sgml b/docs/plugins/gst-libav-plugins-docs.sgml
-index 75c68f4..f68d554 100644
---- a/docs/plugins/gst-libav-plugins-docs.sgml
-+++ b/docs/plugins/gst-libav-plugins-docs.sgml
-@@ -32,9 +32,4 @@
- <title>gst-libav Plugins</title>
- <xi:include href="xml/plugin-libav.xml" />
- </chapter>
--
-- <chapter>
-- <title>Object Hierarchy</title>
-- <xi:include href="xml/tree_index.sgml" />
-- </chapter>
- </book>
---
-2.22.0
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.2.bb
index d2629b506d..b57b744a80 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.0.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.2.bb
@@ -12,16 +12,15 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://gst-libs/ext/libav/COPYING.LGPLv2.1;md5=bd7a443320af8c812e4c18d1b79df004 \
file://gst-libs/ext/libav/COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02"
-SRC_URI = "http://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz \
+SRC_URI = "https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz \
file://0001-Disable-yasm-for-libav-when-disable-yasm.patch \
file://workaround-to-build-gst-libav-for-i586-with-gcc.patch \
file://mips64_cpu_detection.patch \
file://0001-configure-check-for-armv7ve-variant.patch \
file://0001-fix-host-contamination.patch \
- file://gtkdoc-no-tree.patch \
"
-SRC_URI[md5sum] = "e3a201a45985ddc1327cd496046ca818"
-SRC_URI[sha256sum] = "dfac119043a9cfdcacd7acde77f674ab172cf2537b5812be52f49e9cddc53d9a"
+SRC_URI[md5sum] = "eacebd0136ede3a9bd3672eeb338806b"
+SRC_URI[sha256sum] = "c724f612700c15a933c7356fbeabb0bb9571fb5538f8b1b54d4d2d94188deef2"
S = "${WORKDIR}/gst-libav-${PV}"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.2.bb
index d94bad36f9..c0acf46c22 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.0.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.2.bb
@@ -7,10 +7,10 @@ LICENSE_FLAGS = "commercial"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
file://omx/gstomx.h;beginline=1;endline=21;md5=5c8e1fca32704488e76d2ba9ddfa935f"
-SRC_URI = "http://gstreamer.freedesktop.org/src/gst-omx/gst-omx-${PV}.tar.xz"
+SRC_URI = "https://gstreamer.freedesktop.org/src/gst-omx/gst-omx-${PV}.tar.xz"
-SRC_URI[md5sum] = "c6f8554513980682099a2a9832250b01"
-SRC_URI[sha256sum] = "fef77cddc02784608451c46b9def880b63230a246decf8900f2da2ed54a8af4a"
+SRC_URI[md5sum] = "6362786d2b6cce34de08c86b7847f782"
+SRC_URI[sha256sum] = "11ed411a2eba75610d72331eeb14ff05e2df28f4fd05cb69225a88bec6d27439"
S = "${WORKDIR}/gst-omx-${PV}"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.2.bb
index f9289e92d2..756b823e7d 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.0.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.2.bb
@@ -1,15 +1,15 @@
require gstreamer1.0-plugins.inc
SRC_URI = " \
- http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-${PV}.tar.xz \
+ https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-${PV}.tar.xz \
file://configure-allow-to-disable-libssh2.patch \
file://fix-maybe-uninitialized-warnings-when-compiling-with-Os.patch \
file://avoid-including-sys-poll.h-directly.patch \
file://ensure-valid-sentinels-for-gst_structure_get-etc.patch \
file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \
"
-SRC_URI[md5sum] = "e9e562d86c1527c44d904500dd35e326"
-SRC_URI[sha256sum] = "22139de35626ada6090bdfa3423b27b7fc15a0198331d25c95e6b12cb1072b05"
+SRC_URI[md5sum] = "ccc7404230afddec723bbdb63c89feec"
+SRC_URI[sha256sum] = "f1cb7aa2389569a5343661aae473f0a940a90b872001824bc47fa8072a041e74"
S = "${WORKDIR}/gst-plugins-bad-${PV}"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.2.bb
index 1d6f15e9c1..95d3a3679e 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.0.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.2.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \
file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607"
SRC_URI = " \
- http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-${PV}.tar.xz \
+ https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-${PV}.tar.xz \
file://get-caps-from-src-pad-when-query-caps.patch \
file://0003-ssaparse-enhance-SSA-text-lines-parsing.patch \
file://make-gio_unix_2_0-dependency-configurable.patch \
@@ -18,8 +18,8 @@ SRC_URI = " \
file://0001-gstreamer-gl.pc.in-don-t-append-GL_CFLAGS-to-CFLAGS.patch \
file://link-with-libvchostif.patch \
"
-SRC_URI[md5sum] = "41dde92930710c75cdb49169c5cc6dfc"
-SRC_URI[sha256sum] = "4093aa7b51e28fb24dfd603893fead8d1b7782f088b05ed0f22a21ef176fb5ae"
+SRC_URI[md5sum] = "3fdb32823535799a748c1fc14f978e2c"
+SRC_URI[sha256sum] = "b13e73e2fe74a4166552f9577c3dcb24bed077021b9c7fa600d910ec6987816a"
S = "${WORKDIR}/gst-plugins-base-${PV}"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-scaletempo-Advertise-interleaved-layout-in-caps-temp.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-scaletempo-Advertise-interleaved-layout-in-caps-temp.patch
deleted file mode 100644
index caa080c8e7..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-scaletempo-Advertise-interleaved-layout-in-caps-temp.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From aadfa5f20f53601785e417fe3fcbe6d574880988 Mon Sep 17 00:00:00 2001
-From: Philippe Normand <philn@igalia.com>
-Date: Tue, 23 Apr 2019 10:10:01 +0100
-Subject: [PATCH] scaletempo: Advertise interleaved layout in caps templates
-
-Scaletempo doesn't support non-interleaved layout. Not explicitely stating this
-would trigger critical warnings and a caps negotiation failure when scaletempo
-is used as playbin audio-filter.
-
-Patch suggested by George Kiagiadakis <george.kiagiadakis@collabora.com>.
-
-Fixes #591
-Upstream-Status: Backport [merged, on track for 1.16.1.]
----
- gst/audiofx/gstscaletempo.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/gst/audiofx/gstscaletempo.c b/gst/audiofx/gstscaletempo.c
-index 3a719719a..83ee8fe24 100644
---- a/gst/audiofx/gstscaletempo.c
-+++ b/gst/audiofx/gstscaletempo.c
-@@ -93,9 +93,9 @@ enum
-
- #define SUPPORTED_CAPS \
- GST_STATIC_CAPS ( \
-- GST_AUDIO_CAPS_MAKE (GST_AUDIO_NE (F32)) "; " \
-- GST_AUDIO_CAPS_MAKE (GST_AUDIO_NE (F64)) "; " \
-- GST_AUDIO_CAPS_MAKE (GST_AUDIO_NE (S16)) \
-+ GST_AUDIO_CAPS_MAKE (GST_AUDIO_NE (F32)) ", layout=(string)interleaved; " \
-+ GST_AUDIO_CAPS_MAKE (GST_AUDIO_NE (F64)) ", layout=(string)interleaved; " \
-+ GST_AUDIO_CAPS_MAKE (GST_AUDIO_NE (S16)) ", layout=(string)interleaved" \
- )
-
- static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
---
-2.20.1
-
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/headerfix.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/headerfix.patch
deleted file mode 100644
index 34d25a0a49..0000000000
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/headerfix.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-Things break with overlapping defines between glib and gstreamer with glibc 2.30.
-
-Discussion in the link below, basically internal __ prefixed variables
-shouldn't be redefined.
-
-Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/635]
-RP 2019/8/6
-
-Index: gst-plugins-good-1.16.0/sys/v4l2/ext/types-compat.h
-===================================================================
---- gst-plugins-good-1.16.0.orig/sys/v4l2/ext/types-compat.h
-+++ gst-plugins-good-1.16.0/sys/v4l2/ext/types-compat.h
-@@ -24,29 +24,6 @@
- #ifndef __TYPES_COMPAT_H__
- #define __TYPES_COMPAT_H__
-
--/* From linux/types.h */
--#ifndef __bitwise__
--# ifdef __CHECKER__
--# define __bitwise__ __attribute__((bitwise))
--# else
--# define __bitwise__
--# endif
--#endif
--
--#ifndef __bitwise
--# ifdef __CHECK_ENDIAN__
--# define __bitwise __bitwise__
--# else
--# define __bitwise
--# endif
--#endif
--
--#define __u64 guint64
--#define __u32 guint32
--#define __u16 guint16
--#define __u8 guint8
--#define __s64 gint64
--#define __s32 gint32
--#define __le32 guint32 __bitwise
-+#include <linux/types.h>
-
- #endif /* __TYPES_COMPAT_H__ */
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.2.bb
index 5751467db1..ea0cbddc72 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.0.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.2.bb
@@ -1,14 +1,12 @@
require gstreamer1.0-plugins.inc
SRC_URI = " \
- http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-${PV}.tar.xz \
- file://0001-scaletempo-Advertise-interleaved-layout-in-caps-temp.patch \
+ https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-${PV}.tar.xz \
file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \
- file://headerfix.patch \
"
-SRC_URI[md5sum] = "d1a7b442994d9522418de4af4330e034"
-SRC_URI[sha256sum] = "654adef33380d604112f702c2927574cfc285e31307b79e584113858838bb0fd"
+SRC_URI[md5sum] = "bd025f8f14974f94b75ac69a9d1b9c93"
+SRC_URI[sha256sum] = "40bb3bafda25c0b739c8fc36e48380fccf61c4d3f83747e97ac3f9b0171b1319"
S = "${WORKDIR}/gst-plugins-good-${PV}"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.2.bb
index 11a0e790ea..94abc33542 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.0.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.2.bb
@@ -7,11 +7,11 @@ LICENSE = "GPLv2+ & LGPLv2.1+ & LGPLv2+"
LICENSE_FLAGS = "commercial"
SRC_URI = " \
- http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-${PV}.tar.xz \
+ https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-${PV}.tar.xz \
file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \
"
-SRC_URI[md5sum] = "1ec343c58d4b17d682f7befa8453c11c"
-SRC_URI[sha256sum] = "e30964c5f031c32289e0b25e176c3c95a5737f2052dfc81d0f7427ef0233a4c2"
+SRC_URI[md5sum] = "10283ff5ef1e34d462dde77042e329bd"
+SRC_URI[sha256sum] = "5500415b865e8b62775d4742cbb9f37146a50caecfc0e7a6fc0160d3c560fbca"
S = "${WORKDIR}/gst-plugins-ugly-${PV}"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc
index bc24b05fec..92b473add6 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc
@@ -3,7 +3,7 @@ HOMEPAGE = "http://gstreamer.freedesktop.org/"
BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
SECTION = "multimedia"
-DEPENDS = "gstreamer1.0 glib-2.0-native"
+DEPENDS = "gstreamer1.0 glib-2.0-native make-native"
SRC_URI_append = " file://gtk-doc-tweaks.patch"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-python/0001-meson.build-fix-builds-with-python-3.8.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-python/0001-meson.build-fix-builds-with-python-3.8.patch
new file mode 100644
index 0000000000..053108ad50
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-python/0001-meson.build-fix-builds-with-python-3.8.patch
@@ -0,0 +1,24 @@
+From 61cfd1b49dc82baf14bb36d88b6c5be7b8c3d23a Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Mon, 2 Dec 2019 18:16:41 +0100
+Subject: [PATCH] meson.build: fix builds with python 3.8
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gst-python/merge_requests/14]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1da81d5..3e0db38 100644
+--- a/meson.build
++++ b/meson.build
+@@ -24,7 +24,7 @@ pygobject_dep = dependency('pygobject-3.0', fallback: ['pygobject', 'pygobject_d
+
+ pymod = import('python')
+ python = pymod.find_installation(get_option('python'))
+-python_dep = python.dependency(required : true)
++python_dep = dependency('python3-embed', required : true)
+
+ python_abi_flags = python.get_variable('ABIFLAGS', '')
+ pylib_loc = get_option('libpython-dir')
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.16.2.bb
index 0f3aac1906..989556ce8b 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.16.0.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.16.2.bb
@@ -5,9 +5,11 @@ SECTION = "multimedia"
LICENSE = "LGPLv2.1"
LIC_FILES_CHKSUM = "file://COPYING;md5=c34deae4e395ca07e725ab0076a5f740"
-SRC_URI = "http://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz"
-SRC_URI[md5sum] = "877b2ed2aaffdb62e63f38ea9469b70f"
-SRC_URI[sha256sum] = "55dc7aaed1855565f9b9ef842d93e93bfc5cb2b376faef6af5b463e1774e2d38"
+SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz \
+ file://0001-meson.build-fix-builds-with-python-3.8.patch \
+ "
+SRC_URI[md5sum] = "6ac709767334d8d0a71cb4e016f6abeb"
+SRC_URI[sha256sum] = "208df3148d73d9f416d016564737585d8ea763d91201732d44b5fe688c6288a8"
DEPENDS = "gstreamer1.0 python3-pygobject"
RDEPENDS_${PN} += "gstreamer1.0 python3-pygobject"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.16.2.bb
index 042938b88e..b7470b0047 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.16.0.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.16.2.bb
@@ -4,17 +4,17 @@ SECTION = "multimedia"
LICENSE = "LGPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d"
-DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base"
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base make-native"
PNREAL = "gst-rtsp-server"
-SRC_URI = "http://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz \
+SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz \
file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \
file://gtk-doc-tweaks.patch \
"
-SRC_URI[md5sum] = "adc4460239ec2eccf58ad9752ce53bfd"
-SRC_URI[sha256sum] = "198e9eec1a3e32dc810d3fbf3a714850a22c6288d4a5c8e802c5ff984af03f19"
+SRC_URI[md5sum] = "8a998725820c771ba45be6e18bfdf73a"
+SRC_URI[sha256sum] = "de07a2837b3b04820ce68264a4909f70c221b85dbff0cede7926e9cdbb1dc26e"
S = "${WORKDIR}/${PNREAL}-${PV}"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.16.2.bb
index e5dfb61241..3170218abd 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.16.0.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.16.2.bb
@@ -13,8 +13,8 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/${REALPN}/${REALPN}-${PV}.tar.x
file://0001-vaapsink-downgrade-to-marginal.patch \
"
-SRC_URI[md5sum] = "8c3f9ee3e47cbdb75a94f7183460b721"
-SRC_URI[sha256sum] = "4e7fce626ee0590dca74b5a8341d25bac76307945131a970b414fc5895f5171f"
+SRC_URI[md5sum] = "13f7cb6a64bde24e67f563377487dcce"
+SRC_URI[sha256sum] = "191de7b0ab64a85dd0875c990721e7be95518f60e2a9106beca162004ed7c601"
S = "${WORKDIR}/${REALPN}-${PV}"
DEPENDS = "libva gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.16.0.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.16.2.bb
index da2d14cd99..96a6ade22b 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.16.0.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.16.2.bb
@@ -6,7 +6,7 @@ BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
SECTION = "multimedia"
LICENSE = "LGPLv2+"
-DEPENDS = "glib-2.0 glib-2.0-native libcap libxml2 bison-native flex-native"
+DEPENDS = "glib-2.0 glib-2.0-native libcap libxml2 bison-native flex-native make-native"
inherit autotools pkgconfig gettext upstream-version-is-even gobject-introspection gtk-doc ptest
@@ -20,15 +20,15 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \
S = "${WORKDIR}/gstreamer-${PV}"
SRC_URI = " \
- http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.xz \
+ https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.xz \
file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \
file://gtk-doc-tweaks.patch \
file://0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch \
file://add-a-target-to-compile-tests.patch \
file://run-ptest \
"
-SRC_URI[md5sum] = "862b7e4263d946bc2ef31b3c582e5587"
-SRC_URI[sha256sum] = "0e8e2f7118be437cba879353970cf83c2acced825ecb9275ba05d9186ef07c00"
+SRC_URI[md5sum] = "0e661ed5bdf1d8996e430228d022628e"
+SRC_URI[sha256sum] = "e3f044246783fd685439647373fa13ba14f7ab0b346eadd06437092f8419e94e"
PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)} \
"
diff --git a/meta/recipes-multimedia/libpng/libpng_1.6.37.bb b/meta/recipes-multimedia/libpng/libpng_1.6.37.bb
index 66af2f3d60..78f3248d73 100644
--- a/meta/recipes-multimedia/libpng/libpng_1.6.37.bb
+++ b/meta/recipes-multimedia/libpng/libpng_1.6.37.bb
@@ -2,9 +2,7 @@ SUMMARY = "PNG image format decoding library"
HOMEPAGE = "http://www.libpng.org/"
SECTION = "libs"
LICENSE = "Libpng"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b0085051bf265bac2bfc38bc89f50000\
- file://png.h;endline=144;md5=8acd23d544623816b097e07be0139509\
- "
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b0085051bf265bac2bfc38bc89f50000"
DEPENDS = "zlib"
LIBV = "16"
@@ -29,3 +27,6 @@ PACKAGES =+ "${PN}-tools"
FILES_${PN}-tools = "${bindir}/png-fix-itxt ${bindir}/pngfix ${bindir}/pngcp"
BBCLASSEXTEND = "native nativesdk"
+
+# CVE-2019-17371 is actually a memory leak in gif2png 2.x
+CVE_CHECK_WHITELIST += "CVE-2019-17371"
diff --git a/meta/recipes-multimedia/libsndfile/libsndfile1_1.0.28.bb b/meta/recipes-multimedia/libsndfile/libsndfile1_1.0.28.bb
index ffb45855a4..7855008f3d 100644
--- a/meta/recipes-multimedia/libsndfile/libsndfile1_1.0.28.bb
+++ b/meta/recipes-multimedia/libsndfile/libsndfile1_1.0.28.bb
@@ -33,3 +33,7 @@ PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib"
PACKAGECONFIG[regtest] = "--enable-sqlite,--disable-sqlite,sqlite3"
inherit autotools lib_package pkgconfig
+
+# This can't be replicated and is just a memory leak.
+# https://github.com/erikd/libsndfile/issues/398
+CVE_CHECK_WHITELIST += "CVE-2018-13419"
diff --git a/meta/recipes-multimedia/libtiff/tiff/CVE-2019-17546.patch b/meta/recipes-multimedia/libtiff/tiff/CVE-2019-17546.patch
new file mode 100644
index 0000000000..04c5410930
--- /dev/null
+++ b/meta/recipes-multimedia/libtiff/tiff/CVE-2019-17546.patch
@@ -0,0 +1,103 @@
+libtiff: fix CVE-2019-17546
+
+Added after 4.0.10 release.
+
+CVE: CVE-2019-17546
+Upstream-Status: Backport [https://gitlab.com/libtiff/libtiff]
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+commit 4bb584a35f87af42d6cf09d15e9ce8909a839145
+Author: Even Rouault <even.rouault@spatialys.com>
+Date: Thu Aug 15 15:05:28 2019 +0200
+
+ RGBA interface: fix integer overflow potentially causing write heap buffer overflow, especially on 32 bit builds. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16443. Credit to OSS Fuzz
+
+diff --git a/libtiff/tif_getimage.c b/libtiff/tif_getimage.c
+index c88b5fa..4da785d 100644
+--- a/libtiff/tif_getimage.c
++++ b/libtiff/tif_getimage.c
+@@ -949,16 +949,23 @@ gtStripContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
+ fromskew = (w < imagewidth ? imagewidth - w : 0);
+ for (row = 0; row < h; row += nrow)
+ {
++ uint32 temp;
+ rowstoread = rowsperstrip - (row + img->row_offset) % rowsperstrip;
+ nrow = (row + rowstoread > h ? h - row : rowstoread);
+ nrowsub = nrow;
+ if ((nrowsub%subsamplingver)!=0)
+ nrowsub+=subsamplingver-nrowsub%subsamplingver;
++ temp = (row + img->row_offset)%rowsperstrip + nrowsub;
++ if( scanline > 0 && temp > (size_t)(TIFF_TMSIZE_T_MAX / scanline) )
++ {
++ TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in gtStripContig");
++ return 0;
++ }
+ if (_TIFFReadEncodedStripAndAllocBuffer(tif,
+ TIFFComputeStrip(tif,row+img->row_offset, 0),
+ (void**)(&buf),
+ maxstripsize,
+- ((row + img->row_offset)%rowsperstrip + nrowsub) * scanline)==(tmsize_t)(-1)
++ temp * scanline)==(tmsize_t)(-1)
+ && (buf == NULL || img->stoponerr))
+ {
+ ret = 0;
+@@ -1051,15 +1058,22 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
+ fromskew = (w < imagewidth ? imagewidth - w : 0);
+ for (row = 0; row < h; row += nrow)
+ {
++ uint32 temp;
+ rowstoread = rowsperstrip - (row + img->row_offset) % rowsperstrip;
+ nrow = (row + rowstoread > h ? h - row : rowstoread);
+ offset_row = row + img->row_offset;
++ temp = (row + img->row_offset)%rowsperstrip + nrow;
++ if( scanline > 0 && temp > (size_t)(TIFF_TMSIZE_T_MAX / scanline) )
++ {
++ TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in gtStripSeparate");
++ return 0;
++ }
+ if( buf == NULL )
+ {
+ if (_TIFFReadEncodedStripAndAllocBuffer(
+ tif, TIFFComputeStrip(tif, offset_row, 0),
+ (void**) &buf, bufsize,
+- ((row + img->row_offset)%rowsperstrip + nrow) * scanline)==(tmsize_t)(-1)
++ temp * scanline)==(tmsize_t)(-1)
+ && (buf == NULL || img->stoponerr))
+ {
+ ret = 0;
+@@ -1079,7 +1093,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
+ }
+ }
+ else if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 0),
+- p0, ((row + img->row_offset)%rowsperstrip + nrow) * scanline)==(tmsize_t)(-1)
++ p0, temp * scanline)==(tmsize_t)(-1)
+ && img->stoponerr)
+ {
+ ret = 0;
+@@ -1087,7 +1101,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
+ }
+ if (colorchannels > 1
+ && TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 1),
+- p1, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) == (tmsize_t)(-1)
++ p1, temp * scanline) == (tmsize_t)(-1)
+ && img->stoponerr)
+ {
+ ret = 0;
+@@ -1095,7 +1109,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
+ }
+ if (colorchannels > 1
+ && TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 2),
+- p2, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) == (tmsize_t)(-1)
++ p2, temp * scanline) == (tmsize_t)(-1)
+ && img->stoponerr)
+ {
+ ret = 0;
+@@ -1104,7 +1118,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
+ if (alpha)
+ {
+ if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, colorchannels),
+- pa, ((row + img->row_offset)%rowsperstrip + nrow) * scanline)==(tmsize_t)(-1)
++ pa, temp * scanline)==(tmsize_t)(-1)
+ && img->stoponerr)
+ {
+ ret = 0;
diff --git a/meta/recipes-multimedia/libtiff/tiff/CVE-2019-7663.patch b/meta/recipes-multimedia/libtiff/tiff/CVE-2019-7663.patch
index f244fb2f32..94e4e33e83 100644
--- a/meta/recipes-multimedia/libtiff/tiff/CVE-2019-7663.patch
+++ b/meta/recipes-multimedia/libtiff/tiff/CVE-2019-7663.patch
@@ -1,22 +1,37 @@
-CVE: CVE-2019-7663
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
+CVE: CVE-2019-7663
+Upstream-Status: Backport
+Signed-off-by:
+Ross Burton <ross.burton@intel.com>
From c6fc6c1fa895024c86285c58efd6424cf8078f32 Mon Sep 17 00:00:00 2001
From: Thomas Bernard <miniupnp@free.fr>
Date: Mon, 11 Feb 2019 10:05:33 +0100
Subject: [PATCH 1/2] check that (Tile Width)*(Samples/Pixel) do no overflow
-fixes bug 2833
+From da6454aa80b9bb3154dfab4e8b21637de47531e0 Mon Sep 17 00:00:00 2001
+From: Thomas Bernard <miniupnp@free.fr>
+Date: Mon, 11 Feb 2019 21:42:03 +0100
+Subject: [PATCH 2/2] tiffcp.c: use INT_MAX
+
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+Refresh this patch as it can't be applyed when using PATCHTOOL = "patch".
---
- tools/tiffcp.c | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
+ tools/tiffcp.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/tools/tiffcp.c b/tools/tiffcp.c
-index 2f406e2d..f0ee2c02 100644
+index 2f406e2..8c81aa4 100644
--- a/tools/tiffcp.c
+++ b/tools/tiffcp.c
-@@ -1408,7 +1408,7 @@ DECLAREreadFunc(readSeparateTilesIntoBuffer)
+@@ -41,6 +41,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <limits.h>
+
+ #include <ctype.h>
+
+@@ -1408,7 +1409,7 @@ DECLAREreadFunc(readSeparateTilesIntoBuffer)
int status = 1;
uint32 imagew = TIFFRasterScanlineSize(in);
uint32 tilew = TIFFTileRowSize(in);
@@ -25,11 +40,11 @@ index 2f406e2d..f0ee2c02 100644
tsize_t tilesize = TIFFTileSize(in);
tdata_t tilebuf;
uint8* bufp = (uint8*) buf;
-@@ -1416,6 +1416,12 @@ DECLAREreadFunc(readSeparateTilesIntoBuffer)
+@@ -1416,6 +1417,12 @@ DECLAREreadFunc(readSeparateTilesIntoBuffer)
uint32 row;
uint16 bps = 0, bytes_per_sample;
-+ if (spp > (0x7fffffff / tilew))
++ if (spp > (INT_MAX / tilew))
+ {
+ TIFFError(TIFFFileName(in), "Error, cannot handle that much samples per tile row (Tile Width * Samples/Pixel)");
+ return 0;
@@ -39,39 +54,5 @@ index 2f406e2d..f0ee2c02 100644
if (tilebuf == 0)
return 0;
--
-2.20.1
-
-
-From da6454aa80b9bb3154dfab4e8b21637de47531e0 Mon Sep 17 00:00:00 2001
-From: Thomas Bernard <miniupnp@free.fr>
-Date: Mon, 11 Feb 2019 21:42:03 +0100
-Subject: [PATCH 2/2] tiffcp.c: use INT_MAX
-
----
- tools/tiffcp.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/tools/tiffcp.c b/tools/tiffcp.c
-index f0ee2c02..8c81aa4f 100644
---- a/tools/tiffcp.c
-+++ b/tools/tiffcp.c
-@@ -41,6 +41,7 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#include <limits.h>
-
- #include <ctype.h>
-
-@@ -1416,7 +1417,7 @@ DECLAREreadFunc(readSeparateTilesIntoBuffer)
- uint32 row;
- uint16 bps = 0, bytes_per_sample;
-
-- if (spp > (0x7fffffff / tilew))
-+ if (spp > (INT_MAX / tilew))
- {
- TIFFError(TIFFFileName(in), "Error, cannot handle that much samples per tile row (Tile Width * Samples/Pixel)");
- return 0;
---
-2.20.1
+2.7.4
diff --git a/meta/recipes-multimedia/libtiff/tiff_4.0.10.bb b/meta/recipes-multimedia/libtiff/tiff_4.0.10.bb
index 0432763cce..5c008c53fe 100644
--- a/meta/recipes-multimedia/libtiff/tiff_4.0.10.bb
+++ b/meta/recipes-multimedia/libtiff/tiff_4.0.10.bb
@@ -8,6 +8,7 @@ SRC_URI = "http://download.osgeo.org/libtiff/tiff-${PV}.tar.gz \
file://CVE-2019-6128.patch \
file://CVE-2019-7663.patch \
file://CVE-2019-14973.patch \
+ file://CVE-2019-17546.patch \
"
SRC_URI[md5sum] = "114192d7ebe537912a2b97408832e7fd"
SRC_URI[sha256sum] = "2c52d11ccaf767457db0c46795d9c7d1a8d8f76f68b0b800a3dfe45786b996e4"
diff --git a/meta/recipes-sato/webkit/webkitgtk/fix-link-error.patch b/meta/recipes-sato/webkit/webkitgtk/fix-link-error.patch
new file mode 100755
index 0000000000..9696ddd691
--- /dev/null
+++ b/meta/recipes-sato/webkit/webkitgtk/fix-link-error.patch
@@ -0,0 +1,45 @@
+webkitgtk: fix an occasional link error
+
+Part of ae465a4e... Changelog is not included in the source tarball.
+
+Upstream-Status: backport [git://git.webkit.org/WebKit.git]
+
+commit ae465a4e3b1498b6c4038fc7e596e0e3662d116f
+Author: Hironori.Fujii@sony.com <Hironori.Fujii@sony.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
+Date: Fri Jun 28 07:38:09 2019 +0000
+
+ [Win] unresolved external symbol "JSC::JSObject::didBecomePrototype(void)" referenced in function "JSC::Structure::create(...)"
+ https://bugs.webkit.org/show_bug.cgi?id=199312
+
+ Reviewed by Keith Miller.
+
+ WinCairo port, clang-cl Release builds reported a following linkage error:
+
+ > WebCore.lib(UnifiedSource-4babe430-10.cpp.obj) : error LNK2019: unresolved external symbol "public: void __cdecl JSC::JSObject::didBecomePrototype(void)" (?didBecomePrototype@JSObject@JSC@@QEAAXXZ) referenced in function "public: static class JSC::Structure * __cdecl JSC::Structure::create(class JSC::VM &,class JSC::JSGlobalObject *,class JSC::JSValue,class JSC::TypeInfo const &,struct JSC::ClassInfo const *,unsigned char,unsigned int)" (?create@Structure@JSC@@SAPEAV12@AEAVVM@2@PEAVJSGlobalObject@2@VJSValue@2@AEBVTypeInfo@2@PEBUClassInfo@2@EI@Z)
+
+ No new tests because there is no behavior change.
+
+ * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp: Include <JavaScriptCore/JSCInlines.h>,
+ and do not include headers which is included by it.
+
+ git-svn-id: http://svn.webkit.org/repository/webkit/trunk@246922 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+[ modification of Changelog deleted ]
+
+diff --git a/Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp b/Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp
+index d1b047c..0899a9a 100644
+--- a/Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp
++++ b/Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp
+@@ -49,11 +49,8 @@
+ #include "SQLiteTransaction.h"
+ #include "ThreadSafeDataBuffer.h"
+ #include <JavaScriptCore/AuxiliaryBarrierInlines.h>
+-#include <JavaScriptCore/HeapInlines.h>
+-#include <JavaScriptCore/JSCJSValueInlines.h>
+-#include <JavaScriptCore/JSGlobalObject.h>
++#include <JavaScriptCore/JSCInlines.h>
+ #include <JavaScriptCore/StrongInlines.h>
+-#include <JavaScriptCore/StructureInlines.h>
+ #include <wtf/FileSystem.h>
+ #include <wtf/NeverDestroyed.h>
+ #include <wtf/text/StringConcatenateNumbers.h>
diff --git a/meta/recipes-sato/webkit/webkitgtk_2.24.4.bb b/meta/recipes-sato/webkit/webkitgtk_2.24.4.bb
index 8c695ce9e7..1c71762945 100644
--- a/meta/recipes-sato/webkit/webkitgtk_2.24.4.bb
+++ b/meta/recipes-sato/webkit/webkitgtk_2.24.4.bb
@@ -1,6 +1,6 @@
SUMMARY = "WebKit web rendering engine for the GTK+ platform"
-HOMEPAGE = "http://www.webkitgtk.org/"
-BUGTRACKER = "http://bugs.webkit.org/"
+HOMEPAGE = "https://www.webkitgtk.org/"
+BUGTRACKER = "https://bugs.webkit.org/"
LICENSE = "BSD & LGPLv2+"
LIC_FILES_CHKSUM = "file://Source/JavaScriptCore/COPYING.LIB;md5=d0c6d6397a5d84286dda758da57bd691 \
@@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://Source/JavaScriptCore/COPYING.LIB;md5=d0c6d6397a5d842
file://Source/WebCore/LICENSE-LGPL-2.1;md5=a778a33ef338abbaf8b8a7c36b6eec80 \
"
-SRC_URI = "http://www.webkitgtk.org/releases/${BPN}-${PV}.tar.xz \
+SRC_URI = "https://www.webkitgtk.org/releases/${BPN}-${PV}.tar.xz \
file://0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch \
file://0001-When-building-introspection-files-add-CMAKE_C_FLAGS-.patch \
file://0001-OptionsGTK.cmake-drop-the-hardcoded-introspection-gt.patch \
@@ -23,6 +23,7 @@ SRC_URI = "http://www.webkitgtk.org/releases/${BPN}-${PV}.tar.xz \
file://include_array.patch \
file://narrowing.patch \
file://0001-gstreamer-add-a-missing-format-string.patch \
+ file://fix-link-error.patch \
"
SRC_URI[md5sum] = "c214963d8c0e7d83460da04a0d8dda87"
diff --git a/meta/recipes-support/aspell/aspell/CVE-2019-20433-0001.patch b/meta/recipes-support/aspell/aspell/CVE-2019-20433-0001.patch
new file mode 100644
index 0000000000..fd68461e32
--- /dev/null
+++ b/meta/recipes-support/aspell/aspell/CVE-2019-20433-0001.patch
@@ -0,0 +1,999 @@
+From de29341638833ba7717bd6b5e6850998454b044b Mon Sep 17 00:00:00 2001
+From: Kevin Atkinson <kevina@gnu.org>
+Date: Sat, 17 Aug 2019 17:06:53 -0400
+Subject: [PATCH 1/2] Don't allow null-terminated UCS-2/4 strings using the
+ original API.
+
+Detect if the encoding is UCS-2/4 and the length is -1 in affected API
+functions and refuse to convert the string. If the string ends up
+being converted somehow, abort with an error message in DecodeDirect
+and ConvDirect. To convert a null terminated string in
+Decode/ConvDirect, a negative number corresponding to the width of the
+underlying character type for the encoding is expected; for example,
+if the encoding is "ucs-2" then a the size is expected to be -2.
+
+Also fix a 1-3 byte over-read in DecodeDirect when reading UCS-2/4
+strings when a size is provided (found by OSS-Fuzz).
+
+Also fix a bug in DecodeDirect that caused DocumentChecker to return
+the wrong offsets when working with UCS-2/4 strings.
+
+CVE: CVE-2019-20433
+Upstream-Status: Backport [https://github.com/GNUAspell/aspell/commit/de29341638833ba7717bd6b5e6850998454b044b]
+
+[SG: - adjusted context
+ - discarded test changes as test framework is not available
+ - discarded manual entry changes for features that aren't backported]
+Signed-off-by: Stefan Ghinea <stefan.ghinea@windriver.com>
+---
+ auto/MkSrc/CcHelper.pm | 99 ++++++++++++++++++++++++++++++++++---
+ auto/MkSrc/Create.pm | 5 +-
+ auto/MkSrc/Info.pm | 5 +-
+ auto/MkSrc/ProcCc.pm | 24 +++++----
+ auto/MkSrc/ProcImpl.pm | 57 +++++++++++++++------
+ auto/MkSrc/Read.pm | 4 +-
+ auto/mk-src.in | 44 +++++++++++++++--
+ common/convert.cpp | 39 ++++++++++++---
+ common/convert.hpp | 38 +++++++++++++-
+ common/document_checker.cpp | 17 ++++++-
+ common/document_checker.hpp | 1 +
+ common/version.cpp | 15 ++++--
+ configure.ac | 8 +++
+ manual/aspell.texi | 58 ++++++++++++++++------
+ manual/readme.texi | 70 +++++++++++++++++++++-----
+ 15 files changed, 409 insertions(+), 75 deletions(-)
+
+diff --git a/auto/MkSrc/CcHelper.pm b/auto/MkSrc/CcHelper.pm
+index f2de991..0044335 100644
+--- a/auto/MkSrc/CcHelper.pm
++++ b/auto/MkSrc/CcHelper.pm
+@@ -10,8 +10,8 @@ BEGIN {
+ use Exporter;
+ our @ISA = qw(Exporter);
+ our @EXPORT = qw(to_c_return_type c_error_cond
+- to_type_name make_desc make_func call_func
+- make_c_method call_c_method form_c_method
++ to_type_name make_desc make_func call_func get_c_func_name
++ make_c_method make_wide_macro call_c_method form_c_method
+ make_cxx_method);
+ }
+
+@@ -90,6 +90,69 @@ sub make_func ( $ \@ $ ; \% ) {
+ ')'));
+ }
+
++=item make_wide_version NAME @TYPES PARMS ; %ACCUM
++
++Creates the wide character version of the function if needed
++
++=cut
++
++sub make_wide_version ( $ \@ $ ; \% ) {
++ my ($name, $d, $p, $accum) = @_;
++ my @d = @$d;
++ shift @d;
++ return '' unless grep {$_->{type} eq 'encoded string'} @d;
++ $accum->{sys_headers}{'stddef.h'} = true;
++ $accum->{suffix}[5] = <<'---';
++
++/******************* private implemantion details *********************/
++
++#ifdef __cplusplus
++# define aspell_cast_(type, expr) (static_cast<type>(expr))
++# define aspell_cast_from_wide_(str) (static_cast<const void *>(str))
++#else
++# define aspell_cast_(type, expr) ((type)(expr))
++# define aspell_cast_from_wide_(str) ((const char *)(str))
++#endif
++---
++ my @parms = map {$_->{type} eq 'encoded string'
++ ? ($_->{name}, $_->{name}.'_size')
++ : $_->{name}} @d;
++ $name = to_lower $name;
++ $accum->{suffix}[0] = <<'---';
++/**********************************************************************/
++
++#ifdef ASPELL_ENCODE_SETTING_SECURE
++---
++ $accum->{suffix}[2] = "#endif\n";
++ my @args = map {$_->{type} eq 'encoded string'
++ ? ($_->{name}, "$_->{name}_size", '-1')
++ : $_->{name}} @d;
++ $accum->{suffix}[1] .=
++ (join '',
++ "#define $name",
++ '(', join(', ', @parms), ')',
++ "\\\n ",
++ $name, '_wide',
++ '(', join(', ', @args), ')',
++ "\n");
++ @args = map {$_->{type} eq 'encoded string'
++ ? ("aspell_cast_from_wide_($_->{name})",
++ "$_->{name}_size*aspell_cast_(int,sizeof(*($_->{name})))",
++ "sizeof(*($_->{name}))")
++ : $_->{name}} @d;
++ return (join '',
++ "\n",
++ "/* version of $name that is safe to use with (null terminated) wide characters */\n",
++ '#define ',
++ $name, '_w',
++ '(', join(', ', @parms), ')',
++ "\\\n ",
++ $name, '_wide',
++ '(', join(', ', @args), ')',
++ "\n");
++}
++
++
+ =item call_func NAME @TYPES PARMS ; %ACCUM
+
+ Return a string to call a func. Will prefix the function with return
+@@ -103,7 +166,6 @@ Parms can be any of:
+
+ sub call_func ( $ \@ $ ; \% ) {
+ my ($name, $d, $p, $accum) = @_;
+- $accum = {} unless defined $accum;
+ my @d = @$d;
+ my $func_ret = to_type_name(shift @d, {%$p,pos=>'return'}, %$accum);
+ return (join '',
+@@ -148,8 +210,14 @@ sub to_type_name ( $ $ ; \% ) {
+ my $name = $t->{name};
+ my $type = $t->{type};
+
+- return ( (to_type_name {%$d, type=>'string'}, $p, %$accum) ,
+- (to_type_name {%$d, type=>'int', name=>"$d->{name}_size"}, $p, %$accum) )
++ if ($name eq 'encoded string' && $is_cc && $pos eq 'parm') {
++ my @types = ((to_type_name {%$d, type=>($p->{wide}?'const void pointer':'string')}, $p, %$accum),
++ (to_type_name {%$d, type=>'int', name=>"$d->{name}_size"}, $p, %$accum));
++ push @types, (to_type_name {%$d, type=>'int', name=>"$d->{name}_type_width"}, $p, %$accum) if $p->{wide};
++ return @types;
++ }
++ return ( (to_type_name {%$d, type=>($p->{wide}?'const void pointer':'string')}, $p, %$accum) ,
++ (to_type_name {%$d, type=>'int', name=>"$d->{name}_size"}, $p, %$accum) )
+ if $name eq 'encoded string' && $is_cc && $pos eq 'parm';
+
+ my $str;
+@@ -174,7 +242,7 @@ sub to_type_name ( $ $ ; \% ) {
+ $str .= "String";
+ }
+ } elsif ($name eq 'encoded string') {
+- $str .= "const char *";
++ $str .= $p->{wide} ? "const void *" : "const char *";
+ } elsif ($name eq '') {
+ $str .= "void";
+ } elsif ($name eq 'bool' && $is_cc) {
+@@ -186,7 +254,7 @@ sub to_type_name ( $ $ ; \% ) {
+ if ($t->{pointer}) {
+ $accum->{types}->{$name} = $t;
+ } else {
+- $accum->{headers}->{$t->{created_in}} = true;
++ $accum->{headers}->{$t->{created_in}} = true unless $mode eq 'cc';
+ }
+ $str .= "$c_type Aspell" if $mode eq 'cc';
+ $str .= to_mixed($name);
+@@ -214,6 +282,7 @@ sub to_type_name ( $ $ ; \% ) {
+ return $str;
+ }
+
++
+ =item make_desc DESC ; LEVEL
+
+ Make a C comment out of DESC optionally indenting it LEVEL spaces.
+@@ -286,6 +355,7 @@ sub form_c_method ($ $ $ ; \% )
+ } else {
+ $func = "aspell $class $name";
+ }
++ $func .= " wide" if $p->{wide};
+ if (exists $d->{'const'}) {
+ splice @data, 1, 0, {type => "const $class", name=> $this_name};
+ } else {
+@@ -306,6 +376,21 @@ sub make_c_method ($ $ $ ; \%)
+ return &make_func(@ret);
+ }
+
++sub get_c_func_name ($ $ $)
++{
++ my @ret = &form_c_method(@_);
++ return undef unless @ret > 0;
++ return to_lower $ret[0];
++}
++
++sub make_wide_macro ($ $ $ ; \%)
++{
++ my @ret = &form_c_method(@_);
++ return undef unless @ret > 0;
++ my $str = &make_wide_version(@ret);
++ return $str;
++}
++
+ sub call_c_method ($ $ $ ; \%)
+ {
+ my @ret = &form_c_method(@_);
+diff --git a/auto/MkSrc/Create.pm b/auto/MkSrc/Create.pm
+index d39b60e..630ede5 100644
+--- a/auto/MkSrc/Create.pm
++++ b/auto/MkSrc/Create.pm
+@@ -77,8 +77,10 @@ sub create_cc_file ( % ) {
+ $file .= "#include \"aspell.h\"\n" if $p{type} eq 'cxx';
+ $file .= "#include \"settings.h\"\n" if $p{type} eq 'native_impl' && $p{name} eq 'errors';
+ $file .= "#include \"gettext.h\"\n" if $p{type} eq 'native_impl' && $p{name} eq 'errors';
++ $file .= cmap {"#include <$_>\n"} sort keys %{$accum{sys_headers}};
+ $file .= cmap {"#include \"".to_lower($_).".hpp\"\n"} sort keys %{$accum{headers}};
+- $file .= "#ifdef __cplusplus\nextern \"C\" {\n#endif\n" if $p{header} && !$p{cxx};
++ $file .= "\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n" if $p{header} && !$p{cxx};
++ $file .= join('', grep {defined $_} @{$accum{prefix}});
+ $file .= "\nnamespace $p{namespace} {\n\n" if $p{cxx};
+ if (defined $info{forward}{proc}{$p{type}}) {
+ my @types = sort {$a->{name} cmp $b->{name}} (values %{$accum{types}});
+@@ -86,6 +88,7 @@ sub create_cc_file ( % ) {
+ }
+ $file .= "\n";
+ $file .= $body;
++ $file .= join('', grep {defined $_} @{$accum{suffix}});
+ $file .= "\n\n}\n\n" if $p{cxx};
+ $file .= "#ifdef __cplusplus\n}\n#endif\n" if $p{header} && !$p{cxx};
+ $file .= "#endif /* $hm */\n" if $p{header};
+diff --git a/auto/MkSrc/Info.pm b/auto/MkSrc/Info.pm
+index c644028..ace8e21 100644
+--- a/auto/MkSrc/Info.pm
++++ b/auto/MkSrc/Info.pm
+@@ -60,6 +60,7 @@ each proc sub should take the following argv
+ the object from which it is a member of
+ no native: do not attempt to create a native implementation
+ treat as object: treat as a object rather than a pointer
++ no conv: do not converted an encoded string
+
+ The %info structure is initialized as follows:
+
+@@ -104,8 +105,8 @@ The %info structure is initialized as follows:
+ errors => {}, # possible errors
+ method => {
+ # A class method
+- options => ['desc', 'posib err', 'c func', 'const',
+- 'c only', 'c impl', 'cxx impl'],
++ options => ['desc', 'posib err', 'c func', 'const', 'no conv', 'on conv error',
++ 'c only', 'c impl', 'cxx impl', 'cc extra'],
+ groups => undef},
+ constructor => {
+ # A class constructor
+diff --git a/auto/MkSrc/ProcCc.pm b/auto/MkSrc/ProcCc.pm
+index 47c4338..98cc435 100644
+--- a/auto/MkSrc/ProcCc.pm
++++ b/auto/MkSrc/ProcCc.pm
+@@ -23,7 +23,7 @@ use MkSrc::Info;
+ sub make_c_object ( $ @ );
+
+ $info{group}{proc}{cc} = sub {
+- my ($data) = @_;
++ my ($data,@rest) = @_;
+ my $ret;
+ my $stars = (70 - length $data->{name})/2;
+ $ret .= "/";
+@@ -33,14 +33,14 @@ $info{group}{proc}{cc} = sub {
+ $ret .= "/\n";
+ foreach my $d (@{$data->{data}}) {
+ $ret .= "\n\n";
+- $ret .= $info{$d->{type}}{proc}{cc}->($d);
++ $ret .= $info{$d->{type}}{proc}{cc}->($d,@rest);
+ }
+ $ret .= "\n\n";
+ return $ret;
+ };
+
+ $info{enum}{proc}{cc} = sub {
+- my ($d) = @_;
++ my ($d,@rest) = @_;
+ my $n = "Aspell".to_mixed($d->{name});
+ return ("\n".
+ make_desc($d->{desc}).
+@@ -58,21 +58,26 @@ $info{struct}{proc}{cc} = sub {
+ };
+
+ $info{union}{proc}{cc} = sub {
+- return make_c_object "union", $_[0];
++ return make_c_object "union", @_;
+ };
+
+ $info{class}{proc}{cc} = sub {
+- my ($d) = @_;
++ my ($d,$accum) = @_;
+ my $class = $d->{name};
+ my $classname = "Aspell".to_mixed($class);
+ my $ret = "";
+ $ret .= "typedef struct $classname $classname;\n\n";
+ foreach (@{$d->{data}}) {
+- my $s = make_c_method($class, $_, {mode=>'cc'});
++ my $s = make_c_method($class, $_, {mode=>'cc'}, %$accum);
+ next unless defined $s;
+ $ret .= "\n";
+ $ret .= make_desc($_->{desc});
+- $ret .= make_c_method($class, $_, {mode=>'cc'}).";\n";
++ $ret .= make_c_method($class, $_, {mode=>'cc'}, %$accum).";\n";
++ if (grep {$_->{type} eq 'encoded string'} @{$_->{data}}) {
++ $ret .= make_c_method($class, $_, {mode=>'cc', wide=>true}, %$accum).";\n";
++ $ret .= make_wide_macro($class, $_, {mode=>'cc'}, %$accum);
++ }
++ $ret .= "\n".$_->{'cc extra'}."\n" if defined $_->{'cc extra'};
+ }
+ $ret .= "\n";
+ return $ret;
+@@ -105,7 +110,8 @@ $info{errors}{proc}{cc} = sub {
+ };
+
+ sub make_c_object ( $ @ ) {
+- my ($t, $d) = @_;
++ my ($t, $d, $accum) = @_;
++ $accum = {} unless defined $accum;
+ my $struct;
+ $struct .= "Aspell";
+ $struct .= to_mixed($d->{name});
+@@ -120,7 +126,7 @@ sub make_c_object ( $ @ ) {
+ "\n};\n"),
+ "typedef $t $struct $struct;",
+ join ("\n",
+- map {make_c_method($d->{name}, $_, {mode=>'cc'}).";"}
++ map {make_c_method($d->{name}, $_, {mode=>'cc'}, %$accum).";"}
+ grep {$_->{type} eq 'method'}
+ @{$d->{data}})
+ )."\n";
+diff --git a/auto/MkSrc/ProcImpl.pm b/auto/MkSrc/ProcImpl.pm
+index b8628fd..3d0f220 100644
+--- a/auto/MkSrc/ProcImpl.pm
++++ b/auto/MkSrc/ProcImpl.pm
+@@ -45,10 +45,13 @@ $info{class}{proc}{impl} = sub {
+ foreach (grep {$_ ne ''} split /\s*,\s*/, $data->{'c impl headers'}) {
+ $accum->{headers}{$_} = true;
+ }
+- foreach my $d (@{$data->{data}}) {
++ my @d = @{$data->{data}};
++ while (@d) {
++ my $d = shift @d;
++ my $need_wide = false;
+ next unless one_of $d->{type}, qw(method constructor destructor);
+ my @parms = @{$d->{data}} if exists $d->{data};
+- my $m = make_c_method $data->{name}, $d, {mode=>'cc_cxx', use_name=>true}, %$accum;
++ my $m = make_c_method $data->{name}, $d, {mode=>'cc_cxx', use_name=>true, wide=>$d->{wide}}, %$accum;
+ next unless defined $m;
+ $ret .= "extern \"C\" $m\n";
+ $ret .= "{\n";
+@@ -57,24 +60,49 @@ $info{class}{proc}{impl} = sub {
+ } else {
+ if ($d->{type} eq 'method') {
+ my $ret_type = shift @parms;
+- my $ret_native = to_type_name $ret_type, {mode=>'native_no_err', pos=>'return'}, %$accum;
++ my $ret_native = to_type_name $ret_type, {mode=>'native_no_err', pos=>'return', wide=>$d->{wide}}, %$accum;
+ my $snum = 0;
++ my $call_fun = $d->{name};
++ my @call_parms;
+ foreach (@parms) {
+ my $n = to_lower($_->{name});
+- if ($_->{type} eq 'encoded string') {
+- $accum->{headers}{'mutable string'} = true;
+- $accum->{headers}{'convert'} = true;
+- $ret .= " ths->temp_str_$snum.clear();\n";
+- $ret .= " ths->to_internal_->convert($n, ${n}_size, ths->temp_str_$snum);\n";
+- $ret .= " unsigned int s$snum = ths->temp_str_$snum.size();\n";
+- $_ = "MutableString(ths->temp_str_$snum.mstr(), s$snum)";
+- $snum++;
++ if ($_->{type} eq 'encoded string' && !exists($d->{'no conv'})) {
++ $need_wide = true unless $d->{wide};
++ die unless exists $d->{'posib err'};
++ $accum->{headers}{'mutable string'} = true;
++ $accum->{headers}{'convert'} = true;
++ my $name = get_c_func_name $data->{name}, $d, {mode=>'cc_cxx', use_name=>true, wide=>$d->{wide}};
++ $ret .= " ths->temp_str_$snum.clear();\n";
++ if ($d->{wide}) {
++ $ret .= " ${n}_size = get_correct_size(\"$name\", ths->to_internal_->in_type_width(), ${n}_size, ${n}_type_width);\n";
++ } else {
++ $ret .= " PosibErr<int> ${n}_fixed_size = get_correct_size(\"$name\", ths->to_internal_->in_type_width(), ${n}_size);\n";
++ if (exists($d->{'on conv error'})) {
++ $ret .= " if (${n}_fixed_size.get_err()) {\n";
++ $ret .= " ".$d->{'on conv error'}."\n";
++ $ret .= " } else {\n";
++ $ret .= " ${n}_size = ${n}_fixed_size;\n";
++ $ret .= " }\n";
++ } else {
++ $ret .= " ths->err_.reset(${n}_fixed_size.release_err());\n";
++ $ret .= " if (ths->err_ != 0) return ".(c_error_cond $ret_type).";\n";
++ }
++ }
++ $ret .= " ths->to_internal_->convert($n, ${n}_size, ths->temp_str_$snum);\n";
++ $ret .= " unsigned int s$snum = ths->temp_str_$snum.size();\n";
++ push @call_parms, "MutableString(ths->temp_str_$snum.mstr(), s$snum)";
++ $snum++;
++ } elsif ($_->{type} eq 'encoded string') {
++ $need_wide = true unless $d->{wide};
++ push @call_parms, $n, "${n}_size";
++ push @call_parms, "${n}_type_width" if $d->{wide};
++ $call_fun .= " wide" if $d->{wide};
+ } else {
+- $_ = $n;
++ push @call_parms, $n;
+ }
+ }
+- my $parms = '('.(join ', ', @parms).')';
+- my $exp = "ths->".to_lower($d->{name})."$parms";
++ my $parms = '('.(join ', ', @call_parms).')';
++ my $exp = "ths->".to_lower($call_fun)."$parms";
+ if (exists $d->{'posib err'}) {
+ $accum->{headers}{'posib err'} = true;
+ $ret .= " PosibErr<$ret_native> ret = $exp;\n";
+@@ -118,6 +146,7 @@ $info{class}{proc}{impl} = sub {
+ }
+ }
+ $ret .= "}\n\n";
++ unshift @d,{%$d, wide=>true} if $need_wide;
+ }
+ return $ret;
+ };
+diff --git a/auto/MkSrc/Read.pm b/auto/MkSrc/Read.pm
+index 4b3d1d0..4bf640e 100644
+--- a/auto/MkSrc/Read.pm
++++ b/auto/MkSrc/Read.pm
+@@ -88,13 +88,13 @@ sub advance ( ) {
+ $in_pod = $1 if $line =~ /^\=(\w+)/;
+ $line = '' if $in_pod;
+ $in_pod = undef if $in_pod && $in_pod eq 'cut';
+- $line =~ s/\#.*$//;
++ $line =~ s/(?<!\\)\#.*$//;
+ $line =~ s/^(\t*)//;
+ $level = $base_level + length($1);
+ $line =~ s/\s*$//;
+ ++$base_level if $line =~ s/^\{$//;
+ --$base_level if $line =~ s/^\}$//;
+- $line =~ s/\\([{}])/$1/g;
++ $line =~ s/\\([{}#\\])/$1/g;
+ } while ($line eq '');
+ #print "$level:$line\n";
+ }
+diff --git a/auto/mk-src.in b/auto/mk-src.in
+index 0e7833a..eb3353f 100644
+--- a/auto/mk-src.in
++++ b/auto/mk-src.in
+@@ -608,6 +608,7 @@ errors:
+ invalid expression
+ mesg => "%expression" is not a valid regular expression.
+ parms => expression
++
+ }
+ group: speller
+ {
+@@ -650,6 +651,7 @@ class: speller
+ posib err
+ desc => Returns 0 if it is not in the dictionary,
+ 1 if it is, or -1 on error.
++ on conv error => return 0;
+ /
+ bool
+ encoded string: word
+@@ -715,6 +717,8 @@ class: speller
+ desc => Return NULL on error.
+ The word list returned by suggest is only
+ valid until the next call to suggest.
++ on conv error =>
++ word = NULL; word_size = 0;
+ /
+ const word list
+ encoded string: word
+@@ -840,7 +844,6 @@ class: document checker
+ void
+
+ method: process
+-
+ desc => Process a string.
+ The string passed in should only be split on
+ white space characters. Furthermore, between
+@@ -849,10 +852,10 @@ class: document checker
+ in the document. Passing in strings out of
+ order, skipping strings or passing them in
+ more than once may lead to undefined results.
++ no conv
+ /
+ void
+- string: str
+- int: size
++ encoded string: str
+
+ method: next misspelling
+
+@@ -860,9 +863,23 @@ class: document checker
+ processed string. If there are no more
+ misspelled words, then token.word will be
+ NULL and token.size will be 0
++ cc extra =>
++ \#define aspell_document_checker_next_misspelling_w(type, ths) \\
++ aspell_document_checker_next_misspelling_adj(ths, sizeof(type))
+ /
+ token object
+
++ method: next misspelling adj
++ desc => internal: do not use
++ c impl =>
++ Token res = ths->next_misspelling();
++ res.offset /= type_width;
++ res.len /= type_width;
++ return res;
++ /
++ token object
++ int: type_width
++
+ method: filter
+
+ desc => Returns the underlying filter class.
+@@ -922,9 +939,30 @@ class: string enumeration
+ ths->from_internal_->append_null(ths->temp_str);
+ return ths->temp_str.data();
+ \}
++ cc extra =>
++ \#define aspell_string_enumeration_next_w(type, ths) \\
++ aspell_cast_(const type *, aspell_string_enumeration_next_wide(ths, sizeof(type)))
+ /
+ const string
+
++ method: next wide
++ c impl =>
++ const char * s = ths->next();
++ if (s == 0) {
++ return s;
++ } else if (ths->from_internal_ == 0) \{
++ assert(type_width == 1);
++ return s;
++ \} else \{
++ assert(type_width == ths->from_internal_->out_type_width());
++ ths->temp_str.clear();
++ ths->from_internal_->convert(s,-1,ths->temp_str);
++ ths->from_internal_->append_null(ths->temp_str);
++ return ths->temp_str.data();
++ \}
++ /
++ const void pointer
++ int: type_width
+ }
+ group: info
+ {
+diff --git a/common/convert.cpp b/common/convert.cpp
+index 1add95a..7ae0317 100644
+--- a/common/convert.cpp
++++ b/common/convert.cpp
+@@ -541,18 +541,25 @@ namespace acommon {
+ // Trivial Conversion
+ //
+
++ const char * unsupported_null_term_wide_string_msg =
++ "Null-terminated wide-character strings unsupported when used this way.";
++
+ template <typename Chr>
+ struct DecodeDirect : public Decode
+ {
++ DecodeDirect() {type_width = sizeof(Chr);}
+ void decode(const char * in0, int size, FilterCharVector & out) const {
+ const Chr * in = reinterpret_cast<const Chr *>(in0);
+- if (size == -1) {
++ if (size == -sizeof(Chr)) {
+ for (;*in; ++in)
+- out.append(*in);
++ out.append(*in, sizeof(Chr));
++ } else if (size <= -1) {
++ fprintf(stderr, "%s\n", unsupported_null_term_wide_string_msg);
++ abort();
+ } else {
+- const Chr * stop = reinterpret_cast<const Chr *>(in0 +size);
++ const Chr * stop = reinterpret_cast<const Chr *>(in0) + size/sizeof(Chr);
+ for (;in != stop; ++in)
+- out.append(*in);
++ out.append(*in, sizeof(Chr));
+ }
+ }
+ PosibErr<void> decode_ec(const char * in0, int size,
+@@ -565,6 +572,7 @@ namespace acommon {
+ template <typename Chr>
+ struct EncodeDirect : public Encode
+ {
++ EncodeDirect() {type_width = sizeof(Chr);}
+ void encode(const FilterChar * in, const FilterChar * stop,
+ CharVector & out) const {
+ for (; in != stop; ++in) {
+@@ -594,11 +602,15 @@ namespace acommon {
+ template <typename Chr>
+ struct ConvDirect : public DirectConv
+ {
++ ConvDirect() {type_width = sizeof(Chr);}
+ void convert(const char * in0, int size, CharVector & out) const {
+- if (size == -1) {
++ if (size == -sizeof(Chr)) {
+ const Chr * in = reinterpret_cast<const Chr *>(in0);
+ for (;*in != 0; ++in)
+ out.append(in, sizeof(Chr));
++ } else if (size <= -1) {
++ fprintf(stderr, "%s\n", unsupported_null_term_wide_string_msg);
++ abort();
+ } else {
+ out.append(in0, size);
+ }
+@@ -1121,5 +1133,20 @@ namespace acommon {
+ }
+ return 0;
+ }
+-
++
++ PosibErr<void> unsupported_null_term_wide_string_err_(const char * func) {
++ static bool reported_to_stderr = false;
++ PosibErr<void> err = make_err(other_error, unsupported_null_term_wide_string_msg);
++ if (!reported_to_stderr) {
++ CERR.printf("ERROR: %s: %s\n", func, unsupported_null_term_wide_string_msg);
++ reported_to_stderr = true;
++ }
++ return err;
++ }
++
++ void unsupported_null_term_wide_string_abort_(const char * func) {
++ CERR.printf("%s: %s\n", unsupported_null_term_wide_string_msg);
++ abort();
++ }
++
+ }
+diff --git a/common/convert.hpp b/common/convert.hpp
+index 76332ee..c948973 100644
+--- a/common/convert.hpp
++++ b/common/convert.hpp
+@@ -7,6 +7,8 @@
+ #ifndef ASPELL_CONVERT__HPP
+ #define ASPELL_CONVERT__HPP
+
++#include "settings.h"
++
+ #include "string.hpp"
+ #include "posib_err.hpp"
+ #include "char_vector.hpp"
+@@ -25,8 +27,9 @@ namespace acommon {
+ typedef const Config CacheConfig;
+ typedef const char * CacheKey;
+ String key;
++ int type_width; // type width in bytes
+ bool cache_key_eq(const char * l) const {return key == l;}
+- ConvBase() {}
++ ConvBase() : type_width(1) {}
+ private:
+ ConvBase(const ConvBase &);
+ void operator=(const ConvBase &);
+@@ -56,6 +59,8 @@ namespace acommon {
+ virtual ~Encode() {}
+ };
+ struct DirectConv { // convert directly from in_code to out_code.
++ int type_width; // type width in bytes
++ DirectConv() : type_width(1) {}
+ // should not take ownership of decode and encode.
+ // decode and encode guaranteed to stick around for the life
+ // of the object.
+@@ -126,6 +131,9 @@ namespace acommon {
+ const char * in_code() const {return decode_->key.c_str();}
+ const char * out_code() const {return encode_->key.c_str();}
+
++ int in_type_width() const {return decode_->type_width;}
++ int out_type_width() const {return encode_->type_width;}
++
+ void append_null(CharVector & out) const
+ {
+ const char nul[4] = {0,0,0,0}; // 4 should be enough
+@@ -191,6 +199,10 @@ namespace acommon {
+ }
+ }
+
++ void convert(const void * in, int size, CharVector & out) {
++ convert(static_cast<const char *>(in), size, out);
++ }
++
+ void generic_convert(const char * in, int size, CharVector & out);
+
+ };
+@@ -412,6 +424,30 @@ namespace acommon {
+ return operator()(str, str + byte_size);}
+ };
+
++#ifdef SLOPPY_NULL_TERM_STRINGS
++ static const bool sloppy_null_term_strings = true;
++#else
++ static const bool sloppy_null_term_strings = false;
++#endif
++
++ PosibErr<void> unsupported_null_term_wide_string_err_(const char * func);
++ void unsupported_null_term_wide_string_abort_(const char * func);
++
++ static inline PosibErr<int> get_correct_size(const char * func, int conv_type_width, int size) {
++ if (sloppy_null_term_strings && size <= -1)
++ return -conv_type_width;
++ if (size <= -1 && -conv_type_width != size)
++ return unsupported_null_term_wide_string_err_(func);
++ return size;
++ }
++ static inline int get_correct_size(const char * func, int conv_type_width, int size, int type_width) {
++ if ((sloppy_null_term_strings || type_width <= -1) && size <= -1)
++ return -conv_type_width;
++ if (size <= -1 && conv_type_width != type_width)
++ unsupported_null_term_wide_string_abort_(func);
++ return size;
++ }
++
+ }
+
+ #endif
+diff --git a/common/document_checker.cpp b/common/document_checker.cpp
+index 5e510c4..0ccf1cd 100644
+--- a/common/document_checker.cpp
++++ b/common/document_checker.cpp
+@@ -44,7 +44,9 @@ namespace acommon {
+ void DocumentChecker::process(const char * str, int size)
+ {
+ proc_str_.clear();
+- conv_->decode(str, size, proc_str_);
++ PosibErr<int> fixed_size = get_correct_size("aspell_document_checker_process", conv_->in_type_width(), size);
++ if (!fixed_size.has_err())
++ conv_->decode(str, fixed_size, proc_str_);
+ proc_str_.append(0);
+ FilterChar * begin = proc_str_.pbegin();
+ FilterChar * end = proc_str_.pend() - 1;
+@@ -53,6 +55,19 @@ namespace acommon {
+ tokenizer_->reset(begin, end);
+ }
+
++ void DocumentChecker::process_wide(const void * str, int size, int type_width)
++ {
++ proc_str_.clear();
++ int fixed_size = get_correct_size("aspell_document_checker_process", conv_->in_type_width(), size, type_width);
++ conv_->decode(static_cast<const char *>(str), fixed_size, proc_str_);
++ proc_str_.append(0);
++ FilterChar * begin = proc_str_.pbegin();
++ FilterChar * end = proc_str_.pend() - 1;
++ if (filter_)
++ filter_->process(begin, end);
++ tokenizer_->reset(begin, end);
++ }
++
+ Token DocumentChecker::next_misspelling()
+ {
+ bool correct;
+diff --git a/common/document_checker.hpp b/common/document_checker.hpp
+index d35bb88..11a3c73 100644
+--- a/common/document_checker.hpp
++++ b/common/document_checker.hpp
+@@ -36,6 +36,7 @@ namespace acommon {
+ PosibErr<void> setup(Tokenizer *, Speller *, Filter *);
+ void reset();
+ void process(const char * str, int size);
++ void process_wide(const void * str, int size, int type_width);
+ Token next_misspelling();
+
+ Filter * filter() {return filter_;}
+diff --git a/common/version.cpp b/common/version.cpp
+index 414d938..9e60b75 100644
+--- a/common/version.cpp
++++ b/common/version.cpp
+@@ -1,8 +1,17 @@
+ #include "settings.h"
+
+-extern "C" const char * aspell_version_string() {
+ #ifdef NDEBUG
+- return VERSION " NDEBUG";
++# define NDEBUG_STR " NDEBUG"
++#else
++# define NDEBUG_STR
++#endif
++
++#ifdef SLOPPY_NULL_TERM_STRINGS
++# define SLOPPY_STR " SLOPPY"
++#else
++# define SLOPPY_STR
+ #endif
+- return VERSION;
++
++extern "C" const char * aspell_version_string() {
++ return VERSION NDEBUG_STR SLOPPY_STR;
+ }
+diff --git a/configure.ac b/configure.ac
+index 60e3b39..a5d51e3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -73,6 +73,9 @@ AC_ARG_ENABLE(filter-version-control,
+ AC_ARG_ENABLE(32-bit-hash-fun,
+ AS_HELP_STRING([--enable-32-bit-hash-fun],[use 32-bit hash function for compiled dictionaries]))
+
++AC_ARG_ENABLE(sloppy-null-term-strings,
++ AS_HELP_STRING([--enable-sloppy-null-term-strings],[allows allow null terminated UCS-2 and UCS-4 strings]))
++
+ AC_ARG_ENABLE(pspell-compatibility,
+ AS_HELP_STRING([--disable-pspell-compatibility],[don't install pspell compatibility libraries]))
+
+@@ -141,6 +144,11 @@ then
+ AC_DEFINE(USE_32_BIT_HASH_FUN, 1, [Defined if 32-bit hash function should be used for compiled dictionaries.])
+ fi
+
++if test "$enable_sloppy_null_term_strings" = "yes"
++then
++ AC_DEFINE(SLOPPY_NULL_TERM_STRINGS, 1, [Defined if null-terminated UCS-2 and UCS-4 strings should always be allowed.])
++fi
++
+ AM_CONDITIONAL(PSPELL_COMPATIBILITY,
+ [test "$enable_pspell_compatibility" != "no"])
+ AM_CONDITIONAL(INCREMENTED_SONAME,
+diff --git a/manual/aspell.texi b/manual/aspell.texi
+index 45fa091..f400e06 100644
+--- a/manual/aspell.texi
++++ b/manual/aspell.texi
+@@ -158,7 +158,8 @@ Installing
+
+ * Generic Install Instructions::
+ * HTML Manuals and "make clean"::
+-* Curses Notes::
++* Curses Notes::
++* Upgrading from Aspell 0.60.7::
+ * Loadable Filter Notes::
+ * Upgrading from Aspell 0.50::
+ * Upgrading from Aspell .33/Pspell .12::
+@@ -2206,18 +2207,26 @@ int correct = aspell_speller_check(spell_checker, @var{word}, @var{size});
+ @end smallexample
+
+ @noindent
+-@var{word} is expected to be a @code{const char *} character
+-string. If the encoding is set to be @code{ucs-2} or
+-@code{ucs-4} @var{word} is expected to be a cast
+-from either @code{const u16int *} or @code{const u32int *}
+-respectively. @code{u16int} and @code{u32int} are generally
+-@code{unsigned short} and @code{unsigned int} respectively.
+-@var{size} is the length of the string or @code{-1} if the string
+-is null terminated. If the string is a cast from @code{const u16int
+-*} or @code{const u32int *} then @code{@i{size}} is the amount of
+-space in bytes the string takes up after being cast to @code{const
+-char *} and not the true size of the string. @code{sspell_speller_check}
+-will return @code{0} if it is not found and non-zero otherwise.
++@var{word} is expected to be a @code{const char *} character string.
++@var{size} is the length of the string or @code{-1} if the string is
++null terminated. @code{aspell_speller_check} will return @code{0} if it is not found
++and non-zero otherwise.
++
++If you are using the @code{ucs-2} or @code{ucs-4} encoding then the
++string is expected to be either a 2 or 4 byte wide integer
++(respectively) and the @code{_w} macro vesion should be used:
++
++@smallexample
++int correct = aspell_speller_check_w(spell_checker, @var{word}, @var{size});
++@end smallexample
++
++The macro will cast the string to to the correct type and convert
++@var{size} into bytes for you and then a call the special wide version of the
++function that will make sure the encoding is correct for the type
++passed in. For compatibility with older versions of Aspell the normal
++non-wide functions can still be used provided that the size of the
++string, in bytes, is also passed in. Null terminated @code{ucs-2} or
++@code{ucs-4} are no longer supported when using the non-wide functions.
+
+ If the word is not correct, then the @code{suggest} method can be used
+ to come up with likely replacements.
+@@ -2236,7 +2245,28 @@ delete_aspell_string_enumeration(elements);
+
+ Notice how @code{elements} is deleted but @code{suggestions} is not.
+ The value returned by @code{suggestions} is only valid to the next
+-call to @code{suggest}. Once a replacement is made the
++call to @code{suggest}.
++
++If you are using the @code{ucs-2} or @code{ucs-4} encoding then, in
++addition to using the @code{_w} macro for the @code{suggest} method, you
++should also use the @code{_w} macro with the @code{next} method which
++will cast the string to the correct type for you. For example, if you
++are using the @code{ucs-2} encoding and the string is a @code{const
++uint16_t *} then you should use:
++
++@smallexample
++AspellWordList * suggestions = aspell_speller_suggest_w(spell_checker,
++ @var{word}, @var{size});
++AspellStringEnumeration * elements = aspell_word_list_elements(suggestions);
++const uint16_t * word;
++while ( (word = aspell_string_enumeration_next_w(uint16_t, aspell_elements)) != NULL )
++@{
++ // add to suggestion list
++@}
++delete_aspell_string_enumeration(elements);
++@end smallexample
++
++Once a replacement is made the
+ @code{store_repl} method should be used to communicate the replacement
+ pair back to the spell checker (for the reason, @pxref{Notes on
+ Storing Replacement Pairs}). Its usage is as follows:
+diff --git a/manual/readme.texi b/manual/readme.texi
+index 669ab8e..531721f 100644
+--- a/manual/readme.texi
++++ b/manual/readme.texi
+@@ -15,15 +15,16 @@ The latest version can always be found at GNU Aspell's home page at
+ @uref{http://aspell.net}.
+
+ @menu
+-* Generic Install Instructions::
+-* HTML Manuals and "make clean"::
+-* Curses Notes::
+-* Loadable Filter Notes::
+-* Using 32-Bit Dictionaries on a 64-Bit System::
+-* Upgrading from Aspell 0.50::
+-* Upgrading from Aspell .33/Pspell .12::
+-* Upgrading from a Pre-0.50 snapshot::
+-* WIN32 Notes::
++* Generic Install Instructions::
++* HTML Manuals and "make clean"::
++* Curses Notes::
++* Upgrading from Aspell 0.60.7::
++* Loadable Filter Notes::
++* Using 32-Bit Dictionaries on a 64-Bit System::
++* Upgrading from Aspell 0.50::
++* Upgrading from Aspell .33/Pspell .12::
++* Upgrading from a Pre-0.50 snapshot::
++* WIN32 Notes::
+ @end menu
+
+ @node Generic Install Instructions
+@@ -121,17 +122,62 @@ In addition your system must also support the @code{mblen} function.
+ Although this function was defined in the ISO C89 standard (ANSI
+ X3.159-1989), not all systems have it.
+
++@node Upgrading from Aspell 0.60.7
++@appendixsec Upgrading from Aspell 0.60.7
++
++To prevent a potentially unbounded buffer over-read, Aspell no longer
++supports null-terminated UCS-2 and UCS-4 encoded strings with the
++original C API. Null-termianted 8-bit or UTF-8 encoded strings are
++still supported, as are UCS-2 and UCS-4 encoded strings when the
++length is passed in.
++
++As of Aspell 0.60.8 a function from the original API that expects an
++encoded string as a parameter will return meaningless results (or an
++error code) if string is null terminated and the encoding is set to
++@code{ucs-2} or @code{ucs-4}. In addition, a single:
++@example
++ERROR: aspell_speller_check: Null-terminated wide-character strings unsupported when used this way.
++@end example
++will be printed to standard error the first time one of those
++functions is called.
++
++Application that use null-terminated UCS-2/4 strings should either (1)
++use the interface intended for working with wide-characters
++(@xref{Through the C API}); or (2) define
++@code{ASPELL_ENCODE_SETTING_SECURE} before including @code{aspell.h}.
++In the latter case is is important that the application explicitly
++sets the encoding to a known value. Defining
++@code{ASPELL_ENCODE_SETTING_SECURE} and not setting the encoding
++explicitly or allowing user of the application to set the encoding
++could result in an unbounded buffer over-read.
++
++If it is necessary to preserve binary compatibility with older
++versions of Aspell, the easiest thing would be to determine the length
++of the UCS-2/4 string---in bytes---and pass that in. Due to an
++implemenation detail, existing API functions can be made to work with
++null-terminated UCS-2/4 strings safely by passing in either @code{-2}
++or @code{-4} (corresponding to the width of the character type) as the
++size. Doing so, however, will cause a buffer over-read for unpatched
++version of Aspell. To avoid this it will be necessary to parse the
++version string to determine the correct value to use. However, no
++official support will be provided for the latter method.
++
++If the application can not be recompiled, then Aspell can be configured
++to preserve the old behavior by passing
++@option{--enable-sloppy-null-term-strings} to @command{configure}. When Aspell
++is compiled this way the version string will include the string
++@samp{ SLOPPY}.
++
+ @node Loadable Filter Notes
+ @appendixsec Loadable Filter Notes
+-
++
+ Support for being able to load additional filter modules at run-time
+ has only been verified to work on Linux platforms. If you get linker
+ errors when trying to use a filter, then it is likely that loadable
+ filter support is not working yet on your platform. Thus, in order to
+ get Aspell to work correctly you will need to avoid compiling the
+ filters as individual modules by using the
+-@option{--enable-compile-in-filters} when configuring Aspell with
+-@command{./configure}.
++@option{--enable-compile-in-filters} @command{configure} option.
+
+ @node Using 32-Bit Dictionaries on a 64-Bit System
+ @appendixsec Using 32-Bit Dictionaries on a 64-Bit System
+--
+2.17.1
+
diff --git a/meta/recipes-support/aspell/aspell/CVE-2019-20433-0002.patch b/meta/recipes-support/aspell/aspell/CVE-2019-20433-0002.patch
new file mode 100644
index 0000000000..9569ddeebe
--- /dev/null
+++ b/meta/recipes-support/aspell/aspell/CVE-2019-20433-0002.patch
@@ -0,0 +1,68 @@
+From cefd447e5528b08bb0cd6656bc52b4255692cefc Mon Sep 17 00:00:00 2001
+From: Kevin Atkinson <kevina@gnu.org>
+Date: Sat, 17 Aug 2019 20:25:21 -0400
+Subject: [PATCH 2/2] Increment library version to reflect API changes.
+
+CVE: CVE-2019-20433
+Upstream-Status: Backport [https://github.com/GNUAspell/aspell/commit/cefd447e5528b08bb0cd6656bc52b4255692cefc]
+
+Signed-off-by: Stefan Ghinea <stefan.ghinea@windriver.com>
+---
+ Makefile.am | 31 +++++++++++++++++--------------
+ 1 file changed, 17 insertions(+), 14 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 7e15851..19dc044 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -94,18 +94,25 @@ libaspell_la_SOURCES =\
+
+ libaspell_la_LIBADD = $(LTLIBINTL) $(PTHREAD_LIB)
+
+-## Libtool to so name
+-## C:R:A => (C-A).(A).(R)
+-## 16:5:0 => 16.0.5
+-## 16:5:1 => 15.1.5
+-## 18:0:2 => 16.2.0
+-## 17:0:2 => 15.2.0
+-
++## The version string is current[:revision[:age]]
++##
++## Before a release that has changed the source code at all
++## increment revision.
++##
++## After merging changes that have changed the API in a backwards
++## comptable way set revision to 0 and bump both current and age.
++##
++## Do not change the API in a backwards incompatible way.
++##
++## See "Libtool: Updating version info"
++## (https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html)
++## for more into
++##
+ if INCREMENTED_SONAME
+-libaspell_la_LDFLAGS = -version-info 18:0:2 -no-undefined
++libaspell_la_LDFLAGS = -version-info 19:0:3 -no-undefined
+ else
+ ## Use C-1:R:A
+-libaspell_la_LDFLAGS = -version-info 17:0:2 -no-undefined
++libaspell_la_LDFLAGS = -version-info 18:0:3 -no-undefined
+ endif
+
+ if PSPELL_COMPATIBILITY
+@@ -113,11 +120,7 @@ libpspell_la_SOURCES = lib/dummy.cpp
+
+ libpspell_la_LIBADD = libaspell.la
+
+-if INCREMENTED_SONAME
+-libpspell_la_LDFLAGS = -version-info 18:0:2 -no-undefined
+-else
+-libpspell_la_LDFLAGS = -version-info 17:0:2 -no-undefined
+-endif
++libpspell_la_LDFLAGS = $(libaspell_la_LDFLAGS)
+
+ endif
+
+--
+2.17.1
+
diff --git a/meta/recipes-support/aspell/aspell_0.60.7.bb b/meta/recipes-support/aspell/aspell_0.60.7.bb
index b565cb3c6e..1e104c263c 100644
--- a/meta/recipes-support/aspell/aspell_0.60.7.bb
+++ b/meta/recipes-support/aspell/aspell_0.60.7.bb
@@ -8,6 +8,8 @@ PR = "r1"
SRC_URI = "${GNU_MIRROR}/aspell/aspell-${PV}.tar.gz \
file://0001-Fix-various-bugs-found-by-OSS-Fuze.patch \
+ file://CVE-2019-20433-0001.patch \
+ file://CVE-2019-20433-0002.patch \
"
SRC_URI[md5sum] = "8ef2252609c511cd2bb26f3a3932ef28"
SRC_URI[sha256sum] = "5ca8fc8cb0370cc6c9eb5b64c6d1bc5d57b3750dbf17887726c3407d833b70e4"
diff --git a/meta/recipes-support/attr/acl_2.2.52.bb b/meta/recipes-support/attr/acl_2.2.52.bb
index 6bc77d868d..31ec64a43d 100644
--- a/meta/recipes-support/attr/acl_2.2.52.bb
+++ b/meta/recipes-support/attr/acl_2.2.52.bb
@@ -25,6 +25,9 @@ SRC_URI[sha256sum] = "179074bb0580c06c4b4137be4c5a92a701583277967acdb5546043c787
require ea-acl.inc
+# Has issues with newer versions of make
+PARALLEL_MAKEINST = ""
+
# avoid RPATH hardcode to staging dir
do_configure_append() {
sed -i ${S}/config.status -e s,^\\\(hardcode_into_libs=\\\).*$,\\1\'no\',
diff --git a/meta/recipes-support/attr/attr_2.4.47.bb b/meta/recipes-support/attr/attr_2.4.47.bb
index fc88bef830..c3da66a0c7 100644
--- a/meta/recipes-support/attr/attr_2.4.47.bb
+++ b/meta/recipes-support/attr/attr_2.4.47.bb
@@ -12,4 +12,7 @@ SRC_URI += "file://attr-Missing-configure.ac.patch \
SRC_URI[md5sum] = "84f58dec00b60f2dc8fd1c9709291cc7"
SRC_URI[sha256sum] = "25772f653ac5b2e3ceeb89df50e4688891e21f723c460636548971652af0a859"
+# Has issues with newer versions of make
+PARALLEL_MAKEINST = ""
+
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-support/boost/boost/0001-dont-setup-compiler-flags-m32-m64.patch b/meta/recipes-support/boost/boost/0001-dont-setup-compiler-flags-m32-m64.patch
new file mode 100644
index 0000000000..78b19225d4
--- /dev/null
+++ b/meta/recipes-support/boost/boost/0001-dont-setup-compiler-flags-m32-m64.patch
@@ -0,0 +1,42 @@
+From 59402e3a61d14eb7ce8c2019ea1a87ad4bd28605 Mon Sep 17 00:00:00 2001
+From: Anuj Mittal <anuj.mittal@intel.com>
+Date: Thu, 14 Nov 2019 10:13:53 +0800
+Subject: [PATCH] dont setup compiler flags -m32/-m64
+
+We don't want these to be setup by boost as we pass our own flags.
+
+Upstream-Status: Inappropriate [OE-specific]
+
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ tools/build/src/tools/gcc.jam | 14 --------------
+ 1 file changed, 14 deletions(-)
+
+diff --git a/tools/build/src/tools/gcc.jam b/tools/build/src/tools/gcc.jam
+index c7e3cf3..24486e0 100644
+--- a/tools/build/src/tools/gcc.jam
++++ b/tools/build/src/tools/gcc.jam
+@@ -430,20 +430,6 @@ local rule compile-link-flags ( * )
+ }
+
+ {
+- # Handle address-model
+- compile-link-flags <target-os>aix/<address-model>32 : -maix32 ;
+- compile-link-flags <target-os>aix/<address-model>64 : -maix64 ;
+-
+- compile-link-flags <target-os>hpux/<address-model>32 : -milp32 ;
+- compile-link-flags <target-os>hpux/<address-model>64 : -mlp64 ;
+-
+- local generic-os = [ set.difference $(all-os) : aix hpux ] ;
+- local arch = power sparc x86 ;
+- compile-link-flags <target-os>$(generic-os)/<architecture>$(arch)/<address-model>32 : -m32 ;
+- compile-link-flags <target-os>$(generic-os)/<architecture>$(arch)/<address-model>64 : -m64 ;
+-}
+-
+-{
+ # Handle threading
+ local rule threading-flags ( * )
+ {
+--
+2.7.4
+
diff --git a/meta/recipes-support/boost/boost_1.71.0.bb b/meta/recipes-support/boost/boost_1.71.0.bb
index 324b46f168..5e9e0d87d7 100644
--- a/meta/recipes-support/boost/boost_1.71.0.bb
+++ b/meta/recipes-support/boost/boost_1.71.0.bb
@@ -6,4 +6,5 @@ SRC_URI += "file://arm-intrinsics.patch \
file://boost-math-disable-pch-for-gcc.patch \
file://0001-Apply-boost-1.62.0-no-forced-flags.patch.patch \
file://0001-Don-t-set-up-arch-instruction-set-flags-we-do-that-o.patch \
+ file://0001-dont-setup-compiler-flags-m32-m64.patch \
"
diff --git a/meta/recipes-support/curl/curl/CVE-2019-15601.patch b/meta/recipes-support/curl/curl/CVE-2019-15601.patch
new file mode 100644
index 0000000000..7bfaae7b21
--- /dev/null
+++ b/meta/recipes-support/curl/curl/CVE-2019-15601.patch
@@ -0,0 +1,46 @@
+Upstream-Status: Backport [https://github.com/curl/curl/commit/1b71bc532bde8621fd3260843f8197182a467ff2]
+CVE: CVE-2019-15601
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+
+From 1b71bc532bde8621fd3260843f8197182a467ff2 Mon Sep 17 00:00:00 2001
+From: Daniel Stenberg <daniel@haxx.se>
+Date: Thu, 7 Nov 2019 10:13:01 +0100
+Subject: [PATCH] file: on Windows, refuse paths that start with \\
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+... as that might cause an unexpected SMB connection to a given host
+name.
+
+Reported-by: Fernando Muñoz
+CVE-2019-15601
+Bug: https://curl.haxx.se/docs/CVE-2019-15601.html
+---
+ lib/file.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/lib/file.c b/lib/file.c
+index d349cd9241..166931d7f1 100644
+--- a/lib/file.c
++++ b/lib/file.c
+@@ -136,7 +136,7 @@ static CURLcode file_connect(struct connectdata *conn, bool *done)
+ struct Curl_easy *data = conn->data;
+ char *real_path;
+ struct FILEPROTO *file = data->req.protop;
+- int fd;
++ int fd = -1;
+ #ifdef DOS_FILESYSTEM
+ size_t i;
+ char *actual_path;
+@@ -181,7 +181,9 @@ static CURLcode file_connect(struct connectdata *conn, bool *done)
+ return CURLE_URL_MALFORMAT;
+ }
+
+- fd = open_readonly(actual_path, O_RDONLY|O_BINARY);
++ if(strncmp("\\\\", actual_path, 2))
++ /* refuse to open path that starts with two backslashes */
++ fd = open_readonly(actual_path, O_RDONLY|O_BINARY);
+ file->path = actual_path;
+ #else
+ if(memchr(real_path, 0, real_path_len)) {
diff --git a/meta/recipes-support/curl/curl_7.66.0.bb b/meta/recipes-support/curl/curl_7.66.0.bb
index d1975f2460..a54e0536e9 100644
--- a/meta/recipes-support/curl/curl_7.66.0.bb
+++ b/meta/recipes-support/curl/curl_7.66.0.bb
@@ -7,6 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=be5d9e1419c4363f4b32037a2d3b7ffa"
SRC_URI = "http://curl.haxx.se/download/curl-${PV}.tar.bz2 \
file://0001-replace-krb5-config-with-pkg-config.patch \
+ file://CVE-2019-15601.patch \
"
SRC_URI[md5sum] = "c238aa394e3aa47ca4fcb0491774149f"
diff --git a/meta/recipes-support/db/db_5.3.28.bb b/meta/recipes-support/db/db_5.3.28.bb
index 761d80c2fd..a2969055a6 100644
--- a/meta/recipes-support/db/db_5.3.28.bb
+++ b/meta/recipes-support/db/db_5.3.28.bb
@@ -10,7 +10,7 @@
# same system at the same time if really necessary.
SECTION = "libs"
SUMMARY = "Berkeley Database v5"
-HOMEPAGE = "http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/overview/index.html"
+HOMEPAGE = "https://www.oracle.com/database/technologies/related/berkeleydb.html"
LICENSE = "Sleepycat"
RCONFLICTS_${PN} = "db3"
@@ -20,7 +20,7 @@ CVE_VERSION = "11.2.${PV}"
PR = "r1"
PE = "1"
-SRC_URI = "http://download.oracle.com/berkeley-db/db-${PV}.tar.gz"
+SRC_URI = "https://download.oracle.com/berkeley-db/db-${PV}.tar.gz"
SRC_URI += "file://fix-parallel-build.patch \
file://0001-atomic-Rename-local-__atomic_compare_exchange-to-avo.patch \
file://0001-configure-Add-explicit-tag-options-to-libtool-invoca.patch \
diff --git a/meta/recipes-support/gnupg/gnupg_2.2.17.bb b/meta/recipes-support/gnupg/gnupg_2.2.19.bb
index 689cf8a75e..a0577d61d3 100644
--- a/meta/recipes-support/gnupg/gnupg_2.2.17.bb
+++ b/meta/recipes-support/gnupg/gnupg_2.2.19.bb
@@ -19,8 +19,8 @@ SRC_URI = "${GNUPG_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
SRC_URI_append_class-native = " file://0001-configure.ac-use-a-custom-value-for-the-location-of-.patch \
file://relocate.patch"
-SRC_URI[md5sum] = "1ba2d9b70c377f8e967742064c27a19c"
-SRC_URI[sha256sum] = "afa262868e39b651a2db4c071fba90415154243e83a830ca00516f9a807fd514"
+SRC_URI[md5sum] = "cb3b373d08ba078c325299945a7f2818"
+SRC_URI[sha256sum] = "242554c0e06f3a83c420b052f750b65ead711cc3fddddb5e7274fcdbb4e9dec0"
EXTRA_OECONF = "--disable-ldap \
--disable-ccid-driver \
diff --git a/meta/recipes-support/gnutls/gnutls/CVE-2020-13777-a.patch b/meta/recipes-support/gnutls/gnutls/CVE-2020-13777-a.patch
new file mode 100644
index 0000000000..1811afc2ff
--- /dev/null
+++ b/meta/recipes-support/gnutls/gnutls/CVE-2020-13777-a.patch
@@ -0,0 +1,90 @@
+From 6e798091d057de6b7f94b9dede4c5c919ec41f89 Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno@gnu.org>
+Date: Tue, 2 Jun 2020 20:53:11 +0200
+Subject: [PATCH 1/3] stek: differentiate initial state from valid time window
+ of TOTP
+
+commit c2646aeee94e71cb15c90a3147cf3b5b0ca158ca from https://gitlab.com/gnutls/gnutls.git
+
+There was a confusion in the TOTP implementation in stek.c. When the
+mechanism is initialized at the first time, it records the timestamp
+but doesn't initialize the key. This removes the timestamp recording
+at the initialization phase, so the key is properly set later.
+
+Upstream-Status: Backport
+
+Signed-off-by: Daiki Ueno <ueno@gnu.org>
+Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
+---
+ lib/stek.c | 17 +++++------------
+ tests/resume-with-previous-stek.c | 4 ++--
+ tests/tls13/prf-early.c | 8 ++++----
+ 3 files changed, 11 insertions(+), 18 deletions(-)
+
+diff --git a/lib/stek.c b/lib/stek.c
+index 2f885ce..5ab9e7d 100644
+--- a/lib/stek.c
++++ b/lib/stek.c
+@@ -323,20 +323,13 @@ int _gnutls_initialize_session_ticket_key_rotation(gnutls_session_t session, con
+ if (unlikely(session == NULL || key == NULL))
+ return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR);
+
+- if (session->key.totp.last_result == 0) {
+- int64_t t;
+- memcpy(session->key.initial_stek, key->data, key->size);
+- t = totp_next(session);
+- if (t < 0)
+- return gnutls_assert_val(t);
++ if (unlikely(session->key.totp.last_result != 0))
++ return GNUTLS_E_INVALID_REQUEST;
+
+- session->key.totp.last_result = t;
+- session->key.totp.was_rotated = 0;
+-
+- return GNUTLS_E_SUCCESS;
+- }
++ memcpy(session->key.initial_stek, key->data, key->size);
+
+- return GNUTLS_E_INVALID_REQUEST;
++ session->key.totp.was_rotated = 0;
++ return 0;
+ }
+
+ /*
+diff --git a/tests/resume-with-previous-stek.c b/tests/resume-with-previous-stek.c
+index f212b18..05c1c90 100644
+--- a/tests/resume-with-previous-stek.c
++++ b/tests/resume-with-previous-stek.c
+@@ -196,8 +196,8 @@ static void server(int fd, unsigned rounds, const char *prio)
+ serverx509cred = NULL;
+ }
+
+- if (num_stek_rotations != 2)
+- fail("STEK should be rotated exactly twice (%d)!\n", num_stek_rotations);
++ if (num_stek_rotations != 3)
++ fail("STEK should be rotated exactly three times (%d)!\n", num_stek_rotations);
+
+ if (serverx509cred)
+ gnutls_certificate_free_credentials(serverx509cred);
+diff --git a/tests/tls13/prf-early.c b/tests/tls13/prf-early.c
+index 414b1db..bc31962 100644
+--- a/tests/tls13/prf-early.c
++++ b/tests/tls13/prf-early.c
+@@ -123,10 +123,10 @@ static void dump(const char *name, const uint8_t *data, unsigned data_size)
+ } \
+ }
+
+-#define KEY_EXP_VALUE "\xc0\x1e\xc2\xa4\xb7\xb4\x04\xaa\x91\x5d\xaf\xe8\xf7\x4d\x19\xdf\xd0\xe6\x08\xd6\xb4\x3b\xcf\xca\xc9\x32\x75\x3b\xe3\x11\x19\xb1\xac\x68"
+-#define HELLO_VALUE "\x77\xdb\x10\x0b\xe8\xd0\xb9\x38\xbc\x49\xe6\xbe\xf2\x47\x2a\xcc\x6b\xea\xce\x85\x04\xd3\x9e\xd8\x06\x16\xad\xff\xcd\xbf\x4b"
+-#define CONTEXT_VALUE "\xf2\x17\x9f\xf2\x66\x56\x87\x66\xf9\x5c\x8a\xd7\x4e\x1d\x46\xee\x0e\x44\x41\x4c\xcd\xac\xcb\xc0\x31\x41\x2a\xb6\xd7\x01\x62"
+-#define NULL_CONTEXT_VALUE "\xcd\x79\x07\x93\xeb\x96\x07\x3e\xec\x78\x90\x89\xf7\x16\x42\x6d\x27\x87\x56\x7c\x7b\x60\x2b\x20\x44\xd1\xea\x0c\x89\xfb\x8b"
++#define KEY_EXP_VALUE "\xc1\x6b\x6c\xb9\x88\x33\xd5\x28\x80\xec\x27\x87\xa2\x6f\x4b\xd0\x01\x5e\x7f\xca\xd7\xd4\x8a\x3f\xe2\x48\x92\xef\x02\x14\xfb\x81\x90\x04"
++#define HELLO_VALUE "\x2a\x73\xd9\x74\x04\x4e\x0a\x5f\x41\x8a\x09\xcb\x45\x33\x1a\xec\xd3\xfc\xdc\x1b\x2c\x67\x26\xe4\x9c\xfe\x1f\xa5\x74\xf1\x4f"
++#define CONTEXT_VALUE "\x87\xf6\x88\xe3\xd7\xf2\x05\xbc\xa4\x10\xa3\x48\x9f\xf5\xcf\x97\x06\x22\x4e\xfd\x18\x32\x52\x1d\xbd\x26\xf5\x5b\x21\x20\xec"
++#define NULL_CONTEXT_VALUE "\xf9\xca\xfe\x45\x44\x96\xdb\xc5\x41\x8f\x7e\x8e\xd7\xb0\x7d\x19\x45\xaf\x09\xbc\x1e\x82\x94\xac\x55\xe5\xb9\xb4\x3b\xe8\xc0"
+
+ static int handshake_callback_called;
+
+--
+2.17.1
+
diff --git a/meta/recipes-support/gnutls/gnutls/CVE-2020-13777-b.patch b/meta/recipes-support/gnutls/gnutls/CVE-2020-13777-b.patch
new file mode 100644
index 0000000000..12486e1710
--- /dev/null
+++ b/meta/recipes-support/gnutls/gnutls/CVE-2020-13777-b.patch
@@ -0,0 +1,137 @@
+From 6c7f9703e42bc5278d0a4a6f0a39d07d62123ea3 Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <dueno@redhat.com>
+Date: Tue, 31 Mar 2020 06:58:48 +0200
+Subject: [PATCH 2/3] build: use valgrind client request to detect undefined
+ memory use
+
+commit 50ad8778a81f9421effa4c5a3b457f98e559b178 from https://gitlab.com/gnutls/gnutls.git
+
+This tightens the check introduced in
+ac2f71b892d13a7ab4cc39086eef179042c7e23c, by using the valgrind client
+request to explicitly mark the "uninitialized but initialization is
+needed before use" regions. With this patch and the
+fix (c01011c2d8533dbbbe754e49e256c109cb848d0d) reverted, you will see
+the following error when running dtls_hello_random_value under
+valgrind:
+
+ $ valgrind ./dtls_hello_random_value
+ testing: default
+ ==520145== Conditional jump or move depends on uninitialised value(s)
+ ==520145== at 0x4025F5: hello_callback (dtls_hello_random_value.c:90)
+ ==520145== by 0x488BF97: _gnutls_call_hook_func (handshake.c:1215)
+ ==520145== by 0x488C1AA: _gnutls_send_handshake2 (handshake.c:1332)
+ ==520145== by 0x488FC7E: send_client_hello (handshake.c:2290)
+ ==520145== by 0x48902A1: handshake_client (handshake.c:2908)
+ ==520145== by 0x48902A1: gnutls_handshake (handshake.c:2740)
+ ==520145== by 0x402CB3: client (dtls_hello_random_value.c:153)
+ ==520145== by 0x402CB3: start (dtls_hello_random_value.c:317)
+ ==520145== by 0x402EFE: doit (dtls_hello_random_value.c:331)
+ ==520145== by 0x4023D4: main (utils.c:254)
+ ==520145==
+
+Upstream-Status: Backport
+
+Signed-off-by: Daiki Ueno <dueno@redhat.com>
+Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
+---
+ configure.ac | 2 ++
+ lib/handshake.c | 15 +++++++++++++++
+ lib/state.c | 21 ++++++++++++++++++---
+ 3 files changed, 35 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 172cf42..12da283 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -233,6 +233,8 @@ AS_IF([test "$ac_cv_search___atomic_load_4" = "none required" || test "$ac_cv_se
+ dnl We use its presence to detect C11 threads
+ AC_CHECK_HEADERS([threads.h])
+
++AC_CHECK_HEADERS([valgrind/memcheck.h])
++
+ AC_ARG_ENABLE(padlock,
+ AS_HELP_STRING([--disable-padlock], [unconditionally disable padlock acceleration]),
+ use_padlock=$enableval)
+diff --git a/lib/handshake.c b/lib/handshake.c
+index 84a0e52..8d58fa4 100644
+--- a/lib/handshake.c
++++ b/lib/handshake.c
+@@ -57,6 +57,9 @@
+ #include "secrets.h"
+ #include "tls13/session_ticket.h"
+ #include "locks.h"
++#ifdef HAVE_VALGRIND_MEMCHECK_H
++#include <valgrind/memcheck.h>
++#endif
+
+ #define TRUE 1
+ #define FALSE 0
+@@ -242,6 +245,12 @@ int _gnutls_gen_client_random(gnutls_session_t session)
+ return gnutls_assert_val(ret);
+ }
+
++#ifdef HAVE_VALGRIND_MEMCHECK_H
++ if (RUNNING_ON_VALGRIND)
++ VALGRIND_MAKE_MEM_DEFINED(session->security_parameters.client_random,
++ GNUTLS_RANDOM_SIZE);
++#endif
++
+ return 0;
+ }
+
+@@ -320,6 +329,12 @@ int _gnutls_gen_server_random(gnutls_session_t session, int version)
+ return ret;
+ }
+
++#ifdef HAVE_VALGRIND_MEMCHECK_H
++ if (RUNNING_ON_VALGRIND)
++ VALGRIND_MAKE_MEM_DEFINED(session->security_parameters.server_random,
++ GNUTLS_RANDOM_SIZE);
++#endif
++
+ return 0;
+ }
+
+diff --git a/lib/state.c b/lib/state.c
+index 0e1d155..98900c1 100644
+--- a/lib/state.c
++++ b/lib/state.c
+@@ -55,6 +55,9 @@
+ #include "ext/cert_types.h"
+ #include "locks.h"
+ #include "kx.h"
++#ifdef HAVE_VALGRIND_MEMCHECK_H
++#include <valgrind/memcheck.h>
++#endif
+
+ /* to be used by supplemental data support to disable TLS1.3
+ * when supplemental data have been globally registered */
+@@ -564,10 +567,22 @@ int gnutls_init(gnutls_session_t * session, unsigned int flags)
+ UINT32_MAX;
+ }
+
+- /* everything else not initialized here is initialized
+- * as NULL or 0. This is why calloc is used.
++ /* Everything else not initialized here is initialized as NULL
++ * or 0. This is why calloc is used. However, we want to
++ * ensure that certain portions of data are initialized at
++ * runtime before being used. Mark such regions with a
++ * valgrind client request as undefined.
+ */
+-
++#ifdef HAVE_VALGRIND_MEMCHECK_H
++ if (RUNNING_ON_VALGRIND) {
++ if (flags & GNUTLS_CLIENT)
++ VALGRIND_MAKE_MEM_UNDEFINED((*session)->security_parameters.client_random,
++ GNUTLS_RANDOM_SIZE);
++ if (flags & GNUTLS_SERVER)
++ VALGRIND_MAKE_MEM_UNDEFINED((*session)->security_parameters.server_random,
++ GNUTLS_RANDOM_SIZE);
++ }
++#endif
+ handshake_internal_state_clear1(*session);
+
+ #ifdef HAVE_WRITEV
+--
+2.17.1
+
diff --git a/meta/recipes-support/gnutls/gnutls/CVE-2020-13777-c.patch b/meta/recipes-support/gnutls/gnutls/CVE-2020-13777-c.patch
new file mode 100644
index 0000000000..2d8efeb889
--- /dev/null
+++ b/meta/recipes-support/gnutls/gnutls/CVE-2020-13777-c.patch
@@ -0,0 +1,68 @@
+From b34da057dc9eb01df30b436ba9cb047c21fb0151 Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno@gnu.org>
+Date: Tue, 2 Jun 2020 21:45:17 +0200
+Subject: [PATCH 3/3] valgrind: check if session ticket key is used without
+ initialization
+
+commit 3d7fae761e65e9d0f16d7247ee8a464d4fe002da from https://gitlab.com/gnutls/gnutls.git
+
+This adds a valgrind client request for
+session->key.session_ticket_key to make sure that it is not used
+without initialization.
+
+Upstream-Status: Backport
+
+Signed-off-by: Daiki Ueno <ueno@gnu.org>
+Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
+---
+ lib/state.c | 5 ++++-
+ lib/stek.c | 8 ++++++++
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/lib/state.c b/lib/state.c
+index 98900c1..cabdf7d 100644
+--- a/lib/state.c
++++ b/lib/state.c
+@@ -578,9 +578,12 @@ int gnutls_init(gnutls_session_t * session, unsigned int flags)
+ if (flags & GNUTLS_CLIENT)
+ VALGRIND_MAKE_MEM_UNDEFINED((*session)->security_parameters.client_random,
+ GNUTLS_RANDOM_SIZE);
+- if (flags & GNUTLS_SERVER)
++ if (flags & GNUTLS_SERVER) {
+ VALGRIND_MAKE_MEM_UNDEFINED((*session)->security_parameters.server_random,
+ GNUTLS_RANDOM_SIZE);
++ VALGRIND_MAKE_MEM_UNDEFINED((*session)->key.session_ticket_key,
++ TICKET_MASTER_KEY_SIZE);
++ }
+ }
+ #endif
+ handshake_internal_state_clear1(*session);
+diff --git a/lib/stek.c b/lib/stek.c
+index 5ab9e7d..316555b 100644
+--- a/lib/stek.c
++++ b/lib/stek.c
+@@ -21,6 +21,9 @@
+ */
+ #include "gnutls_int.h"
+ #include "stek.h"
++#ifdef HAVE_VALGRIND_MEMCHECK_H
++#include <valgrind/memcheck.h>
++#endif
+
+ #define NAME_POS (0)
+ #define KEY_POS (TICKET_KEY_NAME_SIZE)
+@@ -143,6 +146,11 @@ static int rotate(gnutls_session_t session)
+ call_rotation_callback(session, key, t);
+ session->key.totp.last_result = t;
+ memcpy(session->key.session_ticket_key, key, sizeof(key));
++#ifdef HAVE_VALGRIND_MEMCHECK_H
++ if (RUNNING_ON_VALGRIND)
++ VALGRIND_MAKE_MEM_DEFINED(session->key.session_ticket_key,
++ TICKET_MASTER_KEY_SIZE);
++#endif
+
+ session->key.totp.was_rotated = 1;
+ } else if (t < 0) {
+--
+2.17.1
+
diff --git a/meta/recipes-support/gnutls/gnutls/CVE-2020-24659.patch b/meta/recipes-support/gnutls/gnutls/CVE-2020-24659.patch
new file mode 100644
index 0000000000..1702325e66
--- /dev/null
+++ b/meta/recipes-support/gnutls/gnutls/CVE-2020-24659.patch
@@ -0,0 +1,117 @@
+From 29ee67c205855e848a0a26e6d0e4f65b6b943e0a Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno@gnu.org>
+Date: Sat, 22 Aug 2020 17:19:39 +0200
+Subject: [PATCH] handshake: reject no_renegotiation alert if handshake is
+ incomplete
+
+If the initial handshake is incomplete and the server sends a
+no_renegotiation alert, the client should treat it as a fatal error
+even if its level is warning. Otherwise the same handshake
+state (e.g., DHE parameters) are reused in the next gnutls_handshake
+call, if it is called in the loop idiom:
+
+ do {
+ ret = gnutls_handshake(session);
+ } while (ret < 0 && gnutls_error_is_fatal(ret) == 0);
+
+Signed-off-by: Daiki Ueno <ueno@gnu.org>
+CVE: CVE-2020-24659
+Upstream-Status: Backport [https://gitlab.com/gnutls/gnutls.git]
+Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
+---
+ lib/gnutls_int.h | 1 +
+ lib/handshake.c | 48 +++++++++++++-----
+ 2 files changed, 36 insertions(+), 13 deletions(-)
+
+diff --git a/lib/gnutls_int.h b/lib/gnutls_int.h
+index bb6c19713..31cec5c0c 100644
+--- a/lib/gnutls_int.h
++++ b/lib/gnutls_int.h
+@@ -1370,6 +1370,7 @@ typedef struct {
+ #define HSK_RECORD_SIZE_LIMIT_RECEIVED (1<<26) /* server: record_size_limit extension was seen but not accepted yet */
+ #define HSK_OCSP_REQUESTED (1<<27) /* server: client requested OCSP stapling */
+ #define HSK_CLIENT_OCSP_REQUESTED (1<<28) /* client: server requested OCSP stapling */
++#define HSK_SERVER_HELLO_RECEIVED (1<<29) /* client: Server Hello message has been received */
+
+ /* The hsk_flags are for use within the ongoing handshake;
+ * they are reset to zero prior to handshake start by gnutls_handshake. */
+diff --git a/lib/handshake.c b/lib/handshake.c
+index b40f84b3d..ce2d160e2 100644
+--- a/lib/handshake.c
++++ b/lib/handshake.c
+@@ -2051,6 +2051,8 @@ read_server_hello(gnutls_session_t session,
+ if (ret < 0)
+ return gnutls_assert_val(ret);
+
++ session->internals.hsk_flags |= HSK_SERVER_HELLO_RECEIVED;
++
+ return 0;
+ }
+
+@@ -2575,16 +2577,42 @@ int gnutls_rehandshake(gnutls_session_t session)
+ return 0;
+ }
+
++/* This function checks whether the error code should be treated fatal
++ * or not, and also does the necessary state transition. In
++ * particular, in the case of a rehandshake abort it resets the
++ * handshake's internal state.
++ */
+ inline static int
+ _gnutls_abort_handshake(gnutls_session_t session, int ret)
+ {
+- if (((ret == GNUTLS_E_WARNING_ALERT_RECEIVED) &&
+- (gnutls_alert_get(session) == GNUTLS_A_NO_RENEGOTIATION))
+- || ret == GNUTLS_E_GOT_APPLICATION_DATA)
+- return 0;
++ switch (ret) {
++ case GNUTLS_E_WARNING_ALERT_RECEIVED:
++ if (gnutls_alert_get(session) == GNUTLS_A_NO_RENEGOTIATION) {
++ /* The server always toleretes a "no_renegotiation" alert. */
++ if (session->security_parameters.entity == GNUTLS_SERVER) {
++ STATE = STATE0;
++ return ret;
++ }
++
++ /* The client should tolerete a "no_renegotiation" alert only if:
++ * - the initial handshake has completed, or
++ * - a Server Hello is not yet received
++ */
++ if (session->internals.initial_negotiation_completed ||
++ !(session->internals.hsk_flags & HSK_SERVER_HELLO_RECEIVED)) {
++ STATE = STATE0;
++ return ret;
++ }
+
+- /* this doesn't matter */
+- return GNUTLS_E_INTERNAL_ERROR;
++ return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET);
++ }
++ return ret;
++ case GNUTLS_E_GOT_APPLICATION_DATA:
++ STATE = STATE0;
++ return ret;
++ default:
++ return ret;
++ }
+ }
+
+
+@@ -2747,13 +2774,7 @@ int gnutls_handshake(gnutls_session_t session)
+ }
+
+ if (ret < 0) {
+- /* In the case of a rehandshake abort
+- * we should reset the handshake's internal state.
+- */
+- if (_gnutls_abort_handshake(session, ret) == 0)
+- STATE = STATE0;
+-
+- return ret;
++ return _gnutls_abort_handshake(session, ret);
+ }
+
+ /* clear handshake buffer */
+--
+2.17.0
+
diff --git a/meta/recipes-support/gnutls/gnutls/posix-shell.patch b/meta/recipes-support/gnutls/gnutls/posix-shell.patch
deleted file mode 100644
index 938e2d1e18..0000000000
--- a/meta/recipes-support/gnutls/gnutls/posix-shell.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Don't embed the path to the build-time POSIX shell as this will be
-$TMPDIR/hosttools/bash, which is no good on the target.
-
-Instead default to /bin/sh but allow it to be set in the environment.
-
-This isn't really upstreamable but I filed a bug at
-https://gitlab.com/gnutls/gnutls/issues/807 and hope a proper fix will be
-integrated.
-
-Upstream-Status: Inappropriate
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-diff --git a/src/libopts/m4/libopts.m4 b/src/libopts/m4/libopts.m4
-index c6ad738..a62faca 100644
---- a/src/libopts/m4/libopts.m4
-+++ b/src/libopts/m4/libopts.m4
-@@ -112,21 +112,7 @@ AC_DEFUN([INVOKE_LIBOPTS_MACROS_FIRST],[
- AC_CHECK_FUNCS([mmap canonicalize_file_name snprintf strdup strchr \
- strrchr strsignal fchmod fstat chmod])
- AC_PROG_SED
-- [while :
-- do
-- POSIX_SHELL=`which bash`
-- test -x "$POSIX_SHELL" && break
-- POSIX_SHELL=`which dash`
-- test -x "$POSIX_SHELL" && break
-- POSIX_SHELL=/usr/xpg4/bin/sh
-- test -x "$POSIX_SHELL" && break
-- POSIX_SHELL=`/bin/sh -c '
-- exec 2>/dev/null
-- if ! true ; then exit 1 ; fi
-- echo /bin/sh'`
-- test -x "$POSIX_SHELL" && break
-- ]AC_MSG_ERROR([cannot locate a working POSIX shell])[
-- done]
-+ POSIX_SHELL="${POSIX_SHELL:-/bin/sh}"
- AC_DEFINE_UNQUOTED([POSIX_SHELL], ["${POSIX_SHELL}"],
- [define to a working POSIX compliant shell])
- AC_SUBST([POSIX_SHELL])
diff --git a/meta/recipes-support/gnutls/gnutls_3.6.8.bb b/meta/recipes-support/gnutls/gnutls_3.6.13.bb
index c927063f0a..2ed012f9d6 100644
--- a/meta/recipes-support/gnutls/gnutls_3.6.8.bb
+++ b/meta/recipes-support/gnutls/gnutls_3.6.13.bb
@@ -19,11 +19,14 @@ SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
SRC_URI = "https://www.gnupg.org/ftp/gcrypt/gnutls/v${SHRT_VER}/gnutls-${PV}.tar.xz \
file://arm_eabi.patch \
- file://posix-shell.patch \
+ file://CVE-2020-13777-a.patch \
+ file://CVE-2020-13777-b.patch \
+ file://CVE-2020-13777-c.patch \
+ file://CVE-2020-24659.patch \
"
-SRC_URI[md5sum] = "9dcf0aa45d1a42e1b3ca5d39ec7c61a8"
-SRC_URI[sha256sum] = "aa81944e5635de981171772857e72be231a7e0f559ae0292d2737de475383e83"
+SRC_URI[md5sum] = "bb1fe696a11543433785b4fc70ca225f"
+SRC_URI[sha256sum] = "32041df447d9f4644570cf573c9f60358e865637d69b7e59d1159b7240b52f38"
inherit autotools texinfo pkgconfig gettext lib_package gtk-doc
diff --git a/meta/recipes-support/icu/icu/CVE-2020-10531.patch b/meta/recipes-support/icu/icu/CVE-2020-10531.patch
new file mode 100644
index 0000000000..56303fc0f2
--- /dev/null
+++ b/meta/recipes-support/icu/icu/CVE-2020-10531.patch
@@ -0,0 +1,122 @@
+From b7d08bc04a4296982fcef8b6b8a354a9e4e7afca Mon Sep 17 00:00:00 2001
+From: Frank Tang <ftang@chromium.org>
+Date: Sat, 1 Feb 2020 02:39:04 +0000
+Subject: [PATCH] ICU-20958 Prevent SEGV_MAPERR in append
+
+See #971
+
+Upstream-Status: Backport [https://github.com/unicode-org/icu/commit/b7d08bc04a4296982fcef8b6b8a354a9e4e7afca]
+CVE: CVE-2020-10531
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ icu4c/source/common/unistr.cpp | 6 ++-
+ icu4c/source/test/intltest/ustrtest.cpp | 62 +++++++++++++++++++++++++
+ icu4c/source/test/intltest/ustrtest.h | 1 +
+ 3 files changed, 68 insertions(+), 1 deletion(-)
+
+diff --git a/icu4c/source/common/unistr.cpp b/icu4c/source/common/unistr.cpp
+index 901bb3358ba..077b4d6ef20 100644
+--- a/icu4c/source/common/unistr.cpp
++++ b/icu4c/source/common/unistr.cpp
+@@ -1563,7 +1563,11 @@ UnicodeString::doAppend(const UChar *srcChars, int32_t srcStart, int32_t srcLeng
+ }
+
+ int32_t oldLength = length();
+- int32_t newLength = oldLength + srcLength;
++ int32_t newLength;
++ if (uprv_add32_overflow(oldLength, srcLength, &newLength)) {
++ setToBogus();
++ return *this;
++ }
+
+ // Check for append onto ourself
+ const UChar* oldArray = getArrayStart();
+diff --git a/icu4c/source/test/intltest/ustrtest.cpp b/icu4c/source/test/intltest/ustrtest.cpp
+index b6515ea813c..ad38bdf53a3 100644
+--- a/icu4c/source/test/intltest/ustrtest.cpp
++++ b/icu4c/source/test/intltest/ustrtest.cpp
+@@ -67,6 +67,7 @@ void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* &
+ TESTCASE_AUTO(TestWCharPointers);
+ TESTCASE_AUTO(TestNullPointers);
+ TESTCASE_AUTO(TestUnicodeStringInsertAppendToSelf);
++ TESTCASE_AUTO(TestLargeAppend);
+ TESTCASE_AUTO_END;
+ }
+
+@@ -2310,3 +2311,64 @@ void UnicodeStringTest::TestUnicodeStringInsertAppendToSelf() {
+ str.insert(2, sub);
+ assertEquals("", u"abbcdcde", str);
+ }
++
++void UnicodeStringTest::TestLargeAppend() {
++ if(quick) return;
++
++ IcuTestErrorCode status(*this, "TestLargeAppend");
++ // Make a large UnicodeString
++ int32_t len = 0xAFFFFFF;
++ UnicodeString str;
++ char16_t *buf = str.getBuffer(len);
++ // A fast way to set buffer to valid Unicode.
++ // 4E4E is a valid unicode character
++ uprv_memset(buf, 0x4e, len * 2);
++ str.releaseBuffer(len);
++ UnicodeString dest;
++ // Append it 16 times
++ // 0xAFFFFFF times 16 is 0xA4FFFFF1,
++ // which is greater than INT32_MAX, which is 0x7FFFFFFF.
++ int64_t total = 0;
++ for (int32_t i = 0; i < 16; i++) {
++ dest.append(str);
++ total += len;
++ if (total <= INT32_MAX) {
++ assertFalse("dest is not bogus", dest.isBogus());
++ } else {
++ assertTrue("dest should be bogus", dest.isBogus());
++ }
++ }
++ dest.remove();
++ total = 0;
++ for (int32_t i = 0; i < 16; i++) {
++ dest.append(str);
++ total += len;
++ if (total + len <= INT32_MAX) {
++ assertFalse("dest is not bogus", dest.isBogus());
++ } else if (total <= INT32_MAX) {
++ // Check that a string of exactly the maximum size works
++ UnicodeString str2;
++ int32_t remain = INT32_MAX - total;
++ char16_t *buf2 = str2.getBuffer(remain);
++ if (buf2 == nullptr) {
++ // if somehow memory allocation fail, return the test
++ return;
++ }
++ uprv_memset(buf2, 0x4e, remain * 2);
++ str2.releaseBuffer(remain);
++ dest.append(str2);
++ total += remain;
++ assertEquals("When a string of exactly the maximum size works", (int64_t)INT32_MAX, total);
++ assertEquals("When a string of exactly the maximum size works", INT32_MAX, dest.length());
++ assertFalse("dest is not bogus", dest.isBogus());
++
++ // Check that a string size+1 goes bogus
++ str2.truncate(1);
++ dest.append(str2);
++ total++;
++ assertTrue("dest should be bogus", dest.isBogus());
++ } else {
++ assertTrue("dest should be bogus", dest.isBogus());
++ }
++ }
++}
+diff --git a/icu4c/source/test/intltest/ustrtest.h b/icu4c/source/test/intltest/ustrtest.h
+index 218befdcc68..4a356a92c7a 100644
+--- a/icu4c/source/test/intltest/ustrtest.h
++++ b/icu4c/source/test/intltest/ustrtest.h
+@@ -97,6 +97,7 @@ class UnicodeStringTest: public IntlTest {
+ void TestWCharPointers();
+ void TestNullPointers();
+ void TestUnicodeStringInsertAppendToSelf();
++ void TestLargeAppend();
+ };
+
+ #endif
diff --git a/meta/recipes-support/icu/icu_64.2.bb b/meta/recipes-support/icu/icu_64.2.bb
index 10bac7aac0..d09776f4bc 100644
--- a/meta/recipes-support/icu/icu_64.2.bb
+++ b/meta/recipes-support/icu/icu_64.2.bb
@@ -6,18 +6,24 @@ def icu_download_version(d):
pvsplit = d.getVar('PV').split('.')
return pvsplit[0] + "_" + pvsplit[1]
+def icu_download_folder(d):
+ pvsplit = d.getVar('PV').split('.')
+ return pvsplit[0] + "-" + pvsplit[1]
+
ICU_PV = "${@icu_download_version(d)}"
+ICU_FOLDER = "${@icu_download_folder(d)}"
# http://errors.yoctoproject.org/Errors/Details/20486/
ARM_INSTRUCTION_SET_armv4 = "arm"
ARM_INSTRUCTION_SET_armv5 = "arm"
-BASE_SRC_URI = "http://download.icu-project.org/files/icu4c/${PV}/icu4c-${ICU_PV}-src.tgz"
+BASE_SRC_URI = "https://github.com/unicode-org/icu/releases/download/release-${ICU_FOLDER}/icu4c-${ICU_PV}-src.tgz"
SRC_URI = "${BASE_SRC_URI} \
file://icu-pkgdata-large-cmd.patch \
file://fix-install-manx.patch \
file://0001-Fix-big-endian-build.patch \
file://0001-icu-Added-armeb-support.patch \
+ file://CVE-2020-10531.patch;striplevel=3 \
"
SRC_URI_append_class-target = "\
@@ -26,5 +32,5 @@ SRC_URI_append_class-target = "\
SRC_URI[md5sum] = "a3d18213beec454e3cdec9a3116d6b05"
SRC_URI[sha256sum] = "627d5d8478e6d96fc8c90fed4851239079a561a6a8b9e48b0892f24e82d31d6c"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)/"
-UPSTREAM_CHECK_URI = "http://download.icu-project.org/files/icu4c/"
+UPSTREAM_CHECK_REGEX = "icu4c-(?P<pver>\d+(_\d+)+)-src"
+UPSTREAM_CHECK_URI = "https://github.com/unicode-org/icu/releases"
diff --git a/meta/recipes-support/iso-codes/iso-codes_4.3.bb b/meta/recipes-support/iso-codes/iso-codes_4.3.bb
index 5651a96c66..566c147690 100644
--- a/meta/recipes-support/iso-codes/iso-codes_4.3.bb
+++ b/meta/recipes-support/iso-codes/iso-codes_4.3.bb
@@ -5,7 +5,7 @@ BUGTRACKER = "https://salsa.debian.org/iso-codes-team/iso-codes/issues"
LICENSE = "LGPLv2.1"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-SRC_URI = "git://salsa.debian.org/iso-codes-team/iso-codes.git;protocol=http"
+SRC_URI = "git://salsa.debian.org/iso-codes-team/iso-codes.git;protocol=http;branch=main;"
SRCREV = "43398a317371e309361ce43072603863cb2f57e1"
# inherit gettext cannot be used, because it adds gettext-native to BASEDEPENDS which
diff --git a/meta/recipes-support/libbsd/libbsd_0.10.0.bb b/meta/recipes-support/libbsd/libbsd_0.10.0.bb
index eaf244a3b7..3b9ac5a01f 100644
--- a/meta/recipes-support/libbsd/libbsd_0.10.0.bb
+++ b/meta/recipes-support/libbsd/libbsd_0.10.0.bb
@@ -7,7 +7,7 @@ DESCRIPTION = "This library provides useful functions commonly found on BSD syst
projects with strong BSD origins, without needing to embed the same \
code over and over again on each project."
-HOMEPAGE = "http://libbsd.freedesktop.org/wiki/"
+HOMEPAGE = "https://libbsd.freedesktop.org/wiki/"
# There seems to be more licenses used in the code, I don't think we want to list them all here, complete list:
# OE @ ~/projects/libbsd $ grep ^License: COPYING | sort -u
# License: BSD-2-clause
@@ -31,7 +31,7 @@ LICENSE = "BSD-4-Clause & ISC & PD"
LIC_FILES_CHKSUM = "file://COPYING;md5=2120be0173469a06ed185b688e0e1ae0"
SECTION = "libs"
-SRC_URI = "http://libbsd.freedesktop.org/releases/${BPN}-${PV}.tar.xz"
+SRC_URI = "https://libbsd.freedesktop.org/releases/${BPN}-${PV}.tar.xz"
SRC_URI[md5sum] = "ead96d240d02faa5b921c0aa50c812b5"
SRC_URI[sha256sum] = "34b8adc726883d0e85b3118fa13605e179a62b31ba51f676136ecb2d0bc1a887"
diff --git a/meta/recipes-support/libevdev/libevdev/determinism.patch b/meta/recipes-support/libevdev/libevdev/determinism.patch
new file mode 100644
index 0000000000..33a6076b78
--- /dev/null
+++ b/meta/recipes-support/libevdev/libevdev/determinism.patch
@@ -0,0 +1,34 @@
+The order of dict values is not deterministic leading to differing header file generation.
+Sort to remove this inconsistency.
+
+RP 2020/2/7
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+Upstream-Status: Pending
+
+Index: a/libevdev/make-event-names.py
+===================================================================
+--- a/libevdev/make-event-names.py
++++ b/libevdev/make-event-names.py
+@@ -67,10 +67,10 @@ def print_bits(bits, prefix):
+ if not hasattr(bits, prefix):
+ return
+ print("static const char * const %s_map[%s_MAX + 1] = {" % (prefix, prefix.upper()))
+- for val, name in list(getattr(bits, prefix).items()):
++ for val, name in sorted(list(getattr(bits, prefix).items())):
+ print(" [%s] = \"%s\"," % (name, name))
+ if prefix == "key":
+- for val, name in list(getattr(bits, "btn").items()):
++ for val, name in sorted(list(getattr(bits, "btn").items())):
+ print(" [%s] = \"%s\"," % (name, name))
+ print("};")
+ print("")
+@@ -111,7 +111,7 @@ def print_lookup(bits, prefix):
+ if not hasattr(bits, prefix):
+ return
+
+- names = list(getattr(bits, prefix).items())
++ names = sorted(list(getattr(bits, prefix).items()))
+ if prefix == "btn":
+ names = names + btn_additional;
+
diff --git a/meta/recipes-support/libevdev/libevdev_1.8.0.bb b/meta/recipes-support/libevdev/libevdev_1.8.0.bb
index 84274987d7..46ed5d786a 100644
--- a/meta/recipes-support/libevdev/libevdev_1.8.0.bb
+++ b/meta/recipes-support/libevdev/libevdev_1.8.0.bb
@@ -6,7 +6,8 @@ LICENSE = "MIT-X"
LIC_FILES_CHKSUM = "file://COPYING;md5=75aae0d38feea6fda97ca381cb9132eb \
file://libevdev/libevdev.h;endline=21;md5=7ff4f0b5113252c2f1a828e0bbad98d1"
-SRC_URI = "http://www.freedesktop.org/software/libevdev/${BP}.tar.xz"
+SRC_URI = "http://www.freedesktop.org/software/libevdev/${BP}.tar.xz \
+ file://determinism.patch"
SRC_URI[md5sum] = "879631080be18526737e33b63d848039"
SRC_URI[sha256sum] = "20d3cae4efd277f485abdf8f2a7c46588e539998b5a08c2c4d368218379d4211"
diff --git a/meta/recipes-support/libexif/libexif/CVE-2020-13114.patch b/meta/recipes-support/libexif/libexif/CVE-2020-13114.patch
new file mode 100644
index 0000000000..06b8b46c21
--- /dev/null
+++ b/meta/recipes-support/libexif/libexif/CVE-2020-13114.patch
@@ -0,0 +1,73 @@
+From 47f51be021f4dfd800d4ff4630659887378baa3a Mon Sep 17 00:00:00 2001
+From: Dan Fandrich <dan@coneharvesters.com>
+Date: Sat, 16 May 2020 19:32:30 +0200
+Subject: [PATCH] Add a failsafe on the maximum number of Canon MakerNote
+
+ subtags.
+
+A malicious file could be crafted to cause extremely large values in some
+tags without tripping any buffer range checks. This is bad with the libexif
+representation of Canon MakerNotes because some arrays are turned into
+individual tags that the application must loop around.
+
+The largest value I've seen for failsafe_size in a (very small) sample of valid
+Canon files is <5000. The limit is set two orders of magnitude larger to avoid
+tripping up falsely in case some models use much larger values.
+
+Patch from Google.
+
+CVE-2020-13114
+
+Upstream-Status: Backport [https://github.com/libexif/libexif/commit/e6a38a1a23ba94d139b1fa2cd4519fdcfe3c9bab]
+CVE: CVE-2020-13114
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+---
+ libexif/canon/exif-mnote-data-canon.c | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/libexif/canon/exif-mnote-data-canon.c b/libexif/canon/exif-mnote-data-canon.c
+index eb53598..72fd7a3 100644
+--- a/libexif/canon/exif-mnote-data-canon.c
++++ b/libexif/canon/exif-mnote-data-canon.c
+@@ -32,6 +32,9 @@
+
+ #define DEBUG
+
++/* Total size limit to prevent abuse by DoS */
++#define FAILSAFE_SIZE_MAX 1000000L
++
+ static void
+ exif_mnote_data_canon_clear (ExifMnoteDataCanon *n)
+ {
+@@ -202,6 +205,7 @@ exif_mnote_data_canon_load (ExifMnoteData *ne,
+ ExifMnoteDataCanon *n = (ExifMnoteDataCanon *) ne;
+ ExifShort c;
+ size_t i, tcount, o, datao;
++ long failsafe_size = 0;
+
+ if (!n || !buf || !buf_size) {
+ exif_log (ne->log, EXIF_LOG_CODE_CORRUPT_DATA,
+@@ -280,6 +284,23 @@ exif_mnote_data_canon_load (ExifMnoteData *ne,
+ memcpy (n->entries[tcount].data, buf + dataofs, s);
+ }
+
++ /* Track the size of decoded tag data. A malicious file could
++ * be crafted to cause extremely large values here without
++ * tripping any buffer range checks. This is especially bad
++ * with the libexif representation of Canon MakerNotes because
++ * some arrays are turned into individual tags that the
++ * application must loop around. */
++ failsafe_size += mnote_canon_entry_count_values(&n->entries[tcount]);
++
++ if (failsafe_size > FAILSAFE_SIZE_MAX) {
++ /* Abort if the total size of the data in the tags extraordinarily large, */
++ exif_mem_free (ne->mem, n->entries[tcount].data);
++ exif_log (ne->log, EXIF_LOG_CODE_CORRUPT_DATA,
++ "ExifMnoteCanon", "Failsafe tag size overflow (%lu > %ld)",
++ failsafe_size, FAILSAFE_SIZE_MAX);
++ break;
++ }
++
+ /* Tag was successfully parsed */
+ ++tcount;
+ }
diff --git a/meta/recipes-support/libexif/libexif_0.6.21.bb b/meta/recipes-support/libexif/libexif_0.6.21.bb
index d847beab18..3f6fa32b25 100644
--- a/meta/recipes-support/libexif/libexif_0.6.21.bb
+++ b/meta/recipes-support/libexif/libexif_0.6.21.bb
@@ -7,7 +7,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=243b725d71bb5df4a1e5920b344b86ad"
SRC_URI = "${SOURCEFORGE_MIRROR}/libexif/libexif-${PV}.tar.bz2 \
file://CVE-2017-7544.patch \
file://CVE-2016-6328.patch \
- file://CVE-2018-20030.patch"
+ file://CVE-2018-20030.patch \
+ file://CVE-2020-13114.patch \
+"
SRC_URI[md5sum] = "27339b89850f28c8f1c237f233e05b27"
SRC_URI[sha256sum] = "16cdaeb62eb3e6dfab2435f7d7bccd2f37438d21c5218ec4e58efa9157d4d41a"
diff --git a/meta/recipes-support/libgcrypt/files/0001-dsa-ecdsa-Fix-use-of-nonce-use-larger-one.patch b/meta/recipes-support/libgcrypt/files/0001-dsa-ecdsa-Fix-use-of-nonce-use-larger-one.patch
new file mode 100644
index 0000000000..211e041303
--- /dev/null
+++ b/meta/recipes-support/libgcrypt/files/0001-dsa-ecdsa-Fix-use-of-nonce-use-larger-one.patch
@@ -0,0 +1,128 @@
+From db4e9976cc31b314aafad6626b2894e86ee44d60 Mon Sep 17 00:00:00 2001
+From: NIIBE Yutaka <gniibe@fsij.org>
+Date: Thu, 8 Aug 2019 17:42:02 +0900
+Subject: [PATCH] dsa,ecdsa: Fix use of nonce, use larger one.
+
+Upstream-Status: Backport [https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=db4e9976cc3]
+CVE: CVE-2019-13627
+Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
+
+* cipher/dsa-common.c (_gcry_dsa_modify_k): New.
+* cipher/pubkey-internal.h (_gcry_dsa_modify_k): New.
+* cipher/dsa.c (sign): Use _gcry_dsa_modify_k.
+* cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Likewise.
+* cipher/ecc-gost.c (_gcry_ecc_gost_sign): Likewise.
+
+--
+
+Cherry-picked master commit of:
+ 7c2943309d14407b51c8166c4dcecb56a3628567
+
+CVE-id: CVE-2019-13627
+GnuPG-bug-id: 4626
+Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
+---
+ cipher/dsa-common.c | 24 ++++++++++++++++++++++++
+ cipher/dsa.c | 2 ++
+ cipher/ecc-ecdsa.c | 10 +---------
+ cipher/ecc-gost.c | 2 ++
+ cipher/pubkey-internal.h | 1 +
+ 5 files changed, 30 insertions(+), 9 deletions(-)
+
+diff --git a/cipher/dsa-common.c b/cipher/dsa-common.c
+index 8c0a6843..fe49248d 100644
+--- a/cipher/dsa-common.c
++++ b/cipher/dsa-common.c
+@@ -29,6 +29,30 @@
+ #include "pubkey-internal.h"
+
+
++/*
++ * Modify K, so that computation time difference can be small,
++ * by making K large enough.
++ *
++ * Originally, (EC)DSA computation requires k where 0 < k < q. Here,
++ * we add q (the order), to keep k in a range: q < k < 2*q (or,
++ * addming more q, to keep k in a range: 2*q < k < 3*q), so that
++ * timing difference of the EC multiply (or exponentiation) operation
++ * can be small. The result of (EC)DSA computation is same.
++ */
++void
++_gcry_dsa_modify_k (gcry_mpi_t k, gcry_mpi_t q, int qbits)
++{
++ gcry_mpi_t k1 = mpi_new (qbits+2);
++
++ mpi_resize (k, (qbits+2+BITS_PER_MPI_LIMB-1) / BITS_PER_MPI_LIMB);
++ k->nlimbs = k->alloced;
++ mpi_add (k, k, q);
++ mpi_add (k1, k, q);
++ mpi_set_cond (k, k1, !mpi_test_bit (k, qbits));
++
++ mpi_free (k1);
++}
++
+ /*
+ * Generate a random secret exponent K less than Q.
+ * Note that ECDSA uses this code also to generate D.
+diff --git a/cipher/dsa.c b/cipher/dsa.c
+index 22d8d782..24a53528 100644
+--- a/cipher/dsa.c
++++ b/cipher/dsa.c
+@@ -635,6 +635,8 @@ sign (gcry_mpi_t r, gcry_mpi_t s, gcry_mpi_t input, DSA_secret_key *skey,
+ k = _gcry_dsa_gen_k (skey->q, GCRY_STRONG_RANDOM);
+ }
+
++ _gcry_dsa_modify_k (k, skey->q, qbits);
++
+ /* r = (a^k mod p) mod q */
+ mpi_powm( r, skey->g, k, skey->p );
+ mpi_fdiv_r( r, r, skey->q );
+diff --git a/cipher/ecc-ecdsa.c b/cipher/ecc-ecdsa.c
+index 84a1cf84..97966c3a 100644
+--- a/cipher/ecc-ecdsa.c
++++ b/cipher/ecc-ecdsa.c
+@@ -114,15 +114,7 @@ _gcry_ecc_ecdsa_sign (gcry_mpi_t input, ECC_secret_key *skey,
+ else
+ k = _gcry_dsa_gen_k (skey->E.n, GCRY_STRONG_RANDOM);
+
+- /* Originally, ECDSA computation requires k where 0 < k < n.
+- * Here, we add n (the order of curve), to keep k in a
+- * range: n < k < 2*n, or, addming more n, keep k in a range:
+- * 2*n < k < 3*n, so that timing difference of the EC
+- * multiply operation can be small. The result is same.
+- */
+- mpi_add (k, k, skey->E.n);
+- if (!mpi_test_bit (k, qbits))
+- mpi_add (k, k, skey->E.n);
++ _gcry_dsa_modify_k (k, skey->E.n, qbits);
+
+ _gcry_mpi_ec_mul_point (&I, k, &skey->E.G, ctx);
+ if (_gcry_mpi_ec_get_affine (x, NULL, &I, ctx))
+diff --git a/cipher/ecc-gost.c b/cipher/ecc-gost.c
+index a34fa084..0362a6c7 100644
+--- a/cipher/ecc-gost.c
++++ b/cipher/ecc-gost.c
+@@ -94,6 +94,8 @@ _gcry_ecc_gost_sign (gcry_mpi_t input, ECC_secret_key *skey,
+ mpi_free (k);
+ k = _gcry_dsa_gen_k (skey->E.n, GCRY_STRONG_RANDOM);
+
++ _gcry_dsa_modify_k (k, skey->E.n, qbits);
++
+ _gcry_mpi_ec_mul_point (&I, k, &skey->E.G, ctx);
+ if (_gcry_mpi_ec_get_affine (x, NULL, &I, ctx))
+ {
+diff --git a/cipher/pubkey-internal.h b/cipher/pubkey-internal.h
+index b8167c77..d31e26f3 100644
+--- a/cipher/pubkey-internal.h
++++ b/cipher/pubkey-internal.h
+@@ -84,6 +84,7 @@ _gcry_rsa_pss_verify (gcry_mpi_t value, gcry_mpi_t encoded,
+
+
+ /*-- dsa-common.c --*/
++void _gcry_dsa_modify_k (gcry_mpi_t k, gcry_mpi_t q, int qbits);
+ gcry_mpi_t _gcry_dsa_gen_k (gcry_mpi_t q, int security_level);
+ gpg_err_code_t _gcry_dsa_gen_rfc6979_k (gcry_mpi_t *r_k,
+ gcry_mpi_t dsa_q, gcry_mpi_t dsa_x,
+--
+2.23.0
+
diff --git a/meta/recipes-support/libgcrypt/files/0001-ecc-Add-mitigation-against-timing-attack.patch b/meta/recipes-support/libgcrypt/files/0001-ecc-Add-mitigation-against-timing-attack.patch
new file mode 100644
index 0000000000..db5a55ed26
--- /dev/null
+++ b/meta/recipes-support/libgcrypt/files/0001-ecc-Add-mitigation-against-timing-attack.patch
@@ -0,0 +1,70 @@
+From d5407b78cca9f9d318a4f4d2f6ba2b8388584cd9 Mon Sep 17 00:00:00 2001
+From: NIIBE Yutaka <gniibe@fsij.org>
+Date: Wed, 17 Jul 2019 12:44:50 +0900
+Subject: [PATCH] ecc: Add mitigation against timing attack.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Backport [https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=d5407b78c]
+CVE: CVE-2019-13627
+Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
+
+* cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Add the order N to K.
+* mpi/ec.c (_gcry_mpi_ec_mul_point): Compute with NBITS of P or larger.
+
+--
+
+Cherry-picked master commit of:
+ b9577f7c89b4327edc09f2231bc8b31521102c79
+
+CVE-id: CVE-2019-13627
+GnuPG-bug-id: 4626
+Co-authored-by: Ján Jančár <johny@neuromancer.sk>
+Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
+---
+ cipher/ecc-ecdsa.c | 10 ++++++++++
+ mpi/ec.c | 6 +++++-
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/cipher/ecc-ecdsa.c b/cipher/ecc-ecdsa.c
+index 140e8c09..84a1cf84 100644
+--- a/cipher/ecc-ecdsa.c
++++ b/cipher/ecc-ecdsa.c
+@@ -114,6 +114,16 @@ _gcry_ecc_ecdsa_sign (gcry_mpi_t input, ECC_secret_key *skey,
+ else
+ k = _gcry_dsa_gen_k (skey->E.n, GCRY_STRONG_RANDOM);
+
++ /* Originally, ECDSA computation requires k where 0 < k < n.
++ * Here, we add n (the order of curve), to keep k in a
++ * range: n < k < 2*n, or, addming more n, keep k in a range:
++ * 2*n < k < 3*n, so that timing difference of the EC
++ * multiply operation can be small. The result is same.
++ */
++ mpi_add (k, k, skey->E.n);
++ if (!mpi_test_bit (k, qbits))
++ mpi_add (k, k, skey->E.n);
++
+ _gcry_mpi_ec_mul_point (&I, k, &skey->E.G, ctx);
+ if (_gcry_mpi_ec_get_affine (x, NULL, &I, ctx))
+ {
+diff --git a/mpi/ec.c b/mpi/ec.c
+index 89077cd9..adb02600 100644
+--- a/mpi/ec.c
++++ b/mpi/ec.c
+@@ -1309,7 +1309,11 @@ _gcry_mpi_ec_mul_point (mpi_point_t result,
+ unsigned int nbits;
+ int j;
+
+- nbits = mpi_get_nbits (scalar);
++ if (mpi_cmp (scalar, ctx->p) >= 0)
++ nbits = mpi_get_nbits (scalar);
++ else
++ nbits = mpi_get_nbits (ctx->p);
++
+ if (ctx->model == MPI_EC_WEIERSTRASS)
+ {
+ mpi_set_ui (result->x, 1);
+--
+2.23.0
+
diff --git a/meta/recipes-support/libgcrypt/files/determinism.patch b/meta/recipes-support/libgcrypt/files/determinism.patch
new file mode 100644
index 0000000000..ad0b8c7950
--- /dev/null
+++ b/meta/recipes-support/libgcrypt/files/determinism.patch
@@ -0,0 +1,32 @@
+gnutls detects our outer git trees and injects that revision into its objects.
+That isn't deterministic so stop it. Also ensure we're not marked as a development
+build as its git detection is faulty.
+
+RP 2020/2/6
+
+Upstream-Status: Pending
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+
+Index: libgcrypt-1.8.5/configure.ac
+===================================================================
+--- libgcrypt-1.8.5.orig/configure.ac
++++ libgcrypt-1.8.5/configure.ac
+@@ -45,7 +45,7 @@ m4_define([mym4_revision_dec],
+ m4_define([mym4_betastring],
+ m4_esyscmd_s([git describe --match 'libgcrypt-[0-9].*[0-9]' --long|\
+ awk -F- '$3!=0{print"-beta"$3}']))
+-m4_define([mym4_isgit],m4_if(mym4_betastring,[],[no],[yes]))
++m4_define([mym4_isgit],[no])
+ m4_define([mym4_full_version],[mym4_version[]mym4_betastring])
+
+ AC_INIT([libgcrypt],[mym4_full_version],[http://bugs.gnupg.org])
+@@ -2575,7 +2575,7 @@ AM_CONDITIONAL([BUILD_DOC], [test "x$bui
+ #
+ # Provide information about the build.
+ #
+-BUILD_REVISION="mym4_revision"
++BUILD_REVISION="None"
+ AC_SUBST(BUILD_REVISION)
+ AC_DEFINE_UNQUOTED(BUILD_REVISION, "$BUILD_REVISION",
+ [GIT commit id revision used to build this package])
diff --git a/meta/recipes-support/libgcrypt/libgcrypt_1.8.4.bb b/meta/recipes-support/libgcrypt/libgcrypt_1.8.4.bb
index 11d078d44a..92eb2d257a 100644
--- a/meta/recipes-support/libgcrypt/libgcrypt_1.8.4.bb
+++ b/meta/recipes-support/libgcrypt/libgcrypt_1.8.4.bb
@@ -24,6 +24,9 @@ SRC_URI = "${GNUPG_MIRROR}/libgcrypt/libgcrypt-${PV}.tar.bz2 \
file://0001-Prefetch-GCM-look-up-tables.patch \
file://0002-AES-move-look-up-tables-to-.data-section-and-unshare.patch \
file://0003-GCM-move-look-up-table-to-.data-section-and-unshare-.patch \
+ file://0001-ecc-Add-mitigation-against-timing-attack.patch \
+ file://0001-dsa-ecdsa-Fix-use-of-nonce-use-larger-one.patch \
+ file://determinism.patch \
"
SRC_URI[md5sum] = "fbfdaebbbc6d7e5fbbf6ffdb3e139573"
SRC_URI[sha256sum] = "f638143a0672628fde0cad745e9b14deb85dffb175709cacc1f4fe24b93f2227"
diff --git a/meta/recipes-support/libpcre/libpcre/CVE-2020-14155.patch b/meta/recipes-support/libpcre/libpcre/CVE-2020-14155.patch
new file mode 100644
index 0000000000..183512fd7d
--- /dev/null
+++ b/meta/recipes-support/libpcre/libpcre/CVE-2020-14155.patch
@@ -0,0 +1,41 @@
+--- pcre-8.43/pcre_compile.c 2020-07-05 22:26:25.310501521 +0530
++++ pcre-8.43/pcre_compile1.c 2020-07-05 22:30:22.254489562 +0530
+
+CVE: CVE-2020-14155
+Upstream-Status: Backport [https://vcs.pcre.org/pcre/code/trunk/pcre_compile.c?view=patch&r1=1761&r2=1760&pathrev=1761]
+Signed-off-by: Rahul Taya<Rahul.Taya@kpit.com>
+
+@@ -6,7 +6,7 @@
+ and semantics are as close as possible to those of the Perl 5 language.
+
+ Written by Philip Hazel
+- Copyright (c) 1997-2018 University of Cambridge
++ Copyright (c) 1997-2020 University of Cambridge
+
+ -----------------------------------------------------------------------------
+ Redistribution and use in source and binary forms, with or without
+@@ -7130,17 +7130,19 @@
+ int n = 0;
+ ptr++;
+ while(IS_DIGIT(*ptr))
++ {
+ n = n * 10 + *ptr++ - CHAR_0;
++ if (n > 255)
++ {
++ *errorcodeptr = ERR38;
++ goto FAILED;
++ }
++ }
+ if (*ptr != CHAR_RIGHT_PARENTHESIS)
+ {
+ *errorcodeptr = ERR39;
+ goto FAILED;
+ }
+- if (n > 255)
+- {
+- *errorcodeptr = ERR38;
+- goto FAILED;
+- }
+ *code++ = n;
+ PUT(code, 0, (int)(ptr - cd->start_pattern + 1)); /* Pattern offset */
+ PUT(code, LINK_SIZE, 0); /* Default length */
diff --git a/meta/recipes-support/libpcre/libpcre2/CVE-2019-20454.patch b/meta/recipes-support/libpcre/libpcre2/CVE-2019-20454.patch
new file mode 100644
index 0000000000..51f95a7097
--- /dev/null
+++ b/meta/recipes-support/libpcre/libpcre2/CVE-2019-20454.patch
@@ -0,0 +1,19 @@
+Upstream-Status: Backport [https://vcs.pcre.org/pcre2/code/trunk/src/pcre2_jit_compile.c?r1=1092&r2=1091&pathrev=1092]
+CVE: CVE-2020-8002
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+
+--- pcre2-10.30/src/pcre2_jit_compile.c 2019/05/13 16:26:17 1091
++++ pcre2-10.30/src/pcre2_jit_compile.c 2019/05/13 16:38:18 1092
+@@ -8571,7 +8571,10 @@
+ PCRE2_SPTR bptr;
+ uint32_t c;
+
+-GETCHARINC(c, cc);
++/* Patch by PH */
++/* GETCHARINC(c, cc); */
++
++c = *cc++;
+ #if PCRE2_CODE_UNIT_WIDTH == 32
+ if (c >= 0x110000)
+ return NULL;
+
diff --git a/meta/recipes-support/libpcre/libpcre2_10.33.bb b/meta/recipes-support/libpcre/libpcre2_10.33.bb
index 50b26753b4..1020df99b8 100644
--- a/meta/recipes-support/libpcre/libpcre2_10.33.bb
+++ b/meta/recipes-support/libpcre/libpcre2_10.33.bb
@@ -12,6 +12,7 @@ LIC_FILES_CHKSUM = "file://LICENCE;md5=b1588d3bb4cb0e1f5a597d908f8c5b37"
SRC_URI = "https://ftp.pcre.org/pub/pcre/pcre2-${PV}.tar.bz2 \
file://pcre-cross.patch \
+ file://CVE-2019-20454.patch \
"
SRC_URI[md5sum] = "80b355f2dce909a2e2424f5c79eddb44"
diff --git a/meta/recipes-support/libpcre/libpcre_8.43.bb b/meta/recipes-support/libpcre/libpcre_8.43.bb
index b97af08b25..60ece64504 100644
--- a/meta/recipes-support/libpcre/libpcre_8.43.bb
+++ b/meta/recipes-support/libpcre/libpcre_8.43.bb
@@ -12,6 +12,7 @@ SRC_URI = "https://ftp.pcre.org/pub/pcre/pcre-${PV}.tar.bz2 \
file://out-of-tree.patch \
file://run-ptest \
file://Makefile \
+ file://CVE-2020-14155.patch \
"
SRC_URI[md5sum] = "636222e79e392c3d95dcc545f24f98c4"
diff --git a/meta/recipes-support/libsoup/libsoup-2.4_2.66.2.bb b/meta/recipes-support/libsoup/libsoup-2.4_2.66.4.bb
index 357f2fd3db..7f5f910d3d 100644
--- a/meta/recipes-support/libsoup/libsoup-2.4_2.66.2.bb
+++ b/meta/recipes-support/libsoup/libsoup-2.4_2.66.4.bb
@@ -12,8 +12,10 @@ SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
SRC_URI = "${GNOME_MIRROR}/libsoup/${SHRT_VER}/libsoup-${PV}.tar.xz \
file://0001-Do-not-enforce-no-introspection-when-cross-building.patch \
"
-SRC_URI[md5sum] = "66c2ae89d6031b01337d78a2c57c75d5"
-SRC_URI[sha256sum] = "bd2ea602eba642509672812f3c99b77cbec2f3de02ba1cc8cb7206bf7de0ae2a"
+SRC_URI[md5sum] = "42016d80ecae4cf8eb416631049a273a"
+SRC_URI[sha256sum] = "8308984f1eee1c4f8c113a9c1763b2b22d981bd811b0cc82a9f3f1aa63228779"
+
+CVE_PRODUCT = "libsoup"
S = "${WORKDIR}/libsoup-${PV}"
@@ -26,7 +28,7 @@ PACKAGECONFIG[gssapi] = "-Dgssapi=true,-Dgssapi=false,krb5"
EXTRA_OEMESON_append = " -Dvapi=false"
-GTKDOC_MESON_OPTION = "doc"
+GTKDOC_MESON_OPTION = "gtk_doc"
# When built without gnome support, libsoup-2.4 will contain only one shared lib
# and will therefore become subject to renaming by debian.bbclass. Prevent
diff --git a/meta/recipes-support/libxslt/files/CVE-2019-18197.patch b/meta/recipes-support/libxslt/files/CVE-2019-18197.patch
new file mode 100644
index 0000000000..5f2b620396
--- /dev/null
+++ b/meta/recipes-support/libxslt/files/CVE-2019-18197.patch
@@ -0,0 +1,33 @@
+libxslt: fix CVE-2019-18197
+
+Added after 1.1.33 release.
+
+CVE: CVE-2019-18197
+Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/libxslt.git]
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+commit 2232473733b7313d67de8836ea3b29eec6e8e285
+Author: Nick Wellnhofer <wellnhofer@aevum.de>
+Date: Sat Aug 17 16:51:53 2019 +0200
+
+ Fix dangling pointer in xsltCopyText
+
+ xsltCopyText didn't reset ctxt->lasttext in some cases which could
+ lead to various memory errors in relation with CDATA sections in input
+ documents.
+
+ Found by OSS-Fuzz.
+
+diff --git a/libxslt/transform.c b/libxslt/transform.c
+index 95ebd07..d7ab0b6 100644
+--- a/libxslt/transform.c
++++ b/libxslt/transform.c
+@@ -1094,6 +1094,8 @@ xsltCopyText(xsltTransformContextPtr ctxt, xmlNodePtr target,
+ if ((copy->content = xmlStrdup(cur->content)) == NULL)
+ return NULL;
+ }
++
++ ctxt->lasttext = NULL;
+ } else {
+ /*
+ * normal processing. keep counters to extend the text node
diff --git a/meta/recipes-support/libxslt/libxslt_1.1.33.bb b/meta/recipes-support/libxslt/libxslt_1.1.33.bb
index abc00a09ea..9f268e7bb0 100644
--- a/meta/recipes-support/libxslt/libxslt_1.1.33.bb
+++ b/meta/recipes-support/libxslt/libxslt_1.1.33.bb
@@ -12,6 +12,7 @@ SRC_URI = "http://xmlsoft.org/sources/libxslt-${PV}.tar.gz \
file://0001-Fix-security-framework-bypass.patch \
file://CVE-2019-13117.patch \
file://CVE-2019-13118.patch \
+ file://CVE-2019-18197.patch \
"
SRC_URI[md5sum] = "b3bd254a03e46d58f8ad1e4559cd2c2f"
diff --git a/meta/recipes-support/libyaml/libyaml_0.2.2.bb b/meta/recipes-support/libyaml/libyaml_0.2.2.bb
index fbd199205f..5105ce69db 100644
--- a/meta/recipes-support/libyaml/libyaml_0.2.2.bb
+++ b/meta/recipes-support/libyaml/libyaml_0.2.2.bb
@@ -1,13 +1,13 @@
SUMMARY = "LibYAML is a YAML 1.1 parser and emitter written in C."
DESCRIPTION = "LibYAML is a C library for parsing and emitting data in YAML 1.1, \
a human-readable data serialization format. "
-HOMEPAGE = "http://pyyaml.org/wiki/LibYAML"
+HOMEPAGE = "https://pyyaml.org/wiki/LibYAML"
SECTION = "libs/devel"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=a76b4c69bfcf82313bbdc0393b04438a"
-SRC_URI = "http://pyyaml.org/download/libyaml/yaml-${PV}.tar.gz"
+SRC_URI = "https://pyyaml.org/download/libyaml/yaml-${PV}.tar.gz"
SRC_URI[md5sum] = "54bf11ccb8bc488b5b3bec931f5b70dc"
SRC_URI[sha256sum] = "4a9100ab61047fd9bd395bcef3ce5403365cafd55c1e0d0299cde14958e47be9"
diff --git a/meta/recipes-support/lz4/lz4_1.9.2.bb b/meta/recipes-support/lz4/lz4_1.9.2.bb
index f0a8416a96..ed4452c82e 100644
--- a/meta/recipes-support/lz4/lz4_1.9.2.bb
+++ b/meta/recipes-support/lz4/lz4_1.9.2.bb
@@ -18,6 +18,9 @@ UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>.*)"
S = "${WORKDIR}/git"
+# Fixed in r118, which is larger than the current version.
+CVE_CHECK_WHITELIST += "CVE-2014-4715"
+
EXTRA_OEMAKE = "PREFIX=${prefix} CC='${CC}' DESTDIR=${D} LIBDIR=${libdir} INCLUDEDIR=${includedir}"
do_install() {
diff --git a/meta/recipes-support/mpfr/mpfr_4.0.2.bb b/meta/recipes-support/mpfr/mpfr_4.0.2.bb
index 03059174ee..00c2dc2fe9 100644
--- a/meta/recipes-support/mpfr/mpfr_4.0.2.bb
+++ b/meta/recipes-support/mpfr/mpfr_4.0.2.bb
@@ -1,5 +1,5 @@
SUMMARY = "C library for multiple-precision floating-point computations with exact rounding"
-HOMEPAGE = "http://www.mpfr.org/"
+HOMEPAGE = "https://www.mpfr.org/"
LICENSE = "LGPLv3+"
SECTION = "devel"
@@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
"
DEPENDS = "gmp autoconf-archive"
-SRC_URI = "http://www.mpfr.org/mpfr-${PV}/mpfr-${PV}.tar.xz"
+SRC_URI = "https://www.mpfr.org/mpfr-${PV}/mpfr-${PV}.tar.xz"
SRC_URI[md5sum] = "320fbc4463d4c8cb1e566929d8adc4f8"
SRC_URI[sha256sum] = "1d3be708604eae0e42d578ba93b390c2a145f17743a744d8f3f8c2ad5855a38a"
diff --git a/meta/recipes-support/nss/nss/0001-Bug-1493916-Fix-ppc64-inline-assembler-for-clang-r-j.patch b/meta/recipes-support/nss/nss/0001-Bug-1493916-Fix-ppc64-inline-assembler-for-clang-r-j.patch
new file mode 100644
index 0000000000..59e44e6841
--- /dev/null
+++ b/meta/recipes-support/nss/nss/0001-Bug-1493916-Fix-ppc64-inline-assembler-for-clang-r-j.patch
@@ -0,0 +1,35 @@
+From 6b351dbb049b3b3ab6c0d51aa3c1c7fb3c9df80c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
+Date: Mon, 22 Jul 2019 11:07:41 -0700
+Subject: [PATCH] Bug 1493916 - Fix ppc64 inline assembler for clang r=jcj
+ Seems clang's inline assembler doesn't want registers to be prefixed with
+ "r", while gcc accepts both - r0 and 0 for GPR0.
+
+tested with clang 6.0 and gcc 8.1
+
+--HG--
+extra : amend_source : 87e09bb59c78bdb25b9573b9f29511e10b9db6fa
+extra : histedit_source : 9b3fad70ac2851bf7de14d42c34db4a5fba41710
+
+Upstream-Status: Backport [https://github.com/nss-dev/nss/commit/671d89b6c4a6f41707bb044534751098e2e3f211]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ nss/lib/freebl/mpi/mpcpucache.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/nss/lib/freebl/mpi/mpcpucache.c b/nss/lib/freebl/mpi/mpcpucache.c
+index 336b4cc..2ad291f 100644
+--- a/nss/lib/freebl/mpi/mpcpucache.c
++++ b/nss/lib/freebl/mpi/mpcpucache.c
+@@ -727,7 +727,7 @@ static inline void
+ dcbzl(char *array)
+ {
+ register char *a asm("r2") = array;
+- __asm__ __volatile__("dcbzl %0,r0"
++ __asm__ __volatile__("dcbzl %0,0"
+ : "=r"(a)
+ : "0"(a));
+ }
+--
+2.24.0
+
diff --git a/meta/recipes-support/nss/nss/0001-Bug-1631576-Force-a-fixed-length-for-DSA-exponentiat.patch b/meta/recipes-support/nss/nss/0001-Bug-1631576-Force-a-fixed-length-for-DSA-exponentiat.patch
new file mode 100644
index 0000000000..517c277ae0
--- /dev/null
+++ b/meta/recipes-support/nss/nss/0001-Bug-1631576-Force-a-fixed-length-for-DSA-exponentiat.patch
@@ -0,0 +1,110 @@
+From 5942c26888ba12ad5e0d92fb62f23d7cde6dc159 Mon Sep 17 00:00:00 2001
+From: Ovidiu Panait <ovidiu.panait@windriver.com>
+Date: Mon, 13 Jul 2020 06:25:56 +0000
+Subject: [PATCH] Bug 1631576 - Force a fixed length for DSA exponentiation
+ r=pereida,bbrumley
+
+Differential Revision: https://phabricator.services.mozilla.com/D72011
+
+Upstream-Status: Backport [https://hg.mozilla.org/projects/nss/rev/daa823a4a29bcef0fec33a379ec83857429aea2e]
+
+Authored-by: Robert Relyea <rrelyea@redhat.com>
+Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+---
+ nss/lib/freebl/dsa.c | 45 ++++++++++++++++++++++++++++++++++----------
+ 1 file changed, 35 insertions(+), 10 deletions(-)
+
+diff --git a/nss/lib/freebl/dsa.c b/nss/lib/freebl/dsa.c
+index aef3539..389c9de 100644
+--- a/nss/lib/freebl/dsa.c
++++ b/nss/lib/freebl/dsa.c
+@@ -313,13 +313,14 @@ DSA_NewKeyFromSeed(const PQGParams *params,
+
+ static SECStatus
+ dsa_SignDigest(DSAPrivateKey *key, SECItem *signature, const SECItem *digest,
+- const unsigned char *kb)
++ const unsigned char *kbytes)
+ {
+ mp_int p, q, g; /* PQG parameters */
+ mp_int x, k; /* private key & pseudo-random integer */
+ mp_int r, s; /* tuple (r, s) is signature) */
+ mp_int t; /* holding tmp values */
+ mp_int ar; /* holding blinding values */
++ mp_digit fuzz; /* blinding multiplier for q */
+ mp_err err = MP_OKAY;
+ SECStatus rv = SECSuccess;
+ unsigned int dsa_subprime_len, dsa_signature_len, offset;
+@@ -373,6 +374,7 @@ dsa_SignDigest(DSAPrivateKey *key, SECItem *signature, const SECItem *digest,
+ CHECK_MPI_OK(mp_init(&s));
+ CHECK_MPI_OK(mp_init(&t));
+ CHECK_MPI_OK(mp_init(&ar));
++
+ /*
+ ** Convert stored PQG and private key into MPI integers.
+ */
+@@ -380,14 +382,28 @@ dsa_SignDigest(DSAPrivateKey *key, SECItem *signature, const SECItem *digest,
+ SECITEM_TO_MPINT(key->params.subPrime, &q);
+ SECITEM_TO_MPINT(key->params.base, &g);
+ SECITEM_TO_MPINT(key->privateValue, &x);
+- OCTETS_TO_MPINT(kb, &k, dsa_subprime_len);
++ OCTETS_TO_MPINT(kbytes, &k, dsa_subprime_len);
++
++ /* k blinding create a single value that has the high bit set in
++ * the mp_digit*/
++ if (RNG_GenerateGlobalRandomBytes(&fuzz, sizeof(mp_digit)) != SECSuccess) {
++ PORT_SetError(SEC_ERROR_NEED_RANDOM);
++ rv = SECFailure;
++ goto cleanup;
++ }
++ fuzz |= 1ULL << ((sizeof(mp_digit) * PR_BITS_PER_BYTE - 1));
+ /*
+ ** FIPS 186-1, Section 5, Step 1
+ **
+ ** r = (g**k mod p) mod q
+ */
+- CHECK_MPI_OK(mp_exptmod(&g, &k, &p, &r)); /* r = g**k mod p */
+- CHECK_MPI_OK(mp_mod(&r, &q, &r)); /* r = r mod q */
++ CHECK_MPI_OK(mp_mul_d(&q, fuzz, &t)); /* t = q*fuzz */
++ CHECK_MPI_OK(mp_add(&k, &t, &t)); /* t = k+q*fuzz */
++ /* length of t is now fixed, bits in k have been blinded */
++ CHECK_MPI_OK(mp_exptmod(&g, &t, &p, &r)); /* r = g**t mod p */
++ /* r is now g**(k+q*fuzz) == g**k mod p */
++ CHECK_MPI_OK(mp_mod(&r, &q, &r)); /* r = r mod q */
++
+ /*
+ ** FIPS 186-1, Section 5, Step 2
+ **
+@@ -411,15 +427,24 @@ dsa_SignDigest(DSAPrivateKey *key, SECItem *signature, const SECItem *digest,
+ /* Using mp_invmod on k directly would leak bits from k. */
+ CHECK_MPI_OK(mp_mul(&k, &ar, &k)); /* k = k * ar */
+ CHECK_MPI_OK(mp_mulmod(&k, &t, &q, &k)); /* k = k * t mod q */
+- CHECK_MPI_OK(mp_invmod(&k, &q, &k)); /* k = k**-1 mod q */
++ /* k is now k*t*ar */
++ CHECK_MPI_OK(mp_invmod(&k, &q, &k)); /* k = k**-1 mod q */
++ /* k is now (k*t*ar)**-1 */
+ CHECK_MPI_OK(mp_mulmod(&k, &t, &q, &k)); /* k = k * t mod q */
+- SECITEM_TO_MPINT(localDigest, &s); /* s = HASH(M) */
++ /* k is now (k*ar)**-1 */
++ SECITEM_TO_MPINT(localDigest, &s); /* s = HASH(M) */
+ /* To avoid leaking secret bits here the addition is blinded. */
+- CHECK_MPI_OK(mp_mul(&x, &ar, &x)); /* x = x * ar */
+- CHECK_MPI_OK(mp_mulmod(&x, &r, &q, &x)); /* x = x * r mod q */
++ CHECK_MPI_OK(mp_mul(&x, &ar, &x)); /* x = x * ar */
++ /* x is now x*ar */
++ CHECK_MPI_OK(mp_mulmod(&x, &r, &q, &x)); /* x = x * r mod q */
++ /* x is now x*r*ar */
+ CHECK_MPI_OK(mp_mulmod(&s, &ar, &q, &t)); /* t = s * ar mod q */
+- CHECK_MPI_OK(mp_add(&t, &x, &s)); /* s = t + x */
+- CHECK_MPI_OK(mp_mulmod(&s, &k, &q, &s)); /* s = s * k mod q */
++ /* t is now hash(M)*ar */
++ CHECK_MPI_OK(mp_add(&t, &x, &s)); /* s = t + x */
++ /* s is now (HASH(M)+x*r)*ar */
++ CHECK_MPI_OK(mp_mulmod(&s, &k, &q, &s)); /* s = s * k mod q */
++ /* s is now (HASH(M)+x*r)*ar*(k*ar)**-1 = (k**-1)*(HASH(M)+x*r) */
++
+ /*
+ ** verify r != 0 and s != 0
+ ** mentioned as optional in FIPS 186-1.
+--
+2.18.1
+
diff --git a/meta/recipes-support/nss/nss_3.45.bb b/meta/recipes-support/nss/nss_3.45.bb
index e89e7d69d5..9fe27af5db 100644
--- a/meta/recipes-support/nss/nss_3.45.bb
+++ b/meta/recipes-support/nss/nss_3.45.bb
@@ -28,9 +28,11 @@ SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/${VERSIO
file://nss-fix-nsinstall-build.patch \
file://disable-Wvarargs-with-clang.patch \
file://pqg.c-ULL_addend.patch \
+ file://0001-Bug-1493916-Fix-ppc64-inline-assembler-for-clang-r-j.patch \
file://blank-cert9.db \
file://blank-key4.db \
file://system-pkcs11.txt \
+ file://0001-Bug-1631576-Force-a-fixed-length-for-DSA-exponentiat.patch \
"
SRC_URI[md5sum] = "f1752d7223ee9d910d551e57264bafa8"
diff --git a/meta/recipes-support/sqlite/files/CVE-2020-11655.patch b/meta/recipes-support/sqlite/files/CVE-2020-11655.patch
new file mode 100644
index 0000000000..c2360cb867
--- /dev/null
+++ b/meta/recipes-support/sqlite/files/CVE-2020-11655.patch
@@ -0,0 +1,32 @@
+From a4601326d61bf1a11151ac6b78b50804bfd03b4d Mon Sep 17 00:00:00 2001
+From: Sakib Sajal <sakib.sajal@windriver.com>
+Date: Thu, 30 Apr 2020 10:46:16 -0700
+Subject: [PATCH 2/2] In the event of a semantic error in an aggregate query,
+ early-out the resetAccumulator() function to prevent problems due to
+ incomplete or incorrect initialization of the AggInfo object. Fix for ticket
+ [af4556bb5c285c08].
+
+FossilOrigin-Name: 4a302b42c7bf5e11ddb5522ca999f74aba397d3a7eb91b1844bb02852f772441
+Upstream-Status: Backport [c415d91007e1680e4eb17def583b202c3c83c718]
+
+CVE: CVE-2020-11655
+Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
+---
+ sqlite3.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/sqlite3.c b/sqlite3.c
+index 1df6633..726adf7 100644
+--- a/sqlite3.c
++++ b/sqlite3.c
+@@ -133242,6 +133242,7 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
+ struct AggInfo_func *pFunc;
+ int nReg = pAggInfo->nFunc + pAggInfo->nColumn;
+ if( nReg==0 ) return;
++ if( pParse->nErr ) return;
+ #ifdef SQLITE_DEBUG
+ /* Verify that all AggInfo registers are within the range specified by
+ ** AggInfo.mnReg..AggInfo.mxReg */
+--
+2.17.1
+
diff --git a/meta/recipes-support/sqlite/sqlite3/CVE-2019-19244.patch b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19244.patch
new file mode 100644
index 0000000000..3f70979acc
--- /dev/null
+++ b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19244.patch
@@ -0,0 +1,33 @@
+CVE: CVE-2019-19244
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From 0f690d4ae5ffe656762fdbb7f36cc4c2dcbb2d9d Mon Sep 17 00:00:00 2001
+From: dan <dan@noemail.net>
+Date: Fri, 22 Nov 2019 10:14:01 +0000
+Subject: [PATCH] Fix a crash that could occur if a sub-select that uses both
+ DISTINCT and window functions also used an ORDER BY that is the same as its
+ select list.
+
+Amalgamation version of the patch:
+FossilOrigin-Name: bcdd66c1691955c697f3d756c2b035acfe98f6aad72e90b0021bab6e9023b3ba
+---
+ sqlite3.c | 5 +++--
+ sqlite3.h | 2 +-
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/sqlite3.c b/sqlite3.c
+index 8fd740b..db1c649 100644
+--- a/sqlite3.c
++++ b/sqlite3.c
+@@ -131679,6 +131679,7 @@ SQLITE_PRIVATE int sqlite3Select(
+ */
+ if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct
+ && sqlite3ExprListCompare(sSort.pOrderBy, pEList, -1)==0
++ && p->pWin==0
+ ){
+ p->selFlags &= ~SF_Distinct;
+ pGroupBy = p->pGroupBy = sqlite3ExprListDup(db, pEList, 0);
+--
+2.24.1
+
diff --git a/meta/recipes-support/sqlite/sqlite3/CVE-2019-19923.patch b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19923.patch
new file mode 100644
index 0000000000..b1b866b250
--- /dev/null
+++ b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19923.patch
@@ -0,0 +1,50 @@
+CVE: CVE-2019-19923
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From b64463719dc53bde98b0ce3930b10a32560c3a02 Mon Sep 17 00:00:00 2001
+From: "D. Richard Hipp" <drh@hwaci.com>
+Date: Wed, 18 Dec 2019 20:51:58 +0000
+Subject: [PATCH] Continue to back away from the LEFT JOIN optimization of
+ check-in [41c27bc0ff1d3135] by disallowing query flattening if the outer
+ query is DISTINCT. Without this fix, if an index scan is run on the table
+ within the view on the right-hand side of the LEFT JOIN, stale result
+ registers might be accessed yielding incorrect results, and/or an
+ OP_IfNullRow opcode might be invoked on the un-opened table, resulting in a
+ NULL-pointer dereference. This problem was found by the Yongheng and Rui
+ fuzzer.
+
+FossilOrigin-Name: 862974312edf00e9d1068115d1a39b7235b7db68b6d86b81d38a12f025a4748e
+---
+ sqlite3.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/sqlite3.c b/sqlite3.c
+index d29da07..5bc06c8 100644
+--- a/sqlite3.c
++++ b/sqlite3.c
+@@ -129216,6 +129216,7 @@ static void substSelect(
+ ** (3b) the FROM clause of the subquery may not contain a virtual
+ ** table and
+ ** (3c) the outer query may not be an aggregate.
++** (3d) the outer query may not be DISTINCT.
+ **
+ ** (4) The subquery can not be DISTINCT.
+ **
+@@ -129412,8 +129413,11 @@ static int flattenSubquery(
+ */
+ if( (pSubitem->fg.jointype & JT_OUTER)!=0 ){
+ isLeftJoin = 1;
+- if( pSubSrc->nSrc>1 || isAgg || IsVirtual(pSubSrc->a[0].pTab) ){
+- /* (3a) (3c) (3b) */
++ if( pSubSrc->nSrc>1 /* (3a) */
++ || isAgg /* (3b) */
++ || IsVirtual(pSubSrc->a[0].pTab) /* (3c) */
++ || (p->selFlags & SF_Distinct)!=0 /* (3d) */
++ ){
+ return 0;
+ }
+ }
+--
+2.24.1
+
diff --git a/meta/recipes-support/sqlite/sqlite3/CVE-2019-19924.patch b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19924.patch
new file mode 100644
index 0000000000..80d5edbb0c
--- /dev/null
+++ b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19924.patch
@@ -0,0 +1,65 @@
+CVE: CVE-2019-19924
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From 854fe21e8a987f84da81f6bb9e90abc5355c6621 Mon Sep 17 00:00:00 2001
+From: "D. Richard Hipp" <drh@hwaci.com>
+Date: Thu, 19 Dec 2019 20:37:32 +0000
+Subject: [PATCH] When an error occurs while rewriting the parser tree for
+ window functions in the sqlite3WindowRewrite() routine, make sure that
+ pParse->nErr is set, and make sure that this shuts down any subsequent code
+ generation that might depend on the transformations that were implemented.
+ This fixes a problem discovered by the Yongheng and Rui fuzzer.
+
+Amalgamation format of backported patch
+FossilOrigin-Name: e2bddcd4c55ba3cbe0130332679ff4b048630d0ced9a8899982edb5a3569ba7f
+---
+ sqlite3.c | 16 +++++++++++-----
+ sqlite3.h | 2 +-
+ 2 files changed, 12 insertions(+), 6 deletions(-)
+
+diff --git a/sqlite3.c b/sqlite3.c
+index 408ec4c..857c28e 100644
+--- a/sqlite3.c
++++ b/sqlite3.c
+@@ -77798,7 +77798,8 @@ SQLITE_PRIVATE void sqlite3VdbeSetP4KeyInfo(Parse *pParse, Index *pIdx){
+ */
+ static void vdbeVComment(Vdbe *p, const char *zFormat, va_list ap){
+ assert( p->nOp>0 || p->aOp==0 );
+- assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed );
++ assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed
++ || p->pParse->nErr>0 );
+ if( p->nOp ){
+ assert( p->aOp );
+ sqlite3DbFree(p->db, p->aOp[p->nOp-1].zComment);
+@@ -97872,6 +97873,7 @@ static int codeCompare(
+ int addr;
+ CollSeq *p4;
+
++ if( pParse->nErr ) return 0;
+ p4 = sqlite3BinaryCompareCollSeq(pParse, pLeft, pRight);
+ p5 = binaryCompareP5(pLeft, pRight, jumpIfNull);
+ addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1,
+@@ -147627,7 +147629,7 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){
+
+ pTab = sqlite3DbMallocZero(db, sizeof(Table));
+ if( pTab==0 ){
+- return SQLITE_NOMEM;
++ return sqlite3ErrorToParser(db, SQLITE_NOMEM);
+ }
+
+ p->pSrc = 0;
+@@ -147731,6 +147733,10 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){
+ sqlite3DbFree(db, pTab);
+ }
+
++ if( rc && pParse->nErr==0 ){
++ assert( pParse->db->mallocFailed );
++ return sqlite3ErrorToParser(pParse->db, SQLITE_NOMEM);
++ }
+ return rc;
+ }
+
+--
+2.24.1
+
diff --git a/meta/recipes-support/sqlite/sqlite3/CVE-2019-19925.patch b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19925.patch
new file mode 100644
index 0000000000..ffc2c6afff
--- /dev/null
+++ b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19925.patch
@@ -0,0 +1,33 @@
+CVE: CVE-2019-19925
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From e92580434d2cdca228649d32f76167492de4f512 Mon Sep 17 00:00:00 2001
+From: "D. Richard Hipp" <drh@hwaci.com>
+Date: Thu, 19 Dec 2019 15:15:40 +0000
+Subject: [PATCH] Fix the zipfile extension so that INSERT works even if the
+ pathname of the file being inserted is a NULL. Bug discovered by the
+ Yongheng and Rui fuzzer.
+
+FossilOrigin-Name: a80f84b511231204658304226de3e075a55afc2e3f39ac063716f7a57f585c06
+---
+ shell.c | 1 +
+ sqlite3.c | 4 ++--
+ sqlite3.h | 2 +-
+ 3 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/shell.c b/shell.c
+index 053180c..404a8d4 100644
+--- a/shell.c
++++ b/shell.c
+@@ -5827,6 +5827,7 @@ static int zipfileUpdate(
+
+ if( rc==SQLITE_OK ){
+ zPath = (const char*)sqlite3_value_text(apVal[2]);
++ if( zPath==0 ) zPath = "";
+ nPath = (int)strlen(zPath);
+ mTime = zipfileGetTime(apVal[4]);
+ }
+--
+2.24.1
+
diff --git a/meta/recipes-support/sqlite/sqlite3/CVE-2019-19926.patch b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19926.patch
new file mode 100644
index 0000000000..92bc7908bc
--- /dev/null
+++ b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19926.patch
@@ -0,0 +1,31 @@
+CVE: CVE-2019-19926
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From 4165b1e1e0001165ace9051a70f938099505eadc Mon Sep 17 00:00:00 2001
+From: "D. Richard Hipp" <drh@hwaci.com>
+Date: Thu, 19 Dec 2019 22:08:19 +0000
+Subject: [PATCH] Continuation of [e2bddcd4c55ba3cb]: Add another spot where it
+ is necessary to abort early due to prior errors in sqlite3WindowRewrite().
+
+FossilOrigin-Name: cba2a2a44cdf138a629109bb0ad088ed4ef67fc66bed3e0373554681a39615d2
+---
+ sqlite3.c | 7 ++++---
+ sqlite3.h | 2 +-
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/sqlite3.c b/sqlite3.c
+index 857c28e..19a474d 100644
+--- a/sqlite3.c
++++ b/sqlite3.c
+@@ -128427,6 +128427,7 @@ static int multiSelect(
+ }
+ #endif
+ }
++ if( pParse->nErr ) goto multi_select_end;
+
+ /* Compute collating sequences used by
+ ** temporary tables needed to implement the compound select.
+--
+2.24.1
+
diff --git a/meta/recipes-support/sqlite/sqlite3/CVE-2019-19959.patch b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19959.patch
new file mode 100644
index 0000000000..cba8ec9d30
--- /dev/null
+++ b/meta/recipes-support/sqlite/sqlite3/CVE-2019-19959.patch
@@ -0,0 +1,46 @@
+CVE: CVE-2019-19959
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From f83f7e8141ee7cbbf7f2dc8985279a7372b259b6 Mon Sep 17 00:00:00 2001
+From: "D. Richard Hipp" <drh@hwaci.com>
+Date: Mon, 23 Dec 2019 21:04:33 +0000
+Subject: [PATCH] Fix the zipfile() function in the zipfile extension so that
+ it is able to deal with goofy filenames that contain embedded zeros.
+
+FossilOrigin-Name: cc0fb00a128fd0773db5ff7891f7aa577a3671d570166d2cbb30df922344adcf
+---
+ shell.c | 4 ++--
+ sqlite3.c | 4 ++--
+ sqlite3.h | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/shell.c b/shell.c
+index 404a8d4..48065e9 100644
+--- a/shell.c
++++ b/shell.c
+@@ -5841,7 +5841,7 @@ static int zipfileUpdate(
+ zFree = sqlite3_mprintf("%s/", zPath);
+ if( zFree==0 ){ rc = SQLITE_NOMEM; }
+ zPath = (const char*)zFree;
+- nPath++;
++ nPath = (int)strlen(zPath);
+ }
+ }
+
+@@ -6242,11 +6242,11 @@ void zipfileStep(sqlite3_context *pCtx, int nVal, sqlite3_value **apVal){
+ }else{
+ if( zName[nName-1]!='/' ){
+ zName = zFree = sqlite3_mprintf("%s/", zName);
+- nName++;
+ if( zName==0 ){
+ rc = SQLITE_NOMEM;
+ goto zipfile_step_out;
+ }
++ nName = (int)strlen(zName);
+ }else{
+ while( nName>1 && zName[nName-2]=='/' ) nName--;
+ }
+--
+2.24.1
+
diff --git a/meta/recipes-support/sqlite/sqlite3/CVE-2019-20218.patch b/meta/recipes-support/sqlite/sqlite3/CVE-2019-20218.patch
new file mode 100644
index 0000000000..fb6cd6df2d
--- /dev/null
+++ b/meta/recipes-support/sqlite/sqlite3/CVE-2019-20218.patch
@@ -0,0 +1,31 @@
+CVE: CVE-2019-20218
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From 6bbd76d34f29f61483791231f2ce579dcadab8a5 Mon Sep 17 00:00:00 2001
+From: Dan Kennedy <danielk1977@gmail.com>
+Date: Fri, 27 Dec 2019 20:54:42 +0000
+Subject: [PATCH] Do not attempt to unwind the WITH stack in the Parse object
+ following an error. This fixes a separate case to [de6e6d68].
+
+FossilOrigin-Name: d29edef93451cc67a5d69c1cce1b1832d9ca8fff1f600afdd51338b74d077b92
+---
+ sqlite3.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sqlite3.c b/sqlite3.c
+index 5bc06c8..408ec4c 100644
+--- a/sqlite3.c
++++ b/sqlite3.c
+@@ -130570,7 +130570,7 @@ static int selectExpander(Walker *pWalker, Select *p){
+
+ /* Process NATURAL keywords, and ON and USING clauses of joins.
+ */
+- if( db->mallocFailed || sqliteProcessJoin(pParse, p) ){
++ if( pParse->nErr || db->mallocFailed || sqliteProcessJoin(pParse, p) ){
+ return WRC_Abort;
+ }
+
+--
+2.24.1
+
diff --git a/meta/recipes-support/sqlite/sqlite3_3.29.0.bb b/meta/recipes-support/sqlite/sqlite3_3.29.0.bb
index 34066fbe89..95e1174b07 100644
--- a/meta/recipes-support/sqlite/sqlite3_3.29.0.bb
+++ b/meta/recipes-support/sqlite/sqlite3_3.29.0.bb
@@ -4,6 +4,15 @@ LICENSE = "PD"
LIC_FILES_CHKSUM = "file://sqlite3.h;endline=11;md5=786d3dc581eff03f4fd9e4a77ed00c66"
SRC_URI = "http://www.sqlite.org/2019/sqlite-autoconf-${SQLITE_PV}.tar.gz \
- file://0001-Fix-CVE-2019-16168.patch"
+ file://0001-Fix-CVE-2019-16168.patch \
+ file://CVE-2019-19244.patch \
+ file://CVE-2019-19923.patch \
+ file://CVE-2019-19924.patch \
+ file://CVE-2019-19925.patch \
+ file://CVE-2019-19926.patch \
+ file://CVE-2019-19959.patch \
+ file://CVE-2019-20218.patch \
+ file://CVE-2020-11655.patch \
+"
SRC_URI[md5sum] = "8f3dfe83387e62ecb91c7c5c09c688dc"
SRC_URI[sha256sum] = "8e7c1e2950b5b04c5944a981cb31fffbf9d2ddda939d536838ebc854481afd5b"
diff --git a/meta/recipes-support/vim/vim_8.1.1518.bb b/meta/recipes-support/vim/vim_8.1.1518.bb
index 60946a181f..709b6ddb55 100644
--- a/meta/recipes-support/vim/vim_8.1.1518.bb
+++ b/meta/recipes-support/vim/vim_8.1.1518.bb
@@ -8,3 +8,8 @@ BBCLASSEXTEND = "native"
ALTERNATIVE_${PN}_append = " xxd"
ALTERNATIVE_TARGET[xxd] = "${bindir}/xxd"
ALTERNATIVE_LINK_NAME[xxd] = "${bindir}/xxd"
+
+# We override the default in security_flags.inc because vim (not vim-tiny!) will abort
+# in many places for _FORTIFY_SOURCE=2. Security flags become part of CC.
+#
+lcl_maybe_fortify = "${@oe.utils.conditional('DEBUG_BUILD','1','','-D_FORTIFY_SOURCE=1',d)}"
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
index 1646971a91..b43c725cf8 100644
--- a/scripts/lib/devtool/standard.py
+++ b/scripts/lib/devtool/standard.py
@@ -940,8 +940,10 @@ def modify(args, config, basepath, workspace):
'}\n')
if rd.getVarFlag('do_menuconfig','task'):
f.write('\ndo_configure_append() {\n'
- ' cp ${B}/.config ${S}/.config.baseline\n'
- ' ln -sfT ${B}/.config ${S}/.config.new\n'
+ ' if [ ! ${DEVTOOL_DISABLE_MENUCONFIG} ]; then\n'
+ ' cp ${B}/.config ${S}/.config.baseline\n'
+ ' ln -sfT ${B}/.config ${S}/.config.new\n'
+ ' fi\n'
'}\n')
if initial_rev:
f.write('\n# initial_rev: %s\n' % initial_rev)
@@ -2011,7 +2013,7 @@ def finish(args, config, basepath, workspace):
no_clean = args.no_clean
tinfoil = setup_tinfoil(basepath=basepath, tracking=True)
try:
- rd = parse_recipe(config, tinfoil, args.recipename, True, False)
+ rd = parse_recipe(config, tinfoil, args.recipename, True)
if not rd:
return 1
diff --git a/scripts/lib/resulttool/resultutils.py b/scripts/lib/resulttool/resultutils.py
index 7cb85a6aa9..3850a93f22 100644
--- a/scripts/lib/resulttool/resultutils.py
+++ b/scripts/lib/resulttool/resultutils.py
@@ -127,10 +127,7 @@ def decode_log(logdata):
data = logdata.get("compressed")
data = base64.b64decode(data.encode("utf-8"))
data = zlib.decompress(data)
- try:
- return data.decode("utf-8")
- except UnicodeDecodeError:
- return data
+ return data.decode("utf-8", errors='ignore')
return None
def ptestresult_get_log(results, section):
diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py
index 18776fa8a0..4ccca482e7 100644
--- a/scripts/lib/wic/engine.py
+++ b/scripts/lib/wic/engine.py
@@ -290,7 +290,7 @@ class Disk:
def _get_part_image(self, pnum):
if pnum not in self.partitions:
- raise WicError("Partition %s is not in the image")
+ raise WicError("Partition %s is not in the image" % pnum)
part = self.partitions[pnum]
# check if fstype is supported
for fstype in self.fstypes:
@@ -313,6 +313,9 @@ class Disk:
seek=self.partitions[pnum].start)
def dir(self, pnum, path):
+ if pnum not in self.partitions:
+ raise WicError("Partition %s is not in the image" % pnum)
+
if self.partitions[pnum].fstype.startswith('ext'):
return exec_cmd("{} {} -R 'ls -l {}'".format(self.debugfs,
self._get_part_image(pnum),
diff --git a/scripts/lib/wic/filemap.py b/scripts/lib/wic/filemap.py
index a3919fbcad..c53147c2f1 100644
--- a/scripts/lib/wic/filemap.py
+++ b/scripts/lib/wic/filemap.py
@@ -34,9 +34,11 @@ def get_block_size(file_obj):
# the FIGETBSZ ioctl (number 2).
try:
binary_data = fcntl.ioctl(file_obj, 2, struct.pack('I', 0))
+ bsize = struct.unpack('I', binary_data)[0]
except OSError:
- raise IOError("Unable to determine block size")
- bsize = struct.unpack('I', binary_data)[0]
+ bsize = None
+
+ # If ioctl causes OSError or give bsize to zero failback to os.fstat
if not bsize:
import os
stat = os.fstat(file_obj.fileno())
diff --git a/scripts/lib/wic/help.py b/scripts/lib/wic/help.py
index 3a40fc0ea2..03d84bd1d7 100644
--- a/scripts/lib/wic/help.py
+++ b/scripts/lib/wic/help.py
@@ -523,7 +523,8 @@ DESCRIPTION
Source plugins can also be implemented and added by external
layers - any plugins found in a scripts/lib/wic/plugins/source/
- directory in an external layer will also be made available.
+ or lib/wic/plugins/source/ directory in an external layer will
+ also be made available.
When the wic implementation needs to invoke a partition-specific
implementation, it looks for the plugin that has the same name as
diff --git a/scripts/lib/wic/pluginbase.py b/scripts/lib/wic/pluginbase.py
index f74d6430fd..d9b4e57747 100644
--- a/scripts/lib/wic/pluginbase.py
+++ b/scripts/lib/wic/pluginbase.py
@@ -18,7 +18,7 @@ from wic.misc import get_bitbake_var
PLUGIN_TYPES = ["imager", "source"]
-SCRIPTS_PLUGIN_DIR = "scripts/lib/wic/plugins"
+SCRIPTS_PLUGIN_DIR = ["scripts/lib/wic/plugins", "lib/wic/plugins"]
logger = logging.getLogger('wic')
@@ -38,10 +38,11 @@ class PluginMgr:
cls._plugin_dirs = [os.path.join(os.path.dirname(__file__), 'plugins')]
layers = get_bitbake_var("BBLAYERS") or ''
for layer_path in layers.split():
- path = os.path.join(layer_path, SCRIPTS_PLUGIN_DIR)
- path = os.path.abspath(os.path.expanduser(path))
- if path not in cls._plugin_dirs and os.path.isdir(path):
- cls._plugin_dirs.insert(0, path)
+ for script_plugin_dir in SCRIPTS_PLUGIN_DIR:
+ path = os.path.join(layer_path, script_plugin_dir)
+ path = os.path.abspath(os.path.expanduser(path))
+ if path not in cls._plugin_dirs and os.path.isdir(path):
+ cls._plugin_dirs.insert(0, path)
if ptype not in PLUGINS:
# load all ptype plugins
diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py
index 2441cc33ad..5148df288a 100644
--- a/scripts/lib/wic/plugins/imager/direct.py
+++ b/scripts/lib/wic/plugins/imager/direct.py
@@ -403,7 +403,7 @@ class PartitionedImage():
# Reserve a sector for EBR for every logical partition
# before alignment is performed.
if part.type == 'logical':
- self.offset += 1
+ self.offset += 2
align_sectors = 0
if part.align:
@@ -446,7 +446,7 @@ class PartitionedImage():
self.extendedpart = part.num
else:
self.extended_size_sec += align_sectors
- self.extended_size_sec += part.size_sec + 1
+ self.extended_size_sec += part.size_sec + 2
else:
self.primary_part_num += 1
part.num = self.primary_part_num
@@ -512,7 +512,7 @@ class PartitionedImage():
# add a sector at the back, so that there is enough
# room for all logical partitions.
self._create_partition(self.path, "extended",
- None, part.start - 1,
+ None, part.start - 2,
self.extended_size_sec)
if part.fstype == "swap":
diff --git a/scripts/oe-build-perf-report b/scripts/oe-build-perf-report
index 21bde7e156..e781f4f03f 100755
--- a/scripts/oe-build-perf-report
+++ b/scripts/oe-build-perf-report
@@ -372,7 +372,7 @@ def print_html_report(data, id_comp, buildstats):
chart_opts=chart_opts))
-def get_buildstats(repo, notes_ref, revs, outdir=None):
+def get_buildstats(repo, notes_ref, notes_ref2, revs, outdir=None):
"""Get the buildstats from git notes"""
full_ref = 'refs/notes/' + notes_ref
if not repo.rev_parse(full_ref):
@@ -391,8 +391,13 @@ def get_buildstats(repo, notes_ref, revs, outdir=None):
for tag in rev.tags:
log.debug(' %s', tag)
try:
- bs_all = json.loads(repo.run_cmd(['notes', '--ref', notes_ref,
- 'show', tag + '^0']))
+ try:
+ bs_all = json.loads(repo.run_cmd(['notes', '--ref', notes_ref, 'show', tag + '^0']))
+ except GitError:
+ if notes_ref2:
+ bs_all = json.loads(repo.run_cmd(['notes', '--ref', notes_ref2, 'show', tag + '^0']))
+ else:
+ raise
except GitError:
log.warning("Buildstats not found for %s", tag)
bs_all = {}
@@ -589,9 +594,12 @@ def main(argv=None):
buildstats = None
if args.dump_buildstats or args.html:
outdir = 'oe-build-perf-buildstats' if args.dump_buildstats else None
- notes_ref = 'buildstats/{}/{}/{}'.format(args.hostname, args.branch,
- args.machine)
- buildstats = get_buildstats(repo, notes_ref, [rev_l, rev_r], outdir)
+ notes_ref = 'buildstats/{}/{}/{}'.format(args.hostname, args.branch, args.machine)
+ notes_ref2 = None
+ if args.branch2:
+ notes_ref = 'buildstats/{}/{}/{}'.format(args.hostname, args.branch2, args.machine)
+ notes_ref2 = 'buildstats/{}/{}/{}'.format(args.hostname, args.branch, args.machine)
+ buildstats = get_buildstats(repo, notes_ref, notes_ref2, [rev_l, rev_r], outdir)
# Print report
if not args.html: