1
0
forked from GitHub/gf-core

functionsByCat now supports strings containing \0

This commit is contained in:
krangelov
2021-08-31 18:38:17 +02:00
parent 6b359a6362
commit 7b9f5144f9

View File

@@ -2866,7 +2866,9 @@ static PyObject*
PGF_getAbstractName(PGFObject *self, void *closure)
{
PgfText* txt = pgf_abstract_name(self->pgf);
return PyString_FromStringAndSize(txt->text, txt->size);
PyObject *name = PyString_FromStringAndSize(txt->text, txt->size);
free(txt);
return name;
}
// static void
@@ -2967,16 +2969,13 @@ pgf_collect_cats(PgfItor* fn, PgfText* key, void* value, PgfExn *err)
py_name = PyString_FromStringAndSize(name->text, name->size);
if (py_name == NULL) {
err->type = PGF_EXN_OTHER_ERROR;
goto end;
return;
}
if (PyList_Append((PyObject*) clo->collection, py_name) != 0) {
err->type = PGF_EXN_OTHER_ERROR;
goto end;
Py_DECREF(py_name);
}
end:
Py_XDECREF(py_name);
}
static PyObject*
@@ -3028,16 +3027,12 @@ pgf_collect_funs(PgfItor* fn, PgfText* key, void* value, PgfExn *err)
py_name = PyString_FromStringAndSize(name->text, name->size);
if (py_name == NULL) {
err->type = PGF_EXN_OTHER_ERROR;
goto end;
}
if (PyList_Append((PyObject*) clo->collection, py_name) != 0) {
err->type = PGF_EXN_OTHER_ERROR;
goto end;
Py_DECREF(py_name);
}
end:
Py_XDECREF(py_name);
}
static PyObject*
@@ -3061,15 +3056,14 @@ PGF_getFunctions(PGFObject *self, void *closure)
static PyObject*
PGF_functionsByCat(PGFObject* self, PyObject *args)
{
const char* c;
if (!PyArg_ParseTuple(args, "s", &c))
const char* s;
Py_ssize_t size;
if (!PyArg_ParseTuple(args, "s#", &s, &size))
return NULL;
const size_t s = strlen(c);
PgfText* catname = (PgfText*) alloca(sizeof(PgfText)+s);
strcpy(catname->text, c);
catname->size = s;
PgfText* catname = (PgfText*) alloca(sizeof(PgfText)+size+1);
memcpy(catname->text, s, size+1);
catname->size = size;
PyObject* functions = PyList_New(0);
if (functions == NULL) {