@@ -2022,6 +2022,8 @@ private void switchCAOnly(){
20222022
20232023 /** safes repeating a few lines ... */
20242024 private Integer conect_helper (String line ,int start ,int end ) {
2025+ if (line .length () < end ) return null ;
2026+
20252027 String sbond = line .substring (start ,end ).trim ();
20262028 int bond = -1 ;
20272029 Integer b = null ;
@@ -2348,7 +2350,15 @@ private void pdb_SSBOND_Handler(String line){
23482350 private void pdb_LINK_Handler (String line ) {
23492351
23502352 if (params .isHeaderOnly ()) return ;
2353+
2354+ // Check for the minimal set of fields.
2355+ if (line .length ()<56 ) {
2356+ logger .info ("LINK line has length under 56. Ignoring it." );
2357+ return ;
2358+ }
23512359
2360+ int len = line .length ();
2361+
23522362 String name1 = line .substring (12 , 16 ).trim ();
23532363 String altLoc1 = line .substring (16 , 17 ).trim ();
23542364 String resName1 = line .substring (17 , 20 ).trim ();
@@ -2361,10 +2371,13 @@ private void pdb_LINK_Handler(String line) {
23612371 String resName2 = line .substring (47 , 50 ).trim ();
23622372 String chainID2 = line .substring (51 , 52 ).trim ();
23632373 String resSeq2 = line .substring (52 , 56 ).trim ();
2364- String iCode2 = line .substring (56 , 57 ).trim ();
2374+ String iCode2 = null ; // Might get trimmed if blank.
2375+ if (len > 56 ) iCode2 = line .substring (56 , 57 ).trim ();
23652376
2366- String sym1 = line .substring (59 , 65 ).trim ();
2367- String sym2 = line .substring (66 , 72 ).trim ();
2377+ String sym1 = null ;
2378+ if (len > 64 ) sym1 = line .substring (59 , 65 ).trim ();
2379+ String sym2 = null ;
2380+ if (len > 71 ) sym2 = line .substring (66 , 72 ).trim ();
23682381
23692382// System.err.println("LINK");
23702383// System.err.println("\tName: " + name1);
@@ -2695,54 +2708,54 @@ public Structure parsePDBFile(BufferedReader buf)
26952708
26962709 String recordName = line .substring (0 , 6 ).trim ();
26972710
2698- if ( recordName . equals ( "ATOM" ))
2699- pdb_ATOM_Handler ( line );
2700- else if ( recordName . equals ( "SEQRES" ))
2701- pdb_SEQRES_Handler ( line );
2702- else if ( recordName . equals ( "HETATM" ))
2703- pdb_ATOM_Handler ( line );
2704- else if ( recordName . equals ( "MODEL" ))
2705- pdb_MODEL_Handler ( line );
2706- else if ( recordName . equals ( "HEADER" ))
2707- pdb_HEADER_Handler ( line );
2708- else if ( recordName . equals ( "AUTHOR" ))
2709- pdb_AUTHOR_Handler ( line );
2710- else if ( recordName . equals ( "TITLE" ))
2711- pdb_TITLE_Handler ( line );
2712- else if ( recordName . equals ( "SOURCE" ))
2713- sourceLines . add ( line ); //pdb_SOURCE_Handler
2714- else if ( recordName . equals ( "COMPND" ))
2715- compndLines . add ( line ); //pdb_COMPND_Handler
2716- else if ( recordName . equals ( "JRNL" ))
2717- pdb_JRNL_Handler ( line );
2718- else if ( recordName . equals ( "EXPDTA" ))
2719- pdb_EXPDTA_Handler ( line );
2720- else if ( recordName . equals ( "CRYST1" ))
2721- pdb_CRYST1_Handler ( line );
2722- else if ( recordName . startsWith ( "MTRIX" ))
2723- pdb_MTRIXn_Handler ( line );
2724- else if ( recordName . equals ( "REMARK" ))
2725- pdb_REMARK_Handler ( line );
2726- else if ( recordName . equals ( "CONECT" ))
2727- pdb_CONECT_Handler ( line );
2728- else if ( recordName . equals ( "REVDAT" ))
2729- pdb_REVDAT_Handler ( line );
2730- else if ( recordName . equals ( "DBREF" ))
2731- pdb_DBREF_Handler ( line );
2732- else if ( recordName . equals ( "SITE" ))
2733- pdb_SITE_Handler ( line );
2734- else if ( recordName . equals ( "SSBOND" ))
2735- pdb_SSBOND_Handler ( line );
2736- else if ( recordName . equals ( "LINK" ))
2737- pdb_LINK_Handler ( line );
2738- else if ( params . isParseSecStruc ()) {
2739- if ( recordName . equals ( "HELIX" ) ) pdb_HELIX_Handler ( line ) ;
2740- else if (recordName .equals ("SHEET" )) pdb_SHEET_Handler ( line ) ;
2741- else if (recordName .equals ("TURN " )) pdb_TURN_Handler ( line ) ;
2742- }
2743- else {
2744- // this line type is not supported, yet.
2745- // we ignore it
2711+ try {
2712+ if ( recordName . equals ( "ATOM" ))
2713+ pdb_ATOM_Handler ( line );
2714+ else if ( recordName . equals ( "SEQRES" ))
2715+ pdb_SEQRES_Handler ( line );
2716+ else if ( recordName . equals ( "HETATM" ))
2717+ pdb_ATOM_Handler ( line );
2718+ else if ( recordName . equals ( "MODEL" ))
2719+ pdb_MODEL_Handler ( line );
2720+ else if ( recordName . equals ( "HEADER" ))
2721+ pdb_HEADER_Handler ( line );
2722+ else if ( recordName . equals ( "AUTHOR" ))
2723+ pdb_AUTHOR_Handler ( line );
2724+ else if ( recordName . equals ( "TITLE" ))
2725+ pdb_TITLE_Handler ( line );
2726+ else if ( recordName . equals ( "SOURCE" ))
2727+ sourceLines . add ( line ); //pdb_SOURCE_Handler
2728+ else if ( recordName . equals ( "COMPND" ))
2729+ compndLines . add ( line ); //pdb_COMPND_Handler
2730+ else if ( recordName . equals ( "JRNL" ))
2731+ pdb_JRNL_Handler ( line );
2732+ else if ( recordName . equals ( "EXPDTA" ))
2733+ pdb_EXPDTA_Handler ( line );
2734+ else if ( recordName . equals ( "CRYST1" ))
2735+ pdb_CRYST1_Handler ( line );
2736+ else if ( recordName . startsWith ( "MTRIX" ))
2737+ pdb_MTRIXn_Handler ( line );
2738+ else if ( recordName . equals ( "REMARK" ))
2739+ pdb_REMARK_Handler ( line );
2740+ else if ( recordName . equals ( "CONECT" ))
2741+ pdb_CONECT_Handler ( line );
2742+ else if ( recordName . equals ( "REVDAT" ))
2743+ pdb_REVDAT_Handler ( line );
2744+ else if ( recordName . equals ( "DBREF" ))
2745+ pdb_DBREF_Handler ( line );
2746+ else if ( recordName . equals ( "SITE" ))
2747+ pdb_SITE_Handler ( line );
2748+ else if ( recordName . equals ( "SSBOND" ))
2749+ pdb_SSBOND_Handler ( line );
2750+ else if ( recordName . equals ( "LINK" ))
2751+ pdb_LINK_Handler ( line );
2752+ else if ( params . isParseSecStruc ()) {
2753+ if ( recordName .equals ("HELIX" ) ) pdb_HELIX_Handler ( line ) ;
2754+ else if (recordName .equals ("SHEET " )) pdb_SHEET_Handler ( line ) ;
2755+ else if ( recordName . equals ( "TURN" )) pdb_TURN_Handler ( line ) ;
2756+ }
2757+ } catch ( StringIndexOutOfBoundsException ex ) {
2758+ logger . warn ( "Unable to parse [" + line + "]" );
27462759 }
27472760
27482761
0 commit comments