Skip to content

Conversation

fanquake
Copy link
Member

The current test-security-check script is hard to understand, and change (i.e https://github.com/bitcoin/bitcoin/pull/29987/files#diff-52aa0cda44721f089e53b128cb1232a876006ef257b211655456b17dfb2ec712); tests are also not done in isolation (when-possible). Fix that, and add missing checks. Simplifies future toolchain/security/hardening changes.

@DrahtBot
Copy link
Contributor

DrahtBot commented Jul 10, 2024

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Code Coverage

For detailed information about the code coverage, see the test coverage report.

Reviews

See the guideline for information on the review process.

Type Reviewers
ACK hebasto, TheCharlatan
Concept ACK theuni
Approach ACK tdb3

If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

Conflicts

Reviewers, this pull request conflicts with the following ones:

  • #27038 (security-check: test for _FORTIFY_SOURCE usage in release binaries by fanquake)
  • #26950 (cleanse: switch to SecureZeroMemory for Windows cross-compile, check for usage by fanquake)

If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

@hebasto
Copy link
Member

hebasto commented Jul 10, 2024

tests are also not done in isolation (when-possible).

Mind elaborating this statement please? I mean, contrib/devtools/test-security-check.py is supposed to run in the Guix environment. So what kind of "isolation" do you mean?

@DrahtBot
Copy link
Contributor

Guix builds (on x86_64) [untrusted test-only build, possibly unsafe, not for production use]

File commit 9adebe1
(master)
commit 2c4e64e
(master and this pull)
SHA256SUMS.part 530e7bce42751f01... 3f3ad237d2e7bb0b...
*-aarch64-linux-gnu-debug.tar.gz 15f1fd7550bfd2f1... 1c05325aed399df4...
*-aarch64-linux-gnu.tar.gz 530997ab22e2e260... bad5df94110ade32...
*-arm-linux-gnueabihf-debug.tar.gz b69ee865ab41e678... e899887a957b112f...
*-arm-linux-gnueabihf.tar.gz 42b65aca43207c4e... e3fcdd4f337a06ab...
*-arm64-apple-darwin-unsigned.tar.gz f727432ee3cefb84... 54137d2f7cea5974...
*-arm64-apple-darwin-unsigned.zip ee8b32019b6f0dcd... a52c6f1aa8e7fc0f...
*-arm64-apple-darwin.tar.gz 2c7400ff7dd58c00... 07a001a2c0d09ae7...
*-powerpc64-linux-gnu-debug.tar.gz 6fc7d37e31784a2d... de2ab8459ada1679...
*-powerpc64-linux-gnu.tar.gz d940e5bdf67dae57... 69a3480a7f6b155f...
*-riscv64-linux-gnu-debug.tar.gz 9f099cacbd3ddc17... 2ef32725da22e603...
*-riscv64-linux-gnu.tar.gz cd11acd568165c53... 441cab51d7911525...
*-x86_64-apple-darwin-unsigned.tar.gz 64af84380c1cb6a9... 84452f294e271a89...
*-x86_64-apple-darwin-unsigned.zip d1b2bf03f28e5fd7... 697950908acc0ae3...
*-x86_64-apple-darwin.tar.gz 5a2d2f53e723dd0c... c2ee4caf92455df8...
*-x86_64-linux-gnu-debug.tar.gz 865f1d8959f12d80... 73eb68fdf0bcd747...
*-x86_64-linux-gnu.tar.gz 0457a77785fcdf03... 1845aa4177514026...
*.tar.gz 7151577ec04cca29... 1330807390307df4...
guix_build.log 00466ff960f48ac5... 70a30fe80ab10c5e...
guix_build.log.diff a952c849831a3bcc...

@fanquake
Copy link
Member Author

So what kind of "isolation" do you mean?

Testing one thing per test.

Copy link
Member

@hebasto hebasto left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Concept ACK.

nit: Spaces after commas and around + can used more consistently for better readability.

(1, executable+': failed CONTROL_FLOW'))
self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--enable-reloc-section','-Wl,--dynamicbase','-Wl,--high-entropy-va','-pie','-fPIE', '-fcf-protection=full','-fstack-protector-all', '-lssp']),
(0, ''))
pass_flags = ['-pie','-fPIE', '-Wl,--nxcompat','-Wl,--enable-reloc-section','-Wl,--dynamicbase','-Wl,--high-entropy-va', '-fcf-protection=full','-fstack-protector-all', '-lssp']
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the -pie flag supported here?

