Re: Strings with null characters

Dominik George <[email protected]> Sun, 26 Jun 2011 16:10:32 +0200
Newsgroups gmane.comp.python.ctypes
Message-ID <[email protected]>
Hi,

here is an example code that breaks:

from ctypes import *
 class a(Structure):
  _fields_ = [("aaa", c_char * 14)]

mya = a()
mya.aaa = "a\0b"
print mya.aaa
'a'


I found two workarounds at
http://stackoverflow.com/questions/5082753/how-do-i-build-a-python-string-from-a-ctype-struct
, but those solutions look somehow nasty ...

-nik

Am 26.06.2011 15:17, schrieb Dominik George:
> Hi,
>
> I am using ctypes while porting parts of glibc to pure Python (i.e. to
> be able to do ifconfig from within Python). The complete code can be
> found in my Redmine under
> http://git.proparity.net/redmine/projects/pyverkko/repository/revisions/master/show/src/pyverkko/ifconfig
> .
>
> In structs.py, I have defined the structs used by glibc to do ioctl(),
> which works perfectly in most cases. But, this breaks when I have to
> cope with null bytes. For example, set_ip_address("eth0", "192.168.0.1")
> breaks, because:
>
> I create an isntance of sockaddr, which is a ctypes Structure (or, a
> PackableStructure, which is a ctypes Structure to which I added a pack()
> method as described in the FAQ). Now, assigning the binary form of
> 192.168.0.1 to a member field of sockaddr, breaks because it is
> expecting a null-termianted string, so the string I assign is only the
> first two bytes because the third octet, 0, terminates the string.
>
> I am not sure if Python does this while assigning, because the field
> sa_data I am assigning to is declared as a char[14].
>
> How can I take care that *all* bytes of a string are stored in the
> Structure and recognized when I run pack(), i.e. strings aren't cut off
> at the first null byte?
>
> Regards,
> Nik
>
> ------------------------------------------------------------------------------
> All of the data generated in your IT infrastructure is seriously valuable.
> Why? It contains a definitive record of application performance, security 
> threats, fraudulent activity, and more. Splunk takes this data and makes 
> sense of it. IT sense. And common sense.
> http://p.sf.net/sfu/splunk-d2d-c2
> _______________________________________________
> ctypes-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ctypes-users


------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2