HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

爆弾コード

いやそれリークしますからっ!

以下のようなプログラムを見つけて、思わず机を叩き割ろうかと思いましたよ、えぇ‥ Reader reader = null; try { for (int i = 0; i < files.length; ++i) { reader = new BufferedReader(new InputStreamReader(new FileInputStream(files[i]))); // 以下、…

PHPの恐怖仕様

冒頭で宣言しますが、今回のネタはあくまでPHPの仕様に対する実験であり、実際に使っちゃうと脆弱性を盛り込んでしまうネタなので、充分ご注意ください。 PHPの日本語変数名と文字コード – FLAMA技術Blog と同じことを宣言しておく。 さて、まずは「EUC-JP(…

HTTPリクエストに対するレスポンスにごみデータ?

HTTPリクエスト/レスポンスを処理する、とあるライブラリを使っていたところ、妙なデータが返ってくることに気づいた。 おおよそ以下のような感じ。 201f <root> <row>abcdefghijklmnopqrstuvwxyz<row> <row>abcdefghijklmnopqrstuvwxyz<row> <row>abcdefghijklmnopqrstuvwxyz<row> <row>abcdefghijkl</row></row></row></row></row></row></row></root>…

定義値の型はちゃんと意識しましょう

デバッグモードなんだかそうでないんだか‥ define('DEBUG', 'false'); まぁこれだけならいいんだけど‥ if (DEBUG) { error_log("これはデバッグメッセージよ♪\n", 3, "Debug.log"); } 「if (DEBUG == 'true')」とか書いてあるならまだしも、定数DEBUGは文字…

無駄にCPUを使いたい処理(謎)

次のようなコードに遭遇したとき、一瞬、見なかったことにしようかと思った。 private static String buildString(List codes) { String resStr = ""; // 何か別の処理 for (int j = 0; j < codes.size(); ++j) { if (Integer.parseInt((String) codes.get(j…

JSPで誤ったコメントアウト

実害がなかったので「未遂」ではあるのだが‥ 問題となったのは次のコード。 <%@ page contentType="text/html" pageEncoding="UTF-8" %><% response.setHeader("pragma","no-cache"); response.setHeader("Cache-Control","no-cache"); %>

トランザクションを放置したために現れる亡霊データ

データベースのトランザクションの終了処理をきちんとしないために、トランザクションがタイムアウトするまでの間、未コミットの亡霊データ(何)が見えてしまうという爆弾コード。 実際のコードを簡略化し、JDBCに置き換えたコードで掲載。 private static vo…

File.createTempFile() と File.deleteOnExit() のコンボ罠の続き

昨日書いたエントリの続き。File.createTempFile() と File.deleteOnExit() のコンボ罠 - HHeLiBeXの日記 正道編「再現はできていない」と書いたが、目指していたものがLinux環境でのJava VMのクラッシュ(hs_err_xxxx.log を吐く状態)だったためで、メモリが…

File.createTempFile() と File.deleteOnExit() のコンボ罠

巷ではかなーり昔から認識されている爆弾コードらしい。 String prefix = "testDeleteOnExit_"; String suffix = ".txt"; File in = File.createTempFile(prefix, suffix); in.deleteOnExit(); // 安全のため いや、全然「安全」じゃない、むしろ危険らしい…

例外は例外なく記録せよ

これは大昔から「例外は握りつぶすな」というような感じで言われていることだが、まだまだまだまだ存在する。トラブルの原因調査を妨げるという意味で一種の爆弾コード。Javaの例外は例外なくログに記録しましょう(洒落じゃなくて)。ログレベルに応じて出力…

無駄むだムダァー

超極小爆弾だけど(メモリに対する)‥ return new String("0"); ‥よっぽど特殊な事情がない限り、"0"っていう文字列を表す別のインスタンスなんて必要ないと思うんだけど。例えば、java.util.IdentityHashMapを使わなければいけないケースとか。 ちなみに、実…

詰めが甘いObject#equals()のオーバーライド

「もれなくダブりなく」とは、書籍「プログラマの数学」に書かれていることだが、そんな「条件がもれてしまった」という爆弾コード。 public class Xxx { public boolean equals(Object o) { if (!(o instanceof Xxx)) { return false; } Xxx that = (Xxx) o…

nullチェックをしたいんだかしたくないんだか‥

何をどうしたいのか意図が分からない、また、書いた本人はすでにいない、なんてことは日常茶飯事なのですが‥orz なんとも中途半端なこんなコード。 String urlStr = ‥ ‥ ‥ int index = 0; if (urlStr != null) { index = urlStr.indexOf("?"); } if (index >…

"intでenum"の危険な罠

ずっとずっとずーっと前から言われていることで、Java 5からはenumも導入されたわけですが、そんな問題のあるコードに出くわしてしまいました‥orz コードのイメージはこんな感じ。 // とあるbeanクラス public class Xxx { public static final int YYY_AAA …

コーディングの掟

コーディングの掟(最強作法) 現場でよく見る不可解なJavaコードを一掃せよ! (開発の現場セレクション)作者: arton,宇野るいも出版社/メーカー: 翔泳社発売日: 2008/09/18メディア: 単行本(ソフトカバー)購入: 29人 クリック: 348回この商品を含むブログ (5…