Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 12 additions & 19 deletions src/constants.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ static PyObject* PyXmlSec_Transform__str__(PyObject* self) {
else
snprintf(buf, sizeof(buf), "%s, None", transform->id->name);

return PyString_FromString(buf);
return PyUnicode_FromString(buf);
}

// __repr__ method
Expand All @@ -38,18 +38,18 @@ static PyObject* PyXmlSec_Transform__repr__(PyObject* self) {
snprintf(buf, sizeof(buf), "__Transform('%s', '%s', %d)", transform->id->name, transform->id->href, transform->id->usage);
else
snprintf(buf, sizeof(buf), "__Transform('%s', None, %d)", transform->id->name, transform->id->usage);
return PyString_FromString(buf);
return PyUnicode_FromString(buf);
}

static const char PyXmlSec_TransformNameGet__doc__[] = "The transform's name.";
static PyObject* PyXmlSec_TransformNameGet(PyXmlSec_Transform* self, void* closure) {
return PyString_FromString((const char*)self->id->name);
return PyUnicode_FromString((const char*)self->id->name);
}

static const char PyXmlSec_TransformHrefGet__doc__[] = "The transform's identification string (href).";
static PyObject* PyXmlSec_TransformHrefGet(PyXmlSec_Transform* self, void* closure) {
if (self->id->href != NULL)
return PyString_FromString((const char*)self->id->href);
return PyUnicode_FromString((const char*)self->id->href);
Py_RETURN_NONE;
}

Expand Down Expand Up @@ -149,7 +149,7 @@ static PyObject* PyXmlSec_KeyData__str__(PyObject* self) {
snprintf(buf, sizeof(buf), "%s, %s", keydata->id->name, keydata->id->href);
else
snprintf(buf, sizeof(buf), "%s, None", keydata->id->name);
return PyString_FromString(buf);
return PyUnicode_FromString(buf);
}

// __repr__ method
Expand All @@ -160,18 +160,18 @@ static PyObject* PyXmlSec_KeyData__repr__(PyObject* self) {
snprintf(buf, sizeof(buf), "__KeyData('%s', '%s')", keydata->id->name, keydata->id->href);
else
snprintf(buf, sizeof(buf), "__KeyData('%s', None)", keydata->id->name);
return PyString_FromString(buf);
return PyUnicode_FromString(buf);
}

static const char PyXmlSec_KeyDataNameGet__doc__[] = "The key data's name.";
static PyObject* PyXmlSec_KeyDataNameGet(PyXmlSec_KeyData* self, void* closure) {
return PyString_FromString((const char*)self->id->name);
return PyUnicode_FromString((const char*)self->id->name);
}

static const char PyXmlSec_KeyDataHrefGet__doc__[] = "The key data's identification string (href).";
static PyObject* PyXmlSec_KeyDataHrefGet(PyXmlSec_KeyData* self, void* closure) {
if (self->id->href != NULL)
return PyString_FromString((const char*)self->id->href);
return PyUnicode_FromString((const char*)self->id->href);
Py_RETURN_NONE;
}

Expand Down Expand Up @@ -245,15 +245,13 @@ static PyObject* PyXmlSec_KeyDataNew(xmlSecKeyDataId id) {
return (PyObject*)keydata;
}

#ifdef PY3K
static PyModuleDef PyXmlSec_ConstantsModule =
{
PyModuleDef_HEAD_INIT,
STRINGIFY(MODULE_NAME) ".constants",
PYXMLSEC_CONSTANTS_DOC,
-1, NULL, NULL, NULL, NULL, NULL
};
#endif // PY3K