From the ld linker docs:

This is currently only supported on ELF platforms.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Those look like the wrong docs:

x86_64-w64-mingw32-ld --help | grep pie
  -pie, --pic-executable      Create a position independent executable
  -no-pie                     Create a position dependent executable (default)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There seems to be some inconsistency in docs. For instance, in https://manpages.debian.org/bookworm/binutils-mingw-w64-x86-64/x86_64-w64-mingw32-ld.1.en.html:

-pie
--pic-executable
Create a position independent executable. This is currently only supported on ELF platforms. Position independent executables are similar to shared libraries in that they are relocated by the dynamic linker to the virtual address the OS chooses for them (which can vary between invocations). Like normal dynamically linked executables they can be executed and symbols defined in the executable cannot be overridden by shared libraries.
-no-pie
Create a position dependent executable. This is the default.

@fanquake fanquake force-pushed the test_test_cleanups branch 2 times, most recently from 4ec81a6 to d1b9c2c Compare July 11, 2024 15:07
@fanquake fanquake marked this pull request as draft July 11, 2024 15:46
Copy link
Member

@theuni theuni left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, concept ACK. I had the same thought when looking at this for #30387.

I think it should be possible (or maybe this is enough?) to avoid making toolchain assumptions and have this work outside of guix.

Copy link
Contributor

@tdb3 tdb3 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approach ACK
Nice. Increases readability.

nit:
Thought about opportunities for deduplication (e.g. creating a dictionary/list containing test cases with associated parameters/arguments, then looping through it). It's probably overkill for a file as small as test-security-check.py and wouldn't necessarily enhance readability.

@fanquake fanquake force-pushed the test_test_cleanups branch from d1b9c2c to 6392d8f Compare July 16, 2024 08:52
@fanquake fanquake force-pushed the test_test_cleanups branch from 6392d8f to 51d8f43 Compare July 18, 2024 09:31
If the binaries don't exist, the Guix build has failed for some other
reason.

There's no need to check for unknown architectures, or executable
formats, as the only ones that could be built are those that we've
configured toolchains for in Guix.

We've also been doing this inconsistently across the two scripts.
@fanquake fanquake marked this pull request as ready for review July 19, 2024 12:58
Copy link
Member

