From ca88ffc1961bba2b972ac30dfcfa206aa3c1df3d Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 16:46:09 +0900 Subject: [PATCH 01/24] build: enable coverage when fuzzing --- CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 99db3880..2515b0c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,9 +95,8 @@ if(NURI_BUILD_FUZZING) message(FATAL_ERROR "Fuzzing build is only supported with Clang") endif() - message("Fuzzing build: enabling sanitizers") + message("Fuzzing build: enabling sanitizers and sanitizer coverage") set(NURI_ENABLE_SANITIZERS ON) - add_compile_options(-fsanitize=fuzzer) endif() set_sanitizer_envs() @@ -127,6 +126,11 @@ endif() find_or_fetch_abseil() add_subdirectory(third-party EXCLUDE_FROM_ALL) +if(NURI_BUILD_FUZZING) + add_compile_options(-fsanitize=fuzzer) + string(APPEND CMAKE_CXX_FLAGS " -fprofile-instr-generate -fcoverage-mapping") +endif() + add_compile_options( -pedantic -Wall From 66307f19331f1441308af18497cd50f7c5dd0b8f Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 16:46:22 +0900 Subject: [PATCH 02/24] test(fmt/smi): fuzz smiles reader/writer --- fuzz/fmt/smiles_fuzz.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 fuzz/fmt/smiles_fuzz.cpp diff --git a/fuzz/fmt/smiles_fuzz.cpp b/fuzz/fmt/smiles_fuzz.cpp new file mode 100644 index 00000000..11f1a425 --- /dev/null +++ b/fuzz/fmt/smiles_fuzz.cpp @@ -0,0 +1,40 @@ +// +// Project NuriKit - Copyright 2024 SNU Compbio Lab. +// SPDX-License-Identifier: Apache-2.0 +// + +#include +#include + +#include +#include +#include +#include + +#include "fuzz_utils.h" +#include "nuri/core/molecule.h" +#include "nuri/fmt/smiles.h" + +NURI_FUZZ_MAIN(data, size) { + static absl::once_flag flag; + absl::call_once(flag, []() { + absl::InitializeLog(); + absl::SetStderrThreshold(absl::LogSeverity::kFatal); + }); + + std::istringstream iss( + std::string { reinterpret_cast(data), size }); + nuri::SmilesReader reader(iss); + + std::vector block; + std::string smi; + while (reader.getnext(block)) { + nuri::Molecule mol = reader.parse(block); + if (mol.empty()) + continue; + + nuri::write_smiles(smi, mol); + } + + return 0; +} From 469e68d30416e27cc32a22ae26b1834e2e15d0db Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 16:45:25 +0900 Subject: [PATCH 03/24] fix(fmt/smi): write incorrect bond configuration gracefully Found while fuzzing. --- src/fmt/smiles.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/fmt/smiles.cpp b/src/fmt/smiles.cpp index 5406b60f..406c4573 100644 --- a/src/fmt/smiles.cpp +++ b/src/fmt/smiles.cpp @@ -912,6 +912,7 @@ class NeighborBondConfig { BondConfig src_updown(Molecule::Atom src, BondConfig kind) { ABSL_DCHECK_EQ(nconf_, 1); + ABSL_DCHECK_GE(free_nei_[0], 0); if (kind == BondConfig::kNone) { kind = src.id() < src[first_free()].dst().id() ? BondConfig::kUp @@ -927,6 +928,7 @@ class NeighborBondConfig { bool dst_updown(Molecule::Neighbor nei, BondConfig kind) { ABSL_DCHECK(kind == BondConfig::kUp || kind == BondConfig::kDown); + ABSL_DCHECK_GE(free_nei_[0], 0); auto src = nei.src(), dst = nei.dst(); const int srci = dst.find_adjacent(src) - dst.begin(); @@ -952,15 +954,15 @@ class NeighborBondConfig { BondConfig updown() const { ABSL_DCHECK_EQ(nconf_, 1); + ABSL_DCHECK_GE(free_nei_[0], 0); return cfgs_[first_free()]; } const std::vector &cfgs() const { return cfgs_; } - int first_free() const { - ABSL_DCHECK_GE(free_nei_[0], 0); - return free_nei_[0]; - } + bool has_free() const { return free_nei_[0] >= 0; } + + int first_free() const { return free_nei_[0]; } int second_free() const { return free_nei_[1]; } @@ -988,6 +990,13 @@ class BondConfigResolver { NeighborBondConfig &cfg = mcfg(atom); ABSL_DCHECK_EQ(cfg.nconf(), 1); + if (!cfg.has_free()) { + ABSL_LOG(WARNING) + << "no free bond to resolve up/down configuration on atom " + << atom.id(); + return false; + } + if (cfg.updown() != BondConfig::kNone) { bool consistent = req == BondConfig::kNone || req == cfg.updown(); ABSL_LOG_IF(WARNING, !consistent) @@ -1056,7 +1065,8 @@ bool smiles_resolve_bond_updown(const Molecule &mol, auto cfg_nei = atom[info.first_config()]; BondConfig req; - if (visited[cfg_nei.dst().id()] == 0) { + if (visited[cfg_nei.dst().id()] == 0 + || !resolver.cfg(cfg_nei.dst()).has_free()) { req = BondConfig::kNone; } else { req = updown_other(resolver.updown(cfg_nei.dst()), From c0ec80cf05b641630a604773e6ece44abd79837e Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 17:37:26 +0900 Subject: [PATCH 04/24] test(fmt/smi): test for invalid bond geometry --- test/fmt/smiles_test.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/fmt/smiles_test.cpp b/test/fmt/smiles_test.cpp index 438ffd85..9c44ae84 100644 --- a/test/fmt/smiles_test.cpp +++ b/test/fmt/smiles_test.cpp @@ -751,6 +751,15 @@ TEST_F(SmilesTest, BondGeometryTest) { } } +TEST_F(SmilesTest, InvalidBondGeometry) { + // Found with fuzzing + set_test_string("c1ccc2CCCc2/c=1 error\n"); + + NURI_FMT_TEST_NEXT_MOL("error", 9, 10); + for (auto bond: mol().bonds()) + EXPECT_FALSE(bond.data().has_config()); +} + TEST_F(SmilesTest, ChiralityTest) { set_test_string( // Taken from opensmiles spec "C[C@@H](C(=O)O)N alanine\n" From cae4ac71616575851a80f775be5b92c8294aec8c Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 18:06:48 +0900 Subject: [PATCH 05/24] fix(fmt/smi): ignore cis/trans on aromatic bonds --- src/fmt/smiles.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/fmt/smiles.cpp b/src/fmt/smiles.cpp index 406c4573..2f06facf 100644 --- a/src/fmt/smiles.cpp +++ b/src/fmt/smiles.cpp @@ -511,8 +511,7 @@ bool update_bond_configuration(Molecule &mol, // NOLINTNEXTLINE(readability-use-anyofallof) for (auto bond: mol.bonds()) { - if ((bond.data().order() != constants::kDoubleBond - && bond.data().order() != constants::kAromaticBond) + if (bond.data().order() != constants::kDoubleBond || all_neighbors(bond.src()) > 3 || all_neighbors(bond.dst()) > 3) { continue; } From 46a1876afdc2cd9c0a1e14668f81e3a62f5b2ab1 Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 18:35:41 +0900 Subject: [PATCH 06/24] test(fmt/mol2): fuzz mol2 reader/writer --- fuzz/fmt/mol2_fuzz.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 fuzz/fmt/mol2_fuzz.cpp diff --git a/fuzz/fmt/mol2_fuzz.cpp b/fuzz/fmt/mol2_fuzz.cpp new file mode 100644 index 00000000..9902487e --- /dev/null +++ b/fuzz/fmt/mol2_fuzz.cpp @@ -0,0 +1,40 @@ +// +// Project NuriKit - Copyright 2024 SNU Compbio Lab. +// SPDX-License-Identifier: Apache-2.0 +// + +#include +#include + +#include +#include +#include +#include + +#include "fuzz_utils.h" +#include "nuri/core/molecule.h" +#include "nuri/fmt/mol2.h" + +NURI_FUZZ_MAIN(data, size) { + static absl::once_flag flag; + absl::call_once(flag, []() { + absl::InitializeLog(); + absl::SetStderrThreshold(absl::LogSeverity::kFatal); + }); + + std::istringstream iss( + std::string { reinterpret_cast(data), size }); + nuri::Mol2Reader reader(iss); + + std::vector block; + std::string mol2; + while (reader.getnext(block)) { + nuri::Molecule mol = reader.parse(block); + if (mol.empty()) + continue; + + nuri::write_mol2(mol2, mol); + } + + return 0; +} From e65b1ff819ce00b81d7c0e35ba811de8a5c0a8e9 Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 20:38:38 +0900 Subject: [PATCH 07/24] fix(fmt/mol2): handle negative atom id gracefully --- src/fmt/mol2.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fmt/mol2.cpp b/src/fmt/mol2.cpp index f783f08b..7f9af68c 100644 --- a/src/fmt/mol2.cpp +++ b/src/fmt/mol2.cpp @@ -342,8 +342,8 @@ bool parse_bond_block(MoleculeMutator &mutator, Iter &it, const Iter end) { int mol_ids[2]; for (int i = 0; i < 2; ++i) { - mol_ids[i] = static_cast(ids[i] - 1); - if (mol_ids[i] >= mutator.mol().num_atoms()) { + mol_ids[i] = static_cast(ids[i]) - 1; + if (mol_ids[i] >= mutator.mol().num_atoms() || mol_ids[i] < 0) { ABSL_LOG(WARNING) << "Atom index " << ids[i] << " out of range; check mol2 file consistency"; return false; @@ -403,7 +403,7 @@ std::pair parse_atom_attr_block(Molecule &mol, Iter &it, << "Ignoring extra tokens in atom attribute line"; --ids[0]; - if (ids[0] >= mol.num_atoms()) { + if (ids[0] >= mol.num_atoms() || ids[0] < 0) { ABSL_LOG(WARNING) << "Atom index " << ids[0] << " out of range; check mol2 file consistency"; return { false, false }; From d5dfc2f1f5ea527f464578baf69d632ccb90b612 Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 21:08:41 +0900 Subject: [PATCH 08/24] test(fmt/pdb): fuzz pdb reader --- fuzz/fmt/pdb_fuzz.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 fuzz/fmt/pdb_fuzz.cpp diff --git a/fuzz/fmt/pdb_fuzz.cpp b/fuzz/fmt/pdb_fuzz.cpp new file mode 100644 index 00000000..edf7751f --- /dev/null +++ b/fuzz/fmt/pdb_fuzz.cpp @@ -0,0 +1,34 @@ +// +// Project NuriKit - Copyright 2024 SNU Compbio Lab. +// SPDX-License-Identifier: Apache-2.0 +// + +#include +#include + +#include +#include +#include +#include + +#include "fuzz_utils.h" +#include "nuri/core/molecule.h" +#include "nuri/fmt/pdb.h" + +NURI_FUZZ_MAIN(data, size) { + static absl::once_flag flag; + absl::call_once(flag, []() { + absl::InitializeLog(); + absl::SetStderrThreshold(absl::LogSeverity::kFatal); + }); + + std::istringstream iss( + std::string { reinterpret_cast(data), size }); + nuri::PDBReader reader(iss); + + std::vector block; + while (reader.getnext(block)) + nuri::Molecule mol = reader.parse(block); + + return 0; +} From 6e14497bde19b24a1b7e0676f6ea7121b657f4ce Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 21:13:50 +0900 Subject: [PATCH 09/24] fix(utils): return empty string instead default-constructed string view This errors on sanitizer build when abseil log is passed a nullptr. --- include/nuri/utils.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/nuri/utils.h b/include/nuri/utils.h index c27dc869..2a8f7be2 100644 --- a/include/nuri/utils.h +++ b/include/nuri/utils.h @@ -648,7 +648,7 @@ namespace internal { std::string_view get_key(PT &props, std::string_view key) { auto it = find_key(props, key); if (it == props.end()) - return {}; + return ""; return it->second; } @@ -860,7 +860,7 @@ inline std::string_view slice_rstrip(std::string_view str, std::size_t begin, constexpr std::string_view safe_substr(std::string_view str, size_t begin, size_t count = std::string_view::npos) { if (ABSL_PREDICT_FALSE(begin > str.size())) - return {}; + return ""; return str.substr(begin, count); } @@ -868,7 +868,7 @@ constexpr std::string_view safe_substr(std::string_view str, size_t begin, constexpr std::string_view safe_slice(std::string_view str, size_t begin, size_t end) { if (ABSL_PREDICT_FALSE(begin > str.size())) - return {}; + return ""; return slice(str, begin, end); } From 35c5c2c2be8a78d59eec86b391005a3867b3de3f Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 21:14:59 +0900 Subject: [PATCH 10/24] fix(fmt/pdb): fail on negative serial number --- src/fmt/pdb.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fmt/pdb.cpp b/src/fmt/pdb.cpp index fc29455d..67c82141 100644 --- a/src/fmt/pdb.cpp +++ b/src/fmt/pdb.cpp @@ -1566,7 +1566,7 @@ std::pair parse_serial(std::string_view line) { int serial; line = slice(line, 6, 11); bool success = absl::SimpleAtoi(line, &serial); - return std::make_pair(serial, success); + return std::make_pair(serial, success && serial >= 0); } int last_serial(const std::vector &pdb) { @@ -1897,7 +1897,7 @@ void read_connect_line(std::string_view line, const int src, break; int serial; - if (!absl::SimpleAtoi(slice(line, i, i + 5), &serial)) { + if (!absl::SimpleAtoi(slice(line, i, i + 5), &serial) || serial < 0) { ABSL_LOG(WARNING) << "Invalid CONECT serial number: " << slice_strip(line, i, i + 5) << " the resulting molecule might be invalid"; From 3fc547e3057287e0a4fa011b6992079b20054fdc Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 21:15:21 +0900 Subject: [PATCH 11/24] fix(fmt/pdb): add missing iterator range check --- src/fmt/pdb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fmt/pdb.cpp b/src/fmt/pdb.cpp index 67c82141..c031885c 100644 --- a/src/fmt/pdb.cpp +++ b/src/fmt/pdb.cpp @@ -2147,7 +2147,7 @@ Molecule read_pdb(const std::vector &pdb) { read_xtal_crd_xform_section(it, end); - if (absl::StartsWith(*it, "MODEL")) { + if (is_record(it, end, "MODEL")) { mol.add_prop("model", read_model_line(*it)); ++it; } From d3b7fff1bb2a510090cfdb9689af727654c74d9e Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 21:42:00 +0900 Subject: [PATCH 12/24] test(fmt/pdb): test MODEL record rigorously --- test/fmt/pdb_test.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/fmt/pdb_test.cpp b/test/fmt/pdb_test.cpp index f74d77b3..9d12297b 100644 --- a/test/fmt/pdb_test.cpp +++ b/test/fmt/pdb_test.cpp @@ -19,6 +19,7 @@ #include "nuri/algo/guess.h" #include "nuri/core/molecule.h" #include "nuri/fmt/base.h" +#include "nuri/utils.h" namespace nuri { namespace { @@ -115,6 +116,7 @@ TEST_F(PDBTest, HandleMultipleModels) { ASSERT_TRUE(advance_and_guess()); EXPECT_EQ(mol().name(), "3CYE"); + EXPECT_EQ(internal::get_key(mol().props(), "model"), "1"); EXPECT_EQ(mol().num_atoms(), 55); EXPECT_EQ(mol().num_bonds(), 54); @@ -135,6 +137,7 @@ TEST_F(PDBTest, HandleMultipleModels) { ASSERT_TRUE(advance_and_guess()); EXPECT_EQ(mol().name(), "3CYE"); + EXPECT_EQ(internal::get_key(mol().props(), "model"), "2"); EXPECT_EQ(mol().num_atoms(), 36); EXPECT_EQ(mol().num_bonds(), 34); @@ -168,10 +171,13 @@ ENDMDL PDBReader reader(iss); auto ms = reader.stream(); + int cnt = 0; while (ms.advance()) { const Molecule &mol = ms.current(); EXPECT_TRUE(mol.empty()); + ++cnt; } + EXPECT_EQ(cnt, 4); } // GH-402 From 0c0565d322dac57d3583b0400f08ddb30472ac3d Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 21:42:36 +0900 Subject: [PATCH 13/24] fix(fmt/pdb): don't ignore MODEL record --- src/fmt/pdb.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/fmt/pdb.cpp b/src/fmt/pdb.cpp index c031885c..d9ccd291 100644 --- a/src/fmt/pdb.cpp +++ b/src/fmt/pdb.cpp @@ -67,11 +67,12 @@ bool pdb_next_nomodel(std::istream &is, std::string &line, std::vector &header, std::vector &rfooter) { while (std::getline(is, line)) { + header.push_back(line); + if (absl::StartsWith(line, "MODEL")) { pdb_read_footer(is, line, rfooter); return true; } - header.push_back(line); } return false; @@ -89,9 +90,7 @@ bool pdb_next_model(std::istream &is, std::string &line, || fast_startswith(line, "CON"))) { break; } - if (absl::StartsWith(line, "MODEL")) { - continue; - } + block.push_back(line); } @@ -115,9 +114,13 @@ bool PDBReader::getnext(std::vector &block) { header_.clear(); return true; } - } - block = header_; + block = header_; + // last line was "MODEL", remove from header + header_.pop_back(); + } else { + block = header_; + } if (!pdb_next_model(*is_, line, block)) { block.clear(); From 95c6af8bd538fd1ff23dfec468fe5796a6807d8d Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 22:46:46 +0900 Subject: [PATCH 14/24] test(fmt/sdf): fuzz sdf reader/writer --- fuzz/fmt/sdf_fuzz.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 fuzz/fmt/sdf_fuzz.cpp diff --git a/fuzz/fmt/sdf_fuzz.cpp b/fuzz/fmt/sdf_fuzz.cpp new file mode 100644 index 00000000..98ae928d --- /dev/null +++ b/fuzz/fmt/sdf_fuzz.cpp @@ -0,0 +1,42 @@ +// +// Project NuriKit - Copyright 2024 SNU Compbio Lab. +// SPDX-License-Identifier: Apache-2.0 +// + +#include +#include + +#include +#include +#include +#include + +#include "fuzz_utils.h" +#include "nuri/core/molecule.h" +#include "nuri/fmt/sdf.h" + +NURI_FUZZ_MAIN(data, size) { + static absl::once_flag flag; + absl::call_once(flag, []() { + absl::InitializeLog(); + absl::SetStderrThreshold(absl::LogSeverity::kFatal); + }); + + std::istringstream iss( + std::string { reinterpret_cast(data), size }); + nuri::SDFReader reader(iss); + + std::vector block; + std::string sdf; + while (reader.getnext(block)) { + nuri::Molecule mol = reader.parse(block); + if (mol.empty()) + continue; + + nuri::write_sdf(sdf, mol, -1, nuri::SDFVersion::kAutomatic); + nuri::write_sdf(sdf, mol, -1, nuri::SDFVersion::kV2000); + nuri::write_sdf(sdf, mol, -1, nuri::SDFVersion::kV3000); + } + + return 0; +} From 81914ac4fc22d5b203eea7b3b174a09a0345532f Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 23:01:11 +0900 Subject: [PATCH 15/24] fix(fmt/sdf): set count type to unsigned --- src/fmt/sdf.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fmt/sdf.cpp b/src/fmt/sdf.cpp index 80ff211b..400f307e 100644 --- a/src/fmt/sdf.cpp +++ b/src/fmt/sdf.cpp @@ -124,7 +124,7 @@ HeaderReadResult read_sdf_header(Molecule &mol, Iterator &it, return HeaderReadResult::failure(); } - int natoms, nbonds; + unsigned int natoms, nbonds; if (!absl::SimpleAtoi(line.substr(0, 3), &natoms) || !absl::SimpleAtoi(safe_substr(line, 3, 3), &nbonds)) { ABSL_LOG(WARNING) << "Invalid SDF format: cannot parse counts line"; @@ -570,7 +570,7 @@ constexpr auto v3000_end_block = // constexpr auto v3000_counts_line = // v3000_line_header // - >> "COUNTS" >> x3::repeat(2, x3::inf)[+x3::omit[x3::blank] >> x3::int_]; + >> "COUNTS" >> x3::repeat(2, x3::inf)[+x3::omit[x3::blank] >> x3::uint_]; constexpr auto v3000_atom_optional_params // = x3::rule Date: Mon, 23 Dec 2024 23:02:50 +0900 Subject: [PATCH 16/24] fix(fmt/sdf): handle zero index gracefully --- src/fmt/sdf.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/fmt/sdf.cpp b/src/fmt/sdf.cpp index 400f307e..1c45a1db 100644 --- a/src/fmt/sdf.cpp +++ b/src/fmt/sdf.cpp @@ -763,10 +763,11 @@ bool try_read_v3000_bond_block(MoleculeMutator &mut, ABSL_DCHECK(parsed.size() == 3); - int src = static_cast(--parsed[1]), - dst = static_cast(--parsed[2]); - if (src >= mut.mol().num_atoms() || dst >= mut.mol().num_atoms() - || src == dst) { + int src = static_cast(parsed[1]) - 1, + dst = static_cast(parsed[2]) - 1; + if (ABSL_PREDICT_FALSE(src >= mut.mol().num_atoms() + || dst >= mut.mol().num_atoms() // + || src == dst || src < 0 || dst < 0)) { ABSL_LOG(WARNING) << "Invalid bond indices: " << src << " - " << dst; return false; } From cab317f7a49a46424edf8038092bfbd2b3d6e2a6 Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Mon, 23 Dec 2024 23:16:48 +0900 Subject: [PATCH 17/24] fix(fmt/sdf): end line with blank or EOL --- src/fmt/sdf.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/fmt/sdf.cpp b/src/fmt/sdf.cpp index 1c45a1db..2fd52292 100644 --- a/src/fmt/sdf.cpp +++ b/src/fmt/sdf.cpp @@ -204,7 +204,8 @@ constexpr auto sdf_data_header_key = constexpr auto sdf_data_header = // '>' >> +(+x3::omit[x3::blank] >> // - (sdf_data_header_key | +x3::omit[~x3::blank])); + (sdf_data_header_key | +x3::omit[~x3::blank])) + >> x3::omit[x3::space | x3::eoi]; } // namespace parser // NOLINTEND(readability-identifier-naming) @@ -387,7 +388,8 @@ ccc: charge // NOLINTBEGIN(readability-identifier-naming) namespace parser { constexpr auto v2000_property_values = // - *x3::omit[x3::blank] >> x3::int_ % +x3::blank; + *x3::omit[x3::blank] >> x3::int_ % +x3::blank + >> x3::omit[x3::space | x3::eoi]; } // namespace parser // NOLINTEND(readability-identifier-naming) @@ -570,7 +572,8 @@ constexpr auto v3000_end_block = // constexpr auto v3000_counts_line = // v3000_line_header // - >> "COUNTS" >> x3::repeat(2, x3::inf)[+x3::omit[x3::blank] >> x3::uint_]; + >> "COUNTS" >> x3::repeat(2, x3::inf)[+x3::omit[x3::blank] >> x3::uint_] + >> x3::omit[x3::space | x3::eoi]; constexpr auto v3000_atom_optional_params // = x3::rule> nonblank_trailing_blanks // >> x3::repeat(3)[double_trailing_blanks] // >> x3::int_ // - >> *(+x3::omit[x3::blank] >> v3000_atom_optional_params); + >> *(+x3::omit[x3::blank] >> v3000_atom_optional_params) + >> x3::omit[x3::space | x3::eoi]; using AtomLine = std::tuple, int, @@ -592,7 +596,8 @@ using AtomLine = constexpr auto v3000_bond_line = // v3000_line_header >> x3::omit[x3::int_] // - >> x3::repeat(3)[x3::omit[+x3::blank] >> x3::uint_]; + >> x3::repeat(3)[x3::omit[+x3::blank] >> x3::uint_] + >> x3::omit[x3::space | x3::eoi]; } // namespace parser // NOLINTEND(readability-identifier-naming) From 89e571fc46946274e120f82bda5eb0a369662c7d Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Tue, 24 Dec 2024 08:19:27 +0900 Subject: [PATCH 18/24] test(fmt): try write 2D molecules too --- fuzz/fmt/mol2_fuzz.cpp | 2 ++ fuzz/fmt/sdf_fuzz.cpp | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/fuzz/fmt/mol2_fuzz.cpp b/fuzz/fmt/mol2_fuzz.cpp index 9902487e..bc809acb 100644 --- a/fuzz/fmt/mol2_fuzz.cpp +++ b/fuzz/fmt/mol2_fuzz.cpp @@ -34,6 +34,8 @@ NURI_FUZZ_MAIN(data, size) { continue; nuri::write_mol2(mol2, mol); + mol.confs().clear(); + nuri::write_mol2(mol2, mol); } return 0; diff --git a/fuzz/fmt/sdf_fuzz.cpp b/fuzz/fmt/sdf_fuzz.cpp index 98ae928d..7e7f746b 100644 --- a/fuzz/fmt/sdf_fuzz.cpp +++ b/fuzz/fmt/sdf_fuzz.cpp @@ -3,7 +3,9 @@ // SPDX-License-Identifier: Apache-2.0 // +#include #include +#include #include #include @@ -29,13 +31,28 @@ NURI_FUZZ_MAIN(data, size) { std::vector block; std::string sdf; while (reader.getnext(block)) { - nuri::Molecule mol = reader.parse(block); + nuri::Molecule mol; + + try { + mol = reader.parse(block); + } catch (const std::length_error & /* e */) { + return -1; + } catch (const std::bad_alloc & /* e */) { + return -1; + } + if (mol.empty()) continue; nuri::write_sdf(sdf, mol, -1, nuri::SDFVersion::kAutomatic); nuri::write_sdf(sdf, mol, -1, nuri::SDFVersion::kV2000); nuri::write_sdf(sdf, mol, -1, nuri::SDFVersion::kV3000); + + mol.confs().clear(); + + nuri::write_sdf(sdf, mol, -1, nuri::SDFVersion::kAutomatic); + nuri::write_sdf(sdf, mol, -1, nuri::SDFVersion::kV2000); + nuri::write_sdf(sdf, mol, -1, nuri::SDFVersion::kV3000); } return 0; From d6793864132b53b50e6e146e5ecc797678e3c118 Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Tue, 24 Dec 2024 08:19:45 +0900 Subject: [PATCH 19/24] fix(fmt/sdf): test out-of-bounds iterator more conservatively --- src/fmt/sdf.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fmt/sdf.cpp b/src/fmt/sdf.cpp index 2fd52292..5cbfd485 100644 --- a/src/fmt/sdf.cpp +++ b/src/fmt/sdf.cpp @@ -652,7 +652,7 @@ bool try_read_v3000_header(HeaderReadResult &metadata, Iterator &it, return false; } - if (++it == end) { + if (++it >= end) { ABSL_LOG(WARNING) << "No counts line found"; return false; } @@ -930,7 +930,7 @@ Molecule read_sdf(const std::vector &sdf) { return mol; } - if (++it == end) { + if (++it >= end) { ABSL_LOG(ERROR) << "No atom block found"; mol.clear(); return mol; From 9d2e796c9a4ba7d2b36b6f992953e71ef57fb987 Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Tue, 24 Dec 2024 08:38:32 +0900 Subject: [PATCH 20/24] fix(fmt/mol2): handle line ending more strictly --- src/fmt/mol2.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/fmt/mol2.cpp b/src/fmt/mol2.cpp index 7f9af68c..86b4f71d 100644 --- a/src/fmt/mol2.cpp +++ b/src/fmt/mol2.cpp @@ -112,7 +112,8 @@ using Iter = std::vector::const_iterator; // NOLINTBEGIN(readability-identifier-naming) namespace parser { constexpr auto mol_nums_line = *x3::omit[x3::blank] >> x3::uint_ - >> -(+x3::omit[x3::blank] >> x3::uint_); + >> -(+x3::omit[x3::blank] >> x3::uint_) + >> x3::omit[x3::space | x3::eoi]; } // namespace parser // NOLINTEND(readability-identifier-naming) @@ -188,7 +189,7 @@ constexpr auto atom_line = *x3::omit[x3::blank] // >> uint_trailing_blanks // >> -(nonblank_trailing_blanks // >> -x3::double_)) - >> *x3::omit[x3::blank]; + >> x3::omit[+x3::space | x3::eoi]; using AtomLine = std::tuple< unsigned int, std::string, absl::InlinedVector, std::string, boost::optional, @@ -315,7 +316,7 @@ const auto bond_line = *x3::omit[x3::blank] // >> +x3::omit[x3::digit] >> +x3::omit[x3::blank] >> x3::repeat(2)[uint_trailing_blanks] // >> bond_type // - >> *x3::omit[x3::blank]; + >> x3::omit[+x3::space | x3::eoi]; using BondLine = std::tuple, BondData>; } // namespace parser // NOLINTEND(readability-identifier-naming) @@ -373,7 +374,8 @@ bool parse_bond_block(MoleculeMutator &mutator, Iter &it, const Iter end) { // NOLINTBEGIN(readability-identifier-naming) namespace parser { constexpr auto unity_atom_attr_line = x3::uint_ >> +x3::omit[x3::blank] - >> x3::uint_; + >> x3::uint_ + >> x3::omit[+x3::space | x3::eoi]; } // namespace parser // NOLINTEND(readability-identifier-naming) @@ -439,7 +441,8 @@ namespace parser { const auto substructure_line = *x3::omit[x3::blank] // >> uint_trailing_blanks // >> nonblank_trailing_blanks // - >> +x3::omit[x3::digit] >> *x3::omit[x3::blank]; + >> +x3::omit[x3::digit] + >> x3::omit[+x3::space | x3::eoi]; using SubstructureLine = std::pair; } // namespace parser // NOLINTEND(readability-identifier-naming) From fb922c781c50c6f22ab0c0f7491e7dab0f3802dc Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Tue, 24 Dec 2024 08:44:54 +0900 Subject: [PATCH 21/24] fix(fmt/sdf): fix invalid bond order log --- src/fmt/sdf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fmt/sdf.cpp b/src/fmt/sdf.cpp index 5cbfd485..91ac9e31 100644 --- a/src/fmt/sdf.cpp +++ b/src/fmt/sdf.cpp @@ -779,7 +779,7 @@ bool try_read_v3000_bond_block(MoleculeMutator &mut, BondData data; if (!parse_sdf_bond(data, parsed[0])) { - ABSL_LOG(WARNING) << "Invalid bond order: " << parsed[2]; + ABSL_LOG(WARNING) << "Invalid bond order: " << parsed[0]; return false; } From 2c9400c02da24b94ec2dff587eac70dcdc5b23d5 Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Tue, 24 Dec 2024 09:08:59 +0900 Subject: [PATCH 22/24] feat: add fuzz driver script --- scripts/fuzz.sh | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100755 scripts/fuzz.sh diff --git a/scripts/fuzz.sh b/scripts/fuzz.sh new file mode 100755 index 00000000..846a3e49 --- /dev/null +++ b/scripts/fuzz.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# +# Project NuriKit - Copyright 2024 SNU Compbio Lab. +# SPDX-License-Identifier: Apache-2.0 +# + +set -euo pipefail + +type clang++ llvm-profdata llvm-cov c++filt + +project_root="$(dirname "$(dirname "$(realpath "$0")")")" +suppression="$(printf '%q' "$project_root/.github/ubsanignore.txt")" + +exe="$(realpath "$1")" +build_dir="$(dirname "$(dirname "$exe")")" +corpus="$(realpath "${2-corpus}")" + +shift 2 + +LLVM_PROFILE_FILE='coverage.profraw' \ + LD_PRELOAD="$(clang++ -print-file-name=libclang_rt.asan-x86_64.so) /usr/lib/x86_64-linux-gnu/libubsan.so.1" \ + UBSAN_OPTIONS="suppressions=$suppression print_stacktrace=1" \ + "$exe" "$corpus" "$@" + +llvm-profdata merge -sparse coverage.profraw -o coverage.profdata + +llvm-cov show -format html -output-dir cov-html -Xdemangler c++filt \ + -instr-profile coverage.profdata \ + "$exe" \ + -object "$build_dir/lib/libnuri.so" +chmod -R go+rX cov-html + +llvm-cov report \ + -instr-profile coverage.profdata \ + "$exe" \ + -object "$build_dir/lib/libnuri.so" From 148b4066d5f52038e9d3416832fd94aaf43665c9 Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Tue, 24 Dec 2024 09:16:05 +0900 Subject: [PATCH 23/24] chore: exclude corpus from pre-commit --- .pre-commit-config.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 195c2bf2..25ff2657 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,14 +20,14 @@ repos: - id: check-symlinks - id: destroyed-symlinks - id: end-of-file-fixer - exclude: ^test/test_data/ + exclude: ^(test/test_data/|fuzz/corpus-min/) - id: fix-byte-order-marker - exclude: ^test/test_data/ + exclude: ^(test/test_data/|fuzz/corpus-min/) - id: trailing-whitespace - exclude: ^test/test_data/ + exclude: ^(test/test_data/|fuzz/corpus-min/) args: ["--markdown-linebreak-ext=md"] - id: mixed-line-ending - exclude: ^test/test_data/ + exclude: ^(test/test_data/|fuzz/corpus-min/) args: ["--fix=lf"] - repo: https://github.com/seoklab/shared-hooks rev: v0.1.4 From 5a049f913b5bd7e1b78d5f0d226d2fc58a29b93c Mon Sep 17 00:00:00 2001 From: Nuri Jung Date: Tue, 24 Dec 2024 09:16:19 +0900 Subject: [PATCH 24/24] test(fmt): add minimal corpus files --- fuzz/corpus-min/cif/1a8o.cif | 1 + fuzz/corpus-min/cif/components_stdres.cif | 1 + fuzz/corpus-min/cif/line_cont.cif | 27 ++++++ fuzz/corpus-min/cif/line_cont_new.cif | 27 ++++++ fuzz/corpus-min/cif/simple_loop.cif | 10 +++ fuzz/corpus-min/cif/star_fig1.cif | 26 ++++++ fuzz/corpus-min/mol2/basic.mol2 | 9 ++ fuzz/corpus-min/mol2/cba.mol2 | 16 ++++ fuzz/corpus-min/mol2/cba2.mol2 | 15 ++++ fuzz/corpus-min/mol2/cba3.mol2 | 16 ++++ fuzz/corpus-min/mol2/cba4.mol2 | 15 ++++ fuzz/corpus-min/mol2/charged.mol2 | 17 ++++ fuzz/corpus-min/mol2/charged2.mol2 | 18 ++++ fuzz/corpus-min/mol2/cpm.mol2 | 24 +++++ fuzz/corpus-min/mol2/cpm2.mol2 | 24 +++++ fuzz/corpus-min/mol2/cpm3.mol2 | 21 +++++ fuzz/corpus-min/mol2/cpm4.mol2 | 20 +++++ fuzz/corpus-min/mol2/extraprop.mol2 | 12 +++ fuzz/corpus-min/mol2/guanidine.mol2 | 24 +++++ fuzz/corpus-min/mol2/guanidine2.mol2 | 27 ++++++ fuzz/corpus-min/mol2/guanidine3.mol2 | 18 ++++ fuzz/corpus-min/mol2/imidazole.mol2 | 25 ++++++ fuzz/corpus-min/mol2/imidazole2.mol2 | 22 +++++ fuzz/corpus-min/mol2/imidazole3.mol2 | 22 +++++ fuzz/corpus-min/mol2/imidazole4.mol2 | 19 ++++ fuzz/corpus-min/mol2/indole.mol2 | 27 ++++++ fuzz/corpus-min/mol2/indole2.mol2 | 30 +++++++ fuzz/corpus-min/mol2/malformed.mol2 | 1 + fuzz/corpus-min/mol2/malformed10.mol2 | 12 +++ fuzz/corpus-min/mol2/malformed11.mol2 | 12 +++ fuzz/corpus-min/mol2/malformed12.mol2 | 12 +++ fuzz/corpus-min/mol2/malformed2.mol2 | 2 + fuzz/corpus-min/mol2/malformed3.mol2 | 3 + fuzz/corpus-min/mol2/malformed4.mol2 | 3 + fuzz/corpus-min/mol2/malformed5.mol2 | 10 +++ fuzz/corpus-min/mol2/malformed6.mol2 | 12 +++ fuzz/corpus-min/mol2/malformed7.mol2 | 11 +++ fuzz/corpus-min/mol2/malformed8.mol2 | 13 +++ fuzz/corpus-min/mol2/malformed9.mol2 | 8 ++ fuzz/corpus-min/mol2/nitrobenzene.mol2 | 29 ++++++ fuzz/corpus-min/mol2/nitrobenzene2.mol2 | 29 ++++++ fuzz/corpus-min/mol2/sf6.mol2 | 24 +++++ fuzz/corpus-min/mol2/sf62.mol2 | 27 ++++++ fuzz/corpus-min/mol2/substr.mol2 | 102 ++++++++++++++++++++++ fuzz/corpus-min/mol2/thiazole.mol2 | 34 ++++++++ fuzz/corpus-min/mol2/thiazole2.mol2 | 50 +++++++++++ fuzz/corpus-min/mol2/tropylium.mol2 | 25 ++++++ fuzz/corpus-min/mol2/tropylium2.mol2 | 26 ++++++ fuzz/corpus-min/mol2/tropylium3.mol2 | 22 +++++ fuzz/corpus-min/mol2/tropylium4.mol2 | 23 +++++ fuzz/corpus-min/mol2/write.mol2 | 21 +++++ fuzz/corpus-min/pdb/1alx_part.pdb | 1 + fuzz/corpus-min/pdb/1ubq.pdb | 1 + fuzz/corpus-min/pdb/3cye_part.pdb | 1 + fuzz/corpus-min/pdb/dummy-mdl.pdb | 42 +++++++++ fuzz/corpus-min/pdb/dummy.pdb | 1 + fuzz/corpus-min/pdb/gh-358.pdb | 1 + fuzz/corpus-min/pdb/gh-367.pdb | 1 + fuzz/corpus-min/pdb/invalid.pdb | 1 + fuzz/corpus-min/pdb/semanticerr.pdb | 5 ++ fuzz/corpus-min/pdb/syntaxerr.pdb | 12 +++ fuzz/corpus-min/sdf/alanine.sdf | 55 ++++++++++++ fuzz/corpus-min/sdf/cont.sdf | 12 +++ fuzz/corpus-min/sdf/cont2.sdf | 13 +++ fuzz/corpus-min/sdf/errors.sdf | 86 ++++++++++++++++++ fuzz/corpus-min/sdf/histidine.sdf | 29 ++++++ fuzz/corpus-min/sdf/histidine2.sdf | 35 ++++++++ fuzz/corpus-min/sdf/histidine3.sdf | 28 ++++++ fuzz/corpus-min/sdf/histidine4.sdf | 35 ++++++++ fuzz/corpus-min/sdf/hydrogens.sdf | 14 +++ fuzz/corpus-min/sdf/trp.sdf | 37 ++++++++ fuzz/corpus-min/sdf/trp2.sdf | 44 ++++++++++ fuzz/corpus-min/sdf/warn.sdf | 11 +++ fuzz/corpus-min/sdf/warn2.sdf | 10 +++ fuzz/corpus-min/sdf/warnrem.sdf | 43 +++++++++ fuzz/corpus-min/smi/aromatic.smi | 15 ++++ fuzz/corpus-min/smi/atomclass.smi | 1 + fuzz/corpus-min/smi/bonds.smi | 5 ++ fuzz/corpus-min/smi/branch.smi | 3 + fuzz/corpus-min/smi/chirality-invalid.smi | 3 + fuzz/corpus-min/smi/chirality.smi | 6 ++ fuzz/corpus-min/smi/dotbond.smi | 3 + fuzz/corpus-min/smi/enamine-real.smi | 4 + fuzz/corpus-min/smi/geometry.smi | 5 ++ fuzz/corpus-min/smi/hydrogens.smi | 1 + fuzz/corpus-min/smi/invalid-config.smi | 1 + fuzz/corpus-min/smi/isotope.smi | 2 + fuzz/corpus-min/smi/rings.smi | 11 +++ fuzz/corpus-min/smi/single-charge.smi | 5 ++ fuzz/corpus-min/smi/single-heavy.smi | 3 + fuzz/corpus-min/smi/single.smi | 4 + fuzz/corpus-min/smi/wildcard.smi | 1 + 92 files changed, 1615 insertions(+) create mode 120000 fuzz/corpus-min/cif/1a8o.cif create mode 120000 fuzz/corpus-min/cif/components_stdres.cif create mode 100644 fuzz/corpus-min/cif/line_cont.cif create mode 100644 fuzz/corpus-min/cif/line_cont_new.cif create mode 100644 fuzz/corpus-min/cif/simple_loop.cif create mode 100644 fuzz/corpus-min/cif/star_fig1.cif create mode 100644 fuzz/corpus-min/mol2/basic.mol2 create mode 100644 fuzz/corpus-min/mol2/cba.mol2 create mode 100644 fuzz/corpus-min/mol2/cba2.mol2 create mode 100644 fuzz/corpus-min/mol2/cba3.mol2 create mode 100644 fuzz/corpus-min/mol2/cba4.mol2 create mode 100644 fuzz/corpus-min/mol2/charged.mol2 create mode 100644 fuzz/corpus-min/mol2/charged2.mol2 create mode 100644 fuzz/corpus-min/mol2/cpm.mol2 create mode 100644 fuzz/corpus-min/mol2/cpm2.mol2 create mode 100644 fuzz/corpus-min/mol2/cpm3.mol2 create mode 100644 fuzz/corpus-min/mol2/cpm4.mol2 create mode 100644 fuzz/corpus-min/mol2/extraprop.mol2 create mode 100644 fuzz/corpus-min/mol2/guanidine.mol2 create mode 100644 fuzz/corpus-min/mol2/guanidine2.mol2 create mode 100644 fuzz/corpus-min/mol2/guanidine3.mol2 create mode 100644 fuzz/corpus-min/mol2/imidazole.mol2 create mode 100644 fuzz/corpus-min/mol2/imidazole2.mol2 create mode 100644 fuzz/corpus-min/mol2/imidazole3.mol2 create mode 100644 fuzz/corpus-min/mol2/imidazole4.mol2 create mode 100644 fuzz/corpus-min/mol2/indole.mol2 create mode 100644 fuzz/corpus-min/mol2/indole2.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed10.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed11.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed12.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed2.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed3.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed4.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed5.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed6.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed7.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed8.mol2 create mode 100644 fuzz/corpus-min/mol2/malformed9.mol2 create mode 100644 fuzz/corpus-min/mol2/nitrobenzene.mol2 create mode 100644 fuzz/corpus-min/mol2/nitrobenzene2.mol2 create mode 100644 fuzz/corpus-min/mol2/sf6.mol2 create mode 100644 fuzz/corpus-min/mol2/sf62.mol2 create mode 100644 fuzz/corpus-min/mol2/substr.mol2 create mode 100644 fuzz/corpus-min/mol2/thiazole.mol2 create mode 100644 fuzz/corpus-min/mol2/thiazole2.mol2 create mode 100644 fuzz/corpus-min/mol2/tropylium.mol2 create mode 100644 fuzz/corpus-min/mol2/tropylium2.mol2 create mode 100644 fuzz/corpus-min/mol2/tropylium3.mol2 create mode 100644 fuzz/corpus-min/mol2/tropylium4.mol2 create mode 100644 fuzz/corpus-min/mol2/write.mol2 create mode 120000 fuzz/corpus-min/pdb/1alx_part.pdb create mode 120000 fuzz/corpus-min/pdb/1ubq.pdb create mode 120000 fuzz/corpus-min/pdb/3cye_part.pdb create mode 100644 fuzz/corpus-min/pdb/dummy-mdl.pdb create mode 120000 fuzz/corpus-min/pdb/dummy.pdb create mode 120000 fuzz/corpus-min/pdb/gh-358.pdb create mode 120000 fuzz/corpus-min/pdb/gh-367.pdb create mode 120000 fuzz/corpus-min/pdb/invalid.pdb create mode 100644 fuzz/corpus-min/pdb/semanticerr.pdb create mode 100644 fuzz/corpus-min/pdb/syntaxerr.pdb create mode 100644 fuzz/corpus-min/sdf/alanine.sdf create mode 100644 fuzz/corpus-min/sdf/cont.sdf create mode 100644 fuzz/corpus-min/sdf/cont2.sdf create mode 100644 fuzz/corpus-min/sdf/errors.sdf create mode 100644 fuzz/corpus-min/sdf/histidine.sdf create mode 100644 fuzz/corpus-min/sdf/histidine2.sdf create mode 100644 fuzz/corpus-min/sdf/histidine3.sdf create mode 100644 fuzz/corpus-min/sdf/histidine4.sdf create mode 100644 fuzz/corpus-min/sdf/hydrogens.sdf create mode 100644 fuzz/corpus-min/sdf/trp.sdf create mode 100644 fuzz/corpus-min/sdf/trp2.sdf create mode 100644 fuzz/corpus-min/sdf/warn.sdf create mode 100644 fuzz/corpus-min/sdf/warn2.sdf create mode 100644 fuzz/corpus-min/sdf/warnrem.sdf create mode 100644 fuzz/corpus-min/smi/aromatic.smi create mode 100644 fuzz/corpus-min/smi/atomclass.smi create mode 100644 fuzz/corpus-min/smi/bonds.smi create mode 100644 fuzz/corpus-min/smi/branch.smi create mode 100644 fuzz/corpus-min/smi/chirality-invalid.smi create mode 100644 fuzz/corpus-min/smi/chirality.smi create mode 100644 fuzz/corpus-min/smi/dotbond.smi create mode 100644 fuzz/corpus-min/smi/enamine-real.smi create mode 100644 fuzz/corpus-min/smi/geometry.smi create mode 100644 fuzz/corpus-min/smi/hydrogens.smi create mode 100644 fuzz/corpus-min/smi/invalid-config.smi create mode 100644 fuzz/corpus-min/smi/isotope.smi create mode 100644 fuzz/corpus-min/smi/rings.smi create mode 100644 fuzz/corpus-min/smi/single-charge.smi create mode 100644 fuzz/corpus-min/smi/single-heavy.smi create mode 100644 fuzz/corpus-min/smi/single.smi create mode 100644 fuzz/corpus-min/smi/wildcard.smi diff --git a/fuzz/corpus-min/cif/1a8o.cif b/fuzz/corpus-min/cif/1a8o.cif new file mode 120000 index 00000000..fd7343c8 --- /dev/null +++ b/fuzz/corpus-min/cif/1a8o.cif @@ -0,0 +1 @@ +../../../test/test_data/1a8o.cif \ No newline at end of file diff --git a/fuzz/corpus-min/cif/components_stdres.cif b/fuzz/corpus-min/cif/components_stdres.cif new file mode 120000 index 00000000..be2d5a09 --- /dev/null +++ b/fuzz/corpus-min/cif/components_stdres.cif @@ -0,0 +1 @@ +../../../test/test_data/components_stdres.cif \ No newline at end of file diff --git a/fuzz/corpus-min/cif/line_cont.cif b/fuzz/corpus-min/cif/line_cont.cif new file mode 100644 index 00000000..c8496479 --- /dev/null +++ b/fuzz/corpus-min/cif/line_cont.cif @@ -0,0 +1,27 @@ +data_contin +_test1 +;C:\\foldername\\filename +; +_test2 +;\\ +C:\\foldername\\filename +; +_test3 + +;\\ +C:\\foldername\\file\\ +name +; +_test4 +; +C:\\foldername\\file\\ +name +; +_test5 +;\\ +C:\\foldername\\file\\\\ + +name\\ + + +; diff --git a/fuzz/corpus-min/cif/line_cont_new.cif b/fuzz/corpus-min/cif/line_cont_new.cif new file mode 100644 index 00000000..586ca43a --- /dev/null +++ b/fuzz/corpus-min/cif/line_cont_new.cif @@ -0,0 +1,27 @@ +data_contin +_test1 +;C:\foldername\filename +; +_test2 +;\ +C:\foldername\filename +; +_test3 + +;\ +C:\foldername\file\ +name +; +_test4 +; +C:\foldername\file\ +name +; +_test5 +;\ +C:\foldername\file\\ + +name\ + + +; diff --git a/fuzz/corpus-min/cif/simple_loop.cif b/fuzz/corpus-min/cif/simple_loop.cif new file mode 100644 index 00000000..d01502e1 --- /dev/null +++ b/fuzz/corpus-min/cif/simple_loop.cif @@ -0,0 +1,10 @@ +data_loop +loop_ +_pdbx_audit_revision_item.ordinal +_pdbx_audit_revision_item.revision_ordinal +_pdbx_audit_revision_item.data_content_type +_pdbx_audit_revision_item.item +1 5 'Structure model' '_atom_site.B_iso_or_equiv' +2 5 'Structure model' '_atom_site.Cartn_x' +3 5 'Structure model' '_atom_site.Cartn_y' +4 5 'Structure model' '_atom_site.Cartn_z' diff --git a/fuzz/corpus-min/cif/star_fig1.cif b/fuzz/corpus-min/cif/star_fig1.cif new file mode 100644 index 00000000..586bdaa0 --- /dev/null +++ b/fuzz/corpus-min/cif/star_fig1.cif @@ -0,0 +1,26 @@ +global_ + _compound.trial 4 + _compound.source FDA +data_synthesis + _sample.length 5.84 + _sample.shape 'needle' + _solvent.base Methanol + _sample.orientation '[1,0,2]' +global_ + _experiment.source 'ConvBeamEI' + _experiment.date 2011-06-09 +data_experiment + _images.collected 1289 + _images.refined 894 +save_fragment_1 + _molecular.weight 234 + _bond_length.max 2.7 +save_ +save_fragment_2 + _molecular.weight 23 + _bond_length.max 1.1 + _fragment.parent fragment_1 +save_ +data_publication + _author.details 'A.B. Smith' + _author.laboratory 'LLNL' diff --git a/fuzz/corpus-min/mol2/basic.mol2 b/fuzz/corpus-min/mol2/basic.mol2 new file mode 100644 index 00000000..4a7ef8bf --- /dev/null +++ b/fuzz/corpus-min/mol2/basic.mol2 @@ -0,0 +1,9 @@ +@MOLECULE +methane +1 0 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 C1 -0.0127 1.0858 0.0080 C.3 diff --git a/fuzz/corpus-min/mol2/cba.mol2 b/fuzz/corpus-min/mol2/cba.mol2 new file mode 100644 index 00000000..b9502252 --- /dev/null +++ b/fuzz/corpus-min/mol2/cba.mol2 @@ -0,0 +1,16 @@ +@MOLECULE +carboxylic acid + 4 3 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 C1 -0.0127 1.0858 0.0080 C.3 + 2 C2 -0.7181 1.5718 1.2479 C.2 + 3 O3 -0.8566 2.8886 1.4687 O.3 + 4 O4 -1.1590 0.7762 2.0432 O.2 +@BOND + 1 1 2 1 + 2 2 3 1 + 3 2 4 2 diff --git a/fuzz/corpus-min/mol2/cba2.mol2 b/fuzz/corpus-min/mol2/cba2.mol2 new file mode 100644 index 00000000..c7831f8f --- /dev/null +++ b/fuzz/corpus-min/mol2/cba2.mol2 @@ -0,0 +1,15 @@ +@MOLECULE +carboxylic acid + 4 3 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 C 0.0000 0.0000 0.0000 C.3 1 UNL1 0.0331 + 2 C 0.0000 0.0000 0.0000 C.2 1 UNL1 0.3016 + 3 O 0.0000 0.0000 0.0000 O.3 1 UNL1 -0.4808 + 4 O 0.0000 0.0000 0.0000 O.2 1 UNL1 -0.2513 +@BOND + 1 1 2 1 + 2 2 3 1 + 3 2 4 2 diff --git a/fuzz/corpus-min/mol2/cba3.mol2 b/fuzz/corpus-min/mol2/cba3.mol2 new file mode 100644 index 00000000..f2ac5985 --- /dev/null +++ b/fuzz/corpus-min/mol2/cba3.mol2 @@ -0,0 +1,16 @@ +@MOLECULE +carboxylate + 4 3 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 C1 -0.0127 1.0858 0.0080 C.3 + 2 C2 -0.7181 1.5718 1.2479 C.2 + 3 O3 -0.0841 1.7780 2.2687 O.co2 + 4 O4 -1.9227 1.7588 1.2302 O.co2 +@BOND + 1 1 2 1 + 2 2 3 ar + 3 2 4 ar diff --git a/fuzz/corpus-min/mol2/cba4.mol2 b/fuzz/corpus-min/mol2/cba4.mol2 new file mode 100644 index 00000000..594b57aa --- /dev/null +++ b/fuzz/corpus-min/mol2/cba4.mol2 @@ -0,0 +1,15 @@ +@MOLECULE +carboxylate + 4 3 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 C 0.0000 0.0000 0.0000 C.3 1 UNL1 0.1258 + 2 C 0.0000 0.0000 0.0000 C.2 1 UNL1 0.3654 + 3 O 0.0000 0.0000 0.0000 O.co2 1 UNL1 -0.2456 + 4 O 0.0000 0.0000 0.0000 O.co2 1 UNL1 -0.2456 +@BOND + 1 1 2 1 + 2 2 3 ar + 3 2 4 ar diff --git a/fuzz/corpus-min/mol2/charged.mol2 b/fuzz/corpus-min/mol2/charged.mol2 new file mode 100644 index 00000000..33671093 --- /dev/null +++ b/fuzz/corpus-min/mol2/charged.mol2 @@ -0,0 +1,17 @@ +@MOLECULE +quaternary ammonium salt + 5 4 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 C 0.0000 0.0000 0.0000 C.3 1 UNL1 0.1712 + 2 N 0.0000 0.0000 0.0000 N.4 1 UNL1 0.3151 + 3 C 0.0000 0.0000 0.0000 C.3 1 UNL1 0.1712 + 4 C 0.0000 0.0000 0.0000 C.3 1 UNL1 0.1712 + 5 C 0.0000 0.0000 0.0000 C.3 1 UNL1 0.1712 +@BOND + 1 1 2 1 + 2 2 3 1 + 3 2 4 1 + 4 2 5 1 diff --git a/fuzz/corpus-min/mol2/charged2.mol2 b/fuzz/corpus-min/mol2/charged2.mol2 new file mode 100644 index 00000000..2a6fb382 --- /dev/null +++ b/fuzz/corpus-min/mol2/charged2.mol2 @@ -0,0 +1,18 @@ +@MOLECULE +quaternary ammonium salt + 5 4 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 C1 0.0021 -0.0041 0.0020 C.3 + 2 N2 -0.0178 1.4648 0.0101 N.4 + 3 C3 1.3603 1.9732 -0.0003 C.3 + 4 C4 -0.7283 1.9514 -1.1800 C.3 + 5 C5 -0.7054 1.9385 1.2187 C.3 +@BOND + 1 1 2 1 + 2 2 3 1 + 3 2 4 1 + 4 2 5 1 diff --git a/fuzz/corpus-min/mol2/cpm.mol2 b/fuzz/corpus-min/mol2/cpm.mol2 new file mode 100644 index 00000000..a660d2f7 --- /dev/null +++ b/fuzz/corpus-min/mol2/cpm.mol2 @@ -0,0 +1,24 @@ +@MOLECULE +Cyclopentadienyl anion + 5 5 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 -0.2250 + 2 C 0.0000 0.0000 0.0000 C.2 1 UNL1 -0.4635 + 3 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 -0.2250 + 4 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 -0.0433 + 5 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 -0.0433 +@UNITY_ATOM_ATTR +2 1 +charge -1 +@BOND + 1 1 2 ar + 2 2 3 ar + 3 3 4 ar + 4 4 5 ar + 5 1 5 ar +# Name: NoName + +# Program: corina 4.4.0 0026 12.08.2021 diff --git a/fuzz/corpus-min/mol2/cpm2.mol2 b/fuzz/corpus-min/mol2/cpm2.mol2 new file mode 100644 index 00000000..6e3f4f00 --- /dev/null +++ b/fuzz/corpus-min/mol2/cpm2.mol2 @@ -0,0 +1,24 @@ +@MOLECULE +Cyclopentadienyl anion + 5 5 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 C1 1.0980 1.9060 0.0018 C.2 + 2 C2 -0.0126 1.0758 0.0080 C.2 + 3 C4 -1.1453 1.8755 0.0170 C.2 + 4 C5 -0.7347 3.1999 0.0254 C.2 + 5 C6 0.6517 3.2188 0.0126 C.2 +@BOND + 1 1 5 2 + 2 1 2 1 + 3 2 3 1 + 4 3 4 2 + 5 4 5 1 +@UNITY_ATOM_ATTR +2 1 +charge -1 + +# End of record diff --git a/fuzz/corpus-min/mol2/cpm3.mol2 b/fuzz/corpus-min/mol2/cpm3.mol2 new file mode 100644 index 00000000..03b91cfc --- /dev/null +++ b/fuzz/corpus-min/mol2/cpm3.mol2 @@ -0,0 +1,21 @@ +@MOLECULE +Cyclopentadienyl anion + 5 5 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 -0.2250 + 2 C 0.0000 0.0000 0.0000 C.2 1 UNL1 -0.4635 + 3 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 -0.2250 + 4 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 -0.0433 + 5 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 -0.0433 +@BOND + 1 1 2 ar + 2 2 3 ar + 3 3 4 ar + 4 4 5 ar + 5 1 5 ar +# Name: NoName + +# Program: corina 4.4.0 0026 12.08.2021 diff --git a/fuzz/corpus-min/mol2/cpm4.mol2 b/fuzz/corpus-min/mol2/cpm4.mol2 new file mode 100644 index 00000000..bfa3f1d2 --- /dev/null +++ b/fuzz/corpus-min/mol2/cpm4.mol2 @@ -0,0 +1,20 @@ +@MOLECULE +Cyclopentadienyl anion + 5 5 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 C1 1.0980 1.9060 0.0018 C.ar + 2 C2 -0.0126 1.0758 0.0080 C.ar + 3 C4 -1.1453 1.8755 0.0170 C.ar + 4 C5 -0.7347 3.1999 0.0254 C.ar + 5 C6 0.6517 3.2188 0.0126 C.ar +@BOND + 1 1 5 2 + 2 1 2 1 + 3 2 3 1 + 4 3 4 2 + 5 4 5 1 +# End of record diff --git a/fuzz/corpus-min/mol2/extraprop.mol2 b/fuzz/corpus-min/mol2/extraprop.mol2 new file mode 100644 index 00000000..495e9563 --- /dev/null +++ b/fuzz/corpus-min/mol2/extraprop.mol2 @@ -0,0 +1,12 @@ +@MOLECULE +**** + 1 0 0 0 0 +SMALL +GASTEIGER +**** + +@ATOM + 1 N 0.0000 0.0000 0.0000 N.4 1 UNL1 1.0000 +@UNITY_ATOM_ATTR +1 1 +test prop diff --git a/fuzz/corpus-min/mol2/guanidine.mol2 b/fuzz/corpus-min/mol2/guanidine.mol2 new file mode 100644 index 00000000..53b3fc75 --- /dev/null +++ b/fuzz/corpus-min/mol2/guanidine.mol2 @@ -0,0 +1,24 @@ +@MOLECULE +guadinium-like + 7 6 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 N 0.0000 0.0000 0.0000 N.pl3 1 UNL1 0.1360 + 2 C 0.0000 0.0000 0.0000 C.cat 1 UNL1 0.5446 + 3 N 0.0000 0.0000 0.0000 N.pl3 1 UNL1 0.0168 + 4 C 0.0000 0.0000 0.0000 C.cat 1 UNL1 0.5446 + 5 N 0.0000 0.0000 0.0000 N.pl3 1 UNL1 0.1360 + 6 N 0.0000 0.0000 0.0000 N.pl3 1 UNL1 0.1360 + 7 N 0.0000 0.0000 0.0000 N.pl3 1 UNL1 0.1360 +@BOND + 1 1 2 1 + 2 2 3 1 + 3 3 4 1 + 4 4 5 1 + 5 4 6 2 + 6 2 7 2 +# Name: NoName + +# Program: corina 4.4.0 0026 12.08.2021 diff --git a/fuzz/corpus-min/mol2/guanidine2.mol2 b/fuzz/corpus-min/mol2/guanidine2.mol2 new file mode 100644 index 00000000..b9614628 --- /dev/null +++ b/fuzz/corpus-min/mol2/guanidine2.mol2 @@ -0,0 +1,27 @@ +@MOLECULE +guadinium-like + 7 6 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 N1 1.1391 3.0624 -0.0827 N.pl3 + 2 C2 -0.0145 3.6922 0.1261 C.cat + 3 N3 -0.8308 3.3054 1.1618 N.pl3 + 4 C4 -0.3907 2.3758 2.0732 C.cat + 5 N5 -1.2588 1.7768 2.8847 N.pl3 + 6 N6 0.9036 2.0745 2.1443 N.pl3 + 7 N9 -0.3776 4.6964 -0.6680 N.pl3 +@BOND + 1 1 2 ar + 2 2 3 ar + 3 2 7 ar + 4 3 4 ar + 5 4 5 ar + 6 4 6 ar + +# End of record +# Name: NoName + +# Program: corina 4.4.0 0026 12.08.2021 diff --git a/fuzz/corpus-min/mol2/guanidine3.mol2 b/fuzz/corpus-min/mol2/guanidine3.mol2 new file mode 100644 index 00000000..a212b925 --- /dev/null +++ b/fuzz/corpus-min/mol2/guanidine3.mol2 @@ -0,0 +1,18 @@ +@MOLECULE +guadinium + 4 3 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 N1 -0.0111 0.9658 0.0074 N.pl3 + 2 C2 -1.1814 1.6205 0.0165 C.cat + 3 N3 -2.3336 0.9343 0.0182 N.pl3 + 4 N4 -1.1996 2.9614 0.0238 N.pl3 +@BOND + 1 1 2 1 + 2 2 3 1 + 3 2 4 1 + +# End of record diff --git a/fuzz/corpus-min/mol2/imidazole.mol2 b/fuzz/corpus-min/mol2/imidazole.mol2 new file mode 100644 index 00000000..e37a3a15 --- /dev/null +++ b/fuzz/corpus-min/mol2/imidazole.mol2 @@ -0,0 +1,25 @@ +# Program: corina 4.4.0 0026 12.08.2021 + +@MOLECULE +imidazole + 5 5 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 N1 0.0021 -0.0041 0.0020 N.pl3 + 2 C3 -0.0165 1.3646 0.0095 C.2 + 3 C4 1.2671 1.7717 -0.0005 C.2 + 4 N5 2.0482 0.6814 -0.0138 N.2 + 5 C6 1.2973 -0.3859 -0.0124 C.2 +@BOND + 1 1 5 1 + 2 1 2 1 + 3 2 3 2 + 4 3 4 1 + 5 4 5 2 +@UNITY_ATOM_ATTR +1 1 +charge 0 +# End of record diff --git a/fuzz/corpus-min/mol2/imidazole2.mol2 b/fuzz/corpus-min/mol2/imidazole2.mol2 new file mode 100644 index 00000000..31bc8611 --- /dev/null +++ b/fuzz/corpus-min/mol2/imidazole2.mol2 @@ -0,0 +1,22 @@ + +@MOLECULE +imidazole + 5 5 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 N 0.0000 0.0000 0.0000 N.ar 1 UNL1 -0.2208 + 2 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.1213 + 3 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.1213 + 4 N 0.0000 0.0000 0.0000 N.ar 1 UNL1 -0.2208 + 5 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.1990 +@BOND + 1 1 2 ar + 2 2 3 ar + 3 3 4 ar + 4 4 5 ar + 5 1 5 ar +@UNITY_ATOM_ATTR +1 1 +charge 0 diff --git a/fuzz/corpus-min/mol2/imidazole3.mol2 b/fuzz/corpus-min/mol2/imidazole3.mol2 new file mode 100644 index 00000000..39499576 --- /dev/null +++ b/fuzz/corpus-min/mol2/imidazole3.mol2 @@ -0,0 +1,22 @@ +# Program: corina 4.4.0 0026 12.08.2021 + +@MOLECULE +imidazole + 5 5 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 N1 0.0021 -0.0041 0.0020 N.pl3 + 2 C3 -0.0165 1.3646 0.0095 C.2 + 3 C4 1.2671 1.7717 -0.0005 C.2 + 4 N5 2.0482 0.6814 -0.0138 N.2 + 5 C6 1.2973 -0.3859 -0.0124 C.2 +@BOND + 1 1 5 1 + 2 1 2 1 + 3 2 3 2 + 4 3 4 1 + 5 4 5 2 +# End of record diff --git a/fuzz/corpus-min/mol2/imidazole4.mol2 b/fuzz/corpus-min/mol2/imidazole4.mol2 new file mode 100644 index 00000000..c27cbbff --- /dev/null +++ b/fuzz/corpus-min/mol2/imidazole4.mol2 @@ -0,0 +1,19 @@ + +@MOLECULE +imidazole + 5 5 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 N 0.0000 0.0000 0.0000 N.ar 1 UNL1 -0.2208 + 2 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.1213 + 3 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.1213 + 4 N 0.0000 0.0000 0.0000 N.ar 1 UNL1 -0.2208 + 5 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.1990 +@BOND + 1 1 2 ar + 2 2 3 ar + 3 3 4 ar + 4 4 5 ar + 5 1 5 ar diff --git a/fuzz/corpus-min/mol2/indole.mol2 b/fuzz/corpus-min/mol2/indole.mol2 new file mode 100644 index 00000000..b34c7721 --- /dev/null +++ b/fuzz/corpus-min/mol2/indole.mol2 @@ -0,0 +1,27 @@ +@MOLECULE +indole + 9 10 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0192 + 2 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0015 + 3 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0001 + 4 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0015 + 5 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0191 + 6 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0814 + 7 N 0.0000 0.0000 0.0000 N.ar 1 UNL1 -0.2438 + 8 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0989 + 9 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0221 +@BOND + 1 1 2 ar + 2 2 3 ar + 3 3 4 ar + 4 4 5 ar + 5 5 6 ar + 6 1 6 ar + 7 6 7 ar + 8 7 8 ar + 9 8 9 ar + 10 1 9 ar diff --git a/fuzz/corpus-min/mol2/indole2.mol2 b/fuzz/corpus-min/mol2/indole2.mol2 new file mode 100644 index 00000000..5b169cad --- /dev/null +++ b/fuzz/corpus-min/mol2/indole2.mol2 @@ -0,0 +1,30 @@ +@MOLECULE +indole + 9 10 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 C1 -0.6876 3.2303 0.0251 C.ar + 2 C2 -1.3581 4.4545 0.0376 C.ar + 3 C3 -0.6436 5.6195 0.0369 C.ar + 4 C4 0.7440 5.5954 0.0233 C.ar + 5 C5 1.4261 4.3982 0.0109 C.ar + 6 C6 0.7191 3.2004 0.0119 C.ar + 7 N7 1.0971 1.8764 0.0017 N.pl3 + 8 C8 -0.0126 1.0758 0.0080 C.2 + 9 C9 -1.1221 1.8313 0.0168 C.2 +@BOND + 1 1 6 ar + 2 1 9 1 + 3 1 2 ar + 4 2 3 ar + 5 3 4 ar + 6 4 5 ar + 7 5 6 ar + 8 6 7 1 + 9 7 8 1 + 10 8 9 2 + +# End of record diff --git a/fuzz/corpus-min/mol2/malformed.mol2 b/fuzz/corpus-min/mol2/malformed.mol2 new file mode 100644 index 00000000..837d49d0 --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed.mol2 @@ -0,0 +1 @@ +@MOLECULE diff --git a/fuzz/corpus-min/mol2/malformed10.mol2 b/fuzz/corpus-min/mol2/malformed10.mol2 new file mode 100644 index 00000000..b9e3705a --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed10.mol2 @@ -0,0 +1,12 @@ +@MOLECULE +***** + 1 0 0 0 0 +SMALL +GASTEIGER + +@UNITY_ATOM_ATTR +1 1 +charge 1 +@BOND +@ATOM + 1 N 0.0000 0.0000 0.0000 N.4 1 UNL1 1.0000 diff --git a/fuzz/corpus-min/mol2/malformed11.mol2 b/fuzz/corpus-min/mol2/malformed11.mol2 new file mode 100644 index 00000000..7df27c80 --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed11.mol2 @@ -0,0 +1,12 @@ +@MOLECULE +***** + 1 0 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 N 0.0000 0.0000 0.0000 N.4 1 UNL1 1.0000 +@BOND +@UNITY_ATOM_ATTR +1 error +charge 1 diff --git a/fuzz/corpus-min/mol2/malformed12.mol2 b/fuzz/corpus-min/mol2/malformed12.mol2 new file mode 100644 index 00000000..296f37e9 --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed12.mol2 @@ -0,0 +1,12 @@ +@MOLECULE +***** + 1 0 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 N 0.0000 0.0000 0.0000 N.4 1 UNL1 1.0000 +@BOND +@UNITY_ATOM_ATTR +2 1 +charge 1 diff --git a/fuzz/corpus-min/mol2/malformed2.mol2 b/fuzz/corpus-min/mol2/malformed2.mol2 new file mode 100644 index 00000000..b56a505f --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed2.mol2 @@ -0,0 +1,2 @@ +@MOLECULE +empty error diff --git a/fuzz/corpus-min/mol2/malformed3.mol2 b/fuzz/corpus-min/mol2/malformed3.mol2 new file mode 100644 index 00000000..76ee1791 --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed3.mol2 @@ -0,0 +1,3 @@ +@MOLECULE +****** +a b c d diff --git a/fuzz/corpus-min/mol2/malformed4.mol2 b/fuzz/corpus-min/mol2/malformed4.mol2 new file mode 100644 index 00000000..36f5c6b1 --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed4.mol2 @@ -0,0 +1,3 @@ +@MOLECULE +@BOND + 1 1 2 1 diff --git a/fuzz/corpus-min/mol2/malformed5.mol2 b/fuzz/corpus-min/mol2/malformed5.mol2 new file mode 100644 index 00000000..995acb6c --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed5.mol2 @@ -0,0 +1,10 @@ +@MOLECULE +***** + 1 0 0 0 0 +SMALL +GASTEIGER + + +@ATOM + 1 N a 0.0000 0.0000 N.4 1 UNL1 1.0000 +@BOND diff --git a/fuzz/corpus-min/mol2/malformed6.mol2 b/fuzz/corpus-min/mol2/malformed6.mol2 new file mode 100644 index 00000000..e2d28645 --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed6.mol2 @@ -0,0 +1,12 @@ +@MOLECULE +***** + 1 0 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 N 0 0.0000 0.0000 N.3 + 2 N 0 0.0000 0.0000 N.3 +@BOND + 1 1 2 error diff --git a/fuzz/corpus-min/mol2/malformed7.mol2 b/fuzz/corpus-min/mol2/malformed7.mol2 new file mode 100644 index 00000000..87bafc33 --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed7.mol2 @@ -0,0 +1,11 @@ +@MOLECULE +***** + 1 1 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 N 0 0.0000 0.0000 N.3 +@BOND + 1 1 1 1 diff --git a/fuzz/corpus-min/mol2/malformed8.mol2 b/fuzz/corpus-min/mol2/malformed8.mol2 new file mode 100644 index 00000000..999760e1 --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed8.mol2 @@ -0,0 +1,13 @@ +@MOLECULE +***** + 1 0 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 N 0 0.0000 0.0000 N.3 + 2 N 0 0.0000 0.0000 N.3 +@BOND + 1 1 2 1 + 2 2 1 1 diff --git a/fuzz/corpus-min/mol2/malformed9.mol2 b/fuzz/corpus-min/mol2/malformed9.mol2 new file mode 100644 index 00000000..50d7f807 --- /dev/null +++ b/fuzz/corpus-min/mol2/malformed9.mol2 @@ -0,0 +1,8 @@ +@MOLECULE +corina - carboxylic acid + 4 3 0 0 0 +SMALL +NO_CHARGES + + + diff --git a/fuzz/corpus-min/mol2/nitrobenzene.mol2 b/fuzz/corpus-min/mol2/nitrobenzene.mol2 new file mode 100644 index 00000000..61043d9c --- /dev/null +++ b/fuzz/corpus-min/mol2/nitrobenzene.mol2 @@ -0,0 +1,29 @@ +@MOLECULE +nitrobenzene + 9 9 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 O 0.0000 0.0000 0.0000 O.2 1 UNL1 0.0415 + 2 N 0.0000 0.0000 0.0000 N.pl3 1 UNL1 0.0809 + 3 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.2901 + 4 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0753 + 5 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0063 + 6 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0004 + 7 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0063 + 8 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0753 + 9 O 0.0000 0.0000 0.0000 O.co2 1 UNL1 -0.5760 +@BOND + 1 1 2 2 + 2 2 3 1 + 3 3 4 ar + 4 4 5 ar + 5 5 6 ar + 6 6 7 ar + 7 7 8 ar + 8 3 8 ar + 9 2 9 1 +# Name: NoName + +# Program: corina 4.4.0 0026 12.08.2021 diff --git a/fuzz/corpus-min/mol2/nitrobenzene2.mol2 b/fuzz/corpus-min/mol2/nitrobenzene2.mol2 new file mode 100644 index 00000000..9fe8d6ed --- /dev/null +++ b/fuzz/corpus-min/mol2/nitrobenzene2.mol2 @@ -0,0 +1,29 @@ +@MOLECULE +nitrobenzene + 9 9 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 O1 2.4833 -0.1572 -0.0217 O.2 + 2 N2 2.4668 1.0606 -0.0154 N.pl3 + 3 C3 1.1750 1.7832 0.0004 C.ar + 4 C4 -0.0126 1.0758 0.0080 C.ar + 5 C5 -1.2190 1.7506 0.0173 C.ar + 6 C6 -1.2377 3.1328 0.0290 C.ar + 7 C7 -0.0501 3.8402 0.0223 C.ar + 8 C8 1.1563 3.1654 0.0081 C.ar + 9 O9 3.5132 1.6839 -0.0220 O.2 +@BOND + 1 1 2 ar + 2 2 3 1 + 3 2 9 ar + 4 3 8 ar + 5 3 4 ar + 6 4 5 ar + 7 5 6 ar + 8 6 7 ar + 9 7 8 ar + +# End of record diff --git a/fuzz/corpus-min/mol2/sf6.mol2 b/fuzz/corpus-min/mol2/sf6.mol2 new file mode 100644 index 00000000..e0852772 --- /dev/null +++ b/fuzz/corpus-min/mol2/sf6.mol2 @@ -0,0 +1,24 @@ +@MOLECULE +sf6 + 7 6 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 F 0.0000 0.0000 0.0000 F 1 UNL1 -0.0722 + 2 S 0.0000 0.0000 0.0000 S.3 1 UNL1 0.4335 + 3 F 0.0000 0.0000 0.0000 F 1 UNL1 -0.0722 + 4 F 0.0000 0.0000 0.0000 F 1 UNL1 -0.0722 + 5 F 0.0000 0.0000 0.0000 F 1 UNL1 -0.0722 + 6 F 0.0000 0.0000 0.0000 F 1 UNL1 -0.0722 + 7 F 0.0000 0.0000 0.0000 F 1 UNL1 -0.0722 +@BOND + 1 1 2 1 + 2 2 3 1 + 3 2 4 1 + 4 2 5 1 + 5 2 6 1 + 6 2 7 1 +# Name: NoName + +# Program: corina 4.4.0 0026 12.08.2021 diff --git a/fuzz/corpus-min/mol2/sf62.mol2 b/fuzz/corpus-min/mol2/sf62.mol2 new file mode 100644 index 00000000..d0e82c78 --- /dev/null +++ b/fuzz/corpus-min/mol2/sf62.mol2 @@ -0,0 +1,27 @@ +@MOLECULE +sf6 + 7 6 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 F1 0.0021 -0.0041 0.0020 F + 2 S2 -0.0198 1.6058 0.0109 S.oh + 3 F3 -0.0416 3.2156 0.0197 F + 4 F4 1.5900 1.6277 -0.0044 F + 5 F5 -1.6295 1.5838 0.0261 F + 6 F6 -0.0351 1.6144 -1.5990 F + 7 F7 -0.0044 1.5971 1.6208 F +@UNITY_ATOM_ATTR +2 1 +charge 0 +@BOND + 1 1 2 1 + 2 2 3 1 + 3 2 4 1 + 4 2 5 1 + 5 2 6 1 + 6 2 7 1 + +# End of record diff --git a/fuzz/corpus-min/mol2/substr.mol2 b/fuzz/corpus-min/mol2/substr.mol2 new file mode 100644 index 00000000..ec7883eb --- /dev/null +++ b/fuzz/corpus-min/mol2/substr.mol2 @@ -0,0 +1,102 @@ +@MOLECULE +7yoo-cut +44 44 4 0 0 +SMALL +USER_CHARGES + + +@ATOM + 1 N 187.2360 135.0290 183.1390 N.am 1 ARG3 -0.3024 + 2 CA 186.8300 135.1630 181.7490 C.3 1 ARG3 0.0995 + 3 C 186.0740 136.4690 181.5650 C.2 1 ARG3 0.2339 + 4 O 185.2830 136.8650 182.4260 O.2 1 ARG3 -0.2738 + 5 CB 185.9560 133.9820 181.3090 C.3 1 ARG3 -0.0243 + 6 CG 185.7360 133.8940 179.8110 C.3 1 ARG3 -0.0305 + 7 CD 184.5070 133.0640 179.4850 C.3 1 ARG3 0.0512 + 8 NE 184.0100 133.3320 178.1420 N.2 1 ARG3 -0.2178 + 9 CZ 182.8960 132.8180 177.6400 C.cat 1 ARG3 0.1058 + 10 NH1 182.1330 131.9990 178.3450 N.2 1 ARG3 -0.2337 + 11 NH2 182.5370 133.1350 176.3990 N.2 1 ARG3 -0.2337 + 12 N 186.3220 137.1350 180.4400 N.am 2 GLN4 -0.3025 + 13 CA 185.6800 138.3980 180.1070 C.3 2 GLN4 0.0999 + 14 C 185.0270 138.2790 178.7360 C.2 2 GLN4 0.2340 + 15 O 185.1500 137.2600 178.0500 O.2 2 GLN4 -0.2738 + 16 CB 186.6840 139.5570 180.1350 C.3 2 GLN4 -0.0177 + 17 CG 187.7500 139.4280 181.2050 C.3 2 GLN4 0.0259 + 18 CD 188.8590 140.4420 181.0420 C.2 2 GLN4 0.2106 + 19 OE1 188.6130 141.5970 180.6960 O.2 2 GLN4 -0.2760 + 20 NE2 190.0910 140.0150 181.2890 N.am 2 GLN4 -0.3293 + 21 N 184.3260 139.3340 178.3350 N.am 3 ARG5 -0.3025 + 22 CA 183.6250 139.3410 177.0590 C.3 3 ARG5 0.0995 + 23 C 184.0570 140.5160 176.1890 C.2 3 ARG5 0.2340 + 24 O 184.1980 140.3800 174.9740 O.2 3 ARG5 -0.2738 + 25 CB 182.1130 139.3800 177.2810 C.3 3 ARG5 -0.0243 + 26 CG 181.3190 138.5900 176.2570 C.3 3 ARG5 -0.0305 + 27 CD 179.8770 138.4090 176.6950 C.3 3 ARG5 0.0512 + 28 NE 179.6300 137.0830 177.2500 N.2 3 ARG5 -0.2178 + 29 CZ 179.5300 135.9740 176.5300 C.cat 3 ARG5 0.1058 + 30 NH1 179.6460 135.9920 175.2120 N.2 3 ARG5 -0.2337 + 31 NH2 179.3040 134.8190 177.1470 N.2 3 ARG5 -0.2337 + 32 N 184.2650 141.6700 176.8150 N.am 4 TYC6 -0.3022 + 33 CA 184.6950 142.8550 176.0950 C.3 4 TYC6 0.1031 + 34 C 185.9800 143.4000 176.7080 C.2 4 TYC6 0.2311 + 35 O 186.7410 142.6660 177.2410 O.2 4 TYC6 -0.2740 + 36 CB 183.5930 143.9090 176.0940 C.3 4 TYC6 -0.0007 + 37 CG 182.3450 143.4670 175.3360 C.ar 4 TYC6 -0.0449 + 38 CD1 181.2290 143.0390 176.0350 C.ar 4 TYC6 -0.0551 + 39 CD2 182.3300 143.4910 173.9530 C.ar 4 TYC6 -0.0551 + 40 CE1 180.0950 142.6360 175.3490 C.ar 4 TYC6 -0.0199 + 41 CE2 181.1970 143.0870 173.2680 C.ar 4 TYC6 -0.0199 + 42 OH 178.9350 142.2540 173.2750 O.3 4 TYC6 -0.5068 + 43 CZ 180.0800 142.6610 173.9660 C.ar 4 TYC6 0.1169 + 44 NXT 186.2700 144.8190 176.6290 N.am 4 TYC6 -0.3278 +@BOND + 1 23 22 1 + 2 23 24 2 + 3 23 32 am + 4 34 33 1 + 5 34 35 2 + 6 34 44 am + 7 33 32 1 + 8 33 36 1 + 9 36 37 1 + 10 38 37 ar + 11 38 40 ar + 12 39 37 ar + 13 39 41 ar + 14 40 43 ar + 15 41 43 ar + 16 43 42 1 + 17 1 2 1 + 18 2 3 1 + 19 2 5 1 + 20 3 4 2 + 21 5 6 1 + 22 6 7 1 + 23 7 8 1 + 24 8 9 1 + 25 9 10 1 + 26 9 11 1 + 27 12 13 1 + 28 13 16 1 + 29 13 14 1 + 30 14 15 2 + 31 16 17 1 + 32 17 18 1 + 33 18 19 2 + 34 18 20 am + 35 3 12 am + 36 21 22 1 + 37 22 25 1 + 38 25 26 1 + 39 26 27 1 + 40 27 28 1 + 41 28 29 1 + 42 29 30 1 + 43 29 31 1 + 44 14 21 am +@SUBSTRUCTURE + 1 ARG3 2 RESIDUE 4 A ARG3 1 ROOT + 2 GLN4 13 RESIDUE 4 A GLN4 2 + 3 ARG5 22 RESIDUE 4 A ARG5 2 + 4 TYC6 33 RESIDUE 4 A TYC6 1 diff --git a/fuzz/corpus-min/mol2/thiazole.mol2 b/fuzz/corpus-min/mol2/thiazole.mol2 new file mode 100644 index 00000000..435c1932 --- /dev/null +++ b/fuzz/corpus-min/mol2/thiazole.mol2 @@ -0,0 +1,34 @@ +@MOLECULE +Z337709406 +11 12 1 0 0 +SMALL +AMBER ff14SB + + +@ATOM + 1 N -0.9225 6.1660 2.9696 N.pl3 1 UNK0 -0.3375 + 2 C -0.8738 5.1881 2.0021 C.ar 1 UNK0 0.1550 + 3 N -0.8295 3.9080 2.2425 N.ar 1 UNK0 -0.2302 + 4 C -0.7861 3.0943 1.2197 C.ar 1 UNK0 0.0608 + 5 C -0.7219 1.5760 1.2745 C.3 1 UNK0 -0.0086 + 6 C -0.0127 1.0858 0.0080 C.3 1 UNK0 -0.0404 + 7 C -0.7443 1.5884 -1.2367 C.3 1 UNK0 0.0118 + 8 C -0.7689 3.1007 -1.2410 C.2 1 UNK0 0.1710 + 9 O -0.7601 3.7258 -2.2829 O.2 1 UNK0 -0.2935 + 10 C -0.8018 3.7604 0.0037 C.ar 1 UNK0 0.0796 + 11 S -0.8636 5.4845 0.3181 S.2 1 UNK0 -0.0491 +@BOND + 1 1 2 1 + 2 2 3 ar + 3 2 11 ar + 4 3 4 ar + 5 4 5 1 + 6 4 10 ar + 7 5 6 1 + 8 6 7 1 + 9 7 8 1 + 10 8 9 2 + 11 8 10 1 + 12 10 11 ar +@SUBSTRUCTURE + 1 UNK0 1 RESIDUE 4 A UNK 0 ROOT diff --git a/fuzz/corpus-min/mol2/thiazole2.mol2 b/fuzz/corpus-min/mol2/thiazole2.mol2 new file mode 100644 index 00000000..31fdf649 --- /dev/null +++ b/fuzz/corpus-min/mol2/thiazole2.mol2 @@ -0,0 +1,50 @@ +@MOLECULE +Z337709406 +19 20 1 0 0 +SMALL +AMBER ff14SB + + +@ATOM + 1 N -0.9225 6.1660 2.9696 N.pl3 1 UNK0 -0.3375 + 2 C -0.8738 5.1881 2.0021 C.ar 1 UNK0 0.1550 + 3 N -0.8295 3.9080 2.2425 N.ar 1 UNK0 -0.2302 + 4 C -0.7861 3.0943 1.2197 C.ar 1 UNK0 0.0608 + 5 C -0.7219 1.5760 1.2745 C.3 1 UNK0 -0.0086 + 6 C -0.0127 1.0858 0.0080 C.3 1 UNK0 -0.0404 + 7 C -0.7443 1.5884 -1.2367 C.3 1 UNK0 0.0118 + 8 C -0.7689 3.1007 -1.2410 C.2 1 UNK0 0.1710 + 9 O -0.7601 3.7258 -2.2829 O.2 1 UNK0 -0.2935 + 10 C -0.8018 3.7604 0.0037 C.ar 1 UNK0 0.0796 + 11 S -0.8636 5.4845 0.3181 S.2 1 UNK0 -0.0491 + 12 HN1 -0.9255 5.9101 3.9466 H 1 UNK0 0.1447 + 13 HN2 -0.9553 7.1395 2.7025 H 1 UNK0 0.1447 + 14 HC2 -0.1637 1.2611 2.1562 H 1 UNK0 0.0333 + 15 HC3 -1.7313 1.1664 1.3127 H 1 UNK0 0.0333 + 16 HC4 0.0002 -0.0041 0.0020 H 1 UNK0 0.0275 + 17 HC5 1.0114 1.4591 0.0002 H 1 UNK0 0.0275 + 18 HC6 -0.2279 1.2325 -2.1282 H 1 UNK0 0.0351 + 19 HC7 -1.7663 1.2093 -1.2342 H 1 UNK0 0.0351 +@BOND + 1 1 2 1 + 2 2 3 ar + 3 2 11 ar + 4 3 4 ar + 5 4 5 1 + 6 4 10 ar + 7 5 6 1 + 8 6 7 1 + 9 7 8 1 + 10 8 9 2 + 11 8 10 1 + 12 10 11 ar + 13 12 1 1 + 14 13 1 1 + 15 14 5 1 + 16 15 5 1 + 17 16 6 1 + 18 17 6 1 + 19 18 7 1 + 20 19 7 1 +@SUBSTRUCTURE + 1 UNK0 1 RESIDUE 4 A UNK 0 ROOT diff --git a/fuzz/corpus-min/mol2/tropylium.mol2 b/fuzz/corpus-min/mol2/tropylium.mol2 new file mode 100644 index 00000000..f08b1550 --- /dev/null +++ b/fuzz/corpus-min/mol2/tropylium.mol2 @@ -0,0 +1,25 @@ +@MOLECULE +Tropylium cation + 7 7 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.2549 + 2 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0555 + 3 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0045 + 4 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0045 + 5 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0555 + 6 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.2549 + 7 C 0.0000 0.0000 0.0000 C.cat 1 UNL1 0.3702 +@UNITY_ATOM_ATTR +7 1 +charge 1 +@BOND + 1 1 2 ar + 2 2 3 ar + 3 3 4 ar + 4 4 5 ar + 5 5 6 ar + 6 6 7 ar + 7 1 7 ar diff --git a/fuzz/corpus-min/mol2/tropylium2.mol2 b/fuzz/corpus-min/mol2/tropylium2.mol2 new file mode 100644 index 00000000..dd1f44e8 --- /dev/null +++ b/fuzz/corpus-min/mol2/tropylium2.mol2 @@ -0,0 +1,26 @@ +@MOLECULE +Tropylium cation + 7 7 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 C1 -0.0167 1.3835 0.0096 C.2 + 2 C2 1.0564 2.2634 0.0041 C.2 + 3 C3 2.4133 1.9731 -0.0095 C.2 + 4 C4 3.0323 0.7311 -0.0219 C.2 + 5 C5 2.4472 -0.5273 -0.0233 C.2 + 6 C6 1.0986 -0.8545 -0.0126 C.2 + 7 C7 0.0021 -0.0041 0.0020 C.cat +@UNITY_ATOM_ATTR +7 1 +charge 1 +@BOND + 1 1 7 1 + 2 1 2 2 + 3 2 3 1 + 4 3 4 2 + 5 4 5 1 + 6 5 6 2 + 7 6 7 1 diff --git a/fuzz/corpus-min/mol2/tropylium3.mol2 b/fuzz/corpus-min/mol2/tropylium3.mol2 new file mode 100644 index 00000000..90147170 --- /dev/null +++ b/fuzz/corpus-min/mol2/tropylium3.mol2 @@ -0,0 +1,22 @@ +@MOLECULE +Tropylium cation + 7 7 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.2549 + 2 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0555 + 3 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0045 + 4 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0045 + 5 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.0555 + 6 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.2549 + 7 C 0.0000 0.0000 0.0000 C.ar 1 UNL1 0.3702 +@BOND + 1 1 2 ar + 2 2 3 ar + 3 3 4 ar + 4 4 5 ar + 5 5 6 ar + 6 6 7 ar + 7 1 7 ar diff --git a/fuzz/corpus-min/mol2/tropylium4.mol2 b/fuzz/corpus-min/mol2/tropylium4.mol2 new file mode 100644 index 00000000..1ac039da --- /dev/null +++ b/fuzz/corpus-min/mol2/tropylium4.mol2 @@ -0,0 +1,23 @@ +@MOLECULE +Tropylium cation + 7 7 0 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 C1 -0.0167 1.3835 0.0096 C.ar + 2 C2 1.0564 2.2634 0.0041 C.ar + 3 C3 2.4133 1.9731 -0.0095 C.ar + 4 C4 3.0323 0.7311 -0.0219 C.ar + 5 C5 2.4472 -0.5273 -0.0233 C.ar + 6 C6 1.0986 -0.8545 -0.0126 C.ar + 7 C7 0.0021 -0.0041 0.0020 C.ar +@BOND + 1 1 7 1 + 2 1 2 2 + 3 2 3 1 + 4 3 4 2 + 5 4 5 1 + 6 5 6 2 + 7 6 7 1 diff --git a/fuzz/corpus-min/mol2/write.mol2 b/fuzz/corpus-min/mol2/write.mol2 new file mode 100644 index 00000000..baab9c1c --- /dev/null +++ b/fuzz/corpus-min/mol2/write.mol2 @@ -0,0 +1,21 @@ +@MOLECULE +imidazole + 5 5 1 0 0 +SMALL +NO_CHARGES + + +@ATOM + 1 N1 0.0021 -0.0041 0.0020 N.pl3 1 UNK 0.000 + 2 C3 -0.0165 1.3646 0.0095 C.2 1 UNK 0.000 + 3 C4 1.2671 1.7717 -0.0005 C.2 1 UNK 0.000 + 4 N5 2.0482 0.6814 -0.0138 N.2 1 UNK 0.000 + 5 C6 1.2973 -0.3859 -0.0124 C.2 1 UNK 0.000 +@BOND + 1 1 5 1 + 2 1 2 1 + 3 2 3 2 + 4 3 4 1 + 5 4 5 2 +@SUBSTRUCTURE +1 UNK 1 diff --git a/fuzz/corpus-min/pdb/1alx_part.pdb b/fuzz/corpus-min/pdb/1alx_part.pdb new file mode 120000 index 00000000..61d4c081 --- /dev/null +++ b/fuzz/corpus-min/pdb/1alx_part.pdb @@ -0,0 +1 @@ +../../../test/test_data/1alx_part.pdb \ No newline at end of file diff --git a/fuzz/corpus-min/pdb/1ubq.pdb b/fuzz/corpus-min/pdb/1ubq.pdb new file mode 120000 index 00000000..240fd8af --- /dev/null +++ b/fuzz/corpus-min/pdb/1ubq.pdb @@ -0,0 +1 @@ +../../../test/test_data/1ubq.pdb \ No newline at end of file diff --git a/fuzz/corpus-min/pdb/3cye_part.pdb b/fuzz/corpus-min/pdb/3cye_part.pdb new file mode 120000 index 00000000..b1ee34e9 --- /dev/null +++ b/fuzz/corpus-min/pdb/3cye_part.pdb @@ -0,0 +1 @@ +../../../test/test_data/3cye_part.pdb \ No newline at end of file diff --git a/fuzz/corpus-min/pdb/dummy-mdl.pdb b/fuzz/corpus-min/pdb/dummy-mdl.pdb new file mode 100644 index 00000000..dcf92a1b --- /dev/null +++ b/fuzz/corpus-min/pdb/dummy-mdl.pdb @@ -0,0 +1,42 @@ +MODEL 1 +ATOM 7 N MET A 1 -13.991 -6.903 33.129 1.00 22.97 N +ATOM 8 CA MET A 1 -13.215 -8.093 33.479 1.00 22.29 C +ATOM 9 C MET A 1 -13.314 -8.351 34.974 1.00 22.05 C +ATOM 10 O MET A 1 -12.547 -9.129 35.537 1.00 22.25 O +ATOM 11 CB MET A 1 -11.754 -7.911 33.072 1.00 22.24 C +ATOM 12 CG MET A 1 -11.575 -7.558 31.609 1.00 22.06 C +ATOM 13 SD MET A 1 -12.824 -8.351 30.571 1.00 21.21 S +ATOM 14 CE MET A 1 -12.200 -10.034 30.491 1.00 21.07 C +ATOM 15 N GLU A 2 -14.276 -7.680 35.597 1.00 21.61 N +ATOM 16 CA GLU A 2 -14.539 -7.754 37.021 1.00 21.37 C +ATOM 17 C GLU A 2 -14.838 -9.192 37.467 1.00 20.56 C +ATOM 18 O GLU A 2 -14.382 -9.623 38.530 1.00 20.29 O +ATOM 19 CB GLU A 2 -15.725 -6.832 37.337 1.00 21.91 C +ATOM 20 CG GLU A 2 -16.178 -6.790 38.801 1.00 23.74 C +ATOM 21 CD GLU A 2 -17.703 -6.770 38.937 1.00 26.25 C +ATOM 22 OE1 GLU A 2 -18.397 -7.133 37.957 1.00 26.86 O +ATOM 23 OE2 GLU A 2 -18.208 -6.402 40.025 1.00 27.14 O +ATOM 24 N ASN A 3 -15.590 -9.921 36.639 1.00 19.52 N +HETATM 661 O HOH A 134 37.667 43.421 17.000 0.50 33.32 O +ENDMDL +MODEL 2 +ATOM 7 N MET A 1 -13.991 -6.903 33.129 1.00 22.97 N +ATOM 8 CA MET A 1 -13.215 -8.093 33.479 1.00 22.29 C +ATOM 9 C MET A 1 -13.314 -8.351 34.974 1.00 22.05 C +ATOM 10 O MET A 1 -12.547 -9.129 35.537 1.00 22.25 O +ATOM 11 CB MET A 1 -11.754 -7.911 33.072 1.00 22.24 C +ATOM 12 CG MET A 1 -11.575 -7.558 31.609 1.00 22.06 C +ATOM 13 SD MET A 1 -12.824 -8.351 30.571 1.00 21.21 S +ATOM 14 CE MET A 1 -12.200 -10.034 30.491 1.00 21.07 C +ATOM 15 N GLU A 2 -14.276 -7.680 35.597 1.00 21.61 N +ATOM 16 CA GLU A 2 -14.539 -7.754 37.021 1.00 21.37 C +ATOM 17 C GLU A 2 -14.838 -9.192 37.467 1.00 20.56 C +ATOM 18 O GLU A 2 -14.382 -9.623 38.530 1.00 20.29 O +ATOM 19 CB GLU A 2 -15.725 -6.832 37.337 1.00 21.91 C +ATOM 20 CG GLU A 2 -16.178 -6.790 38.801 1.00 23.74 C +ATOM 21 CD GLU A 2 -17.703 -6.770 38.937 1.00 26.25 C +ATOM 22 OE1 GLU A 2 -18.397 -7.133 37.957 1.00 26.86 O +ATOM 23 OE2 GLU A 2 -18.208 -6.402 40.025 1.00 27.14 O +ATOM 24 N ASN A 3 -15.590 -9.921 36.639 1.00 19.52 N +HETATM 661 O HOH A 134 37.667 43.421 17.000 0.50 33.32 O +ENDMDL diff --git a/fuzz/corpus-min/pdb/dummy.pdb b/fuzz/corpus-min/pdb/dummy.pdb new file mode 120000 index 00000000..b4f41905 --- /dev/null +++ b/fuzz/corpus-min/pdb/dummy.pdb @@ -0,0 +1 @@ +../../../test/test_data/dummy.pdb \ No newline at end of file diff --git a/fuzz/corpus-min/pdb/gh-358.pdb b/fuzz/corpus-min/pdb/gh-358.pdb new file mode 120000 index 00000000..f97f327b --- /dev/null +++ b/fuzz/corpus-min/pdb/gh-358.pdb @@ -0,0 +1 @@ +../../../test/test_data/gh-358.pdb \ No newline at end of file diff --git a/fuzz/corpus-min/pdb/gh-367.pdb b/fuzz/corpus-min/pdb/gh-367.pdb new file mode 120000 index 00000000..217b7702 --- /dev/null +++ b/fuzz/corpus-min/pdb/gh-367.pdb @@ -0,0 +1 @@ +../../../test/test_data/gh-367.pdb \ No newline at end of file diff --git a/fuzz/corpus-min/pdb/invalid.pdb b/fuzz/corpus-min/pdb/invalid.pdb new file mode 120000 index 00000000..993c311b --- /dev/null +++ b/fuzz/corpus-min/pdb/invalid.pdb @@ -0,0 +1 @@ +../../../test/test_data/invalid.pdb \ No newline at end of file diff --git a/fuzz/corpus-min/pdb/semanticerr.pdb b/fuzz/corpus-min/pdb/semanticerr.pdb new file mode 100644 index 00000000..13a8679c --- /dev/null +++ b/fuzz/corpus-min/pdb/semanticerr.pdb @@ -0,0 +1,5 @@ +MODEL 1 // Duplicate atom records (one with same serial, other with same id) +ATOM 9006 H SER B 153 30.485 52.658 25.676 1.00 58.61 H +ATOM 9006 H SER B 153 30.485 52.658 25.676 1.00 58.61 H +ATOM 9007 H SER B 153 30.485 52.658 25.676 0.00 58.61 H +ENDMDL diff --git a/fuzz/corpus-min/pdb/syntaxerr.pdb b/fuzz/corpus-min/pdb/syntaxerr.pdb new file mode 100644 index 00000000..72f3f83a --- /dev/null +++ b/fuzz/corpus-min/pdb/syntaxerr.pdb @@ -0,0 +1,12 @@ +MODEL 1 +ATOM 1 N ALA A 1 +ENDMDL +MODEL 2 +ATOM A N ALA A 1 11.104 6.134 -6.504 1.00 0.00 N +ENDMDL +MODEL 3 +ATOM 1 N ALA A A 11.104 6.134 -6.504 1.00 0.00 N +ENDMDL +MODEL 4 +ATOM 1 ALA A 1 11.104 6.134 -6.504 1.00 0.00 N +ENDMDL diff --git a/fuzz/corpus-min/sdf/alanine.sdf b/fuzz/corpus-min/sdf/alanine.sdf new file mode 100644 index 00000000..871782de --- /dev/null +++ b/fuzz/corpus-min/sdf/alanine.sdf @@ -0,0 +1,55 @@ +L-Alanine + ABCDEFGH09071717443D +Exported + 6 5 0 0 1 0 3 V2000 + -0.6622 0.5342 0.0000 C 0 0 2 0 0 0 + 0.6622 -0.3000 0.0000 C 0 0 0 0 0 0 + -0.7207 2.0817 0.0000 C 1 0 0 0 0 0 + -1.8622 -0.3695 0.0000 N 0 3 0 0 0 0 + 0.6220 -1.8037 0.0000 O 0 0 0 0 0 0 + 1.9464 0.4244 0.0000 O 0 5 0 + 1 2 1 0 0 0 + 1 3 1 1 0 0 + 1 4 1 0 0 0 + 2 5 2 0 0 0 + 2 6 1 0 0 0 +M CHG 2 4 1 6 -1 +M ISO 1 3 13 +M END +> 25 +179.0 - 183.0 + +> 25 +PW(W) + +$$$$ +L-Alanine + OpenBabel03182412213D +Exported + 0 0 0 0 0 999 V3000 +M V30 BEGIN CTAB +M V30 COUNTS 6 5 0 0 1 +M V30 BEGIN ATOM +M V30 1 C -0.6622 0.5342 0 0 +M V30 2 C 0.6622 -0.3 0 0 +M V30 3 C -0.7207 2.0817 0 0 MASS=13 +M V30 4 N -1.8622 -0.3695 0 0 CHG=1 +M V30 5 O 0.622 -1.8037 0 0 +M V30 6 O 1.9464 0.4244 0 0 CHG=-1 +M V30 END ATOM +M V30 BEGIN BOND +M V30 1 1 1 2 +M V30 2 1 1 3 CFG=1 +M V30 3 1 1 4 +M V30 4 2 2 5 +M V30 5 1 2 6 +M V30 END BOND +M V30 END CTAB +M END +> +179.0 - 183.0 + +> +PW(W) + +$$$$ diff --git a/fuzz/corpus-min/sdf/cont.sdf b/fuzz/corpus-min/sdf/cont.sdf new file mode 100644 index 00000000..3c51ff80 --- /dev/null +++ b/fuzz/corpus-min/sdf/cont.sdf @@ -0,0 +1,12 @@ +test + + + 1 0 0 0 0 0 0 0 0999 V3000 +M V30 BEGIN CTAB +M V30 COUNTS 1 0 0 0 0 +M V30 BEGIN ATOM +M V30 1 N 74.708 60.512 32.843 0 CHG=1 - +M V30 CHG=2 +M V30 END ATOM +M V30 END CTAB +$$$$ diff --git a/fuzz/corpus-min/sdf/cont2.sdf b/fuzz/corpus-min/sdf/cont2.sdf new file mode 100644 index 00000000..a72aa663 --- /dev/null +++ b/fuzz/corpus-min/sdf/cont2.sdf @@ -0,0 +1,13 @@ +test + + + 1 0 0 0 0 0 0 0 0999 V3000 +M V30 BEGIN CTAB +M V30 COUNTS 1 0 0 0 0 +M V30 BEGIN ATOM +M V30 1 N 74.708 60.512 32.843 0 CHG=1 - +M V30 CHG=2 - +M V30 MASS=12 +M V30 END ATOM +M V30 END CTAB +$$$$ diff --git a/fuzz/corpus-min/sdf/errors.sdf b/fuzz/corpus-min/sdf/errors.sdf new file mode 100644 index 00000000..a3bfc66b --- /dev/null +++ b/fuzz/corpus-min/sdf/errors.sdf @@ -0,0 +1,86 @@ +test +$$$$ +test + + + 15 16 0 1 0 0 0 0 0999 V1000 +$$$$ +test + + + a 16 0 1 0 0 0 0 0999 V2000 +$$$$ +test + + + 15 16 0 1 0 0 0 0 0999 +$$$$ +test + + + 15 16 0 1 0 0 0 0 0999 Vaaaa +$$$$ +test + + + 15 16 0 1 0 0 0 0 0999 V2000 +M V30 BEGIN CTAB +M V30 COUNTS 6 5 0 0 1 +M V30 BEGIN ATOM +M V30 END ATOM +M V30 END CTAB +M END +$$$$ +test + + + 1 0 0 1 0 0 0 0 0999 V2000 + 74.7080 60.5120 32.8430 ZZ 0 0 0 0 0 0 0 0 0 0 0 0 +M END +$$$$ +test + + + 2 1 0 1 0 0 0 0 0999 V2000 + 74.7080 60.5120 32.8430 C 0 0 0 0 0 0 0 0 0 0 0 0 + 74.7080 60.5120 32.8430 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 1 0 0 0 0 +M END +$$$$ +test + + + 2 1 0 1 0 0 0 0 0999 V2000 + 74.7080 60.5120 32.8430 C 0 0 0 0 0 0 0 0 0 0 0 0 + 74.7080 60.5120 32.8430 C 0 0 0 0 0 0 0 0 0 0 0 0 + a 1 1 0 0 0 0 +M END +$$$$ +test + + + 2 1 0 1 0 0 0 0 0999 V2000 + 74.7080 60.5120 32.8430 C 0 0 0 0 0 0 0 0 0 0 0 0 + 74.7080 60.5120 32.8430 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 a 0 0 0 0 +M END +$$$$ +test + + + 2 1 0 1 0 0 0 0 0999 V2000 + 74.7080 60.5120 32.8430 C 0 0 0 0 0 0 0 0 0 0 0 0 + 74.7080 60.5120 32.8430 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 10 0 0 0 0 +M END +$$$$ +test + + + 2 1 0 1 0 0 0 0 0999 V2000 + 74.7080 60.5120 32.8430 C 0 0 0 0 0 0 0 0 0 0 0 0 + 74.7080 60.5120 32.8430 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 0 0 0 + 1 1 1 0 0 0 0 +M END +$$$$ diff --git a/fuzz/corpus-min/sdf/histidine.sdf b/fuzz/corpus-min/sdf/histidine.sdf new file mode 100644 index 00000000..848a5a14 --- /dev/null +++ b/fuzz/corpus-min/sdf/histidine.sdf @@ -0,0 +1,29 @@ +HIS + -OEChem-03082421403D + + 11 11 0 1 0 0 0 0 0999 V2000 + 33.4720 42.6850 -4.6100 N 0 0 0 0 0 0 0 0 0 0 0 0 + 33.4140 41.6860 -5.6730 C 0 0 2 0 0 0 0 0 0 0 0 0 + 33.7730 42.2790 -7.0400 C 0 0 0 0 0 0 0 0 0 0 0 0 + 33.4970 43.4440 -7.3370 O 0 0 0 0 0 0 0 0 0 0 0 0 + 32.0050 41.0800 -5.7340 C 0 0 0 0 0 0 0 0 0 0 0 0 + 31.8880 39.9020 -6.6510 C 0 0 0 0 0 0 0 0 0 0 0 0 + 32.5390 38.7100 -6.4140 N 0 3 0 0 0 0 0 0 0 0 0 0 + 31.1990 39.7340 -7.8040 C 0 0 0 0 0 0 0 0 0 0 0 0 + 32.2510 37.8570 -7.3820 C 0 0 0 0 0 0 0 0 0 0 0 0 + 31.4390 38.4530 -8.2370 N 0 0 0 0 0 0 0 0 0 0 0 0 + 34.3820 41.4550 -7.8790 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 0 0 0 + 2 3 1 0 0 0 0 + 2 5 1 0 0 0 0 + 3 4 2 0 0 0 0 + 3 11 1 0 0 0 0 + 5 6 1 0 0 0 0 + 6 7 1 0 0 0 0 + 6 8 2 0 0 0 0 + 7 9 2 0 0 0 0 + 8 10 1 0 0 0 0 + 9 10 1 0 0 0 0 +M CHG 1 7 1 +M END +$$$$ diff --git a/fuzz/corpus-min/sdf/histidine2.sdf b/fuzz/corpus-min/sdf/histidine2.sdf new file mode 100644 index 00000000..a86eff0b --- /dev/null +++ b/fuzz/corpus-min/sdf/histidine2.sdf @@ -0,0 +1,35 @@ +HIS + OpenBabel03182412583D + + 0 0 0 0 0 999 V3000 +M V30 BEGIN CTAB +M V30 COUNTS 11 11 0 0 1 +M V30 BEGIN ATOM +M V30 1 N 33.472 42.685 -4.61 0 +M V30 2 C 33.414 41.686 -5.673 0 +M V30 3 C 33.773 42.279 -7.04 0 +M V30 4 O 33.497 43.444 -7.337 0 +M V30 5 C 32.005 41.08 -5.734 0 +M V30 6 C 31.888 39.902 -6.651 0 +M V30 7 N 32.539 38.71 -6.414 0 CHG=1 +M V30 8 C 31.199 39.734 -7.804 0 +M V30 9 C 32.251 37.857 -7.382 0 +M V30 10 N 31.439 38.453 -8.237 0 +M V30 11 O 34.382 41.455 -7.879 0 +M V30 END ATOM +M V30 BEGIN BOND +M V30 1 1 1 2 +M V30 2 1 2 3 +M V30 3 1 2 5 +M V30 4 2 3 4 +M V30 5 1 3 11 +M V30 6 1 5 6 +M V30 7 1 6 7 +M V30 8 2 6 8 +M V30 9 2 7 9 +M V30 10 1 8 10 +M V30 11 1 9 10 +M V30 END BOND +M V30 END CTAB +M END +$$$$ diff --git a/fuzz/corpus-min/sdf/histidine3.sdf b/fuzz/corpus-min/sdf/histidine3.sdf new file mode 100644 index 00000000..8165423b --- /dev/null +++ b/fuzz/corpus-min/sdf/histidine3.sdf @@ -0,0 +1,28 @@ +HIS + -OEChem-03082421403D + + 11 11 0 1 0 0 0 0 0999 V2000 + 33.4720 42.6850 -4.6100 N 0 0 0 0 0 0 0 0 0 0 0 0 + 33.4140 41.6860 -5.6730 C 0 0 2 0 0 0 0 0 0 0 0 0 + 33.7730 42.2790 -7.0400 C 0 0 0 0 0 0 0 0 0 0 0 0 + 33.4970 43.4440 -7.3370 O 0 0 0 0 0 0 0 0 0 0 0 0 + 32.0050 41.0800 -5.7340 C 0 0 0 0 0 0 0 0 0 0 0 0 + 31.8880 39.9020 -6.6510 C 0 0 0 0 0 0 0 0 0 0 0 0 + 32.5390 38.7100 -6.4140 N 0 0 0 0 0 0 0 0 0 0 0 0 + 31.1990 39.7340 -7.8040 C 0 0 0 0 0 0 0 0 0 0 0 0 + 32.2510 37.8570 -7.3820 C 0 0 0 0 0 0 0 0 0 0 0 0 + 31.4390 38.4530 -8.2370 N 0 0 0 0 0 0 0 0 0 0 0 0 + 34.3820 41.4550 -7.8790 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 0 0 0 + 2 3 1 0 0 0 0 + 2 5 1 0 0 0 0 + 3 4 2 0 0 0 0 + 3 11 1 0 0 0 0 + 5 6 1 0 0 0 0 + 6 7 1 0 0 0 0 + 6 8 2 0 0 0 0 + 7 9 2 0 0 0 0 + 8 10 1 0 0 0 0 + 9 10 1 0 0 0 0 +M END +$$$$ diff --git a/fuzz/corpus-min/sdf/histidine4.sdf b/fuzz/corpus-min/sdf/histidine4.sdf new file mode 100644 index 00000000..4b399508 --- /dev/null +++ b/fuzz/corpus-min/sdf/histidine4.sdf @@ -0,0 +1,35 @@ +HIS + OpenBabel03182412583D + + 0 0 0 0 0 999 V3000 +M V30 BEGIN CTAB +M V30 COUNTS 11 11 0 0 1 +M V30 BEGIN ATOM +M V30 1 N 33.472 42.685 -4.61 0 +M V30 2 C 33.414 41.686 -5.673 0 +M V30 3 C 33.773 42.279 -7.04 0 +M V30 4 O 33.497 43.444 -7.337 0 +M V30 5 C 32.005 41.08 -5.734 0 +M V30 6 C 31.888 39.902 -6.651 0 +M V30 7 N 32.539 38.71 -6.414 0 +M V30 8 C 31.199 39.734 -7.804 0 +M V30 9 C 32.251 37.857 -7.382 0 +M V30 10 N 31.439 38.453 -8.237 0 +M V30 11 O 34.382 41.455 -7.879 0 +M V30 END ATOM +M V30 BEGIN BOND +M V30 1 1 1 2 +M V30 2 1 2 3 +M V30 3 1 2 5 +M V30 4 2 3 4 +M V30 5 1 3 11 +M V30 6 1 5 6 +M V30 7 1 6 7 +M V30 8 2 6 8 +M V30 9 2 7 9 +M V30 10 1 8 10 +M V30 11 1 9 10 +M V30 END BOND +M V30 END CTAB +M END +$$$$ diff --git a/fuzz/corpus-min/sdf/hydrogens.sdf b/fuzz/corpus-min/sdf/hydrogens.sdf new file mode 100644 index 00000000..93333ca8 --- /dev/null +++ b/fuzz/corpus-min/sdf/hydrogens.sdf @@ -0,0 +1,14 @@ +D + + + 1 0 0 1 0 0 0 0 0999 V2000 + 74.7080 60.5120 32.8430 D 0 0 0 0 0 0 0 0 0 0 0 0 +M END +$$$$ +T + + + 1 0 0 1 0 0 0 0 0999 V2000 + 74.7080 60.5120 32.8430 T 0 0 0 0 0 0 0 0 0 0 0 0 +M END +$$$$ diff --git a/fuzz/corpus-min/sdf/trp.sdf b/fuzz/corpus-min/sdf/trp.sdf new file mode 100644 index 00000000..c69fcb5c --- /dev/null +++ b/fuzz/corpus-min/sdf/trp.sdf @@ -0,0 +1,37 @@ +TRP + -OEChem-03012415303D + + 15 16 0 1 0 0 0 0 0999 V2000 + 74.7080 60.5120 32.8430 N 0 0 0 0 0 0 0 0 0 0 0 0 + 74.4000 61.7350 32.1140 C 0 0 2 0 0 0 0 0 0 0 0 0 + 73.5880 61.4110 30.8400 C 0 0 0 0 0 0 0 0 0 0 0 0 + 72.9390 62.2920 30.2770 O 0 0 0 0 0 0 0 0 0 0 0 0 + 75.6840 62.4730 31.7060 C 0 0 0 0 0 0 0 0 0 0 0 0 + 76.6750 62.7270 32.8320 C 0 0 0 0 0 0 0 0 0 0 0 0 + 77.7530 61.9640 33.1570 C 0 0 0 0 0 0 0 0 0 0 0 0 + 76.6460 63.8050 33.7770 C 0 0 0 0 0 0 0 0 0 0 0 0 + 78.4030 62.4940 34.2470 N 0 0 0 0 0 0 0 0 0 0 0 0 + 77.7410 63.6250 34.6500 C 0 0 0 0 0 0 0 0 0 0 0 0 + 75.7960 64.9020 33.9740 C 0 0 0 0 0 0 0 0 0 0 0 0 + 78.0140 64.4990 35.7090 C 0 0 0 0 0 0 0 0 0 0 0 0 + 76.0650 65.7760 35.0310 C 0 0 0 0 0 0 0 0 0 0 0 0 + 77.1680 65.5650 35.8840 C 0 0 0 0 0 0 0 0 0 0 0 0 + 73.4950 60.4700 30.4380 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 0 0 0 + 2 3 1 0 0 0 0 + 2 5 1 0 0 0 0 + 3 4 2 0 0 0 0 + 3 15 1 0 0 0 0 + 5 6 1 0 0 0 0 + 6 7 2 0 0 0 0 + 6 8 1 0 0 0 0 + 7 9 1 0 0 0 0 + 8 10 2 0 0 0 0 + 8 11 1 0 0 0 0 + 9 10 1 0 0 0 0 + 10 12 1 0 0 0 0 + 11 13 2 0 0 0 0 + 12 14 2 0 0 0 0 + 13 14 1 0 0 0 0 +M END +$$$$ diff --git a/fuzz/corpus-min/sdf/trp2.sdf b/fuzz/corpus-min/sdf/trp2.sdf new file mode 100644 index 00000000..d8c001bf --- /dev/null +++ b/fuzz/corpus-min/sdf/trp2.sdf @@ -0,0 +1,44 @@ +TRP + OpenBabel03182413003D + + 0 0 0 0 0 999 V3000 +M V30 BEGIN CTAB +M V30 COUNTS 15 16 0 0 1 +M V30 BEGIN ATOM +M V30 1 N 74.708 60.512 32.843 0 +M V30 2 C 74.4 61.735 32.114 0 +M V30 3 C 73.588 61.411 30.84 0 +M V30 4 O 72.939 62.292 30.277 0 +M V30 5 C 75.684 62.473 31.706 0 +M V30 6 C 76.675 62.727 32.832 0 +M V30 7 C 77.753 61.964 33.157 0 +M V30 8 C 76.646 63.805 33.777 0 +M V30 9 N 78.403 62.494 34.247 0 +M V30 10 C 77.741 63.625 34.65 0 +M V30 11 C 75.796 64.902 33.974 0 +M V30 12 C 78.014 64.499 35.709 0 +M V30 13 C 76.065 65.776 35.031 0 +M V30 14 C 77.168 65.565 35.884 0 +M V30 15 O 73.495 60.47 30.438 0 +M V30 END ATOM +M V30 BEGIN BOND +M V30 1 1 1 2 +M V30 2 1 2 3 +M V30 3 1 2 5 +M V30 4 2 3 4 +M V30 5 1 3 15 +M V30 6 1 5 6 +M V30 7 2 6 7 +M V30 8 1 6 8 +M V30 9 1 7 9 +M V30 10 2 8 10 +M V30 11 1 8 11 +M V30 12 1 9 10 +M V30 13 1 10 12 +M V30 14 2 11 13 +M V30 15 2 12 14 +M V30 16 1 13 14 +M V30 END BOND +M V30 END CTAB +M END +$$$$ diff --git a/fuzz/corpus-min/sdf/warn.sdf b/fuzz/corpus-min/sdf/warn.sdf new file mode 100644 index 00000000..51145d61 --- /dev/null +++ b/fuzz/corpus-min/sdf/warn.sdf @@ -0,0 +1,11 @@ +test + + + 1 0 0 0 0 0 0 0 0999 V2000 + -0.6622 0.5342 0.0000 C 0 0 0 0 0 0 +M END +test invalid +> 25 +179.0 - 183.0 + +$$$$ diff --git a/fuzz/corpus-min/sdf/warn2.sdf b/fuzz/corpus-min/sdf/warn2.sdf new file mode 100644 index 00000000..39d1b12f --- /dev/null +++ b/fuzz/corpus-min/sdf/warn2.sdf @@ -0,0 +1,10 @@ +test + + + 1 0 0 0 0 0 0 0 0999 V2000 + -0.6622 0.5342 0.0000 C 0 0 0 0 0 0 +M END +> MELTING.POINT +179.0 - 183.0 + +$$$$ diff --git a/fuzz/corpus-min/sdf/warnrem.sdf b/fuzz/corpus-min/sdf/warnrem.sdf new file mode 100644 index 00000000..43fb88d5 --- /dev/null +++ b/fuzz/corpus-min/sdf/warnrem.sdf @@ -0,0 +1,43 @@ +test + + + 1 0 0 0 0 0 0 0 0999 V2000 + -0.6622 0.5342 0.0000 C 0 0 0 0 0 0 +> 25 +179.0 - 183.0 + +$$$$ +test + + + 0 0 0 0 0 0 0 0 0999 V2000 + -0.6622 0.5342 0.0000 C 0 0 0 0 0 0 + -0.6622 0.5342 0.0000 C 0 0 0 0 0 0 + + 1 2 1 0 0 0 0 + +$$$$ +test + + + 1 0 0 0 1 0 3 V2000 + -0.6622 0.5342 0.0000 C 0 0 2 0 0 0 +M CHG +M END +$$$$ +test + + + 1 0 0 0 1 0 3 V2000 + -0.6622 0.5342 0.0000 C 0 0 2 0 0 0 +M CHG 1 1 +M END +$$$$ +test + + + 1 0 0 0 1 0 3 V2000 + -0.6622 0.5342 0.0000 C 0 0 2 0 0 0 +M CHG 1 10 1 +M END +$$$$ diff --git a/fuzz/corpus-min/smi/aromatic.smi b/fuzz/corpus-min/smi/aromatic.smi new file mode 100644 index 00000000..4b841739 --- /dev/null +++ b/fuzz/corpus-min/smi/aromatic.smi @@ -0,0 +1,15 @@ +c1ccc2CCCc2c1 indane +C1=CC=C2CCCC2=C1 indane +c1occc1 furan +C1OC=CC=1 furan +c1ccc1 cyclobutadiene +C1=CC=C1 cyclobutadiene +c1ccccc1-c2ccccc2 biphenyl +C1=CC2=C(C=C1)C1=CC=CC=C21 aromatic test +O=C1C=CC(=O)C2=C1OC=CO2 aromatic test +c1[cH-]ccc1 cyclopenadienyl anion +c1ccccc1:c2ccccc2 biphenyl error +c1cc[nH]c1 pyrrole +C1C=CNC=1 pyrrole +c1c[nH]cn1 imidazole +C1=CNC=N1 imidazole diff --git a/fuzz/corpus-min/smi/atomclass.smi b/fuzz/corpus-min/smi/atomclass.smi new file mode 100644 index 00000000..c52ccd3b --- /dev/null +++ b/fuzz/corpus-min/smi/atomclass.smi @@ -0,0 +1 @@ +[CH4:005] methane with atom class diff --git a/fuzz/corpus-min/smi/bonds.smi b/fuzz/corpus-min/smi/bonds.smi new file mode 100644 index 00000000..b987cdc6 --- /dev/null +++ b/fuzz/corpus-min/smi/bonds.smi @@ -0,0 +1,5 @@ +CC ethane +C=C ethene +C#N hydrogen cyanide +[Rh-](Cl)(Cl)(Cl)(Cl)$[Rh-](Cl)(Cl)(Cl)Cl octachlorodirhenate (III) +c:1:c:c:c:c:c:1 benzene diff --git a/fuzz/corpus-min/smi/branch.smi b/fuzz/corpus-min/smi/branch.smi new file mode 100644 index 00000000..c1949a8f --- /dev/null +++ b/fuzz/corpus-min/smi/branch.smi @@ -0,0 +1,3 @@ +OS(=O)(=S)O thiosulfate +[O-]P(=O)([O-])[O-] phosphate +C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C(C))))))))))))))))))))C C22H46 diff --git a/fuzz/corpus-min/smi/chirality-invalid.smi b/fuzz/corpus-min/smi/chirality-invalid.smi new file mode 100644 index 00000000..ee13c4b3 --- /dev/null +++ b/fuzz/corpus-min/smi/chirality-invalid.smi @@ -0,0 +1,3 @@ +C[C@H]=C too few explicit neighbors +C[P@H2](F)Cl too many implicit hydrogens +C[B@](F)Cl too few total neighbors diff --git a/fuzz/corpus-min/smi/chirality.smi b/fuzz/corpus-min/smi/chirality.smi new file mode 100644 index 00000000..ef7e24da --- /dev/null +++ b/fuzz/corpus-min/smi/chirality.smi @@ -0,0 +1,6 @@ +C[C@@H](C(=O)O)N alanine +C[C@H](N)C(=O)O alanine-reversed +[C@@H](F)(Cl)Br test first +F[C@H](Cl)Br test not-first +C[C@@H]1C[C@@]1(F)C test ring closing +CC[C@@H]1C.[C@@H]1(F)C test ring closing disconnected diff --git a/fuzz/corpus-min/smi/dotbond.smi b/fuzz/corpus-min/smi/dotbond.smi new file mode 100644 index 00000000..c2abdc46 --- /dev/null +++ b/fuzz/corpus-min/smi/dotbond.smi @@ -0,0 +1,3 @@ +[Na+].[Cl-] sodium chloride +[NH4+].[NH4+].[O-]S(=O)(=O)[S-] diammonium thiosulfate +c1c2c3c4cc1.Br2.Cl3.Cl4 1-bromo-2,3-dichlorobenzene diff --git a/fuzz/corpus-min/smi/enamine-real.smi b/fuzz/corpus-min/smi/enamine-real.smi new file mode 100644 index 00000000..f1efaf6c --- /dev/null +++ b/fuzz/corpus-min/smi/enamine-real.smi @@ -0,0 +1,4 @@ +CC(C)CN(C(=O)COC(=O)C1=CC=C(N2CCCCC2)C([N+](=O)[O-])=C1)C1CCS(=O)(=O)C1 Z19788751 +COC1=CC=C2C=CC=C(CC(=O)N=S3(=O)CCCC4(C3)OCCO4)C2=C1 test molecule Z3640991685 +COC1=CC(F)=C(C(=O)NC(C)(C)CCCNC(=O)OC(C)(C)C)C(F)=C1 Z3085457096 +CN(C)C(=O)[C@@H]1CCCN1C(=O)C1=CC=C(COC2=CC=C(Cl)C=C2)C=C1 Z2719008285 diff --git a/fuzz/corpus-min/smi/geometry.smi b/fuzz/corpus-min/smi/geometry.smi new file mode 100644 index 00000000..dc3e21c1 --- /dev/null +++ b/fuzz/corpus-min/smi/geometry.smi @@ -0,0 +1,5 @@ +F/C=C/F trans-difluoride +C(/F)=C/F cis-difluoride +C/1=C/C=C\C=C/C=C\1 cyclooctatetraene +C/C=C/C(/C=C(CC)\C)=C(/C=C/C)\C(\C)=C\CC sample1 +C/C=C/C(/C=C/C)(/C=C/C)/C=C/C sample2 diff --git a/fuzz/corpus-min/smi/hydrogens.smi b/fuzz/corpus-min/smi/hydrogens.smi new file mode 100644 index 00000000..aeec55f9 --- /dev/null +++ b/fuzz/corpus-min/smi/hydrogens.smi @@ -0,0 +1 @@ +[H]C([H])([H])[H] explicit hydrogen methane diff --git a/fuzz/corpus-min/smi/invalid-config.smi b/fuzz/corpus-min/smi/invalid-config.smi new file mode 100644 index 00000000..1276958f --- /dev/null +++ b/fuzz/corpus-min/smi/invalid-config.smi @@ -0,0 +1 @@ +c1ccc2CCCc2/c=1 error diff --git a/fuzz/corpus-min/smi/isotope.smi b/fuzz/corpus-min/smi/isotope.smi new file mode 100644 index 00000000..9a456981 --- /dev/null +++ b/fuzz/corpus-min/smi/isotope.smi @@ -0,0 +1,2 @@ +[13CH4] 13C methane +[2H+] deuterium ion diff --git a/fuzz/corpus-min/smi/rings.smi b/fuzz/corpus-min/smi/rings.smi new file mode 100644 index 00000000..be0d9ae2 --- /dev/null +++ b/fuzz/corpus-min/smi/rings.smi @@ -0,0 +1,11 @@ +N1CC2CCCCC2CC1 perhydroisoquinoline +C=1CCCCC=1 cyclohexene +C=1CCCCC1 cyclohexene +C1CCCCC=1 cyclohexene +C1CCCCC1C1CCCCC1 bicyclohexyl +C12(CCCCC1)CCCCC2 spiro[5.5]undecane +C%12CCCCC%12 cyclohexane +C-1CCCCC=1 cyclohexene error +C12CCCCC12 error +C12C2CCC1 error +C11 error diff --git a/fuzz/corpus-min/smi/single-charge.smi b/fuzz/corpus-min/smi/single-charge.smi new file mode 100644 index 00000000..ed6c20e5 --- /dev/null +++ b/fuzz/corpus-min/smi/single-charge.smi @@ -0,0 +1,5 @@ +[Cl-] chloride anion +[OH-] hydroxide anion +[NH4+] ammonium cation +[Cu+2] copper(II) cation +[Cu++] copper(II) cation diff --git a/fuzz/corpus-min/smi/single-heavy.smi b/fuzz/corpus-min/smi/single-heavy.smi new file mode 100644 index 00000000..dbe20258 --- /dev/null +++ b/fuzz/corpus-min/smi/single-heavy.smi @@ -0,0 +1,3 @@ +[CH4] methane +[ClH] hydrogen chloride +[ClH1] hydrogen chloride diff --git a/fuzz/corpus-min/smi/single.smi b/fuzz/corpus-min/smi/single.smi new file mode 100644 index 00000000..c7203413 --- /dev/null +++ b/fuzz/corpus-min/smi/single.smi @@ -0,0 +1,4 @@ +[U] uranium +[Pb] lead +[He] helium +[*] unknown atom diff --git a/fuzz/corpus-min/smi/wildcard.smi b/fuzz/corpus-min/smi/wildcard.smi new file mode 100644 index 00000000..27086c7a --- /dev/null +++ b/fuzz/corpus-min/smi/wildcard.smi @@ -0,0 +1 @@ +Oc1c(*)cccc1 ortho-substituted phenol