[pypy-issue] [issue1190] cannot convert ‘PyStringObject*’ to ‘PyObject*’ in pycryptopp

Ian Delaney tracker at bugs.pypy.org
Thu Jun 21 13:23:16 CEST 2012


New submission from Ian Delaney <della5 at iinet.com.au>:

It appears it has fallen at the 'final hurdle' in package pycryptopp of latest
version number that defies description.

c++ -march=athlon64 -pipe -fomit-frame-pointer -O2 -fPIC -I.
-I/usr/lib64/pypy1.9/include -c src/pycryptopp/_pycryptoppmodule.cpp -o
build-2.7-pypy-1.9/temp.linux-x86_64-2.7/src/pycryptopp/_pycryptoppmodule.o -w
c++ -march=athlon64 -pipe -fomit-frame-pointer -O2 -fPIC -I.
-I/usr/lib64/pypy1.9/include -c src/pycryptopp/publickey/rsamodule.cpp -o
build-2.7-pypy-1.9/temp.linux-x86_64-2.7/src/pycryptopp/publickey/rsamodule.o -w
src/pycryptopp/publickey/rsamodule.cpp: In function ‘PyObject*
SigningKey_sign(SigningKey*, PyObject*)’:
src/pycryptopp/publickey/rsamodule.cpp:185:33: error: cannot convert
‘PyStringObject*’ to ‘PyObject*’ for argument ‘1’ to ‘char*
PyString_AsString(PyObject*)’
error: command 'c++' failed with exit status 1
 * ERROR:
dev-python/pycryptopp-0.6.0.1206569328141510525648634803928199668821045408958
failed (compile phase):
 *   Building failed with PyPy 1.9 (Python 2.7) in distutils_building() function

the culprit function from the rsamodule.cpp

static PyObject *
SigningKey_sign(SigningKey *self, PyObject *msgobj) {
    const char *msg;
    Py_ssize_t msgsize;
    PyString_AsStringAndSize(msgobj, const_cast<char**>(&msg),
reinterpret_cast<Py_ssize_t*>(&msgsize));
    assert (msgsize >= 0);

    Py_ssize_t sigsize = self->k->SignatureLength();
    PyStringObject* result =
reinterpret_cast<PyStringObject*>(PyString_FromStringAndSize(NULL, sigsize));
    if (!result)
        return NULL;
    assert (sigsize >= 0);

    AutoSeededRandomPool randpool(false);
    Py_ssize_t siglengthwritten = self->k->SignMessage(
        randpool,
        reinterpret_cast<const byte*>(msg),
        msgsize,
        reinterpret_cast<byte*>(PyString_AS_STRING(result)));
    if (siglengthwritten < sigsize)
        fprintf(stderr, "%s: %d: %s: %s", __FILE__, __LINE__, "SigningKey_sign",
"INTERNAL ERROR: signature was shorter than expected.");
    else if (siglengthwritten > sigsize) {
        fprintf(stderr, "%s: %d: %s: %s", __FILE__, __LINE__, "SigningKey_sign",
"INTERNAL ERROR: signature was longer than expected, so invalid memory was overwr$
        abort();
    }
    assert (siglengthwritten >= 0);

    return reinterpret_cast<PyObject*>(result);
}

reinterpret_cast<byte*>(PyString_AS_STRING(result))); is where it bailed out

----------
messages: 4495
nosy: idella5, pypy-issue
priority: performance bug
release: 0.9
status: chatting
title: cannot convert ‘PyStringObject*’ to ‘PyObject*’ in pycryptopp

________________________________________
PyPy bug tracker <tracker at bugs.pypy.org>
<https://bugs.pypy.org/issue1190>
________________________________________


More information about the pypy-issue mailing list