Hello,

I'd like to contribute this small patch (attached) that I think will help prevent some future bugs from occurring in paste.c. By wrapping the macro's arguments in parentheses, we can ensure that the correct order of evaluation will take place during preprocessing.

To illustrate, we can use the == operator which has lower evaluation precedence than the < operator:
    * With the current macro, imax2(3==4, 1) expands to 0.
    * After applying this patch, imax2(3==4, 1) expands to 1 as expected.

Since I'm still relatively new to the mailing list, I've kept this patch small. I did notice other macros that have this same issue, so I can start sending additional patches if this seems okay.

Thanks,
Sahil
Index: src/main/paste.c
===================================================================
--- src/main/paste.c	(revision 72713)
+++ src/main/paste.c	(working copy)
@@ -31,7 +31,7 @@
 #include "Defn.h"
 #include <Internal.h>
 
-#define imax2(x, y) ((x < y) ? y : x)
+#define imax2(x, y) (((x) < (y)) ? (y) : (x))
 
 #include "Print.h"
 #include "RBufferUtils.h"
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to