Blob Blame History Raw
--- fmpz_poly/gcd_heuristic.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fmpz_poly/gcd_heuristic.c	2019-02-20 20:46:00.714971279 -0700
@@ -220,7 +220,7 @@ _fmpz_poly_gcd_heuristic(fmpz * res, con
    qlimbs = limbs1 - limbsg + 1;
    qlen = FLINT_MIN(len1, (qlimbs*FLINT_BITS)/pack_bits + 1);
    qlimbs = (qlen*pack_bits - 1)/FLINT_BITS + 1;
-   q = flint_calloc(qlimbs, sizeof(mp_limb_t));
+   q = flint_calloc(qlimbs + 1, sizeof(mp_limb_t));
    temp = flint_malloc(limbsg*sizeof(mp_limb_t));
    
 	divides = 0;
--- fmpz_poly_mat/clear.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fmpz_poly_mat/clear.c	2019-02-22 09:38:32.089703913 -0700
@@ -24,6 +24,7 @@
 ******************************************************************************/
 
 #include <stdlib.h>
+#include <string.h>
 #include "flint.h"
 #include "fmpz_poly.h"
 #include "fmpz_poly_mat.h"
@@ -41,4 +42,5 @@ fmpz_poly_mat_clear(fmpz_poly_mat_t A)
         flint_free(A->entries);
         flint_free(A->rows);
     }
+    memset(A, 0, sizeof(*A));
 }
--- fmpz_poly_mat/init.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fmpz_poly_mat/init.c	2019-02-22 15:45:34.429403916 -0700
@@ -24,6 +24,7 @@
 ******************************************************************************/
 
 #include <stdlib.h>
+#include <string.h>
 #include "flint.h"
 #include "fmpz_poly.h"
 #include "fmpz_poly_mat.h"
@@ -43,10 +44,10 @@ fmpz_poly_mat_init(fmpz_poly_mat_t A, sl
 
         for (i = 0; i < rows; i++)
             A->rows[i] = A->entries + i * cols;
+
+        A->r = rows;
+        A->c = cols;
     }
     else
-        A->entries = NULL;
-
-    A->r = rows;
-    A->c = cols;
+        memset(A, 0, sizeof(*A));
 }
--- fmpz_poly_mat/window_clear.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fmpz_poly_mat/window_clear.c	2019-02-22 15:42:08.446972613 -0700
@@ -24,11 +24,15 @@
 
 ******************************************************************************/
 
+#include <string.h>
 #include "fmpz_poly_mat.h"
 
 void
 fmpz_poly_mat_window_clear(fmpz_poly_mat_t window)
 {
-    if (window->entries)
+    if (window->rows)
+    {
         flint_free(window->rows);
+        memset(window, 0, sizeof(*window));
+    }
 }
--- fmpz_poly_mat/window_init.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fmpz_poly_mat/window_init.c	2019-02-22 15:44:05.187516816 -0700
@@ -24,6 +24,7 @@
 
 ******************************************************************************/
 
+#include <string.h>
 #include "fmpz_poly_mat.h"
 
 void
@@ -33,12 +34,16 @@ fmpz_poly_mat_window_init(fmpz_poly_mat_
     slong i;
     window->entries = NULL;
 
-    if (r2 - r1)
+    if (c2 > c1 && r2 > r1)
+    {
         window->rows = flint_malloc((r2 - r1) * sizeof(fmpz_poly_t));
 
-    for (i = 0; i < r2 - r1; i++)
-        window->rows[i] = mat->rows[r1 + i] + c1;
+        for (i = 0; i < r2 - r1; i++)
+            window->rows[i] = mat->rows[r1 + i] + c1;
 
-    window->r = r2 - r1;
-    window->c = c2 - c1;
+         window->r = r2 - r1;
+         window->c = c2 - c1;
+    }
+    else
+        memset(window, 0, sizeof(*window));
 }
--- fq_poly_factor_templates/factor_berlekamp.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fq_poly_factor_templates/factor_berlekamp.c	2019-02-25 15:41:46.136872369 -0700
@@ -278,6 +278,7 @@ __TEMPLATE(T, poly_factor_berlekamp) (TE
     TEMPLATE(T, clear) (mul, ctx);
     fmpz_clear(pow);
     fmpz_clear(p);
+    fmpz_clear(q);
     fmpz_clear(s);
 }
 
--- fq_poly_factor_templates/is_irreducible_ben_or.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fq_poly_factor_templates/is_irreducible_ben_or.c	2019-02-26 19:45:35.681301008 -0700
@@ -97,6 +97,8 @@ TEMPLATE(T, poly_is_irreducible_ben_or)
         }
     }
 
