[splint-discuss] Splint usage help

Nido nido at foxserver.be
Sat Apr 18 10:09:23 PDT 2009


2009/4/18 Marcus Martin <nymaen at yahoo.com>:
>
> <Please ignore the first message, this one is in plain text.>
>
>
> I
> am a new splint user and am having some difficutly with the
> annotations. I read the documentation and looked at the examples and
> still have some trouble. Can someone please help me get started?
>
> I have the source code line:
> const char *subCmds[] = { "-file", "-stream", NULL };
>
> This
> array needs to have the last element be NULL so when used a parameter
> in a method, the method knows when to stop reading the array. Splint
> produces the following errors.
>
> test.c:94:68: Index of possibly null pointer subCmds: subCmds
>  A possibly null pointer is dereferenced.  Value is either the result of a
>  function which may return null (in which case, code should check it is not
>  null), or a global, parameter or structure field declared with the null
>  qualifier. (Use -nullderef to inhibit warning)
>   test.c:94:27: Storage subCmds may become null
> test.c:94:61: Local subCmds[2] initialized to null value: subCmds[2] = NULL
>  A reference with no null annotation is assigned or initialized to NULL.  Use
>  /*@null@*/ to declare the reference as a possibly null pointer. (Use
>  -nullassign to inhibit warning)
>
> After reading the warnings I tried changing the source line in the following ways, none of which worked for me.
>
> /*@-nullderef@*/ const char *subCmds[] = { "-file", "-stream", NULL };  /*@=nullderef@*/
> /*@-nullassign@*/ const char *subCmds[] = { "-file", "-stream", NULL };  /*@=nullassign@*/
> const char *subCmds[] = { "-file", "-stream", /*@null@*/  NULL };

I'm sorry; I can't really help you out here as I seem to understand
the problem as well as you do. You might want to try to ignore this
particular warning using -nullassign until someone can give you a
better answer.

This may help you: http://www.splint.org/manual/html/sec14.html

> The
> second problem I encountered is that splint wants me to annotate the
> header files of exeternal packages I call to indicate out parameters
> and parameters that can be NULL. Since I don't own that source code,I
> really don't want to change it. How do I indicate to splint where I
> invoked the method that my parameters are correct and the method is
> used correctly.

you can create .lcl files from .h files using the -dump command. You
can use these dumps later using -load. I am using this functionality
now to create an improved posix library that is compatible with the
newer version of the standard.  I have posted this a few days ago on
this list so I don't think its a good idea to re-post it because it
hasn't chagned since than. Should you be interrested I'd be happy to
send you a copy should you contact me about that.

> The third issue is that I am creating a shared
> library that  implements the interface. At no place in my code base
> will I call these public interface methods. How can I tell splint that
> these methods are exported and not called directly, but that is okay.

/*@unused@*/ might help.

> Can
> someone tell me what I am doing wrong? Once I understand these three
> problems, I should be able to fix the rest of my module.
>
> Marcus

You may want to read through the splint manual a bit; I linked to
chapter 14 earlier. Good luck with your module

kind regards,

Nido Media



More information about the splint-discuss mailing list