Fix string_copy() macro to not multiple-eval args. Bug 2603
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 19 Jun 2020 23:54:05 +0000 (00:54 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Sun, 21 Jun 2020 13:30:52 +0000 (14:30 +0100)
Broken-by: a76d120aed
(cherry picked from commit 80c2ec2e47c556daff00c79ee068ce68f25fd264)

doc/doc-txt/ChangeLog
src/src/functions.h

index 859e87b000c0b4c6f38f73a1b6eec78e1335e86b..1173b3651dc11dc003ac6860a16236d7e62e1b26 100644 (file)
@@ -40,6 +40,12 @@ JH/08 Bug 2598: Fix verify ACL condition.  The options for the condition are
       expanded; previously using tainted values was rejected.  Fix by using
       dynamically-created buffers.
 
+JH/10 Bug 2603: Fix coding of string copying to only evaluate arguments once.
+      Previously a macro used one argument twice; when called with the
+      argument as an expression having side-effects, incorrect operation
+      resulted.  Use an inlineable function.
+
+
 
 Exim version 4.94
 -----------------
index 0028deb0d6d2622aa0c8e88d463c6984e74df84d..0050cdeeb0db07ed0f941f2b8a36e2360598e75a 100644 (file)
@@ -767,9 +767,9 @@ string_copy_trc(const uschar * s, const char * func, int line)
 /* Simple string-copy functions maintaining the taint */
 
 #define string_copyn(s, len) \
-       string_copyn_taint_trc((s), (len), is_tainted(s), __FUNCTION__, __LINE__)
+       string_copyn_trc((s), (len), __FUNCTION__, __LINE__)
 #define string_copy(s) \
-       string_copy_taint_trc((s), is_tainted(s), __FUNCTION__, __LINE__)
+       string_copy_trc((s), __FUNCTION__, __LINE__)
 
 
 /*************************************************