+    TEMPLATE(T, poly_clear) (g, ctx);
+    TEMPLATE(T, poly_clear) (x, ctx);
     TEMPLATE(T, poly_clear) (xq, ctx);
     TEMPLATE(T, poly_clear) (xqimx, ctx);
     TEMPLATE(T, poly_clear) (v, ctx);
--- fq_poly_templates/div_newton_n_preinv.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fq_poly_templates/div_newton_n_preinv.c	2019-02-24 16:43:41.479823977 -0700
@@ -94,7 +94,7 @@ TEMPLATE(T, poly_div_newton_n_preinv) (T
 
     if (Q == A || Q == B || Q == Binv)
     {
-        flint_free(Q->coeffs);
+        TEMPLATE(T, poly_clear) (Q, ctx);
         Q->coeffs = q;
         Q->alloc = lenQ;
     }
--- fq_poly_templates/divrem_newton_n_preinv.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fq_poly_templates/divrem_newton_n_preinv.c	2019-02-24 15:23:03.443165017 -0700
@@ -111,13 +111,13 @@ TEMPLATE(T, poly_divrem_newton_n_preinv)
 
     if (Q == A || Q == B || Q == Binv)
     {
-        _TEMPLATE(T, vec_clear) (Q->coeffs, lenA - lenB + 1, ctx);
+        _TEMPLATE(T, vec_clear) (Q->coeffs, Q->alloc, ctx);
         Q->coeffs = q;
         Q->alloc = lenA - lenB + 1;
     }
     if (R == A || R == B || R == Binv)
     {
-        _TEMPLATE(T, vec_clear) (R->coeffs, lenB - 1, ctx);
+        _TEMPLATE(T, vec_clear) (R->coeffs, R->alloc, ctx);
         R->coeffs = r;
         R->alloc = lenB - 1;
     }
--- fq_poly_templates/evaluate_fq_vec_fast.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fq_poly_templates/evaluate_fq_vec_fast.c	2019-02-26 08:48:44.651661567 -0700
@@ -60,6 +60,7 @@ _TEMPLATE4(T, poly_evaluate, T, vec_fast
                 TEMPLATE(T, set)(vs + i, poly, ctx);
         
         TEMPLATE(T, clear)(temp, ctx);
+        TEMPLATE(T, clear)(inv, ctx);
         return;
     }
 
--- fq_poly_templates/gcd_hgcd.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fq_poly_templates/gcd_hgcd.c	2019-02-23 17:01:46.896155151 -0700
@@ -161,6 +161,7 @@ void TEMPLATE(T, poly_gcd_hgcd) (TEMPLAT
 
             lenG = _TEMPLATE(T, poly_gcd_hgcd) (g, A->coeffs, lenA,
                                                 B->coeffs, lenB, invB, ctx);
+            TEMPLATE(T, clear) (invB, ctx);
 
             if (G == A || G == B)
             {
--- fq_zech/get_str.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fq_zech/get_str.c	2019-02-26 08:53:54.640290281 -0700
@@ -28,7 +28,7 @@
 char *
 fq_zech_get_str(const fq_zech_t op, const fq_zech_ctx_t ctx)
 {
-    char *s = flint_malloc(n_clog(op->value, 10) * sizeof(char));
+    char *s = flint_malloc(n_clog(op->value, 10) * sizeof(char) + 6U);
     flint_sprintf(s, "%wd", op->value);
     return s;
 }
--- fq_zech/get_str_pretty.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ fq_zech/get_str_pretty.c	2019-02-26 08:56:59.623084857 -0700
@@ -30,7 +30,7 @@ char *
 fq_zech_get_str_pretty(const fq_zech_t op, const fq_zech_ctx_t ctx)
 {
     char *s = flint_malloc((n_clog(op->value, 10) + strlen(ctx->fq_nmod_ctx->var) + 1) *
-                           sizeof(char));
+                           sizeof(char) + 8U);
     flint_sprintf(s, "%s^%wd", ctx->fq_nmod_ctx->var, op->value);
     return s;
 }
--- nmod_matxx.h.orig	2015-08-13 10:16:22.000000000 -0600
+++ nmod_matxx.h	2019-02-26 09:05:17.432516298 -0700
@@ -429,8 +429,15 @@ private:
             nmod_mat_init_set(data[i], o.data[i]);
     }
 
+    void clear(void)
+    {
+        for(std::size_t i = 0; i < size_;++i)
+            nmod_mat_clear(data[i]);
+        delete[] data;
+    }
+
 public:
-    ~nmod_mat_vector() {delete[] data;}
+    ~nmod_mat_vector() {clear();}
     nmod_mat_vector(slong rows, slong cols, const std::vector<mp_limb_t>& primes)
     {
         size_ = primes.size();
@@ -446,7 +453,7 @@ public:
 
     nmod_mat_vector& operator=(const nmod_mat_vector& o)
     {
-        delete[] data;
+        clear();
         init(o);
         return *this;
     }
--- nmod_poly/get_str_pretty.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ nmod_poly/get_str_pretty.c	2019-02-26 08:44:16.807300744 -0700
@@ -46,7 +46,7 @@ char * nmod_poly_get_str_pretty(const nm
     }
     else if (poly->length == 1)
     {
-        size = (ulong) ceil(0.30103*FLINT_BIT_COUNT(poly->coeffs[0]));
+        size = (ulong) ceil(0.30103*FLINT_BIT_COUNT(poly->coeffs[0])) + 3U;
         buf = (char *) flint_malloc(size);
         flint_sprintf(buf, "%wu", poly->coeffs[0]);
         return buf;
--- nmod_poly_mat/clear.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ nmod_poly_mat/clear.c	2019-02-22 15:39:58.479593393 -0700
@@ -23,6 +23,7 @@
 
 ******************************************************************************/
 
+#include <string.h>
 #include "flint.h"
 #include "nmod_poly.h"
 #include "nmod_poly_mat.h"
@@ -40,4 +41,5 @@ nmod_poly_mat_clear(nmod_poly_mat_t A)
         flint_free(A->entries);
         flint_free(A->rows);
     }
+    memset(A, 0, sizeof(*A));
 }
--- nmod_poly_mat/init.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ nmod_poly_mat/init.c	2019-02-23 21:04:49.876161996 -0700
@@ -43,11 +43,15 @@ nmod_poly_mat_init(nmod_poly_mat_t A, sl
 
         for (i = 0; i < rows; i++)
             A->rows[i] = A->entries + i * cols;
+
+        A->r = rows;
+        A->c = cols;
     }
     else
+    {
         A->entries = NULL;
-
+        A->r = 0;
+        A->c = 0;
+    }
     A->modulus = n;
-    A->r = rows;
-    A->c = cols;
 }
