--- 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, "%");