diff options
author | Sergei Trofimovich <slyfox@gentoo.org> | 2017-05-14 20:21:50 +0100 |
---|---|---|
committer | Sergei Trofimovich <slyfox@gentoo.org> | 2017-05-14 20:30:53 +0100 |
commit | 20c39b7743a242fce785e5c6507a8549dba7a8d2 (patch) | |
tree | 6e921d00b83e79dcfbe2a6036b5a19ce57a20a33 /rts | |
parent | 2a971e35d96613183c6ebc81e1bd274b65cb0a1f (diff) | |
download | haskell-20c39b7743a242fce785e5c6507a8549dba7a8d2.tar.gz |
ProfilerReportJson.c: fix out-of-bounds access
Found by gcc-7.1 which reported build error as:
rts/ProfilerReportJson.c:23:16: error:
error: comparison between pointer and zero
character constant [-Werror=pointer-compare]
for (; str != '\0' && len > 0; str++) {
^~
|
23 | for (; str != '\0' && len > 0; str++) {
| ^
Unfixed code in context:
```c
static void escapeString(char const* str, char *out, int len)
{
len--; // reserve character in output for terminating NUL
for (; str != '\0' && len > 0; str++) {
char c = *str;
```
The intent here is to process 'len' (if positive) or '\0'-terminator
in 'str' but dereference was missing.
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Diffstat (limited to 'rts')
-rw-r--r-- | rts/ProfilerReportJson.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/rts/ProfilerReportJson.c b/rts/ProfilerReportJson.c index 3cf875e15b..a7869215f7 100644 --- a/rts/ProfilerReportJson.c +++ b/rts/ProfilerReportJson.c @@ -20,7 +20,7 @@ static void escapeString(char const* str, char *out, int len) { len--; // reserve character in output for terminating NUL - for (; str != '\0' && len > 0; str++) { + for (; *str != '\0' && len > 0; str++) { char c = *str; if (c == '\\') { if (len < 2) break; |