Example #1
0
int libvirt_charPtrSizeUnwrap(PyObject *obj, char **str, Py_ssize_t *size)
{
    int ret;
#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 4
    int isize;
#endif
    *str = NULL;
    *size = 0;
    if (!obj) {
        PyErr_SetString(PyExc_TypeError, "unexpected type");
        return -1;
    }

#if PY_MAJOR_VERSION > 2
    ret = PyBytes_AsStringAndSize(obj, str, size);
#else
# if PY_MINOR_VERSION <= 4
    ret = PyString_AsStringAndSize(obj, str, &isize);
    *size = isize;
# else
    ret = PyString_AsStringAndSize(obj, str, size);
# endif
#endif

    return ret;
}
Example #2
0
File: csl.c Project: Tayyib/uludag
static PyObject *
c_set_instance(PyObject *self, PyObject *args, PyObject *kwargs)
{
	struct pack *p;
	int ret;
	PyObject *key, *value;
	char *str;
	size_t strlen;
	int pos = 0;

	proc_check_shutdown();

	p = pack_new(512);
	if (!p) return NULL;

	while(PyDict_Next(kwargs, &pos, &key, &value)) {
		PyString_AsStringAndSize(key, &str, &strlen);
		pack_put(p, str, strlen);
		PyString_AsStringAndSize(value, &str, &strlen);
		pack_put(p, str, strlen);
	}

	ret = db_put_profile(bk_node, bk_app, p);
	if (ret != 0) return NULL;

	Py_INCREF(Py_None);
	return Py_None;
}
static std::string
KyotoDB_dump(PyObject *obj, bool use_pickle, bool *ok)
{
    *ok = false;
    if (use_pickle) {
        APR pydata(PyObject_CallFunctionObjArgs(pickle_dumps, obj, NULL));
        if (PyErr_Occurred() != NULL)
            return "";
        
        char *buffer;
        Py_ssize_t size;
        if (PyString_AsStringAndSize(pydata, &buffer, &size) < 0) {
            return "";
        }
        *ok = true;
        return std::string(buffer, size);
    } else {
        char *buffer;
        Py_ssize_t size;
        if (PyString_AsStringAndSize(obj, &buffer, &size) < 0) {
            return "";
        }
        *ok = true;
        return std::string(buffer, size);
    }
}
Example #4
0
PyObject * bitz_get_response( PyObject * self, PyObject * args ) {

	PyObject * pyresponse;
	PyObject * pypayload;
	icap::Response * response = NULL;

	unsigned int resp_status;
	icap::payload_t payload;

	// vars to ferry across strings from python dictionary to c++
	char * pybuffer;
	Py_ssize_t pybuflen;


	// logger
	bitz::Logger &logger = bitz::Logger::instance();
	logger.debug( "[modpy.interface] get_response()" );

	// parse args
	if ( PyArg_ParseTuple( args, "IO!", &resp_status, &PyDict_Type, &pypayload ) ) {

		// copy strings from python dictionary
		PyString_AsStringAndSize( PyDict_GetItemString( pypayload, "req_header" ), &pybuffer, &pybuflen );
		payload.req_header.assign( pybuffer, pybuflen );

		PyString_AsStringAndSize( PyDict_GetItemString( pypayload, "req_body" ), &pybuffer, &pybuflen );
		payload.req_body.assign( pybuffer, pybuflen );

		PyString_AsStringAndSize( PyDict_GetItemString( pypayload, "res_header" ), &pybuffer, &pybuflen );
		payload.res_header.assign( pybuffer, pybuflen );

		PyString_AsStringAndSize( PyDict_GetItemString( pypayload, "res_body" ), &pybuffer, &pybuflen );
		payload.res_body.assign( pybuffer, pybuflen );

		// copy other data types from python dictionary
		payload.ieof = PyBool_Check( PyDict_GetItemString( pypayload, "ieof" ) );

		// construct the response object
		response = new icap::Response( (icap::ResponseHeader::status_t) resp_status );
		response->payload( payload );

	} else {
		logger.warn( "[modpy.interface] failed to parse arguments" );
	}

	// sanity check
	if ( response == NULL ) {
		response = new icap::Response( icap::ResponseHeader::SERVER_ERROR );
	}

	// convert the response into a capsule
	pyresponse = PyCapsule_New( (void *) response, "response", NULL );

	return pyresponse;

}
Example #5
0
static PyObject*
th_brk_(PyObject *self, PyObject *args) 
{
    PyObject *result = NULL;
    Py_UNICODE *s1;
    int s1_len;

    if (!PyArg_ParseTuple(args, "u#", &s1, &s1_len)) {
        PyErr_SetString(PyExc_TypeError, "parameter must be unicode");
        return NULL;
    }

    if(s1_len == 0) {
        PyErr_SetString(PyExc_ValueError, "parameter must not be empty string");
        return NULL;
    }

    PyObject *txt_cp874 = PyUnicode_Encode(s1, s1_len, "CP874", NULL);
    if(txt_cp874 == NULL) {
        return NULL;
    }

    Py_ssize_t len = PyString_Size(txt_cp874);
    char *c_txt_cp874 = PyString_AsString(txt_cp874);
    int *pos = (int *)malloc(sizeof(int) * (s1_len + 1)); 
    int n = th_brk((unsigned char *)c_txt_cp874, pos, len);
    int i, s = 0;
    char *buffer;
    result = PyList_New(0);
    for(i = 0; i < n; i++) {
        PyObject *tok;
        PyObject *tok_cp874 = PySequence_GetSlice(txt_cp874, s, pos[i]);
        Py_ssize_t tok_len;
        PyString_AsStringAndSize(tok_cp874, &buffer, &tok_len);
        tok = PyUnicode_Decode(buffer, tok_len, "CP874", NULL);
        s = pos[i];
        PyList_Append(result, tok); 
        Py_XDECREF(tok_cp874);
        Py_XDECREF(tok);
    } 
    if(s < len) {
        PyObject *tok_cp874 = PySequence_GetSlice(txt_cp874, s, len);
        Py_ssize_t tok_len;
        PyObject *tok;
        PyString_AsStringAndSize(tok_cp874, &buffer, &tok_len);
        tok = PyUnicode_Decode(buffer, tok_len, "CP874", NULL);
        PyList_Append(result, tok);
        Py_XDECREF(tok_cp874);
        Py_XDECREF(tok);
    } 
    Py_XDECREF(txt_cp874);

    free(pos); 
    return result;
}
Example #6
0
static bool acpi_object_from_python(PyObject *pyobj, ACPI_OBJECT *obj)
{
    PyObject *value;

    if (pyobj == Py_None) {
        obj->Type = ACPI_TYPE_ANY;
        return true;
    }
    if (!PyArg_ParseTuple(pyobj, "IO:acpi_object_from_python", &obj->Type, &value))
        return false;
    switch (obj->Type) {
    case ACPI_TYPE_INTEGER:
        obj->Integer.Value = PyInt_AsUnsignedLongLongMask(value);
        return true;
    case ACPI_TYPE_STRING:
        {
            Py_ssize_t length;
            if (PyString_AsStringAndSize(value, &obj->String.Pointer, &length) < 0)
                return false;
            if (length > GRUB_UINT_MAX) {
                PyErr_Format(PyExc_RuntimeError, "Python object provided as ACPI string had > 4G of data");
                return false;
            }
            obj->String.Length = length;
            return true;
        }
    case ACPI_TYPE_BUFFER:
        {
            Py_ssize_t length;
            if (PyString_AsStringAndSize(value, (char **)&obj->Buffer.Pointer, &length) < 0)
                return false;
            if (length > GRUB_UINT_MAX) {
                PyErr_Format(PyExc_RuntimeError, "Python object provided as ACPI buffer had > 4G of data");
                return false;
            }
            obj->Buffer.Length = length;
            return true;
        }
    case ACPI_TYPE_PACKAGE:
        return acpi_objects_from_python(value, &obj->Package.Elements, &obj->Package.Count);
    case ACPI_TYPE_POWER:
        return PyArg_ParseTuple(value, "II", &obj->PowerResource.SystemLevel, &obj->PowerResource.ResourceOrder);
    case ACPI_TYPE_PROCESSOR:
        return PyArg_ParseTuple(value, "IkI", &obj->Processor.ProcId, &obj->Processor.PblkAddress, &obj->Processor.PblkLength);
    default:
        PyErr_Format(PyExc_RuntimeError,
                     "Python object provided as ACPI method parameter used unhandled ACPI_OBJECT_TYPE %u.",
                     obj->Type);
        return false;
    }
}
Example #7
0
static PyObject *
CdbMake_addmany(cdbmakeobject *self, PyObject *args) {

  PyObject *list;

  if (!PyArg_ParseTuple(args,"O!:addmany",&PyList_Type, &list))
    return NULL;

  if (self->finished) {
    CDBMAKEfinished;
    return NULL;
  }

  Py_ssize_t size = PyList_Size(list);
  Py_ssize_t i;

  for (i=0; i<size; i++)
  {
    PyObject *tuple = PyList_GetItem(list, i);
    PyObject *key_item;
    PyObject *data_item;

    if (!PyTuple_Check(tuple)) {
      PyErr_SetString(PyExc_TypeError, "list of tuples expected");
      return NULL;
    }

    if (!(key_item = PyTuple_GetItem(tuple,0)))
      return NULL;

    if (!(data_item = PyTuple_GetItem(tuple,1)))
      return NULL;

    char *key, *dat;
    Py_ssize_t klen, dlen;

    if (PyString_AsStringAndSize(key_item, &key, &klen) < 0)
      return NULL;

    if (PyString_AsStringAndSize(data_item, &dat, &dlen) < 0)
      return NULL;
    
    if (cdb_make_add(&self->cm, key, klen, dat, dlen) == -1)
      return CDBMAKEerr;
  }

  return Py_BuildValue("");
}
Example #8
0
// This is called to fill the buffer when it gets too low:
static int PyPCAP_fill_buffer(PyPCAP *self, PyObject *fd) {
  PyObject *data = PyObject_CallMethod(fd, "read", "l", FILL_SIZE);
  char *buff;
  Py_ssize_t len;
  int current_readptr = self->buffer->readptr;

  if(!data) return -1;

  if(0 > PyString_AsStringAndSize(data, &buff, &len)) return -1;
  if(!buff) return -1;

  // Append the data to the end:
  CALL(self->buffer, skip, self->buffer->readptr);
  CALL(self->buffer, seek, 0, SEEK_END);

  // Copy the data into our buffer:
  CALL(self->buffer, write, buff, len);
  CALL(self->buffer, seek, 0, SEEK_SET);

  //  self->buffer->readptr = current_readptr;

  // Finished with the data
  Py_DECREF(data);

  return len;
};
Example #9
0
PyObject * ppm_laplacian(PyObject *self, PyObject * args)
{
	int width, height;
	char *buffer;
	unsigned char *data;
	unsigned char *srcPR, *destPR;
	Py_ssize_t datasize;
	PyObject *py_data, *result;
	
	dprint("Starting");
	if (!PyArg_ParseTuple(args, "(ii)S", &width, &height, &py_data))
		return NULL;
	dprint("Parsing data");
	PyString_AsStringAndSize(py_data, &buffer, &datasize);
	data = (unsigned char *)(buffer);
	
	dprint("width=%d", width);
	dprint("height=%d", height);
	dprint("datasize=%d", datasize);
	if (width*height*3 != datasize) {
		PyErr_SetString(PyExc_ValueError, "data size does not match 24bit");
		return NULL;
	}
	
	destPR = malloc(datasize);
	srcPR = malloc(datasize);
	memcpy(srcPR, data, datasize);
	
	laplace(width, height, srcPR, destPR);
	
	result = Py_BuildValue("s#", destPR, datasize);
	return result;
}
Example #10
0
static void _read_png_data(PyObject* py_file_obj, png_bytep data, png_size_t length)
{
    PyObject* read_method = PyObject_GetAttrString(py_file_obj, "read");
    PyObject* result = NULL;
    char *buffer;
    Py_ssize_t bufflen;
    if (read_method)
    {
        result = PyObject_CallFunction(read_method, (char *)"i", length);
    }
#if PY_MAJOR_VERSION >= 3
    PyObject* utf8_result = PyUnicode_AsUTF8String(result);
    if (PyBytes_AsStringAndSize(utf8_result, &buffer, &bufflen) == 0)
#else
    if (PyString_AsStringAndSize(result, &buffer, &bufflen) == 0)
#endif
    {
        if (bufflen == (Py_ssize_t)length)
        {
            memcpy(data, buffer, length);
        }
    }
    Py_XDECREF(read_method);
    Py_XDECREF(result);
}
Example #11
0
static void idaapi s_py_get_user_defined_prefix(
  ea_t ea,
  int lnnum,
  int indent,
  const char *line,
  char *buf,
  size_t bufsize)
{
  PYW_GIL_GET;
  newref_t py_ret(
          PyObject_CallFunction(
                  py_get_user_defined_prefix,
                  PY_FMT64 "iis" PY_FMT64,
                  ea, lnnum, indent, line, bufsize));

  // Error? Display it
  // No error? Copy the buffer
  if ( !PyW_ShowCbErr("py_get_user_defined_prefix") )
  {
    Py_ssize_t py_len;
    char *py_str;
    if ( PyString_AsStringAndSize(py_ret.o, &py_str, &py_len) != -1 )
    {
      memcpy(buf, py_str, qmin(bufsize, py_len));
      if ( py_len < bufsize )
        buf[py_len] = '\0';
    }
  }
}
Example #12
0
/* Caller is responsible for free-ing memory with PyMem_Free */
static bool
encoded_string_converter(PyObject *o, void *address) {
    char **target = (char **)address;
    char *buffer;
    Py_ssize_t length;

    if (o == NULL || o == Py_None) {
        return 1;
    }

    if (PyUnicode_Check(o))
        o = PyUnicode_AsEncodedString(o, ENCODING, "strict");
    else
        Py_INCREF(o);

    if (PyString_AsStringAndSize(o, &buffer, &length) == -1) {
        Py_DECREF(o);
        return 0;
    }

    *target = PyMem_Malloc(length + 1);
    if (target == NULL) {
        PyErr_NoMemory();
        Py_DECREF(o);
        return 0;
    }

    strcpy(*target, buffer);
    Py_DECREF(o);
    return 1;
}
Example #13
0
File: _k20.c Project: kevinarpe/kx
static PyObject *
_K_subscript(_K *self, PyObject *key)
{
	int i;
	K kobj = self->kobj;
	char *skey;
	int key_length;
	int value_index = 1;
	if (kobj->t != 5) {
		PyErr_Format(PyExc_TypeError,
			     "k object of type %d is not a dictionary", kobj->t);
		return NULL;
	}
	if (-1 == PyString_AsStringAndSize(key, &skey, &key_length)) {
		return NULL;
	}
	if (skey[key_length-1] == '.') {
		--key_length;
		++value_index;
	}
	for (i=0; i < kobj->n; ++i) {
		K e = KK(kobj)[i];
		if (0 == strncmp(skey,Ks(KK(e)[0]),key_length)) {
			PyTypeObject* type = self->ob_type;
			_K* k = (_K*)type->tp_alloc(type, 0);
			k->kobj = ci(KK(e)[value_index]);
			return (PyObject*)k;
		}
	}
	PyErr_SetObject(PyExc_KeyError, key);
	return NULL;
}
Example #14
0
/*
#<pydoc>
def dbg_read_memory(ea, sz):
    """
    Reads from the debugee's memory at the specified ea
    @return:
        - The read buffer (as a string)
        - Or None on failure
    """
    pass
#</pydoc>
*/
static PyObject *dbg_read_memory(PyObject *py_ea, PyObject *py_sz)
{
  PYW_GIL_CHECK_LOCKED_SCOPE();

  uint64 ea, sz;
  if ( !dbg_can_query() || !PyW_GetNumber(py_ea, &ea) || !PyW_GetNumber(py_sz, &sz) )
    Py_RETURN_NONE;

  // Create a Python string
  PyObject *ret = PyString_FromStringAndSize(NULL, Py_ssize_t(sz));
  if ( ret == NULL )
    Py_RETURN_NONE;

  // Get the internal buffer
  Py_ssize_t len;
  char *buf;
  PyString_AsStringAndSize(ret, &buf, &len);

  if ( (size_t)read_dbg_memory(ea_t(ea), buf, size_t(sz)) != sz )
  {
    // Release the string on failure
    Py_DECREF(ret);
    // Return None on failure
    Py_RETURN_NONE;
  }
  return ret;
}
static PyObject *
do_strip(PyObject *args, int striptype)
{
	char *s;
	Py_ssize_t len, i, j;


	if (PyString_AsStringAndSize(args, &s, &len))
		return NULL;

	i = 0;
	if (striptype != RIGHTSTRIP) {
		while (i < len && isspace(Py_CHARMASK(s[i]))) {
			i++;
		}
	}

	j = len;
	if (striptype != LEFTSTRIP) {
		do {
			j--;
		} while (j >= i && isspace(Py_CHARMASK(s[j])));
		j++;
	}

	if (i == 0 && j == len) {
		Py_INCREF(args);
		return args;
	}
	else
		return PyString_FromStringAndSize(s+i, j-i);
}
Example #16
0
int _write_value_to_handle(const void *value, void *handle)
{
    PyObject *py_value = (PyObject *)value,
	*py_marshalled = NULL;
    char *marshalled;
    Py_ssize_t length;
    int success = 0;

#ifdef Py_MARSHAL_VERSION  
    if(!(py_marshalled =   
	 PyMarshal_WriteObjectToString(py_value, Py_MARSHAL_VERSION)))  
        goto _write_value_to_handle_cleanup;  
#else  
    if(!(py_marshalled = PyMarshal_WriteObjectToString(py_value)))  
        goto _write_value_to_handle_cleanup;  
#endif  
    if(PyString_AsStringAndSize(py_marshalled, &marshalled, &length) == -1)
	goto _write_value_to_handle_cleanup;
    if(!_write_to_handle(&length, sizeof(length), handle))
	goto _write_value_to_handle_cleanup;
    if (length != (int)length)
	goto _write_value_to_handle_cleanup;
    if(!_write_to_handle(marshalled, (int)length, handle))
	goto _write_value_to_handle_cleanup;
    success = 1;

 _write_value_to_handle_cleanup:
    if(py_marshalled) {
	Py_DECREF(py_marshalled);
    }

    return success;
}
Example #17
0
static PyObject *py_socket_setsockopt(pytalloc_Object *self, PyObject *args)
{
	int level, optname;
	int *sock;
	PyObject *pyval;
	int optval;
	Py_ssize_t optlen;
	char *buffer;
	int status;

	if (!PyArg_ParseTuple(args, "iiO:getsockopt", &level, &optname, &pyval)) {
		return NULL;
	}

	if (PyInt_Check(pyval)) {
		optval = PyInt_AsLong(pyval);
		buffer = (char *)&optval;
		optlen = sizeof(int);
	} else {
		PyString_AsStringAndSize(pyval, &buffer, &optlen);
	}

	sock = pytalloc_get_ptr(self);

	status = swrap_setsockopt(*sock, level, optname, (void *)buffer, optlen);
	if (status < 0) {
		return PyErr_SetFromErrno(py_socket_error);
	}

	Py_RETURN_NONE;
}
Example #18
0
PyObject* encode_wrapper(WebPEncodeFunc encode_func, PyObject* self, PyObject* args)
{
    PyStringObject *data_string;
    int width;
    int height;
    int stride;
    float quality_factor;

    if (!PyArg_ParseTuple(args, "Siiif", &data_string, &width, &height, &stride, &quality_factor)) {
        Py_INCREF(Py_None);
        return Py_None;
    }
    
    uint8_t *data;
    Py_ssize_t size;
    PyString_AsStringAndSize((struct PyObject *) data_string, &data, &size);

    if (stride * height > size) {
        Py_INCREF(Py_None);
        return Py_None;
    }

    uint8_t *output;
    size_t ret_size = encode_func(data, width, height, stride, quality_factor, &output);
    if (ret_size > 0) {
        PyObject *ret = PyString_FromStringAndSize(output, ret_size);
        free(output);
        return ret;
    }
    Py_INCREF(Py_None);
    return Py_None;
}
Example #19
0
static ssize_t CReader_PySocketBuffer_read(CReader_Buffer *buffer, size_t nr)
 {
  PyObject *read;
  char *readbuf;
  int readlen;

  CReader_Buffer_lockInterpreter(buffer);

  if (!(read = PyObject_CallMethod(buffer->file, "recv", "i", max(nr, buffer->maxsize))))
   {
    CReader_Buffer_releaseInterpreter(buffer);
    return -1;
   }
  if (PyString_AsStringAndSize(read, &readbuf, &readlen) == -1)
   {
    Py_DECREF(read);
    CReader_Buffer_releaseInterpreter(buffer);
    return -1;
   }
  memcpy(buffer->buf + buffer->pos + buffer->len, readbuf, readlen);
  Py_DECREF(read);

  CReader_Buffer_releaseInterpreter(buffer);
  return readlen;
 }
