math/ec-exp.h: Fix segfault when base point is at infinity.
authorMark Wooding <mdw@distorted.org.uk>
Fri, 18 Oct 2019 21:45:01 +0000 (22:45 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 16 Dec 2019 16:25:25 +0000 (16:25 +0000)
math/ec-exp.h

index 6cad753..b393d7e 100644 (file)
 #define EXP_TYPE ec
 
 #define EXP_COPY(d, p) do {                                            \
-  (d).x = MP_COPY((p).x);                                              \
-  (d).y = MP_COPY((p).y);                                              \
-  (d).z = (p).z ? MP_COPY((p).z) : MP_NEW;                             \
+  if (EC_ATINF(&(p)))                                                  \
+    (d).x = (d).y = (d).z = MP_NEW;                                    \
+  else {                                                               \
+    (d).x = MP_COPY((p).x);                                            \
+    (d).y = MP_COPY((p).y);                                            \
+    (d).z = (p).z ? MP_COPY((p).z) : MP_NEW;                           \
+  }                                                                    \
 } while (0)
 #define EXP_DROP(x) EC_DESTROY(&(x))