[radvd-devel-l] string type in radvd scanner.l

Reuben Hawkins reubenhwk at gmail.com
Fri May 6 03:48:05 EDT 2011

On Thu, May 5, 2011 at 3:13 PM, Mark Smith
<radvd at 02a76c927861ca7413a122f2a73a0d37.nosense.org> wrote:
> On Thu, 5 May 2011 10:30:00 -0700
> Reuben Hawkins <reubenhwk at gmail.com> wrote:
>> Hi All,
>> This is what the radvd scanner considers a string (for interface names
>> and dnssl)...
>> string          [a-zA-Z0-9`~!@#$%\^&*()_\-+=:\[\]<>,\.?\\]{1,255}
>> Does it really need to be so complex?  This change was added October
>> 14, 2008 with the commit message... "Accept virtually any interface
>> name (up to 15 chars) instead of forcing a specific naming
>> convention." and it was defined as...
>> string    [a-z]([a-z:._-]|{digit})*([:.]{digit}+)?
>> As it is now, scanner.o is 369K (on my machine), but with the older
>> version of string, scanner.o is 68K.  The rest of radvd is only 157K.
>> The more complex version of string increases the size of radvd by a
>> factor of three.  Is this really needed?  Can somebody come up with
>> something simpler which will provide a decent trade-off?
> What would the risk be of accepting any string at all, and then passing
> it to the system routines that match interface names? Isn't the use of
> interface names an exact match lookup, so either the string supplied
> either matches a host interface name or doesn't, and therefore a
> interface name with any incorrect characters (regardless of what they
> are) would fail and understandably fail?
> (I too have been wondering why scanner.o is so large.)
> Regards,
> Mark.

Problem solved with this patch (which is already committed to CVS)...

-string		[a-zA-Z0-9`~!@#$%\^&*()_\-+=:\[\]<>,\.?\\]{1,255}
+string		[a-zA-Z0-9`~!@#$%\^&*()_\-+=:\[\]<>,\.?\\]+

scanner.o before patch: 362k
scanner.o after patch: 32k

both compiled with -Os

The string is trimmed to 255 chars (if over 255) and null terminated
in the string handling code already.

More information about the radvd-devel-l mailing list