static PyObject *
strop_upper(PyObject *self, PyObject *args)
{
	char *s, *s_new;
	Py_ssize_t i, n;
	PyObject *newstr;
	int changed;

	WARN;
	if (PyString_AsStringAndSize(args, &s, &n))
		return NULL;
	newstr = PyString_FromStringAndSize(NULL, n);
	if (newstr == NULL)
		return NULL;
	s_new = PyString_AsString(newstr);
	changed = 0;
	for (i = 0; i < n; i++) {
		int c = Py_CHARMASK(*s++);
		if (islower(c)) {
			changed = 1;
			*s_new = toupper(c);
		} else
			*s_new = c;
		s_new++;
	}
	if (!changed) {
		Py_DECREF(newstr);
		Py_INCREF(args);
		return args;
	}
	return newstr;
}
Example #21
0
static PyObject *
O_writelines(Oobject *self, PyObject *args) {
    PyObject *it, *s;

    it = PyObject_GetIter(args);
    if (it == NULL)
        return NULL;
    while ((s = PyIter_Next(it)) != NULL) {
        Py_ssize_t n;
        char *c;
        if (PyString_AsStringAndSize(s, &c, &n) == -1) {
            Py_DECREF(it);
            Py_DECREF(s);
            return NULL;
        }
        if (O_cwrite((PyObject *)self, c, n) == -1) {
            Py_DECREF(it);
            Py_DECREF(s);
            return NULL;
           }
           Py_DECREF(s);
       }

       Py_DECREF(it);

       /* See if PyIter_Next failed */
       if (PyErr_Occurred())
           return NULL;

       Py_RETURN_NONE;
}
Example #22
0
flac_status
FlacDecoder_update_md5sum(decoders_FlacDecoder *self,
                          PyObject *framelist)
{
    if (self->perform_validation) {
        PyObject *string = PyObject_CallMethod(framelist,
                                               "to_bytes","ii",
                                               0,
                                               1);
        char *string_buffer;
        Py_ssize_t length;

        if (string != NULL) {
            if (PyString_AsStringAndSize(string,
                                         &string_buffer,
                                         &length) == 0) {
                audiotools__MD5Update(&(self->md5),
                                      (unsigned char *)string_buffer,
                                      length);
                Py_DECREF(string);
                return OK;
            } else {
                Py_DECREF(string);
                return ERROR;
            }
        } else {
            return ERROR;
        }
    } else {
        return OK;
    }
}
Example #23
0
PyObject* vm_set_mem(JitCpu *self, PyObject* args)
{
       PyObject *py_addr;
       PyObject *py_buffer;
       Py_ssize_t py_length;

       char * buffer;
       uint64_t size;
       uint64_t addr;
       int ret = 0x1337;

       if (!PyArg_ParseTuple(args, "OO", &py_addr, &py_buffer))
	       return NULL;

       PyGetInt(py_addr, addr);

       if(!PyString_Check(py_buffer))
	       RAISE(PyExc_TypeError,"arg must be str");

       size = PyString_Size(py_buffer);
       PyString_AsStringAndSize(py_buffer, &buffer, &py_length);

       ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, size);
       if (ret < 0)
	       RAISE(PyExc_TypeError,"arg must be str");
       check_automod(self, addr, size*8);

       Py_INCREF(Py_None);
       return Py_None;
}
Example #24
0
static PyObject *
UnicodeResultProcessor_process(UnicodeResultProcessor *self, PyObject *value)
{
    const char *encoding, *errors;
    char *str;
    Py_ssize_t len;

    if (value == Py_None)
        Py_RETURN_NONE;

#if PY_MAJOR_VERSION >= 3
    if (PyBytes_AsStringAndSize(value, &str, &len))
        return NULL;

    encoding = PyBytes_AS_STRING(self->encoding);
    errors = PyBytes_AS_STRING(self->errors);
#else
    if (PyString_AsStringAndSize(value, &str, &len))
        return NULL;

    encoding = PyString_AS_STRING(self->encoding);
    errors = PyString_AS_STRING(self->errors);
#endif

    return PyUnicode_Decode(str, len, encoding, errors);
}
Example #25
0
static PyObject *set(BaseTDBResolver *self, PyObject *args, PyObject *kwds) {
  static char *kwlist[] = {"urn", "attribute", "value", NULL};
  TDB_DATA urn;
  TDB_DATA attribute;
  PyObject *value_obj, *value_str;
  TDB_DATA value;

  urn.dsize = 0;
  attribute.dsize = 0;
  if(!PyArg_ParseTupleAndKeywords(args, kwds, "s#s#O", kwlist, 
				  &urn.dptr, &urn.dsize, 
				  &attribute.dptr, &attribute.dsize,
				  &value_obj))
    return NULL;

  // Convert the object to a string
  value_str = PyObject_Str(value_obj);
  if(!value_str) return NULL;

  PyString_AsStringAndSize(value_str, (char **)&value.dptr, (int *)&value.dsize);

  /** If the value is already in the list, we just ignore this
      request.
  */
  if(is_value_present(self, urn, attribute, value, 1)) {
    goto exit;
  };

  set_new_value(self, urn, attribute, value);

 exit:
  Py_DECREF(value_str);
  Py_RETURN_NONE;
};
static int expy_header_line_setattr(expy_header_line_t *self, char *name, PyObject *value)
    {
    if (self->hline == NULL)
        {
        PyErr_Format(PyExc_AttributeError, "Header object no longer valid, held over from previously processed message?");
        return -1;
        }

    if (!strcmp(name, "type"))
        {
        char *p;
#if PY_MINOR_VERSION < 5
        int len;
#else
        Py_ssize_t len;
#endif

        if (PyString_AsStringAndSize(value, &p, &len) == -1)
            return -1;

        if (len != 1)
            {
            PyErr_SetString(PyExc_TypeError, "header.type can only be set to a single-character value");
            return -1;
            }

        self->hline->type = (int)(p[0]);
        return 0;
        }

    PyErr_Format(PyExc_AttributeError, "Attribute: %s is not settable", name);
    return -1;
    }
