Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
9ccef3d9
Commit
9ccef3d9
authored
Aug 15, 2012
by
Antoine Pitrou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #15604: Update uses of PyObject_IsTrue() to check for and handle errors correctly.
Patch by Serhiy Storchaka.
parent
1a7cddf4
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
87 additions
and
39 deletions
+87
-39
Misc/NEWS
Misc/NEWS
+3
-0
Modules/_csv.c
Modules/_csv.c
+6
-2
Modules/_io/textio.c
Modules/_io/textio.c
+4
-1
Modules/_posixsubprocess.c
Modules/_posixsubprocess.c
+2
-0
Modules/_ssl.c
Modules/_ssl.c
+5
-1
Modules/itertoolsmodule.c
Modules/itertoolsmodule.c
+9
-4
Modules/parsermodule.c
Modules/parsermodule.c
+13
-5
Modules/pyexpat.c
Modules/pyexpat.c
+24
-18
Objects/typeobject.c
Objects/typeobject.c
+7
-5
Python/bltinmodule.c
Python/bltinmodule.c
+3
-1
Python/import.c
Python/import.c
+11
-2
No files found.
Misc/NEWS
View file @
9ccef3d9
...
...
@@ -10,6 +10,9 @@ What's New in Python 3.2.4
Core and Builtins
-----------------
- Issue #15604: Update uses of PyObject_IsTrue() to check for and handle
errors correctly. Patch by Serhiy Storchaka.
- Issue #13119: sys.stdout and sys.stderr are now using "\r\n" newline on
Windows, as Python 2.
...
...
Modules/_csv.c
View file @
9ccef3d9
...
...
@@ -166,8 +166,12 @@ _set_bool(const char *name, int *target, PyObject *src, int dflt)
{
if
(
src
==
NULL
)
*
target
=
dflt
;
else
*
target
=
PyObject_IsTrue
(
src
);
else
{
int
b
=
PyObject_IsTrue
(
src
);
if
(
b
<
0
)
return
-
1
;
*
target
=
b
;
}
return
0
;
}
...
...
Modules/_io/textio.c
View file @
9ccef3d9
...
...
@@ -1046,8 +1046,11 @@ textiowrapper_init(textio *self, PyObject *args, PyObject *kwds)
res
=
PyObject_CallMethod
(
buffer
,
"seekable"
,
NULL
);
if
(
res
==
NULL
)
goto
error
;
self
->
seekable
=
self
->
telling
=
PyObject_IsTrue
(
res
);
r
=
PyObject_IsTrue
(
res
);
Py_DECREF
(
res
);
if
(
r
<
0
)
goto
error
;
self
->
seekable
=
self
->
telling
=
r
;
self
->
has_read1
=
PyObject_HasAttrString
(
buffer
,
"read1"
);
...
...
Modules/_posixsubprocess.c
View file @
9ccef3d9
...
...
@@ -525,6 +525,8 @@ subprocess_fork_exec(PyObject* self, PyObject *args)
return
NULL
;
close_fds
=
PyObject_IsTrue
(
py_close_fds
);
if
(
close_fds
<
0
)
return
NULL
;
if
(
close_fds
&&
errpipe_write
<
3
)
{
/* precondition */
PyErr_SetString
(
PyExc_ValueError
,
"errpipe_write must be >= 3"
);
return
NULL
;
...
...
Modules/_ssl.c
View file @
9ccef3d9
...
...
@@ -883,6 +883,7 @@ PySSL_peercert(PySSLSocket *self, PyObject *args)
int
len
;
int
verification
;
PyObject
*
binary_mode
=
Py_None
;
int
b
;
if
(
!
PyArg_ParseTuple
(
args
,
"|O:peer_certificate"
,
&
binary_mode
))
return
NULL
;
...
...
@@ -890,7 +891,10 @@ PySSL_peercert(PySSLSocket *self, PyObject *args)
if
(
!
self
->
peer_cert
)
Py_RETURN_NONE
;
if
(
PyObject_IsTrue
(
binary_mode
))
{
b
=
PyObject_IsTrue
(
binary_mode
);
if
(
b
<
0
)
return
NULL
;
if
(
b
)
{
/* return cert in DER-encoded format */
unsigned
char
*
bytes_buf
=
NULL
;
...
...
Modules/itertoolsmodule.c
View file @
9ccef3d9
...
...
@@ -903,11 +903,13 @@ dropwhile_next(dropwhileobject *lz)
}
ok
=
PyObject_IsTrue
(
good
);
Py_DECREF
(
good
);
if
(
!
ok
)
{
if
(
ok
==
0
)
{
lz
->
start
=
1
;
return
item
;
}
Py_DECREF
(
item
);
if
(
ok
<
0
)
return
NULL
;
}
}
...
...
@@ -1043,10 +1045,11 @@ takewhile_next(takewhileobject *lz)
}
ok
=
PyObject_IsTrue
(
good
);
Py_DECREF
(
good
);
if
(
ok
)
if
(
ok
>
0
)
return
item
;
Py_DECREF
(
item
);
lz
->
stop
=
1
;
if
(
ok
==
0
)
lz
->
stop
=
1
;
return
NULL
;
}
...
...
@@ -2959,9 +2962,11 @@ filterfalse_next(filterfalseobject *lz)
ok
=
PyObject_IsTrue
(
good
);
Py_DECREF
(
good
);
}
if
(
!
ok
)
if
(
ok
==
0
)
return
item
;
Py_DECREF
(
item
);
if
(
ok
<
0
)
return
NULL
;
}
}
...
...
Modules/parsermodule.c
View file @
9ccef3d9
...
...
@@ -401,10 +401,14 @@ parser_st2tuple(PyST_Object *self, PyObject *args, PyObject *kw)
int
lineno
=
0
;
int
col_offset
=
0
;
if
(
line_option
!=
NULL
)
{
lineno
=
(
PyObject_IsTrue
(
line_option
)
!=
0
)
?
1
:
0
;
lineno
=
PyObject_IsTrue
(
line_option
);
if
(
lineno
<
0
)
return
NULL
;
}
if
(
col_option
!=
NULL
)
{
col_offset
=
(
PyObject_IsTrue
(
col_option
)
!=
0
)
?
1
:
0
;
col_offset
=
PyObject_IsTrue
(
col_option
);
if
(
col_offset
<
0
)
return
NULL
;
}
/*
* Convert ST into a tuple representation. Use Guido's function,
...
...
@@ -444,10 +448,14 @@ parser_st2list(PyST_Object *self, PyObject *args, PyObject *kw)
int
lineno
=
0
;
int
col_offset
=
0
;
if
(
line_option
!=
0
)
{
lineno
=
PyObject_IsTrue
(
line_option
)
?
1
:
0
;
lineno
=
PyObject_IsTrue
(
line_option
);
if
(
lineno
<
0
)
return
NULL
;
}
if
(
col_option
!=
NULL
)
{
col_offset
=
(
PyObject_IsTrue
(
col_option
)
!=
0
)
?
1
:
0
;
if
(
col_option
!=
0
)
{
col_offset
=
PyObject_IsTrue
(
col_option
);
if
(
col_offset
<
0
)
return
NULL
;
}
/*
* Convert ST into a tuple representation. Use Guido's function,
...
...
Modules/pyexpat.c
View file @
9ccef3d9
...
...
@@ -1033,13 +1033,16 @@ static PyObject *
xmlparse_UseForeignDTD
(
xmlparseobject
*
self
,
PyObject
*
args
)
{
PyObject
*
flagobj
=
NULL
;
XML_Bool
flag
=
XML_TRUE
;
int
flag
=
1
;
enum
XML_Error
rc
;
if
(
!
PyArg_
UnpackTuple
(
args
,
"UseForeignDTD"
,
0
,
1
,
&
flagobj
))
if
(
!
PyArg_
ParseTuple
(
args
,
"O:UseForeignDTD"
,
&
flagobj
))
return
NULL
;
if
(
flagobj
!=
NULL
)
flag
=
PyObject_IsTrue
(
flagobj
)
?
XML_TRUE
:
XML_FALSE
;
rc
=
XML_UseForeignDTD
(
self
->
itself
,
flag
);
if
(
flagobj
!=
NULL
)
{
flag
=
PyObject_IsTrue
(
flagobj
);
if
(
flag
<
0
)
return
NULL
;
}
rc
=
XML_UseForeignDTD
(
self
->
itself
,
flag
?
XML_TRUE
:
XML_FALSE
);
if
(
rc
!=
XML_ERROR_NONE
)
{
return
set_error
(
self
,
rc
);
}
...
...
@@ -1397,7 +1400,10 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v)
}
assert
(
PyUnicode_Check
(
name
));
if
(
PyUnicode_CompareWithASCIIString
(
name
,
"buffer_text"
)
==
0
)
{
if
(
PyObject_IsTrue
(
v
))
{
int
b
=
PyObject_IsTrue
(
v
);
if
(
b
<
0
)
return
-
1
;
if
(
b
)
{
if
(
self
->
buffer
==
NULL
)
{
self
->
buffer
=
malloc
(
self
->
buffer_size
);
if
(
self
->
buffer
==
NULL
)
{
...
...
@@ -1416,25 +1422,25 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v)
return
0
;
}
if
(
PyUnicode_CompareWithASCIIString
(
name
,
"namespace_prefixes"
)
==
0
)
{
i
f
(
PyObject_IsTrue
(
v
))
self
->
ns_prefixes
=
1
;
else
self
->
ns_prefixes
=
0
;
i
nt
b
=
PyObject_IsTrue
(
v
);
if
(
b
<
0
)
return
-
1
;
self
->
ns_prefixes
=
b
;
XML_SetReturnNSTriplet
(
self
->
itself
,
self
->
ns_prefixes
);
return
0
;
}
if
(
PyUnicode_CompareWithASCIIString
(
name
,
"ordered_attributes"
)
==
0
)
{
i
f
(
PyObject_IsTrue
(
v
))
self
->
ordered_attributes
=
1
;
else
self
->
ordered_attributes
=
0
;
i
nt
b
=
PyObject_IsTrue
(
v
);
if
(
b
<
0
)
return
-
1
;
self
->
ordered_attributes
=
b
;
return
0
;
}
if
(
PyUnicode_CompareWithASCIIString
(
name
,
"specified_attributes"
)
==
0
)
{
i
f
(
PyObject_IsTrue
(
v
))
self
->
specified_attributes
=
1
;
else
self
->
specified_attributes
=
0
;
i
nt
b
=
PyObject_IsTrue
(
v
);
if
(
b
<
0
)
return
-
1
;
self
->
specified_attributes
=
b
;
return
0
;
}
...
...
Objects/typeobject.c
View file @
9ccef3d9
...
...
@@ -340,11 +340,15 @@ type_set_abstractmethods(PyTypeObject *type, PyObject *value, void *context)
abc.ABCMeta.__new__, so this function doesn't do anything
special to update subclasses.
*/
int
res
;
int
abstract
,
res
;
if
(
value
!=
NULL
)
{
abstract
=
PyObject_IsTrue
(
value
);
if
(
abstract
<
0
)
return
-
1
;
res
=
PyDict_SetItemString
(
type
->
tp_dict
,
"__abstractmethods__"
,
value
);
}
else
{
abstract
=
0
;
res
=
PyDict_DelItemString
(
type
->
tp_dict
,
"__abstractmethods__"
);
if
(
res
&&
PyErr_ExceptionMatches
(
PyExc_KeyError
))
{
PyErr_SetString
(
PyExc_AttributeError
,
"__abstractmethods__"
);
...
...
@@ -353,12 +357,10 @@ type_set_abstractmethods(PyTypeObject *type, PyObject *value, void *context)
}
if
(
res
==
0
)
{
PyType_Modified
(
type
);
if
(
value
&&
PyObject_IsTrue
(
value
))
{
if
(
abstract
)
type
->
tp_flags
|=
Py_TPFLAGS_IS_ABSTRACT
;
}
else
{
else
type
->
tp_flags
&=
~
Py_TPFLAGS_IS_ABSTRACT
;
}
}
return
res
;
}
...
...
Python/bltinmodule.c
View file @
9ccef3d9
...
...
@@ -428,9 +428,11 @@ filter_next(filterobject *lz)
ok
=
PyObject_IsTrue
(
good
);
Py_DECREF
(
good
);
}
if
(
ok
)
if
(
ok
>
0
)
return
item
;
Py_DECREF
(
item
);
if
(
ok
<
0
)
return
NULL
;
}
}
...
...
Python/import.c
View file @
9ccef3d9
...
...
@@ -1338,7 +1338,10 @@ load_source_module(char *name, char *pathname, FILE *fp)
name
,
pathname
);
if
(
cpathname
)
{
PyObject
*
ro
=
PySys_GetObject
(
"dont_write_bytecode"
);
if
(
ro
==
NULL
||
!
PyObject_IsTrue
(
ro
))
int
b
=
(
ro
==
NULL
)
?
0
:
PyObject_IsTrue
(
ro
);
if
(
b
<
0
)
goto
error_exit
;
if
(
!
b
)
write_compiled_module
(
co
,
cpathname
,
&
st
);
}
}
...
...
@@ -2504,7 +2507,13 @@ import_module_level(char *name, PyObject *globals, PyObject *locals,
}
if
(
fromlist
!=
NULL
)
{
if
(
fromlist
==
Py_None
||
!
PyObject_IsTrue
(
fromlist
))
int
b
=
(
fromlist
==
Py_None
)
?
0
:
PyObject_IsTrue
(
fromlist
);
if
(
b
<
0
)
{
Py_DECREF
(
tail
);
Py_DECREF
(
head
);
goto
error_exit
;
}
if
(
!
b
)
fromlist
=
NULL
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment