[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-devel:16516] Re: aptitude --show-deps の文字化け



こんにちは、

> > 先ほど銀座の路上で話していた話題ですが、もっとましなコード思い付きまし
> > た。mbrlen が最初のmultibyte の文字列の長さを返してくれる関数です。
> 
> ありがとうございます。
> いつの間にか 2 週間ほど経ってしまいましたが、
> パッチを作成し動作確認をした上で、
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=395007
> として報告しました。

--- src/cmdline/cmdline_prompt.cc.orig  2006-10-24 03:16:42.000000000 +0900
+++ src/cmdline/cmdline_prompt.cc       2006-10-24 18:01:46.000000000 +0900
@@ -83,7 +83,13 @@
          first=false;
        }

-      s+=const_cast<pkgCache::DepIterator &>(why->dep).DepType()[0];
+      mbstate_t mbstate;
+      size_t len;
+      char *dep_type=strdup(const_cast<pkgCache::DepIterator &>(why->dep).DepType());
+      memset(&mbstate, 0, sizeof(mbstate));
+      len=mbrlen(dep_type, strlen(dep_type), &mbstate);
+      dep_type[len]=0;
+      s+=dep_type;
       s+=": ";
       s+=why->pkg.Name();
     }


コメントです:

1. dep_type を strdupしているのに開放していませんね。
2. このコードは len がエラーを返した場合には、 segv しますね。
3. DepType.c_str()でいけると思いますが、いけません?

上川
-- 
dancer@{debian.org,netfort.gr.jp}   Debian Project