diff --git a/Lib/test/test_dbm.py b/Lib/test/test_dbm.py
index 562b14f..0541f86 100755
--- a/Lib/test/test_dbm.py
+++ b/Lib/test/test_dbm.py
@@ -1,9 +1,6 @@
 from test import test_support
 import unittest
-import os
-import random
 import dbm
-from dbm import error
 
 class DbmTestCase(unittest.TestCase):
 
@@ -18,11 +15,16 @@
 
     def test_keys(self):
         self.d = dbm.open(self.filename, 'c')
-        self.assert_(self.d.keys() == [])
-        self.d['a'] = 'b'
-        self.d['12345678910'] = '019237410982340912840198242'
-        self.d.keys()
-        self.assert_(self.d.has_key('a'))
+        self.assertEqual(self.d.keys(), [])
+        a = [('a', 'b'), ('12345678910', '019237410982340912840198242')]
+        for k, v in a:
+            self.d[k] = v
+        self.assertEqual(sorted(self.d.keys()), sorted(k for (k, v) in a))
+        for k, v in a:
+            self.assert_(k in self.d)
+            self.assertEqual(self.d[k], v)
+        self.assert_('xxx' not in self.d)
+        self.assertRaises(KeyError, lambda: self.d['xxx'])
         self.d.close()
 
     def test_modes(self):
diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py
index 265c527..2fa1309 100644
--- a/Lib/test/test_platform.py
+++ b/Lib/test/test_platform.py
@@ -2,6 +2,7 @@
 import os
 import unittest
 import platform
+import subprocess
 
 from test import test_support
 
@@ -9,6 +10,21 @@
     def test_architecture(self):
         res = platform.architecture()
 
+    if hasattr(os, "symlink"):
+        def test_architecture_via_symlink(self): # issue3762
+            def get(python):
+                cmd = [python, '-c',
+                    'import platform; print platform.architecture()']
+                p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+                return p.communicate()
+            real = os.path.realpath(sys.executable)
+            link = os.path.abspath(test_support.TESTFN)
+            os.symlink(real, link)
+            try:
+                self.assertEqual(get(real), get(link))
+            finally:
+                os.remove(link)
+
     def test_machine(self):
         res = platform.machine()
 
diff --git a/Misc/NEWS b/Misc/NEWS
index ec96dc9..90540d0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@
 Core and Builtins
 -----------------
 
+- On windows, os.chdir given unicode was not working if GetCurrentDirectoryW
+  returned a path longer than MAX_PATH. (But It's doubtful this code path is
+  really executed because I cannot move to such directory on win2k)
+
 - Issue #4069: When set.remove(element) is used with a set element, the element
   is temporarily replaced with an equivalent frozenset.  But the eventual
   KeyError would always report the empty frozenset([]) as the missing key. Now
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 79c3a44..4c580c4 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -726,11 +726,16 @@
 	if (!result)
 		return FALSE;
 	if (result > MAX_PATH+1) {
-		new_path = malloc(result);
+		new_path = malloc(result * sizeof(wchar_t));
 		if (!new_path) {
 			SetLastError(ERROR_OUTOFMEMORY);
 			return FALSE;
 		}
+		result = GetCurrentDirectoryW(result, new_path);
+		if (!result) {
+			free(new_path);
+			return FALSE;
+		}
 	}
 	if (wcsncmp(new_path, L"\\\\", 2) == 0 ||
 	    wcsncmp(new_path, L"//", 2) == 0)
