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
c5bef75c
Commit
c5bef75c
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
4ffe9a06
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
112 additions
and
52 deletions
+112
-52
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/_ssl.c
Modules/_ssl.c
+5
-1
Modules/cStringIO.c
Modules/cStringIO.c
+5
-1
Modules/itertoolsmodule.c
Modules/itertoolsmodule.c
+12
-5
Modules/parsermodule.c
Modules/parsermodule.c
+13
-5
Modules/pyexpat.c
Modules/pyexpat.c
+30
-24
Objects/typeobject.c
Objects/typeobject.c
+7
-5
Python/bltinmodule.c
Python/bltinmodule.c
+16
-6
Python/import.c
Python/import.c
+11
-2
No files found.
Misc/NEWS
View file @
c5bef75c
...
...
@@ -9,6 +9,9 @@ What's New in Python 2.7.4
Core and Builtins
-----------------
- Issue #15604: Update uses of PyObject_IsTrue() to check for and handle
errors correctly. Patch by Serhiy Storchaka.
- Issue #15041: Update "see also" list in tkinter documentation.
- Issue #14579: Fix error handling bug in the utf-16 decoder. Patch by
...
...
Modules/_csv.c
View file @
c5bef75c
...
...
@@ -208,8 +208,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 @
c5bef75c
...
...
@@ -1013,8 +1013,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
->
encoding_start_of_stream
=
0
;
if
(
self
->
seekable
&&
self
->
encoder
)
{
...
...
Modules/_ssl.c
View file @
c5bef75c
...
...
@@ -1005,6 +1005,7 @@ PySSL_peercert(PySSLObject *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
;
...
...
@@ -1012,7 +1013,10 @@ PySSL_peercert(PySSLObject *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/cStringIO.c
View file @
c5bef75c
...
...
@@ -127,12 +127,16 @@ IO_cgetval(PyObject *self) {
static
PyObject
*
IO_getval
(
IOobject
*
self
,
PyObject
*
args
)
{
PyObject
*
use_pos
=
Py_None
;
int
b
;
Py_ssize_t
s
;
if
(
!
IO__opencheck
(
self
))
return
NULL
;
if
(
!
PyArg_UnpackTuple
(
args
,
"getval"
,
0
,
1
,
&
use_pos
))
return
NULL
;
if
(
PyObject_IsTrue
(
use_pos
))
{
b
=
PyObject_IsTrue
(
use_pos
);
if
(
b
<
0
)
return
NULL
;
if
(
b
)
{
s
=
self
->
pos
;
if
(
s
>
self
->
string_size
)
s
=
self
->
string_size
;
}
...
...
Modules/itertoolsmodule.c
View file @
c5bef75c
...
...
@@ -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
;
}
...
...
@@ -3001,9 +3004,11 @@ ifilter_next(ifilterobject *lz)
ok
=
PyObject_IsTrue
(
good
);
Py_DECREF
(
good
);
}
if
(
ok
)
if
(
ok
>
0
)
return
item
;
Py_DECREF
(
item
);
if
(
ok
<
0
)
return
NULL
;
}
}
...
...
@@ -3144,9 +3149,11 @@ ifilterfalse_next(ifilterfalseobject *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 @
c5bef75c
...
...
@@ -350,10 +350,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,
...
...
@@ -401,10 +405,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 @
c5bef75c
...
...
@@ -1174,13 +1174,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
);
}
...
...
@@ -1549,7 +1552,10 @@ xmlparse_setattr(xmlparseobject *self, char *name, PyObject *v)
return
-
1
;
}
if
(
strcmp
(
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
)
{
...
...
@@ -1568,39 +1574,39 @@ xmlparse_setattr(xmlparseobject *self, char *name, PyObject *v)
return
0
;
}
if
(
strcmp
(
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
(
strcmp
(
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
(
strcmp
(
name
,
"returns_unicode"
)
==
0
)
{
if
(
PyObject_IsTrue
(
v
))
{
int
b
=
PyObject_IsTrue
(
v
);
if
(
b
<
0
)
return
-
1
;
#ifndef Py_USING_UNICODE
if
(
b
)
{
PyErr_SetString
(
PyExc_ValueError
,
"Unicode support not available"
);
return
-
1
;
#else
self
->
returns_unicode
=
1
;
#endif
}
else
self
->
returns_unicode
=
0
;
#endif
self
->
returns_unicode
=
b
;
return
0
;
}
if
(
strcmp
(
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 @
c5bef75c
...
...
@@ -327,11 +327,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__"
);
...
...
@@ -340,12 +344,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 @
c5bef75c
...
...
@@ -313,7 +313,7 @@ builtin_filter(PyObject *self, PyObject *args)
ok
=
PyObject_IsTrue
(
good
);
Py_DECREF
(
good
);
}
if
(
ok
)
{
if
(
ok
>
0
)
{
if
(
j
<
len
)
PyList_SET_ITEM
(
result
,
j
,
item
);
else
{
...
...
@@ -324,8 +324,11 @@ builtin_filter(PyObject *self, PyObject *args)
}
++
j
;
}
else
else
{
Py_DECREF
(
item
);
if
(
ok
<
0
)
goto
Fail_result_it
;
}
}
...
...
@@ -2784,12 +2787,15 @@ filtertuple(PyObject *func, PyObject *tuple)
}
ok
=
PyObject_IsTrue
(
good
);
Py_DECREF
(
good
);
if
(
ok
)
{
if
(
ok
>
0
)
{
if
(
PyTuple_SetItem
(
result
,
j
++
,
item
)
<
0
)
goto
Fail_1
;
}
else
else
{
Py_DECREF
(
item
);
if
(
ok
<
0
)
goto
Fail_1
;
}
}
if
(
_PyTuple_Resize
(
&
result
,
j
)
<
0
)
...
...
@@ -2851,7 +2857,7 @@ filterstring(PyObject *func, PyObject *strobj)
ok
=
PyObject_IsTrue
(
good
);
Py_DECREF
(
good
);
}
if
(
ok
)
{
if
(
ok
>
0
)
{
Py_ssize_t
reslen
;
if
(
!
PyString_Check
(
item
))
{
PyErr_SetString
(
PyExc_TypeError
,
"can't filter str to str:"
...
...
@@ -2917,6 +2923,8 @@ filterstring(PyObject *func, PyObject *strobj)
}
}
Py_DECREF
(
item
);
if
(
ok
<
0
)
goto
Fail_1
;
}
if
(
j
<
outlen
)
...
...
@@ -2977,7 +2985,7 @@ filterunicode(PyObject *func, PyObject *strobj)
ok
=
PyObject_IsTrue
(
good
);
Py_DECREF
(
good
);
}
if
(
ok
)
{
if
(
ok
>
0
)
{
Py_ssize_t
reslen
;
if
(
!
PyUnicode_Check
(
item
))
{
PyErr_SetString
(
PyExc_TypeError
,
...
...
@@ -3032,6 +3040,8 @@ filterunicode(PyObject *func, PyObject *strobj)
}
}
Py_DECREF
(
item
);
if
(
ok
<
0
)
goto
Fail_1
;
}
if
(
j
<
outlen
)
...
...
Python/import.c
View file @
c5bef75c
...
...
@@ -1043,7 +1043,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
);
}
}
...
...
@@ -2200,7 +2203,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