Issue #23908: os functions now reject paths with embedded null character
on Windows instead of silently truncate them.
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
index 95bcb77..74508a7 100644
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -275,15 +275,14 @@
 
 #ifdef MS_WINDOWS
     if (PyUnicode_Check(nameobj)) {
-        int rv = _PyUnicode_HasNULChars(nameobj);
-        if (rv) {
-            if (rv != -1)
-                PyErr_SetString(PyExc_TypeError, "embedded NUL character");
-            return -1;
-        }
-        widename = PyUnicode_AsUnicode(nameobj);
+        Py_ssize_t length;
+        widename = PyUnicode_AsUnicodeAndSize(nameobj, &length);
         if (widename == NULL)
             return -1;
+        if (wcslen(widename) != length) {
+            PyErr_SetString(PyExc_TypeError, "embedded NUL character");
+            return -1;
+        }
     } else
 #endif
     if (fd < 0)