// initialize constants module and registers it base package
int PyXmlSec_ConstantsModule_Init(PyObject* package) {
Expand All @@ -267,12 +265,7 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) {
PyObject* keyDataTypeCls = NULL;
PyObject* tmp = NULL;

#ifdef PY3K
constants = PyModule_Create(&PyXmlSec_ConstantsModule);
#else
constants = Py_InitModule3(STRINGIFY(MODULE_NAME) ".constants", NULL, PYXMLSEC_CONSTANTS_DOC);
Py_XINCREF(constants);
#endif

if (!constants) return -1;

Expand All @@ -292,7 +285,7 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) {
#undef PYXMLSEC_ADD_INT_CONSTANT

#define PYXMLSEC_DECLARE_NAMESPACE(var, name) \
if (!(var = PyCreateDummyObject(name))) goto ON_FAIL; \
if (!(var = PyModule_New(name))) goto ON_FAIL; \
if (PyModule_AddObject(package, name, var) < 0) goto ON_FAIL; \
Py_INCREF(var); // add object steels reference

Expand All @@ -308,7 +301,7 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) {


#define PYXMLSEC_ADD_NS_CONSTANT(name, lname) \
tmp = PyString_FromString((const char*)(JOIN(xmlSec, name))); \
tmp = PyUnicode_FromString((const char*)(JOIN(xmlSec, name))); \
PYXMLSEC_ADD_CONSTANT(nsCls, name, lname);

// namespaces
Expand All @@ -334,7 +327,7 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) {


#define PYXMLSEC_ADD_ENC_CONSTANT(name, lname) \
tmp = PyString_FromString((const char*)(JOIN(xmlSec, name))); \
tmp = PyUnicode_FromString((const char*)(JOIN(xmlSec, name))); \
PYXMLSEC_ADD_CONSTANT(encryptionTypeCls, name, lname);

// encryption type
Expand All @@ -349,7 +342,7 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) {


#define PYXMLSEC_ADD_NODE_CONSTANT(name, lname) \
tmp = PyString_FromString((const char*)(JOIN(xmlSec, name))); \
tmp = PyUnicode_FromString((const char*)(JOIN(xmlSec, name))); \
PYXMLSEC_ADD_CONSTANT(nodeCls, name, lname);

// node
Expand Down
8 changes: 4 additions & 4 deletions src/keys.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ static PyObject* PyXmlSec_KeyFromBinaryFile(PyObject* self, PyObject* args, PyOb

PYXMLSEC_DEBUG("load symmetric key - start");
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O&:from_binary_file", kwlist,
PyXmlSec_KeyDataType, &keydata, PyString_FSConverter, &filepath))
PyXmlSec_KeyDataType, &keydata, PyUnicode_FSConverter, &filepath))
{
goto ON_FAIL;
}
Expand Down Expand Up @@ -436,7 +436,7 @@ static PyObject* PyXmlSec_KeyNameGet(PyObject* self, void* closure) {
}
cname = (const char*)xmlSecKeyGetName(key->handle);
if (cname != NULL) {
return PyString_FromString(cname);
return PyUnicode_FromString(cname);
}
Py_RETURN_NONE;
}
Expand All @@ -460,7 +460,7 @@ static int PyXmlSec_KeyNameSet(PyObject* self, PyObject* value, void* closure) {
return 0;
}

name = PyString_AsString(value);
name = PyUnicode_AsUTF8(value);
if (name == NULL) return -1;

if (xmlSecKeySetName(key->handle, XSTR(name)) < 0) {
Expand Down Expand Up @@ -698,7 +698,7 @@ static PyObject* PyXmlSec_KeysManagerLoadCert(PyObject* self, PyObject* args, Py

PYXMLSEC_DEBUGF("%p: load cert - start", self);
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&II:load_cert", kwlist,
PyString_FSConverter, &filepath, &format, &type)) {
PyUnicode_FSConverter, &filepath, &format, &type)) {
goto ON_FAIL;
}

Expand Down
51 changes: 0 additions & 51 deletions src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,8 +203,6 @@ int PyXmlSec_EncModule_Init(PyObject* package);
// templates management
int PyXmlSec_TemplateModule_Init(PyObject* package);

#ifdef PY3K

