diff options
Diffstat (limited to 'sci-mathematics/giac/files/giac-1.9.0.55-undefined-behavior.patch')
-rw-r--r-- | sci-mathematics/giac/files/giac-1.9.0.55-undefined-behavior.patch | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/sci-mathematics/giac/files/giac-1.9.0.55-undefined-behavior.patch b/sci-mathematics/giac/files/giac-1.9.0.55-undefined-behavior.patch deleted file mode 100644 index 78eac91a5244..000000000000 --- a/sci-mathematics/giac/files/giac-1.9.0.55-undefined-behavior.patch +++ /dev/null @@ -1,62 +0,0 @@ -From fc0fb5ba02953d6e15424ce3a2d8f5b52380ffb4 Mon Sep 17 00:00:00 2001 -From: Michael Orlitzky <michael@orlitzky.com> -Date: Sun, 25 Jun 2023 13:43:35 -0400 -Subject: [PATCH 1/1] src/vecteur.cc: fix invalid vector indexing. - -A few places in vector.cc use the construct &buffer[n]-m where -"buffer" is an std::vector and "n" its size. This is undefined -behavior since the index is outside of the allowed range (0 through -n-1). With GLIBCXX_ASSERTIONS enabled, it crashes on the out-of- -bounds index. - -The most obvious fix is to use &buffer[n-1]-(m+1), which avoids the -issue so long as n >= 1. I think this will always be the case in the -affected code, but if I'm wrong, it can be fixed by adding a special -case for n == 0. ---- - src/vecteur.cc | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/vecteur.cc b/src/vecteur.cc -index 89b1445..c91af66 100644 ---- a/src/vecteur.cc -+++ b/src/vecteur.cc -@@ -7998,7 +7998,7 @@ namespace giac { - if (convertpos){ - int C=col+1; - longlong * buf=&buffer[C]; -- longlong * bufend=&buffer[cmax]-8; -+ longlong * bufend=&buffer[cmax-1]-7; - const int * nline=&Nline[C]; - for (;buf<=bufend;buf+=8,nline+=8){ - longlong x,y; -@@ -8022,7 +8022,7 @@ namespace giac { - else { - int C=col+1; - longlong * buf=&buffer[C]; -- longlong * bufend=&buffer[cmax]-8; -+ longlong * bufend=&buffer[cmax-1]-7; - const int * nline=&Nline[C]; - for (;buf<=bufend;buf+=8,nline+=8){ - buf[0] -= coeff*nline[0]; -@@ -8268,7 +8268,7 @@ namespace giac { - } - #else - int C=col+1; -- longlong * ptr= &buffer[C],*ptrend=&buffer[cmax]-4; -+ longlong * ptr= &buffer[C],*ptrend=&buffer[cmax-1]-3; - const int *ptrN=&Nline[C]; - for (;ptr<ptrend;ptrN+=4,ptr+=4){ - longlong x = *ptr; -@@ -8300,7 +8300,7 @@ namespace giac { - } - else { - int C=col+1; -- longlong * ptr= &buffer[C],*ptrend=&buffer[cmax]-4; -+ longlong * ptr= &buffer[C],*ptrend=&buffer[cmax-1] - 3; - const int *ptrN=&Nline[C]; - for (;ptr<ptrend;ptrN+=4,ptr+=4){ - *ptr -= coeff*(*ptrN); --- -2.39.3 - |