--- nmod_poly_mat/window_clear.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ nmod_poly_mat/window_clear.c	2019-02-22 15:41:56.615120167 -0700
@@ -23,14 +23,16 @@
 
 ******************************************************************************/
 
+#include <string.h>
 #include "nmod_poly_mat.h"
 
 void
 nmod_poly_mat_window_clear(nmod_poly_mat_t window)
 {
-    if (window->entries)
+    if (window->rows)
     {
         flint_free(window->rows);
+        memset(window, 0, sizeof(*window));
     }
 
 }
--- nmod_poly_mat/window_init.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ nmod_poly_mat/window_init.c	2019-02-22 15:43:46.413750923 -0700
@@ -23,6 +23,7 @@
 
 ******************************************************************************/
 
+#include <string.h>
 #include "nmod_poly_mat.h"
 
 void
@@ -32,12 +33,16 @@ nmod_poly_mat_window_init(nmod_poly_mat_
     slong i;
     window->entries = NULL;
 
-    if (r2 - r1)
+    if (c2 > c1 && r2 > r1)
+    {
         window->rows = flint_malloc((r2 - r1) * sizeof(nmod_poly_t));
 
-    for (i = 0; i < r2 - r1; i++)
-        window->rows[i] = mat->rows[r1 + i] + c1;
+        for (i = 0; i < r2 - r1; i++)
+            window->rows[i] = mat->rows[r1 + i] + c1;
 
-    window->r = r2 - r1;
-    window->c = c2 - c1;
+        window->r = r2 - r1;
+        window->c = c2 - c1;
+    }
+    else
+        memset(window, 0, sizeof(*window));
 }
--- sscanf.c.orig	2015-08-13 10:16:22.000000000 -0600
+++ sscanf.c	2019-02-10 13:51:35.212462799 -0700
@@ -47,7 +47,7 @@ int flint_sscanf(const char * s, const c
        return 0;
 
    str2 = flint_malloc(len + 1);
-   s2 = flint_malloc(strlen(s) + 1);
+   s2 = flint_malloc(strlen(s) + 32);
    
    /* deal with first substring */
    n = strcspn(str, "%");