EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  <20192020  2021  2022  2023  2024  2025  Index 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  <20192020  2021  2022  2023  2024  2025 
<== Date ==> <== Thread ==>

Subject: Re: lsi record for more than 40 characters doesn't work
From: Eric Norum via Core-talk <[email protected]>
To: "Zimoch Dirk (PSI)" <[email protected]>
Cc: "[email protected]" <[email protected]>, "[email protected]" <[email protected]>, "[email protected]" <[email protected]>
Date: Mon, 2 Dec 2019 08:57:14 -0800
Hmm.  I stand corrected.

Has StreamDevice done this from the beginning?
I’m pretty sure that I had a buffer overflow somewhere along the way.  Could have just been my bad code somewhere else, though.

Thanks for the clarification.  Perhaps a note about limiting to NELM could be added to the documentation format converter descriptions?

> On Dec 2, 2019, at 8:41 AM, Zimoch Dirk (PSI) via Tech-talk <[email protected]> wrote:
> 
> On Mon, 2019-12-02 at 08:07 -0800, Eric Norum via Core-talk wrote:
>> Others have dealt with the original question, but I’d like to add a followup.
>> 
>> Conversion strings like the one shown in the original message are unsafe and should never be used.  They can lead to buffer overflows and weird IOC behaviour.
>> 
> 
> Have you tested that this leads to buffer overflows? I think I automatically limit the format to the buffer size (here
> NELM).
> 
> Dirk
> 
>> The capacity of the destination buffer should always be specified.  Here, from the ASYN streamSCPI template, are the ’short’ and ‘long’ string versions of records to read SCPI identification strings:
>> 
>>> record(stringin, "$(P)$(R)IDN")
>>> {
>>>    field(DESC, "SCPI identification string")
>>>    field(DTYP, "stream")
>>>    field(INP,  "@dev_NAME_.proto getIDN(39) $(PORT) $(A)")
>>>    field(PINI, "YES")
>>> }
>>> record(waveform, "$(P)$(R)IDNwf")
>>> {
>>>    field(DESC, "SCPI identification string")
>>>    field(DTYP, "stream")
>>>    field(INP,  "@dev_NAME_.proto getIDN(199) $(PORT) $(A)")
>>>    field(PINI, "YES")
>>>    field(FTVL, "CHAR")
>>>    field(NELM, "200")
>>> }
>>> 
>>> 
>>> getIDN {
>>>    out "*IDN?";
>>>    in "%\$1[^\r\n]";
>>>    ExtraInput = Ignore;
>>> }
>> 
>> 
>>> On Nov 29, 2019, at 12:11 PM, dmnr infn via Tech-talk <[email protected]> wrote:
>>> 
>>> Hi all,
>>> I have a .db e .proto made in this way:
>>> 
>>> .db
>>> record(lsi, "RF:getString")
>>> {
>>>    field(DESC, "String more than 40 chars")
>>>    field(SIZV, "80")
>>>    field(INP, "@MDO.proto getString L0")
>>>    field(SCAN, ".2 second")
>>> }
>>> 
>>> .proto
>>> getString {
>>>    out "STT?";
>>>    in "%s";
>>> }
>>> 
>>> I want to get a String that is more than 40 characters, and I use a lsi record but I got always 40 chars.
>>> There is something wrong in my code?
>>> Thank you
>>> 
>> 
>> -- 
>> Eric Norum
>> [email protected]
>> “Ah, the chance to be pedantic first thing on a Monday morning — what a great way to start the week."
>> 

-- 
Eric Norum
[email protected]




Replies:
Re: lsi record for more than 40 characters doesn't work Zimoch Dirk (PSI) via Core-talk
References:
Re: lsi record for more than 40 characters doesn't work Eric Norum via Core-talk
Re: lsi record for more than 40 characters doesn't work Zimoch Dirk (PSI) via Core-talk

Navigate by Date:
Prev: Re: lsi record for more than 40 characters doesn't work Zimoch Dirk (PSI) via Core-talk
Next: Re: lsi record for more than 40 characters doesn't work Zimoch Dirk (PSI) via Core-talk
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  <20192020  2021  2022  2023  2024  2025 
Navigate by Thread:
Prev: Re: lsi record for more than 40 characters doesn't work Zimoch Dirk (PSI) via Core-talk
Next: Re: lsi record for more than 40 characters doesn't work Zimoch Dirk (PSI) via Core-talk
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  <20192020  2021  2022  2023  2024  2025 
ANJ, 03 Dec 2019 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions ·
· Download · Search · IRMIS · Talk · Documents · Links · Licensing ·