[cfe-commits] [patch] Warn in string literal + integral

Nico Weber thakis at chromium.org
Tue Feb 21 19:17:50 PST 2012


Hi,

the attached patch adds -Wstring-plus-int (I'm open to more creative
names :-) ), which warns on code like |"error code: " + err|. The
warning found 4 bugs in 2 files in chromium. The bugs it found look
like this:

File 1:
    if (!read_node.InitByIdLookup(it->id)) {
      error_handler()->OnUnrecoverableError(FROM_HERE, "Failed to look up "
          " data for received change with id " + it->id);
      return;
    }

File 2:
    ResetStream(stream_id, spdy::INVALID_ASSOCIATED_STREAM,
      "Received OnSyn with inactive associated stream " +
      associated_stream_id);
(Fix: http://codereview.chromium.org/9372076/diff/1/net/spdy/spdy_session.cc )

(A coworker found the bug in the one file, which prompted me writing
the warning. The warning then found the bug in the other file.)


When building all of chromium and its many dependencies, the warning
did also find 3 false positives, but they all look alike: Ffmepg
contains three different functions that all look like this:

const char *avformat_license(void)
{
#define LICENSE_PREFIX "libavformat license: "
    return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
}

I don't quite get what this is for (a coworker suggested it's so that
"libavformat license: " shows up in `strings` output, but is omitted
from the return), but I think warning on code like this is kind of ok.
Here's how the warning looks in this case:

../../third_party/ffmpeg/patched-ffmpeg/libavformat/utils.c:68:42:
warning: Adding an integral to a string does not append to the string
[-Wstring-plus-int]
    return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
../../third_party/ffmpeg/patched-ffmpeg/libavformat/utils.c:68:42:
note: use &(str[index]) if pointer arithmetic is intended
1 warning generated.


I'm looking forward to comments :-)

Nico
-------------- next part --------------
A non-text attachment was scrubbed...
Name: clang-str-plus-int.patch
Type: application/octet-stream
Size: 5658 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120221/8ebe9e7b/attachment.obj>


More information about the cfe-commits mailing list