Example #27
0
PyObject *encodedir(PyObject *self, PyObject *args)
{
	Py_ssize_t len, newlen;
	PyObject *pathobj, *newobj;
	char *path;

	if (!PyArg_ParseTuple(args, "O:encodedir", &pathobj))
		return NULL;

	if (PyString_AsStringAndSize(pathobj, &path, &len) == -1) {
		PyErr_SetString(PyExc_TypeError, "expected a string");
		return NULL;
	}

	newlen = len ? _encodedir(NULL, 0, path, len + 1) : 1;

	if (newlen == len + 1) {
		Py_INCREF(pathobj);
		return pathobj;
	}

	newobj = PyString_FromStringAndSize(NULL, newlen);

	if (newobj) {
		PyString_GET_SIZE(newobj)--;
		_encodedir(PyString_AS_STRING(newobj), newlen, path,
			   len + 1);
	}

	return newobj;
}
Example #28
0
static void idaapi s_py_get_user_defined_prefix(
        qstring *buf,
        ea_t ea,
        int lnnum,
        int indent,
        const char *line)
{
  PYW_GIL_GET;
  newref_t py_ret(
          PyObject_CallFunction(
                  py_get_user_defined_prefix,
                  PY_BV_EA "iis" PY_BV_SZ,
                  bvea_t(ea), lnnum, indent, line));

  // Error? Display it
  // No error? Copy the buffer
  if ( !PyW_ShowCbErr("py_get_user_defined_prefix") )
  {
    Py_ssize_t py_len;
    char *py_str;
    if ( PyString_AsStringAndSize(py_ret.o, &py_str, &py_len) != -1 )
    {
      buf->qclear();
      buf->append(py_str, py_len);
    }
  }
}
Example #29
0
static PyObject *
ctemplate_SetGlobalValue (PyObject* self, PyObject* args) {
    const char* name;
    size_t name_len;
    PyObject* obj;
    if (!PyArg_ParseTuple(args, "s#O", &name, &name_len, &obj))
        return NULL;
    char* value;
    int value_len;
    PyObject* value_obj = PyObject_Str(obj);
    if (value_obj == NULL) {
        Py_DECREF(obj);
        return NULL;
    }
    if (PyString_AsStringAndSize(value_obj, &value, &value_len) == -1) {
        Py_DECREF(obj);
        Py_DECREF(value_obj);
        return NULL;
    }
    ctemplate::TemplateDictionary::
        SetGlobalValue(ctemplate::TemplateString(name, name_len),
                       ctemplate::TemplateString(value, value_len));
    Py_DECREF(obj);
    Py_DECREF(value_obj);
    Py_RETURN_NONE;
}
Example #30
0
bool readPythonProtobuf(PyObject* obj, T* t)
{
  if (obj == Py_None) {
    std::cerr << "None object given where protobuf expected" << std::endl;
    return false;
  }
  PyObject* res = PyObject_CallMethod(obj,
                                      (char*) "SerializeToString",
                                      (char*) NULL);
  if (res == NULL) {
    std::cerr << "Failed to call Python object's SerializeToString "
         << "(perhaps it is not a protobuf?)" << std::endl;
    PyErr_Print();
    return false;
  }
  char* chars;
  Py_ssize_t len;
  if (PyString_AsStringAndSize(res, &chars, &len) < 0) {
    std::cerr << "SerializeToString did not return a string" << std::endl;
    PyErr_Print();
    Py_DECREF(res);
    return false;
  }
  google::protobuf::io::ArrayInputStream stream(chars, len);
  bool success = t->ParseFromZeroCopyStream(&stream);
  if (!success) {
    std::cerr << "Could not deserialize protobuf as expected type" << std::endl;
  }
  Py_DECREF(res);
  return success;
}