Skip to content

undefined behaviour in tm_func.c code #215

@rmok-git

Description

@rmok-git

From man sprintf:

CAVEATS
       Some programs imprudently rely on code such as the following

           sprintf(buf, "%s some further text", buf);

       to append text to buf.  However, the standards explicitly note that the
       results are undefined if source and destination  buffers  overlap  when
       calling  sprintf(), snprintf(), vsprintf(), and vsnprintf().  Depending
       on the version of gcc(1) used, and the compiler options employed, calls
       such as the above will not produce the expected results.

       The glibc implementation of the functions  snprintf()  and  vsnprintf()
       conforms  to  the  C99  standard,  that is, behaves as described above,
       since glibc 2.1.  Until glibc 2.0.6, they would return -1 when the out‐
       put was truncated.

And here is what I see with grep -n ', reason' tm_func.c | grep 'reason,'

1473:          sprintf(reason,"%s %c", reason, branch_dir);
1475:          sprintf(reason,"%s %c %f", reason, branch_dir,
1843:    sprintf(reason,"%s %i", reason, node->bc_index+1);
1845:       sprintf(reason, "%s %i", reason, node->parent->bc_index+1);
1860:    sprintf(reason,"%s %c %s", reason, branch_dir, "\n");
1864:    sprintf(reason, "%s %i", reason, node->bc_index+1);
1866:       sprintf(reason,"%s %i", reason, node->parent->bc_index+1);
1880:    sprintf(reason,"%s %c %s", reason, branch_dir, "\n");
1894:    sprintf(reason,"%s %c %f\n", reason, branch_dir, tm->ub);

I catch this with gcc -Wall

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions