<div dir="ltr"><div>Hi Richard and Li, <br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Mar 17, 2022 at 12:33 AM Richard Palethorpe <<a href="mailto:rpalethorpe@suse.de">rpalethorpe@suse.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello Luke,<br>
<br>
><br>
> Thank you for pointing all these things out. I forgot about all the shenanigans that can happen when you don't sanity check string stuff :)<br>
><br>
> A few solutions to creating the scanff format are:<br>
> 1) pre-processor trick to concatenate defines into a string, something like this<br>
> #define _tostr(str) #str<br>
> #define tostr(str) _tostr(str)<br>
> #define CONFIG_FORMAT "%" tostr(CTRL_NAME_MAX) "s\t%d\t%d\t%" tostr(PATH_MAX) "s\t%d\t%d\t%" tostr(NAME_MAX) "s"<br>
><br>
> 2) just hardcode the lengths to avoid all of this nonsense above<br>
<br>
I would have done 2 in this case, but you figured out 1, so feel free to<br>
use that. In fact that would be a nice addition to LTP's standard macros<br>
(but with TST_ prefix).<br>
<br>
Just note that the maximum conversion length doesn't include<br>
the null character. scanf will write the null character after the<br>
maximum conversion length. Also I'm not sure the field length comes<br>
after '%' or that you use 's' with a length; possibly it should be<br>
'%c63' to scan a 64 byte null terminated string. However please double<br>
check the man page.<br>
<br></blockquote><div>You can use %s with a length which makes things easier and automatically appends the null character.</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
><br>
> 3) just create the format at runtime<br>
<br>
IIRC this is considered unsafe and will result in warnings and errors.<br>
<br>
><br>
> I'm more or less asking what you think is best to avoid sending out all of the patches and then discussing this / if there is a better way. <br>
><br>
<br></blockquote><div><br></div><div>Sorry for the delay on these patches, got caught up in many other things again.</div><div><br></div><div>I have submitted a pull request for review, didn't want to spam 19 patches on the ML. Its my first time doing a pull request.. are you guys able to review and accept from there? If so here it is <a href="https://github.com/linux-test-project/ltp/pull/933">https://github.com/linux-test-project/ltp/pull/933</a></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
-- <br>
Thank you,<br>
Richard.<br></blockquote><div><br></div><div>Thanks, <br></div><div>- Luke <br></div></div></div>