Calling failpath_string() here leaves the final letter randomly upper or
lower-cased, since call->fail is uninitialized. This means we sometimes
don't match the debug string.
1) Initialize call->fail here so it will match the debug string.
2) If our calls don't match --debugpath, abort.
3) Don't match the final letter (which may be upper or lower case)
when checking we're still on the path. We could do better, but this is
only a sanity-check anyway.
/* Attach debugger if they asked for it. */
if (debugpath) {
/* Attach debugger if they asked for it. */
if (debugpath) {
- char *path = failpath_string();
+ char *path;
+
+ /* Pretend this last call matches whatever path wanted:
+ * keeps valgrind happy. */
+ call->fail = cisupper(debugpath[strlen(debugpath)-1]);
+ path = failpath_string();
if (streq(path, debugpath)) {
char str[80];
if (streq(path, debugpath)) {
char str[80];
getpid(), getpid());
if (system(str) == 0)
sleep(5);
getpid(), getpid());
if (system(str) == 0)
sleep(5);
- } else if (!strstarts(path, debugpath)) {
- fprintf(stderr, "--debugpath not followed: %s\n", path);
- debugpath = NULL;
+ } else {
+ /* Ignore last character: could be upper or lower. */
+ path[strlen(path)-1] = '\0';
+ if (!strstarts(debugpath, path)) {
+ fprintf(stderr,
+ "--debugpath not followed: %s\n", path);
+ debugpath = NULL;
+ }