summaryrefslogtreecommitdiff
path: root/runner
diff options
context:
space:
mode:
authorPetri Latvala <petri.latvala@intel.com>2018-09-26 16:24:20 +0300
committerPetri Latvala <petri.latvala@intel.com>2018-09-27 12:27:09 +0300
commit38a633b50f0ee369570e1eadee724f62d59553b0 (patch)
tree46dbf642b37c00ff739d18dce997d5ce581e448c /runner
parent83352d08b52acd6ee677f9f62dd032b0b8d31835 (diff)
runner: Avoid null characters in results.json
CI pipeline (namely, cibuglog) doesn't cope well with strings that have \0 in them. If null characters appear in output files, pretend the output stops at the first such character. Well behaving tests should not print them anyway. The case in CI happened due to some hang/crash/explosion/solar flare that corrupted the output of a test. Signed-off-by: Petri Latvala <petri.latvala@intel.com> Cc: Arkadiusz Hiler <arkadiusz.hiler@intel.com> Cc: Tomi Sarvela <tomi.p.sarvela@intel.com> Cc: Martin Peres <martin.peres@linux.intel.com> Acked-by: Martin Peres <martin.peres@linux.intel.com> Acked-by: Tomi Sarvela <tomi.p.sarvela@intel.com>
Diffstat (limited to 'runner')
-rw-r--r--runner/resultgen.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/runner/resultgen.c b/runner/resultgen.c
index d34b52db..e8a60083 100644
--- a/runner/resultgen.c
+++ b/runner/resultgen.c
@@ -313,7 +313,7 @@ static bool fill_from_output(int fd, const char *binary, const char *key,
struct subtests *subtests,
struct json_object *tests)
{
- char *buf, *bufend;
+ char *buf, *bufend, *nullchr;
struct stat statbuf;
char piglit_name[256];
char *igt_version = NULL;
@@ -332,6 +332,14 @@ static bool fill_from_output(int fd, const char *binary, const char *key,
buf = NULL;
}
+ /*
+ * Avoid null characters: Just pretend the output stops at the
+ * first such character, if any.
+ */
+ if ((nullchr = memchr(buf, '\0', statbuf.st_size)) != NULL) {
+ statbuf.st_size = nullchr - buf;
+ }
+
bufend = buf + statbuf.st_size;
igt_version = find_line_starting_with(buf, IGT_VERSIONSTRING, bufend);