[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:4651] mw32-registry-list-keys に不正な引数を指定するとエラー



藤井です。

registry API で以下の不具合が発生します。

(1) (mw32-registry-list-keys "HOGE") を評価すると返り値が不定。
(2) (mw32-registry-list-keys nil) を評価すると Meadow が落ちる。

(1) については、registry_key_setup() がエラーを返す(キーのルート部分に
存在しないものが指定されている)ときに、Fmw32_registry_list_keys が初期
化されていない Lisp_Object の変数を返すのが原因のようです。

(2) については、Fmw32_registry_list_keys で引数のチェックなしに 
MW32_ENCODE_TEXT() を呼び出しているのが原因ではないでしょうか?

# mw32-registry-list-values についても同様です。

以下のようにコードを修正したら直りました。
# どういうエラーメッセージが適切か分からないのでエラーメッセージは適当です。

--- src/mw32reg.c.orig	2003-06-18 03:18:03.000000000 +0900
+++ src/mw32reg.c	2003-10-08 20:19:11.250000000 +0900
@@ -792,9 +792,12 @@
   LPSTR errmsg = NULL;
   long err;
 
+  CHECK_STRING (key, 0);
+
   MW32_ENCODE_TEXT (key, Vw32_system_coding_system, &key_data, &key_len);
   if (!registry_key_setup(&regkey, key_data, NULL))
     {
+      errmsg = "Cannot open KEY, %s";
       goto quit;
     }
 
@@ -848,9 +851,12 @@
   long err;
   Lisp_Object result;
 
+  CHECK_STRING (key, 0);
+
   MW32_ENCODE_TEXT (key, Vw32_system_coding_system, &key_data, &key_len);
   if (!registry_key_setup(&regkey, key_data, NULL))
     {
+      errmsg = "Cannot open KEY, %s";
       goto quit;
     }
 

--
藤井 正行 / Masayuki FUJII ( boochang@xxxxxxxxxxxx )