Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Edited by sciSpider Java v3.0

...

Code Block
bgColor#FFCCCC
public class Login {
  static void checkPassword(String password_file) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(password_file));
    // Compare credentials 
     
    } finally {
      reader.close();
      // Other clean-up code 
    }
}

  public static void main(String[] args) throws IOException {
    String path = "password""password";
    checkPassword(path);
  }
}

...

Code Block
bgColor#ccccff
public class Login {
  static void checkPassword(String password_file) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(password_file));

    try {
      // Compare credentials
    } finally {
        try {    
          // Enclose in try-catch block
          reader.close();
        } catch (IOException ie) {
          // Forward to handler
        }
        // Other clean-up code
    }
  }

  public static void main(String[] args) throws IOException {
    String path = "password""password";
    checkPassword(path);
  }
}

...

Code Block
bgColor#ccccff
public class Login {
  static void checkPassword(String password_file) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(password_file));

    try {
      // Compare credentials
    } finally {
      closeIgnoringException(reader);
      // Other clean-up code 
    }
}

  private static void closeIgnoringException(BufferredReader s) {
    if (s != null) {
      try {
        s.close();
      } catch (IOException ie) {
        // Ignore exception if close fails
      }
    }
  }

  public static void main(String[] args) throws IOException {
    String path = "password""password";
    checkPassword(path);
  }
}

...

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

References

Wiki Markup
\[[Bloch 05|AA. Java References#Bloch 05]\] Puzzle 41: Field and Stream
\[[Harold 99|AA. Java References#Harold 99]\]
\[[Chess 07|AA. Java References#Chess 07]\] 8.3 Preventing Resource Leaks (Java)

...

EXC30-J. Do not exit abruptly from a finally block            13. Exceptional Behavior (EXC)            EXC32-J. Catch specific exceptions as opposed to the more general RuntimeException