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
b9c03e99
Commit
b9c03e99
authored
Mar 27, 2006
by
Hye-Shik Chang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix reference leaks introduced by the recent incremental codec
changes.
parent
40108c97
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
52 additions
and
41 deletions
+52
-41
Modules/cjkcodecs/multibytecodec.c
Modules/cjkcodecs/multibytecodec.c
+48
-37
Modules/cjkcodecs/multibytecodec.h
Modules/cjkcodecs/multibytecodec.h
+4
-4
No files found.
Modules/cjkcodecs/multibytecodec.c
View file @
b9c03e99
...
...
@@ -758,7 +758,9 @@ encoder_encode_stateful(MultibyteStatefulEncoderContext *ctx,
datalen
,
ctx
->
errors
,
final
?
MBENC_FLUSH
:
0
);
if
(
r
==
NULL
)
{
/* recover the original pending buffer */
memcpy
(
ctx
->
pending
,
inbuf_tmp
,
Py_UNICODE_SIZE
*
origpending
);
if
(
origpending
>
0
)
memcpy
(
ctx
->
pending
,
inbuf_tmp
,
Py_UNICODE_SIZE
*
origpending
);
ctx
->
pendingsize
=
origpending
;
goto
errorexit
;
}
...
...
@@ -887,17 +889,9 @@ static PyObject *
mbiencoder_new
(
PyTypeObject
*
type
,
PyObject
*
args
,
PyObject
*
kwds
)
{
MultibyteIncrementalEncoderObject
*
self
;
PyObject
*
codec
;
PyObject
*
codec
=
NULL
;
char
*
errors
=
NULL
;
codec
=
PyObject_GetAttrString
((
PyObject
*
)
type
,
"codec"
);
if
(
codec
==
NULL
)
return
NULL
;
if
(
!
MultibyteCodec_Check
(
codec
))
{
PyErr_SetString
(
PyExc_TypeError
,
"codec is unexpected type"
);
return
NULL
;
}
if
(
!
PyArg_ParseTupleAndKeywords
(
args
,
kwds
,
"|s:IncrementalEncoder"
,
incnewkwarglist
,
&
errors
))
return
NULL
;
...
...
@@ -906,6 +900,14 @@ mbiencoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
if
(
self
==
NULL
)
return
NULL
;
codec
=
PyObject_GetAttrString
((
PyObject
*
)
type
,
"codec"
);
if
(
codec
==
NULL
)
goto
errorexit
;
if
(
!
MultibyteCodec_Check
(
codec
))
{
PyErr_SetString
(
PyExc_TypeError
,
"codec is unexpected type"
);
goto
errorexit
;
}
self
->
codec
=
((
MultibyteCodecObject
*
)
codec
)
->
codec
;
self
->
pendingsize
=
0
;
self
->
errors
=
internal_error_callback
(
errors
);
...
...
@@ -915,10 +917,12 @@ mbiencoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
self
->
codec
->
encinit
(
&
self
->
state
,
self
->
codec
->
config
)
!=
0
)
goto
errorexit
;
Py_DECREF
(
codec
);
return
(
PyObject
*
)
self
;
errorexit:
Py_XDECREF
(
self
);
Py_XDECREF
(
codec
);
return
NULL
;
}
...
...
@@ -1080,17 +1084,9 @@ static PyObject *
mbidecoder_new
(
PyTypeObject
*
type
,
PyObject
*
args
,
PyObject
*
kwds
)
{
MultibyteIncrementalDecoderObject
*
self
;
PyObject
*
codec
;
PyObject
*
codec
=
NULL
;
char
*
errors
=
NULL
;
codec
=
PyObject_GetAttrString
((
PyObject
*
)
type
,
"codec"
);
if
(
codec
==
NULL
)
return
NULL
;
if
(
!
MultibyteCodec_Check
(
codec
))
{
PyErr_SetString
(
PyExc_TypeError
,
"codec is unexpected type"
);
return
NULL
;
}
if
(
!
PyArg_ParseTupleAndKeywords
(
args
,
kwds
,
"|s:IncrementalDecoder"
,
incnewkwarglist
,
&
errors
))
return
NULL
;
...
...
@@ -1099,6 +1095,14 @@ mbidecoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
if
(
self
==
NULL
)
return
NULL
;
codec
=
PyObject_GetAttrString
((
PyObject
*
)
type
,
"codec"
);
if
(
codec
==
NULL
)
goto
errorexit
;
if
(
!
MultibyteCodec_Check
(
codec
))
{
PyErr_SetString
(
PyExc_TypeError
,
"codec is unexpected type"
);
goto
errorexit
;
}
self
->
codec
=
((
MultibyteCodecObject
*
)
codec
)
->
codec
;
self
->
pendingsize
=
0
;
self
->
errors
=
internal_error_callback
(
errors
);
...
...
@@ -1108,10 +1112,12 @@ mbidecoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
self
->
codec
->
decinit
(
&
self
->
state
,
self
->
codec
->
config
)
!=
0
)
goto
errorexit
;
Py_DECREF
(
codec
);
return
(
PyObject
*
)
self
;
errorexit:
Py_XDECREF
(
self
);
Py_XDECREF
(
codec
);
return
NULL
;
}
...
...
@@ -1381,17 +1387,9 @@ static PyObject *
mbstreamreader_new
(
PyTypeObject
*
type
,
PyObject
*
args
,
PyObject
*
kwds
)
{
MultibyteStreamReaderObject
*
self
;
PyObject
*
codec
,
*
stream
;
PyObject
*
stream
,
*
codec
=
NULL
;
char
*
errors
=
NULL
;
codec
=
PyObject_GetAttrString
((
PyObject
*
)
type
,
"codec"
);
if
(
codec
==
NULL
)
return
NULL
;
if
(
!
MultibyteCodec_Check
(
codec
))
{
PyErr_SetString
(
PyExc_TypeError
,
"codec is unexpected type"
);
return
NULL
;
}
if
(
!
PyArg_ParseTupleAndKeywords
(
args
,
kwds
,
"O|s:StreamReader"
,
streamkwarglist
,
&
stream
,
&
errors
))
return
NULL
;
...
...
@@ -1400,6 +1398,14 @@ mbstreamreader_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
if
(
self
==
NULL
)
return
NULL
;
codec
=
PyObject_GetAttrString
((
PyObject
*
)
type
,
"codec"
);
if
(
codec
==
NULL
)
goto
errorexit
;
if
(
!
MultibyteCodec_Check
(
codec
))
{
PyErr_SetString
(
PyExc_TypeError
,
"codec is unexpected type"
);
goto
errorexit
;
}
self
->
codec
=
((
MultibyteCodecObject
*
)
codec
)
->
codec
;
self
->
stream
=
stream
;
Py_INCREF
(
stream
);
...
...
@@ -1411,10 +1417,12 @@ mbstreamreader_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
self
->
codec
->
decinit
(
&
self
->
state
,
self
->
codec
->
config
)
!=
0
)
goto
errorexit
;
Py_DECREF
(
codec
);
return
(
PyObject
*
)
self
;
errorexit:
Py_XDECREF
(
self
);
Py_XDECREF
(
codec
);
return
NULL
;
}
...
...
@@ -1501,6 +1509,7 @@ mbstreamwriter_iwrite(MultibyteStreamWriterObject *self,
if
(
wr
==
NULL
)
return
-
1
;
Py_DECREF
(
wr
);
return
0
;
}
...
...
@@ -1583,17 +1592,9 @@ static PyObject *
mbstreamwriter_new
(
PyTypeObject
*
type
,
PyObject
*
args
,
PyObject
*
kwds
)
{
MultibyteStreamWriterObject
*
self
;
PyObject
*
codec
,
*
stream
;
PyObject
*
stream
,
*
codec
=
NULL
;
char
*
errors
=
NULL
;
codec
=
PyObject_GetAttrString
((
PyObject
*
)
type
,
"codec"
);
if
(
codec
==
NULL
)
return
NULL
;
if
(
!
MultibyteCodec_Check
(
codec
))
{
PyErr_SetString
(
PyExc_TypeError
,
"codec is unexpected type"
);
return
NULL
;
}
if
(
!
PyArg_ParseTupleAndKeywords
(
args
,
kwds
,
"O|s:StreamWriter"
,
streamkwarglist
,
&
stream
,
&
errors
))
return
NULL
;
...
...
@@ -1602,6 +1603,14 @@ mbstreamwriter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
if
(
self
==
NULL
)
return
NULL
;
codec
=
PyObject_GetAttrString
((
PyObject
*
)
type
,
"codec"
);
if
(
codec
==
NULL
)
goto
errorexit
;
if
(
!
MultibyteCodec_Check
(
codec
))
{
PyErr_SetString
(
PyExc_TypeError
,
"codec is unexpected type"
);
goto
errorexit
;
}
self
->
codec
=
((
MultibyteCodecObject
*
)
codec
)
->
codec
;
self
->
stream
=
stream
;
Py_INCREF
(
stream
);
...
...
@@ -1613,10 +1622,12 @@ mbstreamwriter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
self
->
codec
->
encinit
(
&
self
->
state
,
self
->
codec
->
config
)
!=
0
)
goto
errorexit
;
Py_DECREF
(
codec
);
return
(
PyObject
*
)
self
;
errorexit:
Py_XDECREF
(
self
);
Py_XDECREF
(
codec
);
return
NULL
;
}
...
...
Modules/cjkcodecs/multibytecodec.h
View file @
b9c03e99
...
...
@@ -123,10 +123,10 @@ typedef struct {
#define ERROR_IGNORE (PyObject *)(2)
#define ERROR_REPLACE (PyObject *)(3)
#define ERROR_ISCUSTOM(p) ((p) < ERROR_STRICT || ERROR_REPLACE < (p))
#define ERROR_DECREF(p) do { \
if (ERROR_ISCUSTOM(p)) { \
Py_DECREF(p); \
} \
#define ERROR_DECREF(p) do {
\
if (
p != NULL &&
ERROR_ISCUSTOM(p)) { \
Py_DECREF(p);
\
}
\
} while (0);
#define MBENC_FLUSH 0x0001
/* encode all characters encodable */
...
...
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