]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
src/stackprof.cxx: fixing the find_procfile parse
authorSerhei Makarov <serhei@serhei.io>
Mon, 22 Jun 2026 18:24:13 +0000 (14:24 -0400)
committerSerhei Makarov <serhei@serhei.io>
Mon, 22 Jun 2026 18:27:01 +0000 (14:27 -0400)
src/stackprof.cxx

index dee8ef13cca0a646ca6b4a82520c1888f58f02f0..eab2484515037e677d3cfcbc332652e03c98950f 100644 (file)
@@ -1226,7 +1226,9 @@ int PerfConsumerUnwinder::find_procfile(Dwfl *dwfl, pid_t *pid, Elf **elf, int *
        char *endptr;
        long val = strtol (&line.c_str()[5], &endptr, 10);
        if ((errno == ERANGE && val == LONG_MAX)
-           || *endptr != '\n' || val < 0 || val != (pid_t) val)
+           || (*endptr != 0 && *endptr != '\n')
+              /* <- getline(3) ambiguous on what ends the string */
+           || val < 0 || val != (pid_t) val)
          *pid = 0;
        else
          *pid = (pid_t) val;
@@ -1341,7 +1343,7 @@ Dwfl *PerfConsumerUnwinder::find_dwfl(pid_t pid, const uint64_t *regs, uint32_t
       goto reuse;
     }
   err = this->find_procfile(dwfl, &pid, &elf, &elf_fd);
-  if (err != 0) /* TODO check errnos */
+  if (err != 0)
     {
       if (verbose)
        cerr << format("WARNING: find_procfile pid {}: {}\n", (long long) pid, dwfl_errmsg(-1));