Hi,
I get a string inputted in my program, which I convert to a hash-like
string, like:
sql = '"table_alias" => [],"original_string" => "select * from table"'
The string has the form of a hash, now I would like to convert this
string to an actual hash. I tried it like:
test = Hash[sql]
or
test = Hash.[](sql)
but I get the following error:
test2.rb:2:in `[]': odd number of arguments for Hash (ArgumentError)
from test2.rb:2
When I do it like,
test = Hash.new
test = sql
test becomes a String and is no longer a Hash.
Is there an easy way to convert my hash-like string to an actual hash?
Thanks for any help.
Kind regards,
Nick
···
--
Posted via http://www.ruby-forum.com/.
Nick Snels scribbled on Thursday 09 Mar 2006 12:52:
Hi,
I get a string inputted in my program, which I convert to a hash-like
string, like:
sql = '"table_alias" => ,"original_string" => "select * from table"'
The string has the form of a hash, now I would like to convert this
string to an actual hash. I tried it like:
test = Hash[sql]
or
test = Hash.(sql)
but I get the following error:
test2.rb:2:in `': odd number of arguments for Hash (ArgumentError)
from test2.rb:2
When I do it like,
test = Hash.new
test = sql
test becomes a String and is no longer a Hash.
Is there an easy way to convert my hash-like string to an actual hash?
Thanks for any help.
Kind regards,
Nick
Hi Nick,
no, you can't pass it to Hash.new directly, you'd have to write a parser for
it yourself. If you're feeling lucky, you can use eval() to do that.
*takes cover from flying bananas and such*
Bernhard
Nick Snels wrote:
Hi,
I get a string inputted in my program, which I convert to a hash-like string, like:
sql = '"table_alias" => ,"original_string" => "select * from table"'
The simplest, although slow:
sql = '"table_alias" => ,"original_string" => "select * from table"'
hash = eval('{'+sql+'}')
lopex
*throws banana ad Bernhard*
no no no don't eval user supplied strings you are asking to be hacked
···
On 9 Mar 2006, at 11:58, Bernhard 'elven' Stoeckner wrote:
Nick Snels scribbled on Thursday 09 Mar 2006 12:52:
Hi,
I get a string inputted in my program, which I convert to a hash-like
string, like:
sql = '"table_alias" => ,"original_string" => "select * from table"'
The string has the form of a hash, now I would like to convert this
string to an actual hash. I tried it like:
test = Hash[sql]
or
test = Hash.(sql)
but I get the following error:
test2.rb:2:in `': odd number of arguments for Hash (ArgumentError)
from test2.rb:2
When I do it like,
test = Hash.new
test = sql
test becomes a String and is no longer a Hash.
Is there an easy way to convert my hash-like string to an actual hash?
Thanks for any help.
Kind regards,
Nick
Hi Nick,
no, you can't pass it to Hash.new directly, you'd have to write a parser for
it yourself. If you're feeling lucky, you can use eval() to do that.
*takes cover from flying bananas and such*
Bernhard
Argh!
Please stop telling people to eval user supplied strings!
The *ONLY* time it is safe to use eval is if all the contents are generated by you and NONE of the components come from user input.
It looks here like original_string comes from user.
Imagine if I supplied this:
" => 'lame'; `rm -rf /` #
···
On 9 Mar 2006, at 12:03, Marcin Mielżyński wrote:
Nick Snels wrote:
Hi,
I get a string inputted in my program, which I convert to a hash-like string, like:
sql = '"table_alias" => ,"original_string" => "select * from table"'
The simplest, although slow:
sql = '"table_alias" => ,"original_string" => "select * from table"'
hash = eval('{'+sql+'}')
lopex
Rob Pitt scribbled on Thursday 09 Mar 2006 13:01:
*throws banana ad Bernhard*
no no no don't eval user supplied strings you are asking to be hacked
Well, in certain local-only low-security scenarios it might be of use. I
wouldn't know where Nick takes his strings from. :}
Hi,
thanks for all the replies. I used the eval method and it worked!! The
string doesn't come directly from user input. It first goes through a
Perl sql parser and then into my program. So hopefully this doesn't
introduce any security issues, but I will be aware of the possibility.
Thanks for the help.
Kind regards,
Nick
Bernhard 'elven' Stoeckner wrote:
···
Rob Pitt scribbled on Thursday 09 Mar 2006 13:01:
*throws banana ad Bernhard*
no no no don't eval user supplied strings you are asking to be hacked
Well, in certain local-only low-security scenarios it might be of use. I
wouldn't know where Nick takes his strings from. :}
--
Posted via http://www.ruby-forum.com/\.