insecure string pickle

Pepe Aracil pepe en diselpro.com
Jue Abr 3 00:11:12 CEST 2008


Hola.

Has mirado la cadena que devuelve sys.argv[1] para ver donde se 
ha "corrompido" el mega-argumento? me parece que tendrás que
"escapar" algún que otro caracter.

En vez de pasar todo ese tocho como argumento en la linea de comandos,
es preferible que lo pases por la entrada estandar del segundo programa.


Saludos.



Jose Caballero escribió:
> Hola a todos,
> esta es la primera vez que hago una pregunta en esta lista. Agradezco por
> adelantado vuestra atención y paciencia, y muchas gracias por la ayuda que
> podáis ofrecerme.
>
>
> Estoy intentando serializar un objeto mediante pickle.dumps() y pasar el
> resultado como argumento a otro programa que ejecuto con
> commands.getstatusoutput(  )
> Paso el objeto serializado como argumento porque estoy intentado evitar, en
> la medida de lo posible, hacerlo a través de un fichero intermedio.
> La secuencia viene a ser como sigue:
>
> line = pickle.dumps( object )
> line = ' '.join(line.split('\n'))
> line = '"%s"' % line
> st, out = commands.getstatusoutput('./prog2.py %s' % line )
>
>
> Las líneas segunda y tercera del ejemplo son para convertir el resultado de
> dumps() en una única cadena, y que esté contenida entre dobles comillas para
> evitar problemas con la shell.
> El segundo programa deshace estos cambios, de la siguiente manera:
>
>
> line=sys.argv[1]
> line='\n'.join(line.split())
> o=pickle.loads(line)
>
>
> Lo he intentado con un objeto de una clase bastante simple, y funciona
> perfectamente. Esto significa que la secuencia de pasos en ambos programas
> es correcta.
> Pero cuando lo intento con un objeto de una clase un poco más compleja
> obtengo el siguiente mensaje de error:
>
> Traceback (most recent call last):
>   File "./prog2b.py", line 10, in ?
>     o=pickle.loads(line)
>   File "/usr/lib/python2.2/pickle.py", line 986, in loads
>     return Unpickler(file).load()
>   File "/usr/lib/python2.2/pickle.py", line 597, in load
>     dispatch[key](self)
>   File "/usr/lib/python2.2/pickle.py", line 667, in load_string
>     raise ValueError, "insecure string pickle"
> ValueError: insecure string pickle
>
>
> Creo que puede ser porque el resultado del método dumps no es todo lo bueno
> que debería. Este es, por cierto, dicho valor (antes de procesarlo):
>
> ccopy_reg
> _reconstructor
> p0
> (cmyproxyUtils
> MyProxyInterface
> p1
> c__builtin__
> object
> p2
> Ntp3
> R(dp4
> S'_MyProxyInterface__userDN'
> p5
> S'/DC=org/DC=doegrids/OU=People/CN=Jose\
> Caballero\
> 832651'
> p6
> sS'_MyProxyInterface__vomsattributes'
> p7
> S''
> p8
> sS'_MyProxyInterface__servername'
> p9
> S'myproxy.fnal.gov'
> p10
> sS'_MyProxyInterface__pilotownerDN'
> p11
> g8
> sS'_MyProxyInterface__myproxylogon_refdate'
> p12
> I1181620800
> sS'_MyProxyInterface__proxypath'
> p13
> S'/tmp/ESTO_ES_UNA_PRUEBA'
> p14
> sS'_MyProxyInterface__pilotproxypath'
> p15
> S'/tmp/x509up_u10139'
> p16
> sS'_MyProxyInterface__command'
> p17
> g8
> sS'_MyProxyInterface__myproxyinit_refdate'
> p18
> I1181620800
> sbp19
> .
>
>
>
> Y éste es el resutado tras el procesamiento, y que paso como argumento al
> segundo programa:
>
> "ccopy_reg _reconstructor p0 (cmyproxyUtils MyProxyInterface p1 c__builtin__
> object p2 Ntp3 R(dp4 S'_MyProxyInterface__userDN' p5
> S'/DC=org/DC=doegrids/OU=People/CN=Jose\\ Caballero\\ 832651' p6
> sS'_MyProxyInterface__vomsattributes' p7 S'' p8
> sS'_MyProxyInterface__servername' p9 S'myproxy.fnal.gov' p10
> sS'_MyProxyInterface__pilotownerDN' p11 g8
> sS'_MyProxyInterface__myproxylogon_refdate' p12 I1181620800
> sS'_MyProxyInterface__proxypath' p13 S'/tmp/ESTO_ES_UNA_PRUEBA' p14
> sS'_MyProxyInterface__pilotproxypath' p15 S'/tmp/x509up_u10139' p16
> sS'_MyProxyInterface__command' p17 g8
> sS'_MyProxyInterface__myproxyinit_refdate' p18 I1181620800 sbp19 ."
>
>
> ¿Ven alguna cadena que pueda estar corrompida y que no sea válida para el
> método loads()?
> Nota, si lo hago usando un fichero intermedio, mediante los métodos dump() y
> load(), todo funciona perfectamente.
>
> Muchas gracias.
> Toda ayuda que puedan ofrecerme será más que bien venida.
>
>
> Saludos
> Jose
> _______________________________________________
> Lista de correo Python-es 
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>   

_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es