static int PyXmlSec_PyClear(PyObject *self) {
PyXmlSec_Free(free_mode);
return 0;
Expand All @@ -225,54 +223,12 @@ static PyModuleDef PyXmlSecModule = {

#define PYENTRY_FUNC_NAME JOIN(PyInit_, MODULE_NAME)
#define PY_MOD_RETURN(m) return m
#else // PY3K
#define PYENTRY_FUNC_NAME JOIN(init, MODULE_NAME)
#define PY_MOD_RETURN(m) return

static void PyXmlSec_PyModuleGuard__del__(PyObject* self)
{
PyXmlSec_Free(free_mode);
Py_TYPE(self)->tp_free(self);
}

// we need guard to free resources on module unload
typedef struct {
PyObject_HEAD
} PyXmlSec_PyModuleGuard;

static PyTypeObject PyXmlSec_PyModuleGuardType = {
PyVarObject_HEAD_INIT(NULL, 0)
STRINGIFY(MODULE_NAME) "__Guard", /* tp_name */
sizeof(PyXmlSec_PyModuleGuard), /* tp_basicsize */
0, /* tp_itemsize */
PyXmlSec_PyModuleGuard__del__, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_reserved */
0, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
0, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT, /* tp_flags */
};
#endif // PY3K

PyMODINIT_FUNC
PYENTRY_FUNC_NAME(void)
{
PyObject *module = NULL;
#ifdef PY3K
module = PyModule_Create(&PyXmlSecModule);
#else
module = Py_InitModule3(STRINGIFY(MODULE_NAME), PyXmlSec_MainMethods, MODULE_DOC);
#endif
if (!module) {
PY_MOD_RETURN(NULL); /* this really should never happen */
}
Expand All @@ -294,13 +250,6 @@ PYENTRY_FUNC_NAME(void)
if (PyXmlSec_EncModule_Init(module) < 0) goto ON_FAIL;
if (PyXmlSec_TemplateModule_Init(module) < 0) goto ON_FAIL;

#ifndef PY3K
if (PyType_Ready(&PyXmlSec_PyModuleGuardType) < 0) goto ON_FAIL;
PYXMLSEC_DEBUGF("%p", &PyXmlSec_PyModuleGuardType);
// added guard to free resources on module unload, this should be called after last
if (PyModule_AddObject(module, "__guard", _PyObject_New(&PyXmlSec_PyModuleGuardType)) < 0) goto ON_FAIL;
#endif

PY_MOD_RETURN(module);
ON_FAIL:
PY_MOD_RETURN(NULL);
Expand Down
44 changes: 0 additions & 44 deletions src/platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,50 +35,6 @@ typedef int Py_ssize_t;
#define PY_SSIZE_T_MIN INT_MIN
#endif

#if PY_MAJOR_VERSION >= 3
#define PY3K 1
#define PyString_Check PyUnicode_Check
#define PyString_FromStringAndSize PyUnicode_FromStringAndSize

#define PyString_FromString PyUnicode_FromString

#define PyString_AsString PyUnicode_AsUTF8
#define PyString_AsUtf8AndSize PyUnicode_AsUTF8AndSize

#define PyCreateDummyObject PyModule_New

#define PyString_FSConverter PyUnicode_FSConverter
#else // PY3K

#define PyBytes_Check PyString_Check
#define PyBytes_FromStringAndSize PyString_FromStringAndSize

#define PyBytes_AsString PyString_AsString
#define PyBytes_AsStringAndSize PyString_AsStringAndSize

static inline char* PyString_AsUtf8AndSize(PyObject *obj, Py_ssize_t* length) {
char* buffer = NULL;
return (PyString_AsStringAndSize(obj, &buffer, length) < 0) ? (char*)(0) : buffer;
}

static inline PyObject* PyCreateDummyObject(const char* name) {
PyObject* tmp = Py_InitModule(name, NULL);
Py_INCREF(tmp);
return tmp;
}

static inline int PyString_FSConverter(PyObject* o, PyObject** p) {
if (o == NULL) {
return 0;
}

Py_INCREF(o);
*p = o;
return 1;
}

#endif // PYTHON3

static inline char* PyBytes_AsStringAndSize2(PyObject *obj, Py_ssize_t* length) {
char* buffer = NULL;
return ((PyBytes_AsStringAndSize(obj, &buffer, length) < 0) ? (char*)(0) : buffer);
Expand Down
13 changes: 3 additions & 10 deletions src/template.c
Original file line number Diff line number Diff line change
Expand Up @@ -766,10 +766,10 @@ static PyObject* PyXmlSec_TemplateTransformAddC14NInclNamespaces(PyObject* self,
goto ON_FAIL;
}
if (PyList_Check(prefixes) || PyTuple_Check(prefixes)) {
sep = PyString_FromString(" ");
sep = PyUnicode_FromString(" ");
prefixes = PyObject_CallMethod(sep, "join", "O", prefixes);
Py_DECREF(sep);
} else if (PyString_Check(prefixes)) {
} else if (PyUnicode_Check(prefixes)) {
Py_INCREF(prefixes);
} else {
PyErr_SetString(PyExc_TypeError, "expected instance of str or list of str");
Expand All @@ -781,7 +781,7 @@ static PyObject* PyXmlSec_TemplateTransformAddC14NInclNamespaces(PyObject* self,
}


c_prefixes = PyString_AsString(prefixes);
c_prefixes = PyUnicode_AsUTF8(prefixes);
Py_BEGIN_ALLOW_THREADS;
res = xmlSecTmplTransformAddC14NInclNamespaces(node->_c_node, XSTR(c_prefixes));
Py_END_ALLOW_THREADS;
Expand Down Expand Up @@ -918,7 +918,6 @@ static PyMethodDef PyXmlSec_TemplateMethods[] = {
{NULL, NULL} /* sentinel */
};

#ifdef PY3K
static PyModuleDef PyXmlSec_TemplateModule =
{
PyModuleDef_HEAD_INIT,
Expand All @@ -931,15 +930,9 @@ static PyModuleDef PyXmlSec_TemplateModule =
NULL, /* m_clear */
NULL, /* m_free */
};
#endif // PY3K

int PyXmlSec_TemplateModule_Init(PyObject* package) {
#ifdef PY3K
PyObject* template = PyModule_Create(&PyXmlSec_TemplateModule);
#else
PyObject* template = Py_InitModule3(STRINGIFY(MODULE_NAME) ".template", PyXmlSec_TemplateMethods, PYXMLSEC_TEMPLATES_DOC);
Py_XINCREF(template);
#endif

if (!template) goto ON_FAIL;
PYXMLSEC_DEBUGF("%p", template);
Expand Down
9 changes: 1 addition & 8 deletions src/tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ static PyObject* PyXmlSec_TreeAddIds(PyObject* self, PyObject *args, PyObject *k
tmp = PyObject_GetItem(ids, key);
Py_DECREF(key);
if (tmp == NULL) goto ON_FAIL;
list[i] = XSTR(PyString_AsString(tmp));
list[i] = XSTR(PyUnicode_AsUTF8(tmp));
Py_DECREF(tmp);
if (list[i] == NULL) goto ON_FAIL;
}
Expand Down Expand Up @@ -230,7 +230,6 @@ static PyMethodDef PyXmlSec_TreeMethods[] = {
{NULL, NULL} /* sentinel */
};

#ifdef PY3K
static PyModuleDef PyXmlSec_TreeModule =
{
PyModuleDef_HEAD_INIT,
Expand All @@ -243,16 +242,10 @@ static PyModuleDef PyXmlSec_TreeModule =
NULL, /* m_clear */
NULL, /* m_free */
};
#endif // PY3K


int PyXmlSec_TreeModule_Init(PyObject* package) {
#ifdef PY3K
PyObject* tree = PyModule_Create(&PyXmlSec_TreeModule);
#else
PyObject* tree = Py_InitModule3(STRINGIFY(MODULE_NAME) ".tree", PyXmlSec_TreeMethods, PYXMLSEC_TREE_DOC);
Py_XINCREF(tree);
#endif

if (!tree) goto ON_FAIL;

Expand Down
4 changes: 2 additions & 2 deletions src/utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ PyObject* PyXmlSec_GetFilePathOrContent(PyObject* file, int* is_content) {
return data;
}
*is_content = 0;
if (!PyString_FSConverter(file, &tmp)) {
if (!PyUnicode_FSConverter(file, &tmp)) {
return NULL;
}
return tmp;
}

int PyXmlSec_SetStringAttr(PyObject* obj, const char* name, const char* value) {
PyObject* tmp = PyString_FromString(value);
PyObject* tmp = PyUnicode_FromString(value);
int r;

if (tmp == NULL) {
Expand Down