missing type on Solaris dummy
[exim.git] / src / src / string.c
index 8cc34a0773cbb70cad5ff5b388be03c62e6a9636..a954396512723624ff777e457789e84f9dfd1641 100644 (file)
@@ -223,6 +223,8 @@ interpreted in strings.
 Arguments:
   pp       points a pointer to the initiating "\" in the string;
            the pointer gets updated to point to the final character
+           If the backslash is the last character in the string, it
+           is not interpreted.
 Returns:   the value of the character escape
 */
 
@@ -235,6 +237,7 @@ const uschar *hex_digits= CUS"0123456789abcdef";
 int ch;
 const uschar *p = *pp;
 ch = *(++p);
+if (ch == '\0') return **pp;
 if (isdigit(ch) && ch != '8' && ch != '9')
   {
   ch -= '0';
@@ -1138,8 +1141,8 @@ memcpy(g->s + p, s, count);
 g->ptr = p + count;
 return g;
 }
+
+
 gstring *
 string_cat(gstring *string, const uschar *s)
 {
@@ -1277,8 +1280,10 @@ else if (!(flags & SVFMT_TAINT_NOCHK)) dest_tainted = is_tainted(g->s);
 
 if (!(flags & SVFMT_TAINT_NOCHK) && !dest_tainted && is_tainted(format))
   {
+#ifndef MACRO_PREDEF
   if (!(flags & SVFMT_REBUFFER))
     die_tainted(US"string_vformat", func, line);
+#endif
   gstring_rebuffer(g);
   dest_tainted = TRUE;
   }
@@ -1507,8 +1512,10 @@ while (*fp)
          gp = CS g->s + g->ptr;
          dest_tainted = TRUE;
          }
+#ifndef MACRO_PREDEF
        else
          die_tainted(US"string_vformat", func, line);
+#endif
 
     INSERT_STRING:              /* Come to from %D or %M above */