diff --git a/ChangeLog b/ChangeLog
index 684eb01a3a..a8efa6641f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Wed Dec 15 07:11:55 2010  Tanaka Akira  <akr@fsij.org>
+
+	* hash.c: parenthesize macro arguments.
+
 Wed Dec 15 04:02:00 2010  KOSAKI Motohiro  <kosaki.motohiro@gmail.com>
 
 	* ext/openssl/ossl_x509ext.c (ossl_x509extfactory_set_config):
diff --git a/hash.c b/hash.c
index b05adc6f4d..c769e60986 100644
--- a/hash.c
+++ b/hash.c
@@ -2003,7 +2003,7 @@ static int path_tainted = -1;
 
 static char **origenviron;
 #ifdef _WIN32
-#define GET_ENVIRON(e) (e = rb_w32_get_environ())
+#define GET_ENVIRON(e) ((e) = rb_w32_get_environ())
 #define FREE_ENVIRON(e) rb_w32_free_environ(e)
 static char **my_environ;
 #undef environ
@@ -2019,11 +2019,11 @@ extern char **environ;
 #define FREE_ENVIRON(e)
 #endif
 #ifdef ENV_IGNORECASE
-#define ENVMATCH(s1, s2) (STRCASECMP(s1, s2) == 0)
-#define ENVNMATCH(s1, s2, n) (STRNCASECMP(s1, s2, n) == 0)
+#define ENVMATCH(s1, s2) (STRCASECMP((s1), (s2)) == 0)
+#define ENVNMATCH(s1, s2, n) (STRNCASECMP((s1), (s2), (n)) == 0)
 #else
-#define ENVMATCH(n1, n2) (strcmp(n1, n2) == 0)
-#define ENVNMATCH(s1, s2, n) (memcmp(s1, s2, n) == 0)
+#define ENVMATCH(n1, n2) (strcmp((n1), (n2)) == 0)
+#define ENVNMATCH(s1, s2, n) (memcmp((s1), (s2), (n)) == 0)
 #endif
 
 static VALUE