From 132a490e889fdadb3f249b01b3b0063855935c16 Mon Sep 17 00:00:00 2001 From: yokochi47 Date: Tue, 4 Feb 2025 20:58:48 +0900 Subject: [PATCH] DAOTHER-8905: V5.30 Release, Prevent infinite loop while parsing XEASY PROT file --- wwpdb/utils/nmr/mr/AmberPTParserListener.py | 7 +++++++ wwpdb/utils/nmr/mr/CharmmCRDParserListener.py | 7 +++++++ wwpdb/utils/nmr/mr/GromacsPTParserListener.py | 7 +++++++ wwpdb/utils/nmr/pk/XeasyPROTParserListener.py | 7 +++++++ 4 files changed, 28 insertions(+) diff --git a/wwpdb/utils/nmr/mr/AmberPTParserListener.py b/wwpdb/utils/nmr/mr/AmberPTParserListener.py index fba6a24f..9dfb1f8c 100644 --- a/wwpdb/utils/nmr/mr/AmberPTParserListener.py +++ b/wwpdb/utils/nmr/mr/AmberPTParserListener.py @@ -910,6 +910,8 @@ def update_atom_num(seq_align, orphan): if atomNum['atom_id'] not in chemCompAtomIds or atomNum['atom_id'] in leavingAtomIds: delete_atom_nums.append(atom_num) + trial = 0 + while True: orphanPolySeqPrmTop = [] @@ -961,6 +963,11 @@ def update_atom_num(seq_align, orphan): if not resolved: break + trial += 1 + + if trial > 10: + break + for ps in self.__polySeqPrmTop: test_chain_id = ps['chain_id'] diff --git a/wwpdb/utils/nmr/mr/CharmmCRDParserListener.py b/wwpdb/utils/nmr/mr/CharmmCRDParserListener.py index d6030ad2..df3cd64a 100644 --- a/wwpdb/utils/nmr/mr/CharmmCRDParserListener.py +++ b/wwpdb/utils/nmr/mr/CharmmCRDParserListener.py @@ -630,6 +630,8 @@ def update_atom_num(seq_align, orphan): if atomNum['atom_id'] not in chemCompAtomIds or atomNum['atom_id'] in leavingAtomIds: delete_atom_nums.append(atom_num) + trial = 0 + while True: orphanPolySeqPrmTop = [] @@ -681,6 +683,11 @@ def update_atom_num(seq_align, orphan): if not resolved: break + trial += 1 + + if trial > 10: + break + for ps in self.__polySeqPrmTop: test_chain_id = ps['chain_id'] diff --git a/wwpdb/utils/nmr/mr/GromacsPTParserListener.py b/wwpdb/utils/nmr/mr/GromacsPTParserListener.py index e075958d..5b62c51b 100644 --- a/wwpdb/utils/nmr/mr/GromacsPTParserListener.py +++ b/wwpdb/utils/nmr/mr/GromacsPTParserListener.py @@ -846,6 +846,8 @@ def update_atom_num(seq_align, orphan): if atomNum['atom_id'] not in chemCompAtomIds or atomNum['atom_id'] in leavingAtomIds: delete_atom_nums.append(atom_num) + trial = 0 + while True: orphanPolySeqPrmTop = [] @@ -897,6 +899,11 @@ def update_atom_num(seq_align, orphan): if not resolved: break + trial += 1 + + if trial > 10: + break + for ps in self.__polySeqPrmTop: test_chain_id = ps['chain_id'] diff --git a/wwpdb/utils/nmr/pk/XeasyPROTParserListener.py b/wwpdb/utils/nmr/pk/XeasyPROTParserListener.py index cac2d509..ef86e240 100644 --- a/wwpdb/utils/nmr/pk/XeasyPROTParserListener.py +++ b/wwpdb/utils/nmr/pk/XeasyPROTParserListener.py @@ -649,6 +649,8 @@ def update_atom_num(seq_align, orphan): if atomNum['atom_id'] not in chemCompAtomIds or atomNum['atom_id'] in leavingAtomIds: delete_atom_nums.append(atom_num) + trial = 0 + while True: orphanPolySeqPrmTop = [] @@ -700,6 +702,11 @@ def update_atom_num(seq_align, orphan): if not resolved: break + trial += 1 + + if trial > 10: + break + for ps in self.__polySeqPrmTop: test_chain_id = ps['chain_id']