@hebasto hebasto left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK 1bc9f64 (assuming my Guix hashes match; I'll provide them shortly).

My concern about -pie support for Windows is not a blocker.

@DrahtBot
Copy link
Contributor

Guix builds (on x86_64) [untrusted test-only build, possibly unsafe, not for production use]

File commit 8754d05
(master)
commit cb264d2
(master and this pull)
SHA256SUMS.part d6e6493ade976e0d... 089abe0442fa1ba3...
*-aarch64-linux-gnu-debug.tar.gz 7cfc076ad8f454ea... b6ccdc1ae5163206...
*-aarch64-linux-gnu.tar.gz d41bd61202831ba3... aa98f580e184641e...
*-arm-linux-gnueabihf-debug.tar.gz 912bbcf745276a50... b729509fab1f85df...
*-arm-linux-gnueabihf.tar.gz 8c0682e696de8302... dc4889bf58ecaaa6...
*-arm64-apple-darwin-unsigned.tar.gz dfe0523b3f4cb6f3... 49052eb2928b7e61...
*-arm64-apple-darwin-unsigned.zip ea1ba475f15725a2... ace7f21d4d0cce2f...
*-arm64-apple-darwin.tar.gz e1d791be90054e5d... 8fc7ace4c38a2717...
*-powerpc64-linux-gnu-debug.tar.gz 0687d53371c9d763... 18b9f8526db068b1...
*-powerpc64-linux-gnu.tar.gz c5374aa7b2c93e11... 3cfae8c1227d7637...
*-riscv64-linux-gnu-debug.tar.gz e93579b19a31ce98... b51edcda08ede6b2...
*-riscv64-linux-gnu.tar.gz 7ff41ce672e58033... b30a4adfe3c883a6...
*-x86_64-apple-darwin-unsigned.tar.gz b25a790a1d1a81ed... 2e80370d6c9f665b...
*-x86_64-apple-darwin-unsigned.zip f30efb740994654d... 3ceb23ae2fbe0f15...
*-x86_64-apple-darwin.tar.gz a03819d1a7360b2b... b511fe4c10175fca...
*-x86_64-linux-gnu-debug.tar.gz cd949492f6e34833... 1cb6ffd0472a76f7...
*-x86_64-linux-gnu.tar.gz 073ddca46f7fef65... b6928594a3324995...
*.tar.gz 59cca0c61711199d... a3e8125fc92903dc...
guix_build.log 0095374897aad81b... 69a5e8011ac2baca...
guix_build.log.diff 1a01569e367a423d...

@fanquake
Copy link
Member Author

Guix Build (x86_64):

222a30ae2094e1e2536e5a1e8794d04f300fbf6ed0f67e0f6dcb4160e3d075a7  guix-build-1bc9f64bee91/output/aarch64-linux-gnu/SHA256SUMS.part
f7a7b2a6f7e85aa633d6cdb9907bf11cf05c3bdabdf32a4fefaf2bb63264583d  guix-build-1bc9f64bee91/output/aarch64-linux-gnu/bitcoin-1bc9f64bee91-aarch64-linux-gnu-debug.tar.gz
8884a25e5a214b224d2c7d73e19786174ddb4eed37c2daa0dc57c23d1f49fc3c  guix-build-1bc9f64bee91/output/aarch64-linux-gnu/bitcoin-1bc9f64bee91-aarch64-linux-gnu.tar.gz
36855764cdf7488af17c16524adda0b3c019d08f47e87a8aea5596aade9eba87  guix-build-1bc9f64bee91/output/arm-linux-gnueabihf/SHA256SUMS.part
8bbf0f76f2abe4ee6bdfb1eba9b67410f187afc60433e5be5f7fb11c184660a9  guix-build-1bc9f64bee91/output/arm-linux-gnueabihf/bitcoin-1bc9f64bee91-arm-linux-gnueabihf-debug.tar.gz
db5ff885a8b728415988456b3f02dd5178124a9ff4ea5f0946f3327038ea33f4  guix-build-1bc9f64bee91/output/arm-linux-gnueabihf/bitcoin-1bc9f64bee91-arm-linux-gnueabihf.tar.gz
314ce4cd1ccd1ca089c29a68d9f4d031c9dc5e0cf5f6d9b0234db1d7cdc7d641  guix-build-1bc9f64bee91/output/arm64-apple-darwin/SHA256SUMS.part
61d6eb60cdd3b37abf57b560ceb7fc617f56d8d0ab28605673faa93470e9da7a  guix-build-1bc9f64bee91/output/arm64-apple-darwin/bitcoin-1bc9f64bee91-arm64-apple-darwin-unsigned.tar.gz
bbff8c672e248e2e08ceea8641ca3c58576031afaa801b920b2d6e3483684a6c  guix-build-1bc9f64bee91/output/arm64-apple-darwin/bitcoin-1bc9f64bee91-arm64-apple-darwin-unsigned.zip
863ff8c24b3dffb27d548cd5e80ff9205f6b06bc21a4a8249db26acf1fb1d7e0  guix-build-1bc9f64bee91/output/arm64-apple-darwin/bitcoin-1bc9f64bee91-arm64-apple-darwin.tar.gz
c441e38346c2276f5d3e35e22b00c2bd31c8410d19b0726cce155ffe1c6649a3  guix-build-1bc9f64bee91/output/dist-archive/bitcoin-1bc9f64bee91.tar.gz
ac7784cf706551e704103e99ee1a7df79ae13870fa5e3dcd2ea8cbc74a36e775  guix-build-1bc9f64bee91/output/powerpc64-linux-gnu/SHA256SUMS.part
fb4f88f4f6e6baeb6b14e7dd107b3678bc3174192d42d9844cce7f24ea4ecc30  guix-build-1bc9f64bee91/output/powerpc64-linux-gnu/bitcoin-1bc9f64bee91-powerpc64-linux-gnu-debug.tar.gz
b86ca80ab5110228bb1c32641a75a5fbfb77454583a5cff6695f3335fc089b1e  guix-build-1bc9f64bee91/output/powerpc64-linux-gnu/bitcoin-1bc9f64bee91-powerpc64-linux-gnu.tar.gz
0a345fe896f8bf91ed5092799a6512e3baa1f934b663cbe43ddf2e70333c0b76  guix-build-1bc9f64bee91/output/riscv64-linux-gnu/SHA256SUMS.part
14d06d3b49bfc8d94aa548799b7f886efba1253a5e13f3179cecfbc2a4531e0d  guix-build-1bc9f64bee91/output/riscv64-linux-gnu/bitcoin-1bc9f64bee91-riscv64-linux-gnu-debug.tar.gz
bca5ca1bbc303fa078567e284e3e6983fc2e7ab9c6ca24cc200185acb608b845  guix-build-1bc9f64bee91/output/riscv64-linux-gnu/bitcoin-1bc9f64bee91-riscv64-linux-gnu.tar.gz
b7b916e97a5a9a24f83938c3dc06e8ef6541e3112f6becb372d4a0430221c4da  guix-build-1bc9f64bee91/output/x86_64-apple-darwin/SHA256SUMS.part
9f1c2868a1704d60889e8675785d2a02a92b5d32d28e61cc9b9c06e12f44bd40  guix-build-1bc9f64bee91/output/x86_64-apple-darwin/bitcoin-1bc9f64bee91-x86_64-apple-darwin-unsigned.tar.gz
ca290ebae788bcad2c21882cb7962d40d41878df8ccb6e5ab9cb434aa02ab6e0  guix-build-1bc9f64bee91/output/x86_64-apple-darwin/bitcoin-1bc9f64bee91-x86_64-apple-darwin-unsigned.zip
323ea529b7646a8d0326e465d64ef36ef9b304a0f8b379d6e61f4c6aaa9479b1  guix-build-1bc9f64bee91/output/x86_64-apple-darwin/bitcoin-1bc9f64bee91-x86_64-apple-darwin.tar.gz
ab99ee9a4e76f8f81958e0ae5381d422961e1e4ca1e38e88b73a858024d4933b  guix-build-1bc9f64bee91/output/x86_64-linux-gnu/SHA256SUMS.part
8e5044e712fd0d674dba95bf3b02f3c1f872c3f0933f15f6fd142aee51072d65  guix-build-1bc9f64bee91/output/x86_64-linux-gnu/bitcoin-1bc9f64bee91-x86_64-linux-gnu-debug.tar.gz
583e16f677421420cfddc4b591c7fbad7879a154572567fe8ca7d94ea16d4ab6  guix-build-1bc9f64bee91/output/x86_64-linux-gnu/bitcoin-1bc9f64bee91-x86_64-linux-gnu.tar.gz
e8cea74fcfd0202186659d76c5d3bf2d1b35560bb74d71395b1540b0223ebcf2  guix-build-1bc9f64bee91/output/x86_64-w64-mingw32/SHA256SUMS.part
f67bbf2cc9c48ae29b0543f62fec5337e711cac8b4dede393aa7d805a4d4c926  guix-build-1bc9f64bee91/output/x86_64-w64-mingw32/bitcoin-1bc9f64bee91-win64-debug.zip
8aa117609c8857365ed69a5e646aa49a1034800bfd8e40436cede8ae3a69b5cd  guix-build-1bc9f64bee91/output/x86_64-w64-mingw32/bitcoin-1bc9f64bee91-win64-setup-unsigned.exe
e26f68b8949c5c5fdea3f513b88f34ddae8f2ff5624383b58ff4041924ac6d66  guix-build-1bc9f64bee91/output/x86_64-w64-mingw32/bitcoin-1bc9f64bee91-win64-unsigned.tar.gz
a4816c6b72892cfbb7518592b031df3d27937c2097a3a7928dda5872424a78ee  guix-build-1bc9f64bee91/output/x86_64-w64-mingw32/bitcoin-1bc9f64bee91-win64.zip

@hebasto
Copy link
Member

hebasto commented Jul 23, 2024

My Guix build:

x86_64
222a30ae2094e1e2536e5a1e8794d04f300fbf6ed0f67e0f6dcb4160e3d075a7  guix-build-1bc9f64bee91/output/aarch64-linux-gnu/SHA256SUMS.part
f7a7b2a6f7e85aa633d6cdb9907bf11cf05c3bdabdf32a4fefaf2bb63264583d  guix-build-1bc9f64bee91/output/aarch64-linux-gnu/bitcoin-1bc9f64bee91-aarch64-linux-gnu-debug.tar.gz
8884a25e5a214b224d2c7d73e19786174ddb4eed37c2daa0dc57c23d1f49fc3c  guix-build-1bc9f64bee91/output/aarch64-linux-gnu/bitcoin-1bc9f64bee91-aarch64-linux-gnu.tar.gz
36855764cdf7488af17c16524adda0b3c019d08f47e87a8aea5596aade9eba87  guix-build-1bc9f64bee91/output/arm-linux-gnueabihf/SHA256SUMS.part
8bbf0f76f2abe4ee6bdfb1eba9b67410f187afc60433e5be5f7fb11c184660a9  guix-build-1bc9f64bee91/output/arm-linux-gnueabihf/bitcoin-1bc9f64bee91-arm-linux-gnueabihf-debug.tar.gz
db5ff885a8b728415988456b3f02dd5178124a9ff4ea5f0946f3327038ea33f4  guix-build-1bc9f64bee91/output/arm-linux-gnueabihf/bitcoin-1bc9f64bee91-arm-linux-gnueabihf.tar.gz
314ce4cd1ccd1ca089c29a68d9f4d031c9dc5e0cf5f6d9b0234db1d7cdc7d641  guix-build-1bc9f64bee91/output/arm64-apple-darwin/SHA256SUMS.part
61d6eb60cdd3b37abf57b560ceb7fc617f56d8d0ab28605673faa93470e9da7a  guix-build-1bc9f64bee91/output/arm64-apple-darwin/bitcoin-1bc9f64bee91-arm64-apple-darwin-unsigned.tar.gz
bbff8c672e248e2e08ceea8641ca3c58576031afaa801b920b2d6e3483684a6c  guix-build-1bc9f64bee91/output/arm64-apple-darwin/bitcoin-1bc9f64bee91-arm64-apple-darwin-unsigned.zip
863ff8c24b3dffb27d548cd5e80ff9205f6b06bc21a4a8249db26acf1fb1d7e0  guix-build-1bc9f64bee91/output/arm64-apple-darwin/bitcoin-1bc9f64bee91-arm64-apple-darwin.tar.gz
c441e38346c2276f5d3e35e22b00c2bd31c8410d19b0726cce155ffe1c6649a3  guix-build-1bc9f64bee91/output/dist-archive/bitcoin-1bc9f64bee91.tar.gz
ac7784cf706551e704103e99ee1a7df79ae13870fa5e3dcd2ea8cbc74a36e775  guix-build-1bc9f64bee91/output/powerpc64-linux-gnu/SHA256SUMS.part
fb4f88f4f6e6baeb6b14e7dd107b3678bc3174192d42d9844cce7f24ea4ecc30  guix-build-1bc9f64bee91/output/powerpc64-linux-gnu/bitcoin-1bc9f64bee91-powerpc64-linux-gnu-debug.tar.gz
b86ca80ab5110228bb1c32641a75a5fbfb77454583a5cff6695f3335fc089b1e  guix-build-1bc9f64bee91/output/powerpc64-linux-gnu/bitcoin-1bc9f64bee91-powerpc64-linux-gnu.tar.gz
0a345fe896f8bf91ed5092799a6512e3baa1f934b663cbe43ddf2e70333c0b76  guix-build-1bc9f64bee91/output/riscv64-linux-gnu/SHA256SUMS.part
14d06d3b49bfc8d94aa548799b7f886efba1253a5e13f3179cecfbc2a4531e0d  guix-build-1bc9f64bee91/output/riscv64-linux-gnu/bitcoin-1bc9f64bee91-riscv64-linux-gnu-debug.tar.gz
bca5ca1bbc303fa078567e284e3e6983fc2e7ab9c6ca24cc200185acb608b845  guix-build-1bc9f64bee91/output/riscv64-linux-gnu/bitcoin-1bc9f64bee91-riscv64-linux-gnu.tar.gz
b7b916e97a5a9a24f83938c3dc06e8ef6541e3112f6becb372d4a0430221c4da  guix-build-1bc9f64bee91/output/x86_64-apple-darwin/SHA256SUMS.part
9f1c2868a1704d60889e8675785d2a02a92b5d32d28e61cc9b9c06e12f44bd40  guix-build-1bc9f64bee91/output/x86_64-apple-darwin/bitcoin-1bc9f64bee91-x86_64-apple-darwin-unsigned.tar.gz
ca290ebae788bcad2c21882cb7962d40d41878df8ccb6e5ab9cb434aa02ab6e0  guix-build-1bc9f64bee91/output/x86_64-apple-darwin/bitcoin-1bc9f64bee91-x86_64-apple-darwin-unsigned.zip
323ea529b7646a8d0326e465d64ef36ef9b304a0f8b379d6e61f4c6aaa9479b1  guix-build-1bc9f64bee91/output/x86_64-apple-darwin/bitcoin-1bc9f64bee91-x86_64-apple-darwin.tar.gz
ab99ee9a4e76f8f81958e0ae5381d422961e1e4ca1e38e88b73a858024d4933b  guix-build-1bc9f64bee91/output/x86_64-linux-gnu/SHA256SUMS.part
8e5044e712fd0d674dba95bf3b02f3c1f872c3f0933f15f6fd142aee51072d65  guix-build-1bc9f64bee91/output/x86_64-linux-gnu/bitcoin-1bc9f64bee91-x86_64-linux-gnu-debug.tar.gz
583e16f677421420cfddc4b591c7fbad7879a154572567fe8ca7d94ea16d4ab6  guix-build-1bc9f64bee91/output/x86_64-linux-gnu/bitcoin-1bc9f64bee91-x86_64-linux-gnu.tar.gz
e8cea74fcfd0202186659d76c5d3bf2d1b35560bb74d71395b1540b0223ebcf2  guix-build-1bc9f64bee91/output/x86_64-w64-mingw32/SHA256SUMS.part
f67bbf2cc9c48ae29b0543f62fec5337e711cac8b4dede393aa7d805a4d4c926  guix-build-1bc9f64bee91/output/x86_64-w64-mingw32/bitcoin-1bc9f64bee91-win64-debug.zip
8aa117609c8857365ed69a5e646aa49a1034800bfd8e40436cede8ae3a69b5cd  guix-build-1bc9f64bee91/output/x86_64-w64-mingw32/bitcoin-1bc9f64bee91-win64-setup-unsigned.exe
e26f68b8949c5c5fdea3f513b88f34ddae8f2ff5624383b58ff4041924ac6d66  guix-build-1bc9f64bee91/output/x86_64-w64-mingw32/bitcoin-1bc9f64bee91-win64-unsigned.tar.gz
a4816c6b72892cfbb7518592b031df3d27937c2097a3a7928dda5872424a78ee  guix-build-1bc9f64bee91/output/x86_64-w64-mingw32/bitcoin-1bc9f64bee91-win64.zip

Copy link
Contributor

@TheCharlatan TheCharlatan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK 1bc9f64

@fanquake fanquake merged commit fa0b5d6 into bitcoin:master Jul 24, 2024
@fanquake fanquake deleted the test_test_cleanups branch July 24, 2024 08:49
@bitcoin bitcoin locked and limited conversation to collaborators Jul 24, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants