Author: Amaury Forgeot d'Arc <[email protected]>
Branch: string-NUL
Changeset: r51946:28448014baa2
Date: 2012-01-28 23:00 +0100
http://bitbucket.org/pypy/pypy/changeset/28448014baa2/
Log: Disallow nul bytes in more functions
diff --git a/pypy/module/posix/interp_posix.py
b/pypy/module/posix/interp_posix.py
--- a/pypy/module/posix/interp_posix.py
+++ b/pypy/module/posix/interp_posix.py
@@ -369,7 +369,7 @@
space.wrap(times[3]),
space.wrap(times[4])])
-@unwrap_spec(cmd=str)
+@unwrap_spec(cmd='str0')
def system(space, cmd):
"""Execute the command (a string) in a subshell."""
try:
@@ -512,7 +512,7 @@
for key, value in os.environ.items():
space.setitem(w_env, space.wrap(key), space.wrap(value))
-@unwrap_spec(name=str, value=str)
+@unwrap_spec(name='str0', value='str0')
def putenv(space, name, value):
"""Change or add an environment variable."""
try:
@@ -520,7 +520,7 @@
except OSError, e:
raise wrap_oserror(space, e)
-@unwrap_spec(name=str)
+@unwrap_spec(name='str0')
def unsetenv(space, name):
"""Delete an environment variable."""
try:
@@ -785,18 +785,18 @@
except OSError, e:
raise wrap_oserror(space, e)
-@unwrap_spec(mode=int, path=str)
+@unwrap_spec(mode=int, path='str0')
def spawnv(space, mode, path, w_args):
- args = [space.str_w(w_arg) for w_arg in space.unpackiterable(w_args)]
+ args = [space.str0_w(w_arg) for w_arg in space.unpackiterable(w_args)]
try:
ret = os.spawnv(mode, path, args)
except OSError, e:
raise wrap_oserror(space, e)
return space.wrap(ret)
-@unwrap_spec(mode=int, path=str)
+@unwrap_spec(mode=int, path='str0')
def spawnve(space, mode, path, w_args, w_env):
- args = [space.str_w(w_arg) for w_arg in space.unpackiterable(w_args)]
+ args = [space.str0_w(w_arg) for w_arg in space.unpackiterable(w_args)]
env = _env2interp(space, w_env)
try:
ret = os.spawnve(mode, path, args, env)
@@ -914,7 +914,7 @@
raise wrap_oserror(space, e)
return space.w_None
-@unwrap_spec(path=str)
+@unwrap_spec(path='str0')
def chroot(space, path):
""" chroot(path)
diff --git a/pypy/rpython/module/ll_os.py b/pypy/rpython/module/ll_os.py
--- a/pypy/rpython/module/ll_os.py
+++ b/pypy/rpython/module/ll_os.py
@@ -526,7 +526,7 @@
else:
raise Exception("os.utime() arg 2 must be None or a tuple of "
"2 floats, got %s" % (s_times,))
- os_utime_normalize_args._default_signature_ = [traits.str, None]
+ os_utime_normalize_args._default_signature_ = [traits.str0, None]
return extdef(os_utime_normalize_args, s_None,
"ll_os.ll_os_utime",
@@ -621,7 +621,7 @@
if result == -1:
raise OSError(rposix.get_errno(), "os_chroot failed")
- return extdef([str], None, export_name="ll_os.ll_os_chroot",
+ return extdef([str0], None, export_name="ll_os.ll_os_chroot",
llimpl=chroot_llimpl)
@registering_if(os, 'uname')
@@ -1059,7 +1059,7 @@
def os_access_oofakeimpl(path, mode):
return os.access(OOSupport.from_rstr(path), mode)
- return extdef([traits.str, int], s_Bool, llimpl=access_llimpl,
+ return extdef([traits.str0, int], s_Bool, llimpl=access_llimpl,
export_name=traits.ll_os_name("access"),
oofakeimpl=os_access_oofakeimpl)
@@ -1071,8 +1071,8 @@
from pypy.rpython.module.ll_win32file import make_getfullpathname_impl
getfullpathname_llimpl = make_getfullpathname_impl(traits)
- return extdef([traits.str], # a single argument which is a str
- traits.str, # returns a string
+ return extdef([traits.str0], # a single argument which is a str
+ traits.str0, # returns a string
traits.ll_os_name('_getfullpathname'),
llimpl=getfullpathname_llimpl)
@@ -1369,7 +1369,7 @@
res = os_system(command)
return rffi.cast(lltype.Signed, res)
- return extdef([str], int, llimpl=system_llimpl,
+ return extdef([str0], int, llimpl=system_llimpl,
export_name="ll_os.ll_os_system")
@registering_str_unicode(os.unlink)
@@ -1391,7 +1391,7 @@
if not win32traits.DeleteFile(path):
raise rwin32.lastWindowsError()
- return extdef([traits.str], s_None, llimpl=unlink_llimpl,
+ return extdef([traits.str0], s_None, llimpl=unlink_llimpl,
export_name=traits.ll_os_name('unlink'))
@registering_str_unicode(os.chdir)
@@ -1409,7 +1409,7 @@
from pypy.rpython.module.ll_win32file import make_chdir_impl
os_chdir_llimpl = make_chdir_impl(traits)
- return extdef([traits.str], s_None, llimpl=os_chdir_llimpl,
+ return extdef([traits.str0], s_None, llimpl=os_chdir_llimpl,
export_name=traits.ll_os_name('chdir'))
@registering_str_unicode(os.mkdir)
@@ -1445,7 +1445,7 @@
if res < 0:
raise OSError(rposix.get_errno(), "os_rmdir failed")
- return extdef([traits.str], s_None, llimpl=rmdir_llimpl,
+ return extdef([traits.str0], s_None, llimpl=rmdir_llimpl,
export_name=traits.ll_os_name('rmdir'))
@registering_str_unicode(os.chmod)
diff --git a/pypy/rpython/module/ll_os_environ.py
b/pypy/rpython/module/ll_os_environ.py
--- a/pypy/rpython/module/ll_os_environ.py
+++ b/pypy/rpython/module/ll_os_environ.py
@@ -5,6 +5,8 @@
from pypy.rpython.lltypesystem import rffi, lltype
from pypy.rlib import rposix
+str0 = annmodel.s_Str0
+
# ____________________________________________________________
#
# Annotation support to control access to 'os.environ' in the RPython program
@@ -64,7 +66,7 @@
rffi.free_charp(l_name)
return result
-register_external(r_getenv, [str], annmodel.SomeString(can_be_None=True),
+register_external(r_getenv, [str0], annmodel.SomeString(can_be_None=True),
export_name='ll_os.ll_os_getenv',
llimpl=getenv_llimpl)
@@ -93,7 +95,7 @@
if l_oldstring:
rffi.free_charp(l_oldstring)
-register_external(r_putenv, [str, str], annmodel.s_None,
+register_external(r_putenv, [str0, str0], annmodel.s_None,
export_name='ll_os.ll_os_putenv',
llimpl=putenv_llimpl)
@@ -128,7 +130,7 @@
del envkeepalive.byname[name]
rffi.free_charp(l_oldstring)
- register_external(r_unsetenv, [str], annmodel.s_None,
+ register_external(r_unsetenv, [str0], annmodel.s_None,
export_name='ll_os.ll_os_unsetenv',
llimpl=unsetenv_llimpl)
@@ -172,7 +174,7 @@
i += 1
return result
-register_external(r_envkeys, [], [str], # returns a list of strings
+register_external(r_envkeys, [], [str0], # returns a list of strings
export_name='ll_os.ll_os_envkeys',
llimpl=envkeys_llimpl)
@@ -193,6 +195,6 @@
i += 1
return result
-register_external(r_envitems, [], [(str, str)],
+register_external(r_envitems, [], [(str0, str0)],
export_name='ll_os.ll_os_envitems',
llimpl=envitems_llimpl)
diff --git a/pypy/translator/goal/nanos.py b/pypy/translator/goal/nanos.py
--- a/pypy/translator/goal/nanos.py
+++ b/pypy/translator/goal/nanos.py
@@ -266,7 +266,7 @@
raise NotImplementedError("os.name == %r" % (os.name,))
def getenv(space, w_name):
- name = space.str_w(w_name)
+ name = space.str0_w(w_name)
return space.wrap(os.environ.get(name))
getenv_w = interp2app(getenv)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit