Macro: dps_snprintf_oflow

Back to the Main Page. | # dps_snprintf_oflow | Download the M4 Source.

Synopsis

  `dps_snprintf_oflow`

Version

  1.2 (2002/12/12) C_Support @ ac-archive-0.5.39

Author

  Duncan Simpson <dps@io.stargate.co.uk>

Description

  Checks whether snprintf ignores the value of n or not and defines HAVE_SNPRINTF_BUG if it does.

M4 Source Code

      AC_DEFUN([dps_snprintf_oflow],
      [AC_MSG_CHECKING(whether snprintf ignores n)
      AC_CACHE_VAL(dps_cv_snprintf_bug,
      [AC_TRY_RUN(
      changequote(<<, >>)dnl
      <<#include <stdio.h>

      #ifndef HAVE_SNPRINTF
      #ifdef HAVE_VSNPRINTF
      #include "vsnprintf.h"
      #else /* not HAVE_VSNPRINTF */
      #include "vsnprintf.c"
      #endif /* HAVE_VSNPRINTF */
      #endif /* HAVE_SNPRINTF */

      int main(void)
      {
      char ovbuf[7];
      int i;
      for (i=0; i<7; i++) ovbuf[i]='x';
      snprintf(ovbuf, 4,"foo%s", "bar");
      if (ovbuf[5]!='x') exit(1);
      snprintf(ovbuf, 4,"foo%d", 666);
      if (ovbuf[5]!='x') exit(1);
      exit(0);
      } >>
      changequote([, ]), dps_cv_snprintf_bug=0, dps_cv_snprintf_bug=1,
      dps_cv_snprintf_bug=2)])
      if test $dps_cv_snprintf_bug -eq 0; then
        AC_MSG_RESULT([no, snprintf is ok])
      else if test $dps_cv_snprintf_bug -eq 1; then
        AC_MSG_RESULT([yes, snprintf is broken])
        AC_DEFINE(HAVE_SNPRINTF_BUG,1)
      else
        AC_MSG_RESULT([unknown, assuming yes])
        AC_DEFINE(HAVE_SNPRINTF_BUG,1)
      fi; fi])