From: Martin Schwenke Date: Tue, 26 Jun 2018 09:51:00 +0000 (+1000) Subject: ctdb-tests: Teach strace packet parser about non-octal escapes X-Git-Tag: tevent-0.9.37~157 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0b4a071ed1817bbc5523b259ca41c62a9e9b1f0b;p=thirdparty%2Fsamba.git ctdb-tests: Teach strace packet parser about non-octal escapes strace output also encodes characters 7 to 13 as \a, \b, \t, \n, \v, \f, \r. Signed-off-by: Martin Schwenke Reviewed-by: Amitay Isaacs Autobuild-User(master): Martin Schwenke Autobuild-Date(master): Mon Jul 2 11:30:29 CEST 2018 on sn-devel-144 --- diff --git a/ctdb/tests/src/ctdb_packet_parse.c b/ctdb/tests/src/ctdb_packet_parse.c index c337a2ef12d..707d697d931 100644 --- a/ctdb/tests/src/ctdb_packet_parse.c +++ b/ctdb/tests/src/ctdb_packet_parse.c @@ -39,23 +39,51 @@ static TDB_DATA strace_parser(char *buf, TALLOC_CTX *mem_ctx) while (i < strlen(buf)) { if (buf[i] == '\\') { - char tmp[4] = { '\0', '\0', '\0', '\0' }; - - /* first char after '\' has to be digit */ - tmp[0] = buf[i+1]; - if (isdigit(buf[i+2])) { - tmp[1] = buf[i+2]; - if (isdigit(buf[i+3])) { - tmp[2] = buf[i+3]; - i += 4; + /* first char after '\' is a digit or other escape */ + if (isdigit(buf[i+1])) { + char tmp[4] = { '\0', '\0', '\0', '\0' }; + + tmp[0] = buf[i+1]; + if (isdigit(buf[i+2])) { + tmp[1] = buf[i+2]; + if (isdigit(buf[i+3])) { + tmp[2] = buf[i+3]; + i += 4; + } else { + i += 3; + } } else { - i += 3; + i += 2; } - } else { + data.dptr[j] = strtol(tmp, NULL, 8); + } else if (buf[i+1] == 'a') { + data.dptr[j] = 7; + i += 2; + } else if (buf[i+1] == 'b') { + data.dptr[j] = 8; + i += 2; + } else if (buf[i+1] == 't') { + data.dptr[j] = 9; + i += 2; + } else if (buf[i+1] == 'n') { + data.dptr[j] = 10; i += 2; + } else if (buf[i+1] == 'v') { + data.dptr[j] = 11; + i += 2; + } else if (buf[i+1] == 'f') { + data.dptr[j] = 12; + i += 2; + } else if (buf[i+1] == 'r') { + data.dptr[j] = 13; + i += 2; + } else { + fprintf(stderr, + "Unknown escape \\%c\n", + buf[i+1]); + data.dptr[j] = 0; } - data.dptr[j] = strtol(tmp, NULL, 8); j += 1; } else if (buf[i] == '\n') { i += 1;