[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Controlling readline

Luo Yong

11/12/2006 2:08:00 AM

Hi all

Is there anyway to control the maxium length of the IO.readline can read?

Thanks

4 Answers

Paul Lutus

11/12/2006 6:14:00 AM

0

Luo Yong wrote:

> Hi all
>
> Is there anyway to control the maxium length of the IO.readline can read?

Not really, not from the command line. You can throw away all the length you
don't want once it has been entered. It is way better to expect more
characters than you get than to get more than you expect (long sad story
about C/C++ "gets" snipped here).

Maybe you should describe the problem, rather than asking about this way of
solving it.

--
Paul Lutus
http://www.ara...

Luo Yong

11/12/2006 10:36:00 AM

0

On 11/12/06, Paul Lutus <nospam@nosite.zzz> wrote:
> Luo Yong wrote:
>
> > Hi all
> >
> > Is there anyway to control the maxium length of the IO.readline can read?
>
> Not really, not from the command line. You can throw away all the length you
> don't want once it has been entered. It is way better to expect more
> characters than you get than to get more than you expect (long sad story
> about C/C++ "gets" snipped here).
>
> Maybe you should describe the problem, rather than asking about this way of
> solving it.
>
> --
> Paul Lutus
> http://www.ara...
>
>

I'm writing an RPC program.I use readline to read the command.I'm
afraid that my program can be attacked by others if I can't limit the
maxium length the readline can read.So I'm finding a way to control
it.

Paul Lutus

11/12/2006 11:49:00 AM

0

Luo Yong wrote:

> On 11/12/06, Paul Lutus <nospam@nosite.zzz> wrote:
>> Luo Yong wrote:
>>
>> > Hi all
>> >
>> > Is there anyway to control the maxium length of the IO.readline can
>> > read?
>>
>> Not really, not from the command line. You can throw away all the length
>> you don't want once it has been entered. It is way better to expect more
>> characters than you get than to get more than you expect (long sad story
>> about C/C++ "gets" snipped here).
>>
>> Maybe you should describe the problem, rather than asking about this way
>> of solving it.
>>
>> --
>> Paul Lutus
>> http://www.ara...
>>
>>
>
> I'm writing an RPC program.I use readline to read the command.I'm
> afraid that my program can be attacked by others if I can't limit the
> maxium length the readline can read.So I'm finding a way to control
> it.

As written, "readline" won't read more than it can safely store, which is
what you are after. Your concern arose from such things as "gets",
mentioned in my last post, that wrote beyond its allocated buffer because
it didn't know its length.

Why don't you read a character at a time, then stop reading characters after
you have what you want? Like this:

-----------------------------------

#!/usr/bin/ruby -w

max = 16

while true

print "Type something:"
STDOUT.flush

input = STDIN.sysread(max)

puts "\nYou entered (in chunks of #{max} chars) #{input}."

end

-----------------------------------

This routine reads the input in chunks of "max" characters, and continues to
cycle through similarly sized chunks indefinitely. Linefeeds are not
special to it, although that would be easy to add. This gives you a limit
on input size, but you then have to sort out for yourself what a line is,
and where one ends and another begins.

--
Paul Lutus
http://www.ara...

Luo Yong

11/12/2006 4:03:00 PM

0

On 11/12/06, Paul Lutus <nospam@nosite.zzz> wrote:
> Luo Yong wrote:
>
> > On 11/12/06, Paul Lutus <nospam@nosite.zzz> wrote:
> >> Luo Yong wrote:
> >>
> >> > Hi all
> >> >
> >> > Is there anyway to control the maxium length of the IO.readline can
> >> > read?
> >>
> >> Not really, not from the command line. You can throw away all the length
> >> you don't want once it has been entered. It is way better to expect more
> >> characters than you get than to get more than you expect (long sad story
> >> about C/C++ "gets" snipped here).
> >>
> >> Maybe you should describe the problem, rather than asking about this way
> >> of solving it.
> >>
> >> --
> >> Paul Lutus
> >> http://www.ara...
> >>
> >>
> >
> > I'm writing an RPC program.I use readline to read the command.I'm
> > afraid that my program can be attacked by others if I can't limit the
> > maxium length the readline can read.So I'm finding a way to control
> > it.
>
> As written, "readline" won't read more than it can safely store, which is
> what you are after. Your concern arose from such things as "gets",
> mentioned in my last post, that wrote beyond its allocated buffer because
> it didn't know its length.
>
> Why don't you read a character at a time, then stop reading characters after
> you have what you want? Like this:
>
> -----------------------------------
>
> #!/usr/bin/ruby -w
>
> max = 16
>
> while true
>
> print "Type something:"
> STDOUT.flush
>
> input = STDIN.sysread(max)
>
> puts "\nYou entered (in chunks of #{max} chars) #{input}."
>
> end
>
> -----------------------------------
>
> This routine reads the input in chunks of "max" characters, and continues to
> cycle through similarly sized chunks indefinitely. Linefeeds are not
> special to it, although that would be easy to add. This gives you a limit
> on input size, but you then have to sort out for yourself what a line is,
> and where one ends and another begins.
>
> --
> Paul Lutus
> http://www.ara...
>
>

This may be the best way.

Thanks a lot.