From fb668086b8653fe2e1fc0d07eb483ae6d7b04b1f Mon Sep 17 00:00:00 2001 From: Igor Pashev Date: Sat, 29 Oct 2022 12:05:28 +0200 Subject: open-axiom (1.5.0+2022.09.17.git.be9640c+ds-0pin2) --- debian/changelog | 6 + debian/patches/2022.10.28.patch | 1254 ++++++++++++++++++++++++++++++ debian/patches/no-missing-messages.patch | 10 +- debian/patches/series | 1 + 4 files changed, 1266 insertions(+), 5 deletions(-) create mode 100644 debian/patches/2022.10.28.patch diff --git a/debian/changelog b/debian/changelog index 4604fe8..84f96f7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +open-axiom (1.5.0+2022.09.17.git.be9640c+ds-0pin2) unstable; urgency=medium + + * Add a massive 2022.10.28.patch to fix various issue including a crash + + -- Igor Pashev Sat, 29 Oct 2022 12:04:03 +0200 + open-axiom (1.5.0+2022.09.17.git.be9640c+ds-0pin1) unstable; urgency=low * New upstream version. diff --git a/debian/patches/2022.10.28.patch b/debian/patches/2022.10.28.patch new file mode 100644 index 0000000..45ce4f4 --- /dev/null +++ b/debian/patches/2022.10.28.patch @@ -0,0 +1,1254 @@ +commit 8df721df25864f89772c58a4486314855bf1a37e +Author: Igor Pashev +Date: Fri Oct 28 04:00:00 2022 +0200 + + Fix some compiler warnings & buffer overflows + +diff --git a/src/clef/edible.c b/src/clef/edible.c +index 7a6c4826..c3022060 100644 +--- a/src/clef/edible.c ++++ b/src/clef/edible.c +@@ -69,7 +69,6 @@ using namespace OpenAxiom; + + #define Cursor_shape(x) + +-static void check_flip(void); + static void catch_signals(void); + static void init_parent(void); + static void set_function_chars(void); +diff --git a/src/etc/asq.c.pamphlet b/src/etc/asq.c.pamphlet +index 44771f36..0ef9c5ef 100644 +--- a/src/etc/asq.c.pamphlet ++++ b/src/etc/asq.c.pamphlet +@@ -450,7 +450,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + /* asq is a mini browser for the AXIOM databases */ + +-#define VERSION 7 ++#define ASQ_VERSION 7 + /* 040206007 tpd fix anal compiler warnings */ + /* 030710006 tpd remove share directory */ + /* 940112005 tpd cleanup of printinfo */ +@@ -1448,7 +1448,7 @@ int pprintcond(int seekpt,char *path); + printf("searchkey can be either a domain or its abbreviation.\n"); + printf("\n e.g. %s -so Integer\n",arg); + printf(" will give the source file name written to stdout\n"); +- printf(" (Version %d)\n",VERSION); ++ printf(" (Version %d)\n", ASQ_VERSION); + return(0); + } + +diff --git a/src/graph/include/view.h b/src/graph/include/view.h +index 5d77d46f..6df571a0 100644 +--- a/src/graph/include/view.h ++++ b/src/graph/include/view.h +@@ -34,8 +34,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + /* This file is to be included by all the viewport files */ + + #define check(code) checker(code,__LINE__,"") +-#undef saymem ++#ifndef saymem + #define saymem(a,b,c) saymemWithLine(a,b,c,__LINE__) ++#endif + #define exitWithAck(ACK,ACKsize,i) \ + check(write(Socket,&(ACK),sizeof(ACKsize))); exit(i); + #define NIL(type) ((type *)NULL) +diff --git a/src/graph/view2D/header2.h b/src/graph/view2D/header2.h +index c7d63985..bbd11a10 100644 +--- a/src/graph/view2D/header2.h ++++ b/src/graph/view2D/header2.h +@@ -228,7 +228,7 @@ typedef struct _buttonStruct { + typedef struct _controlPanelStruct { + int numOfButtons; + Window controlWindow,messageWindow,colormapWindow; +- char message[40]; ++ char message[80]; + struct _buttonStruct buttonQueue[maxButtons2D]; + } controlPanelStruct; + +diff --git a/src/graph/view2D/process2d.c b/src/graph/view2D/process2d.c +index 276948ef..52c326f6 100644 +--- a/src/graph/view2D/process2d.c ++++ b/src/graph/view2D/process2d.c +@@ -493,7 +493,7 @@ processEvents(void) + Window whichWindow; + XWindowAttributes graphWindowAttrib; + buttonStruct *controlButton; +- mouseCoord mouseXY; ++ mouseCoord mouseXY = {0.0, 0.0}; + int i, + someInt, + mouseW4, +@@ -561,7 +561,7 @@ processEvents(void) + switch(((XEvent *)event)->type) { + + case ClientMessage: +- if (event->xclient.data.l[0] == wm_delete_window) { ++ if ((Atom)event->xclient.data.l[0] == wm_delete_window) { + goodbye(-1); + } + else { +@@ -799,7 +799,7 @@ processEvents(void) + for (i=0; i maxScale) + graphStateArray[i].scaleX = maxScale; + else if (graphStateArray[i].scaleX < minScale) +diff --git a/src/graph/view2D/write2d.c b/src/graph/view2D/write2d.c +index 4431da08..395b821a 100644 +--- a/src/graph/view2D/write2d.c ++++ b/src/graph/view2D/write2d.c +@@ -47,33 +47,31 @@ + #include "Gfun.H1" + + +-#define numBits (8*sizeof(int)) ++#define numBits ((int)(8*sizeof(int))) + + int + writeViewport(int thingsToWrite) + { + + FILE *viewDataFile; +- char viewDirName[80], +- viewBitmapFilename[80],viewDataFilename[80],command[80]; ++ char buf[1024]; + int i,j,k,ii; + pointListStruct *aList; + pointStruct *aPoint; + XWindowAttributes vwInfo; + + XGetWindowAttributes(dsply,viewport->titleWindow,&vwInfo); +- sprintf(viewDirName,"%s%s",filename,".VIEW"); +- sprintf(command,"%s%s%s","rm -r ",viewDirName," > /dev/null 2>&1"); +- system(command); +- sprintf(command,"%s%s%s","mkdir ",viewDirName," > /dev/null 2>&1"); +- if (system(command)) { +- fprintf(stderr," Error: Cannot create %s\n",viewDirName); ++ sprintf(buf, "rm -f %s.VIEW", filename); ++ system(buf); ++ sprintf(buf, "mkdir %s.VIEW", filename); ++ if (system(buf)) { ++ fprintf(stderr," Error: Cannot create %s.VIEW\n", filename); + return(-1); + } else { + /*** Create the data file ***/ +- sprintf(viewDataFilename,"%s%s",viewDirName,"/data"); +- if ((viewDataFile = fopen(viewDataFilename,"w")) == NULL) { +- fprintf(stderr," Error: Cannot create %s\n",viewDataFilename); ++ sprintf(buf,"%s.VIEW/data", filename); ++ if ((viewDataFile = fopen(buf,"w")) == NULL) { ++ fprintf(stderr," Error: Cannot create %s\n", buf); + perror("fopen"); + return(-1); + } else { +@@ -101,9 +99,9 @@ writeViewport(int thingsToWrite) + fclose(viewDataFile); + for (i=0; iviewWindow,&vwInfo); +- write_pixmap_file(dsply,scrn,viewBitmapFilename, ++ write_pixmap_file(dsply,scrn,buf, + viewport->titleWindow,0,0,vwInfo.width, + vwInfo.height+titleHeight); + break; + case Bitmap: + /*** Create the bitmap (bitmaps need leaf name) ***/ +- sprintf(viewBitmapFilename,"%s%s",viewDirName,"/image.bm"); ++ sprintf(buf,"%s.VIEW/image.bm", filename); + XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo); +- XWriteBitmapFile(dsply,viewBitmapFilename, ++ XWriteBitmapFile(dsply,buf, + viewport->titleWindow,vwInfo.width, + vwInfo.height+vwInfo.border_width+20,-1,-1); + break; + case Image: + /*** Create the pixmap (bitmaps need leaf name) ***/ +- sprintf(viewBitmapFilename,"%s%s",viewDirName,"/image.xpm"); ++ sprintf(buf,"%s.VIEW/image.xpm", filename); + XResizeWindow(dsply,viewport->titleWindow,300,300+titleHeight); + XResizeWindow(dsply,viewport->viewWindow,300,300); + XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo); + drawViewport(Xoption); + writeTitle(); +- write_pixmap_file(dsply,scrn,viewBitmapFilename, ++ write_pixmap_file(dsply,scrn,buf, + viewport->titleWindow,0,0,vwInfo.width, + vwInfo.height+titleHeight); + /*** Create the bitmap (bitmaps need leaf name) ***/ + mono = 1; + drawViewport(Xoption); + writeTitle(); +- sprintf(viewBitmapFilename,"%s%s%s",viewDirName,"/","image.bm"); +- XWriteBitmapFile(dsply,viewBitmapFilename, ++ sprintf(buf,"%s.VIEW/image.bm", filename); ++ XWriteBitmapFile(dsply,buf, + viewport->titleWindow,vwInfo.width, + vwInfo.height+vwInfo.border_width+20,-1,-1); + mono = 0; +@@ -181,7 +179,7 @@ writeViewport(int thingsToWrite) + + case Postscript: + /*** Create postscript output for viewport (in axiom2D.ps) ***/ +- sprintf(PSfilename,"%s%s",viewDirName,"/axiom2D.ps"); ++ sprintf(PSfilename,"%s.VIEW/axiom2D.ps", filename); + if (PSInit(viewport->viewWindow,viewport->titleWindow) == psError) + return (-1); + drawViewport(PSoption); /* write new script file in /tmp */ +diff --git a/src/graph/view3D/header.h b/src/graph/view3D/header.h +index 53dd24ab..e029f12b 100644 +--- a/src/graph/view3D/header.h ++++ b/src/graph/view3D/header.h +@@ -134,19 +134,12 @@ + /*** colors ***/ + /******************************/ + +-#define totalHuesConst 27 +- +-#define hueEnd 360 +- +-#undef hueStep +-#define hueStep (hueEnd/totalHuesConst) + + #define black BlackPixel(dsply,scrn) + #define white WhitePixel(dsply,scrn) + #define numPlanes 1 + #define numColors 10 + #define startColor 0 +-#define maxColors (DisplayCells(dsply,scrn)-1) + #define maxPlanes (DefaultVisual((dpy),(scr))->bits_per_rgb) + + /**********************************/ +diff --git a/src/graph/view3D/lighting3d.c b/src/graph/view3D/lighting3d.c +index 666c708c..5d0b5489 100644 +--- a/src/graph/view3D/lighting3d.c ++++ b/src/graph/view3D/lighting3d.c +@@ -79,6 +79,26 @@ + #define arrowHead (control->buttonQueue[lightTranslucent].buttonX + 5) + static viewTriple point0 = {0,0,0}; + ++static float labels[basicScreen][7] = { ++ {105,0,4,106,0,3,labelColor}, /* script x label - 4 segments */ ++ {106,0,3,112,0,10,labelColor}, ++ {112,0,10,114,0,9,labelColor}, ++ {106,0,10,113,0,3,labelColor}, ++ {0,106,9,0,107,10,labelColor}, /* script y label - 7 segments */ ++ {0,107,10,0,107,6,labelColor}, ++ {0,107,6,0,113,5,labelColor}, ++ {0,113,10,0,113,-3,labelColor}, ++ {0,113,-3,0,111,-5,labelColor}, ++ {0,111,-5,0,110,-1,labelColor}, ++ {0,110,-1,0,114,3,labelColor}, ++ {0,5,114,0,6,115,labelColor}, /* script z label - 8 segments */ ++ {0,6,115,0,11,116,labelColor}, ++ {0,11,116,0,12,113,labelColor}, ++ {0,12,113,0,10,111,labelColor}, ++ {0,10,111,0,11,110,labelColor}, ++ {0,11,110,0,11,103,labelColor}, ++ {0,11,103,0,9,102,labelColor}, ++ {0,9,102,0,9,105,labelColor}}; + + /*************************** + * int makeLightingPanel() * +diff --git a/src/graph/view3D/process3d.c b/src/graph/view3D/process3d.c +index 5c5e7d68..f5adbf9e 100644 +--- a/src/graph/view3D/process3d.c ++++ b/src/graph/view3D/process3d.c +@@ -856,7 +856,7 @@ processEvents(void) + XEvent *event, tempEvent; + Window whichWindow; + buttonStruct *controlButton; +- mouseCoord mouseXY, linearMouseXY; ++ mouseCoord mouseXY = {0.0, 0.0}, linearMouseXY = {0.0, 0.0}; + int someInt, mouseW4, mouseH4; + int toggleReady =yes; + int checkButton = no; +@@ -939,7 +939,7 @@ processEvents(void) + + switch(((XEvent *)event)->type) { + case ClientMessage: +- if (event->xclient.data.l[0] == wm_delete_window) { ++ if ((Atom)event->xclient.data.l[0] == wm_delete_window) { + goodbye(-1); + } + else { +diff --git a/src/graph/view3D/smoothShade3d.c b/src/graph/view3D/smoothShade3d.c +index 5d09a4ed..b794f210 100644 +--- a/src/graph/view3D/smoothShade3d.c ++++ b/src/graph/view3D/smoothShade3d.c +@@ -753,7 +753,7 @@ showAxesLabels(int dFlag) + else GSetForeground(GC9991,psBlack,dFlag); + + /* axes label for X */ +- if ((int)axesZ[0][0] >= (int)axesZ[0][2]) { ++ if ((int)axesZ[0][0] >= (int)axesZ[0][1]) { + if (axesXY[0][2] < axesXY[0][0]) xcoord2 = axesXY[0][2]-5; + else xcoord2 = axesXY[0][2] + 5; + if (axesXY[0][3] < axesXY[0][1]) ycoord2 = axesXY[0][3]-5; +diff --git a/src/graph/view3D/static.h b/src/graph/view3D/static.h +index 201f272b..8175c642 100644 +--- a/src/graph/view3D/static.h ++++ b/src/graph/view3D/static.h +@@ -40,24 +40,4 @@ static float axes[3][6] = {{-117,0,0,117,0,0}, /* x axis */ + {0,-117,0,0,117,0}, /* y axis */ + {0,0,-117,0,0,117}}; /* z axis */ + +-/* text labels are currently used */ +-static float labels[basicScreen][7] = { +- {105,0,4,106,0,3,labelColor}, /* script x label - 4 segments */ +- {106,0,3,112,0,10,labelColor}, +- {112,0,10,114,0,9,labelColor}, +- {106,0,10,113,0,3,labelColor}, +- {0,106,9,0,107,10,labelColor}, /* script y label - 7 segments */ +- {0,107,10,0,107,6,labelColor}, +- {0,107,6,0,113,5,labelColor}, +- {0,113,10,0,113,-3,labelColor}, +- {0,113,-3,0,111,-5,labelColor}, +- {0,111,-5,0,110,-1,labelColor}, +- {0,110,-1,0,114,3,labelColor}, +- {0,5,114,0,6,115,labelColor}, /* script z label - 8 segments */ +- {0,6,115,0,11,116,labelColor}, +- {0,11,116,0,12,113,labelColor}, +- {0,12,113,0,10,111,labelColor}, +- {0,10,111,0,11,110,labelColor}, +- {0,11,110,0,11,103,labelColor}, +- {0,11,103,0,9,102,labelColor}, +- {0,9,102,0,9,105,labelColor}}; ++ +diff --git a/src/graph/view3D/volume3d.c b/src/graph/view3D/volume3d.c +index 348a39d6..87bce529 100644 +--- a/src/graph/view3D/volume3d.c ++++ b/src/graph/view3D/volume3d.c +@@ -698,7 +698,7 @@ void + drawVolumePanel (void) + { + +- int i,strlength; ++ size_t i,strlength; + + + /* Draw some lines for volume panel. */ +@@ -733,13 +733,16 @@ drawVolumePanel (void) + 100,100,Xoption); + + +- for (i=0; ititleWindow,&vwInfo); +- sprintf(viewDirName,"%s%s",filename,".VIEW"); +- sprintf(command,"%s%s%s","rm -r ",viewDirName," > /dev/null 2>&1"); +- system(command); +- sprintf(command,"%s%s%s","mkdir ",viewDirName," > /dev/null 2>&1"); +- system(command); +- if (0) { +- fprintf(stderr," Error: Cannot create %s\n",viewDirName); ++ sprintf(buf, "rm -f %s.VIEW", filename); ++ system(buf); ++ sprintf(buf, "mkdir %s.VIEW", filename); ++ if (system(buf)) { ++ fprintf(stderr," Error: Cannot create %s.VIEW\n", filename); + return(-1); + } else { + + /*** Create the data file ***/ +- sprintf(viewDataFilename,"%s%s",viewDirName,"/data"); +- if ((viewDataFile = fopen(viewDataFilename,"w")) == NULL) { +- fprintf(stderr," Error: Cannot create %s\n",viewDataFilename); ++ sprintf(buf,"%s.VIEW/data", filename); ++ if ((viewDataFile = fopen(buf,"w")) == NULL) { ++ fprintf(stderr," Error: Cannot create %s\n", buf); + perror("fopen"); + return(-1); + } else { +@@ -140,18 +136,18 @@ writeViewport (int thingsToWrite) + switch (ii) { + case Bitmap: + /*** Create the pixmap (bitmaps need leaf name) ***/ +- sprintf(viewBitmapFilename,"%s%s%s",viewDirName,"/","image.bm"); ++ sprintf(buf,"%s.VIEW/image.bm", filename); + XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo); +- XWriteBitmapFile(dsply,viewBitmapFilename, ++ XWriteBitmapFile(dsply,buf, + viewport->titleWindow,vwInfo.width, + vwInfo.height+vwInfo.border_width+20,-1,-1); + break; + + case Pixmap: + /*** Create the pixmap (bitmaps need leaf name) ***/ +- sprintf(viewPixmapFilename,"%s%s%s",viewDirName,"/","image.xpm"); ++ sprintf(buf,"%s.VIEW/image.xpm", filename); + XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo); +- write_pixmap_file(dsply,scrn,viewPixmapFilename, ++ write_pixmap_file(dsply,scrn,buf, + viewport->titleWindow,0,0,vwInfo.width, + vwInfo.height+titleHeight); + break; +@@ -159,7 +155,7 @@ writeViewport (int thingsToWrite) + case Image: + /*** Create the image (bitmaps need leaf name) ***/ + writeImage = yes; +- sprintf(viewPixmapFilename,"%s%s%s",viewDirName,"/","image.xpm"); ++ sprintf(buf,"%s.VIEW/image.xpm", filename); + XResizeWindow(dsply,viewport->titleWindow,300,300+titleHeight); + XResizeWindow(dsply,viewport->viewWindow,300,300); + viewport->hueTop = totalHues-1; viewport->hueOffset = 0; +@@ -174,7 +170,7 @@ writeViewport (int thingsToWrite) + drawViewport(Xoption); + writeTitle(); + XGetWindowAttributes(dsply,viewport->viewWindow,&vwInfo); +- write_pixmap_file(dsply,scrn,viewPixmapFilename, ++ write_pixmap_file(dsply,scrn,buf, + viewport->titleWindow,0,0,vwInfo.width, + vwInfo.height+titleHeight); + viewport->monoOn = 1; +@@ -182,8 +178,8 @@ writeViewport (int thingsToWrite) + firstTime = 1; + drawViewport(Xoption); + writeTitle(); +- sprintf(viewBitmapFilename,"%s%s%s",viewDirName,"/","image.bm"); +- XWriteBitmapFile(dsply,viewBitmapFilename, ++ sprintf(buf,"%s.VIEW/image.bm", filename); ++ XWriteBitmapFile(dsply,buf, + viewport->titleWindow,vwInfo.width, + vwInfo.height+vwInfo.border_width+20,-1,-1); + +@@ -192,7 +188,7 @@ writeViewport (int thingsToWrite) + + case Postscript: + /*** Create postscript output for viewport (in axiom3D.ps) ***/ +- sprintf(PSfilename,"%s%s",viewDirName,"/axiom3D.ps"); ++ sprintf(PSfilename,"%s.VIEW/axiom3D.ps", filename); + if (PSInit(viewport->viewWindow,viewport->titleWindow) == psError) + return(-1); + drawViewport(PSoption); /* write new script file in /tmp */ +diff --git a/src/graph/viewAlone/spoon2D.c b/src/graph/viewAlone/spoon2D.c +index 00f46e31..912d834b 100644 +--- a/src/graph/viewAlone/spoon2D.c ++++ b/src/graph/viewAlone/spoon2D.c +@@ -58,7 +58,7 @@ spoonView2D(void) + { + + int i,code,pipe0[2],pipe1[2],there; +- char envAXIOM[100],runView[100]; ++ char runView[100]; + + sprintf(errorStr,"%s","creating pipes"); + check(pipe(pipe0)); +@@ -84,8 +84,7 @@ spoonView2D(void) + close(pipe1[1]); + printf("(spoon2D child) start the TwoDimensionalViewport process\n"); + sprintf(errorStr,"%s","(viewAlone) execution of the TwoDimensionalViewport process"); +- sprintf(envAXIOM,"%s",oa_getenv("AXIOM")); +- sprintf(runView,"%s%s",envAXIOM,"/lib/view2D"); ++ sprintf(runView,"%s/lib/view2D",oa_getenv("AXIOM")); + check(execl(runView,runView, (char*)NULL)); + fprintf(stderr,"Could not execute view2D! Check that view2D is on your path variable.\n"); + exit(-1); +@@ -215,7 +214,7 @@ makeView2DFromFileData(view2DStruct *doView2D) + int i,j,k; + char title[256]; + FILE *graphFile; +- char graphFilename[256]; ++ char graphFilename[512]; + pointListStruct *aList; + pointStruct *aPoint; + printf("(spoon2D makeView2DFromFileData)\n"); +@@ -280,7 +279,7 @@ makeView2DFromFileData(view2DStruct *doView2D) + for (i=0; ibytes_per_line = chars_line = (*width + 7) / 8; + file_chars_line = chars_line + padding; + +- num_chars = chars_line * (*height); + file_chars = file_chars_line * (*height); + (image)->data = (char *) halloc((image)->bytes_per_line * (image)->height, + "Read Pixmap--Image data"); +diff --git a/src/hyper/dialog.c b/src/hyper/dialog.c +index fe7b78aa..e3ae5122 100644 +--- a/src/hyper/dialog.c ++++ b/src/hyper/dialog.c +@@ -87,6 +87,13 @@ static void overwrite_buffer(char * buffer , InputItem * item); + static void redraw_win(); + static void tough_enter(InputItem * sym); + ++static void ++strnmov(char *dest, const char *src, size_t n) ++{ ++ while (n-- && (*dest++ = *src++)); ++} ++ ++ + static void + redraw_win() + { +@@ -248,7 +255,7 @@ move_sym_forward(LineStruct *line, int num, int size, InputItem *sym) + return 1; + } + else { +- strncpy(&line->buffer[num], line->buffer, line->len); ++ strnmov(&line->buffer[num], line->buffer, line->len); + line->len += num; + line->changed = 1; + return 0; +@@ -310,7 +317,7 @@ insert_buffer(char *buffer, InputItem *sym) + else { + line->next->buffer[0] = line->buffer[size - 1]; + line->changed = 1; +- strncpy(&line->buffer[line->buff_pntr + 1], ++ strnmov(&line->buffer[line->buff_pntr + 1], + &line->buffer[line->buff_pntr], size - line->buff_pntr - 1); + line->buffer[line->buff_pntr++] = buffer[0]; + line->changed = 1; +@@ -346,7 +353,7 @@ insert_buffer(char *buffer, InputItem *sym) + /* we are not the leaders */ + newline->buffer[0] = line->buffer[size - 1]; + newline->len = 1; +- strncpy(&line->buffer[line->buff_pntr + 1], ++ strnmov(&line->buffer[line->buff_pntr + 1], + &line->buffer[line->buff_pntr], size - line->buff_pntr); + if (line->buff_pntr < size - 1) { + line->buffer[line->buff_pntr++] = buffer[0]; +@@ -672,7 +679,7 @@ move_rest_back(LineStruct *line, int size) + return c; + + while (line->next != NULL && line->len > size) { +- strncpy(line->buffer, &(line->buffer[1]), size - 1); ++ strnmov(line->buffer, &(line->buffer[1]), size - 1); + line->buffer[size - 1] = line->next->buffer[0]; + line->changed = 1; + line = line->next; +@@ -685,7 +692,7 @@ move_rest_back(LineStruct *line, int size) + if (line->len > 0) { + line->changed = 1; + if (line->len > 1) +- strncpy(line->buffer, &(line->buffer[1]), line->len - 1); ++ strnmov(line->buffer, &(line->buffer[1]), line->len - 1); + line->buffer[--line->len] = 0; + if (line->len == 0) { + /* I have to fix the previous line */ +@@ -867,7 +874,7 @@ move_back_one_char(InputItem *sym) + else if (line->len > 0) { + d = line->buffer[0]; + if (line->len <= sym->size) { +- strncpy(line->buffer, &(line->buffer[1]), line->len - 1); ++ strnmov(line->buffer, &(line->buffer[1]), line->len - 1); + if (c == 0) { + line->len--; + line->buffer[line->len] = 0; +@@ -876,7 +883,7 @@ move_back_one_char(InputItem *sym) + line->buffer[line->len - 1] = c; + } + else { +- strncpy(line->buffer, &(line->buffer[1]), sym->size - 2); ++ strnmov(line->buffer, &(line->buffer[1]), sym->size - 2); + if (c == 0) { + line->buffer[sym->size - 1] = 0; + line->len--; +@@ -905,7 +912,7 @@ move_back_one_char(InputItem *sym) + + + if (line->len <= sym->size) { +- strncpy(&line->buffer[line->buff_pntr - 1], ++ strnmov(&line->buffer[line->buff_pntr - 1], + &(line->buffer[line->buff_pntr]), + line->len - line->buff_pntr); + if (c == 0) +@@ -914,7 +921,7 @@ move_back_one_char(InputItem *sym) + line->buffer[line->len - 1] = c; + } + else { +- strncpy(&(line->buffer[line->buff_pntr - 1]), ++ strnmov(&(line->buffer[line->buff_pntr - 1]), + &(line->buffer[line->buff_pntr]), + sym->size - line->buff_pntr); + if (c == 0) { +@@ -1040,7 +1047,7 @@ delete_one_char(InputItem *sym) + * exists at the end + */ + if (line->len <= sym->size) { +- strncpy(&line->buffer[line->buff_pntr], ++ strnmov(&line->buffer[line->buff_pntr], + &(line->buffer[line->buff_pntr + 1]), + line->len - line->buff_pntr); + if (c == 0) +@@ -1049,7 +1056,7 @@ delete_one_char(InputItem *sym) + line->buffer[line->len - 1] = c; + } + else { +- strncpy(&(line->buffer[line->buff_pntr]), ++ strnmov(&(line->buffer[line->buff_pntr]), + &(line->buffer[line->buff_pntr + 1]), + sym->size - line->buff_pntr); + if (c == 0) { +diff --git a/src/hyper/extent1.c b/src/hyper/extent1.c +index 0642957c..95766791 100644 +--- a/src/hyper/extent1.c ++++ b/src/hyper/extent1.c +@@ -1319,12 +1319,9 @@ compute_header_extent(HyperDocPage *page) + * for the header here + */ + +- int ty; /* UNUSED */ +- + gExtentRegion = Header; + right_margin_space = non_scroll_right_margin_space; + init_extents(); +- ty = text_y = 3 * top_margin + line_height + max(page->title->height, twheight); + gLineNode = page->header->next; + compute_text_extent(page->header->next); + page->header->height = text_height(page->header->next, +diff --git a/src/hyper/htadd.c b/src/hyper/htadd.c +index 21321ae7..b3a5962a 100644 +--- a/src/hyper/htadd.c ++++ b/src/hyper/htadd.c +@@ -94,7 +94,7 @@ main(int argc, char **argv) + using namespace OpenAxiom; + /*int i;*/ + char db_dir[256]; /* the directory where the db file is */ +- char dbfilename[256]; /* the database filename */ ++ char dbfilename[512]; /* the database filename */ + char *filenames[1000]; /* the files to be added */ + char **fnames = filenames; + short flag; /* flag for deleting or adding */ +diff --git a/src/hyper/hthits.c b/src/hyper/hthits.c +index 470bf297..4e628b16 100644 +--- a/src/hyper/hthits.c ++++ b/src/hyper/hthits.c +@@ -220,7 +220,7 @@ handlePage(FILE* infile, PgInfo* pg) + static char *pgBuf = 0; + static int pgBufSize = 0; + +- char *title, *body; ++ char *title = NULL, *body = NULL; + + if (pg->size > pgBufSize - 1) { + if (pgBuf) +diff --git a/src/hyper/htinp.c b/src/hyper/htinp.c +index 7799c194..b44047f8 100644 +--- a/src/hyper/htinp.c ++++ b/src/hyper/htinp.c +@@ -439,7 +439,7 @@ send_command(char *command,int com_type) + } + else { + FILE *f; +- char name[512], str[512]/*, *c*/; ++ char name[512], str[1024]/*, *c*/; + + sprintf(name, "/tmp/hyper%s.input", oa_getenv("SPADNUM")); + f = fopen(name, "w"); +diff --git a/src/hyper/initx.c b/src/hyper/initx.c +index 0ee4afa0..c69c2071 100644 +--- a/src/hyper/initx.c ++++ b/src/hyper/initx.c +@@ -1018,7 +1018,7 @@ is_it_850(XFontStruct *fontarg) + /* return 1 if it is 850 */ + + s = XGetAtomName(gXDisplay,(Atom)fontarg->properties[i].card32); +- val = !( strcmp("850",s) * strcmp("ibm-850",s)); ++ val = !( strcmp("850",s) && strcmp("ibm-850",s)); + XFree(s); + return( val ); + } +diff --git a/src/hyper/keyin.c b/src/hyper/keyin.c +index eef07e7b..fa8af8de 100644 +--- a/src/hyper/keyin.c ++++ b/src/hyper/keyin.c +@@ -82,7 +82,7 @@ unsigned int UnsupportedModMask = LockMask | ControlMask + static unsigned int + get_modifier_mask(KeySym sym) + { +- unsigned int i, mask; ++ unsigned int mask; + XModifierKeymap *mod; + KeyCode kcode; + const int masks[8] = { +@@ -94,7 +94,7 @@ get_modifier_mask(KeySym sym) + kcode = XKeysymToKeycode(gXDisplay,sym); + + if (mod) { +- for (i = 0; i < (8 * mod->max_keypermod); i++){ ++ for (int i = 0; i < (8 * mod->max_keypermod); i++){ + if (!mod->modifiermap[i]) continue; + else if (kcode == mod->modifiermap[i]){ + mask = masks[i / mod->max_keypermod]; +diff --git a/src/hyper/lex.c b/src/hyper/lex.c +index d571e6cd..ed281403 100644 +--- a/src/hyper/lex.c ++++ b/src/hyper/lex.c +@@ -435,7 +435,7 @@ AGAIN: + input_string = sock_buf; + goto AGAIN; + default: +- fprintf(stderr, "Get Char: Unknown type of input: %d\n", input_type); ++ fprintf(stderr, "Get Char: Unknown type of input: %d\n", (int)input_type); + return -1; + } + } +diff --git a/src/hyper/macro.c b/src/hyper/macro.c +index 0b0d1889..7bf0f77b 100644 +--- a/src/hyper/macro.c ++++ b/src/hyper/macro.c +@@ -101,7 +101,6 @@ number(const char *str) + static char * + load_macro(MacroStore *macro) + { +- int ret_val; + long start_fpos; + int size = 0; + char *trace; +@@ -158,7 +157,7 @@ load_macro(MacroStore *macro) + } + start_fpos = fpos; + scan_HyperDoc(); +- ret_val = fseek(cfile, macro->fpos.pos + start_fpos, 0); ++ fseek(cfile, macro->fpos.pos + start_fpos, 0); + size = fpos - start_fpos; + macro_buff = (char *) halloc((size + 1) * sizeof(char), "Macro_buf"); + for (size = 0, trace = macro_buff; size < fpos - (start_fpos) - 1; size++) +diff --git a/src/hyper/parse-aux.c b/src/hyper/parse-aux.c +index 4c7600b9..24efcf89 100644 +--- a/src/hyper/parse-aux.c ++++ b/src/hyper/parse-aux.c +@@ -512,7 +512,6 @@ int + get_filename() + { + int c, ws; +- static int seen_white = 0; /*UNUSED */ + static char buffer[256]; + char *buf = buffer; + +@@ -524,8 +523,6 @@ get_filename() + keyword_fpos = fpos; + c = get_char(); + ws = whitespace(c); +- if (ws) +- seen_white = 1; + } while (ws); + switch (c) { + case EOF: +@@ -545,7 +542,6 @@ get_filename() + *buf = '\0'; + token.type = openaxiom_Word_token; + token.id = buffer; +- seen_white = 0; + break; + } + return 1; +diff --git a/src/hyper/parse-input.c b/src/hyper/parse-input.c +index 1c619151..727acc9d 100644 +--- a/src/hyper/parse-input.c ++++ b/src/hyper/parse-input.c +@@ -562,9 +562,9 @@ parse_radioboxes() + + /* quick search for the name in the current list */ + if (already_there(newrb->name)) { ++ fprintf(stderr, "Tried to redefine radioboxes %s\n", newrb->name); + free(newrb->name); + free(newrb); +- fprintf(stderr, "Tried to redefine radioboxes %s\n", newrb->name); + print_page_and_filename(); + jump(); + } +diff --git a/src/hyper/parse-types.c b/src/hyper/parse-types.c +index f5a42cd9..e42d93f9 100644 +--- a/src/hyper/parse-types.c ++++ b/src/hyper/parse-types.c +@@ -196,9 +196,9 @@ parse_condnode() + break; + default: + { +- char eb[128]; ++ char eb[160]; + token_name(token.type); +- sprintf(eb, "Unexpected Token %s\n", eb); ++ sprintf(eb, "Unexpected Token %s\n", ebuffer); + htperror(eb, HTCONDNODE); + } + break; +diff --git a/src/hyper/parse.c b/src/hyper/parse.c +index 1ca0f77e..cddaa8ae 100644 +--- a/src/hyper/parse.c ++++ b/src/hyper/parse.c +@@ -298,8 +298,8 @@ parse_header(HyperDocPage *page) + static void + init_parse_page(HyperDocPage *page) + { +- gEndedPage = gInDesc = gStringValueOk = gInIf = +- gInButton = gInOptional = gInVerbatim = gInPaste = gInItems = ++ gEndedPage = false; gInDesc = false; gStringValueOk = false; gInIf = false; ++ gInButton = false; gInOptional = false; gInVerbatim = false; gInPaste = false; gInItems = false; + gInSpadsrc = false; + example_number = 1; + cur_page = page; +@@ -325,8 +325,8 @@ init_parse_page(HyperDocPage *page) + void + init_parse_patch(HyperDocPage *page) + { +- gEndedPage = gInDesc = gStringValueOk = gInIf = +- gInButton = gInOptional = gInVerbatim = gInPaste = gInItems = ++ gEndedPage = false; gInDesc = false; gStringValueOk = false; gInIf = false; ++ gInButton = false; gInOptional = false; gInVerbatim = false; gInPaste = false; gInItems = false; + gInSpadsrc = false; + gParserMode = AllMode; + gParserRegion = Scrolling; +diff --git a/src/hyper/show-types.c b/src/hyper/show-types.c +index 1942901b..e34498d8 100644 +--- a/src/hyper/show-types.c ++++ b/src/hyper/show-types.c +@@ -464,10 +464,8 @@ show_input(TextNode *node) + /*Window root, child;*/ + /*int root_x, root_y, win_x, win_y, buttons;*/ + InputItem *item; +- char *inpbuffer; + + item = node->link->reference.string; +- inpbuffer = item->curr_line->buffer; + + wc.border_width = 0; + wc.x = node->x; +diff --git a/src/hyper/spadint.c b/src/hyper/spadint.c +index aa381ba0..df2cd526 100644 +--- a/src/hyper/spadint.c ++++ b/src/hyper/spadint.c +@@ -137,7 +137,7 @@ static void + send_pile(openaxiom_sio *sock,char * str) + { + FILE *f; +- char name[512], command[512]; ++ char name[512], command[532]; + + sprintf(name, "/tmp/hyper%s.input", oa_getenv("SPADNUM")); + f = fopen(name, "w"); +@@ -218,7 +218,7 @@ start_user_buffer(HyperDocPage *page) + + SPAD = (char *) oa_getenv("AXIOM"); + if (SPAD == NULL) { +- sprintf(SPAD, "/spad/mnt/rios"); ++ SPAD = "/spad/mnt/rios"; + } + sprintf(spadbuf, "%s/lib/spadbuf", SPAD); + sprintf(complfile, "%s/lib/command.list", SPAD); +@@ -542,16 +542,18 @@ print_to_string1(TextNode *command,int * sizeBuf) + case openaxiom_StringValue_token: + item = return_item(node->data.text); + if (item != NULL) { +- if (node->space) ++ if (node->space) { + storeChar(' '); ++ } + curr_line = item->lines; + while (curr_line != NULL) { + for (lcount = 0, s = curr_line->buffer; *s && lcount < item->size; + s++, lcount++) { + storeChar(funnyUnescape(*s)); + } +- if (curr_line->len <= item->size && curr_line->next) ++ if (curr_line->len <= item->size && curr_line->next) { + storeChar('\n'); ++ } + curr_line = curr_line->next; + } + } +@@ -1032,8 +1034,9 @@ print_source_to_string1(TextNode *command,int * sizeBuf) + s++, lcount++) { + storeChar(funnyUnescape(*s)); + } +- if (curr_line->len <= item->size && curr_line->next) ++ if (curr_line->len <= item->size && curr_line->next) { + storeChar('\n'); ++ } + curr_line = curr_line->next; + } + } +diff --git a/src/include/edin.h b/src/include/edin.h +index 65f77aeb..f010aa2a 100644 +--- a/src/include/edin.h ++++ b/src/include/edin.h +@@ -49,6 +49,8 @@ extern int convert_buffer(char * , char * , int * , int ); + extern void init_buff(char * , int ); + extern void forwardcopy(char * , char * , int ); + extern void forwardflag_cpy(int * ,int * , int ); ++extern void strmov(char *, const char*); ++extern void strnmov(char *, const char*, size_t); + extern void flagcpy(int * , int * ); + extern void flagncpy(int * , int * , int ); + extern void send_function_to_child(void); +diff --git a/src/include/open-axiom/token b/src/include/open-axiom/token +index a586fa6d..7f379593 100644 +--- a/src/include/open-axiom/token ++++ b/src/include/open-axiom/token +@@ -483,13 +483,15 @@ namespace OpenAxiom { + comment_token(t, TokenValue::Commentary); + pos.column = frag(pos).length(); + break; +- case '-': +- if (pos.column + 1 < frag(pos).size() +- and frag(pos)[pos.column + 1] == '>') { ++ case '-': { ++ std::size_t c = pos.column + 1; ++ if (c < frag(pos).size() ++ and frag(pos)[c] == '>') { + t.value = TokenValue::MapsTo; + pos.column += 2; + } + break; ++ } + default: break; + } + } +diff --git a/src/include/spadcolors.h b/src/include/spadcolors.h +index 63621599..a9541e73 100644 +--- a/src/include/spadcolors.h ++++ b/src/include/spadcolors.h +@@ -50,13 +50,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + #define startColor 0 + #define endColor (startColor+numColors) + +-#define colorStep ((maxColors+1)/numColors) +- + #define yes 1 + #define no 0 + + #define smoothConst 50 ++#ifndef saymem + #define saymem(a,b,c) saymemWithLine(a,b,c,0) ++#endif + #define Colorcells 256 /* KF number of elements in permutation vector */ + /* #define shade 5 */ + #define saturation 0.8 +@@ -76,6 +76,4 @@ extern Colormap colorMap; + extern int num; + extern int scrn; + +-#define maxColors DisplayCells(dsply,scrn)-1 +- + #endif /* OPENAXIOM_SPADCOLORS_included */ +diff --git a/src/io/InputFragment.cxx b/src/io/InputFragment.cxx +index 595b88b1..827aa372 100644 +--- a/src/io/InputFragment.cxx ++++ b/src/io/InputFragment.cxx +@@ -76,16 +76,18 @@ namespace OpenAxiom { + + // Return true if line is entirely a positive comment, i.e. a description. + static bool positive_comment(const Line& line) { +- if (line.indent + 1 >= line.length()) ++ std::size_t i = line.indent + 1; ++ if (i >= line.length()) + return false; +- return line[line.indent] == '+' and line[line.indent + 1] == '+'; ++ return line[line.indent] == '+' and line[i] == '+'; + } + + // Return true if line is entirely a negative comment. + static bool negative_comment(const Line& line) { +- if (line.indent + 1 >= line.length()) ++ std::size_t i = line.indent + 1; ++ if (i >= line.length()) + return false; +- return line[line.indent] == '-' and line[line.indent + 1] == '-'; ++ return line[line.indent] == '-' and line[i] == '-'; + } + + // Clean up and dress up the line with indentation information. +diff --git a/src/lib/cfuns-c.cxx b/src/lib/cfuns-c.cxx +index 11c28691..5dbcd6bc 100644 +--- a/src/lib/cfuns-c.cxx ++++ b/src/lib/cfuns-c.cxx +@@ -79,11 +79,6 @@ + #endif + + namespace OpenAxiom { +- // Make a copy of string data on free store. +- static char* +- copy_c_str(const std::string& s) { +- return strdup(s.c_str()); +- } + + OPENAXIOM_C_EXPORT int + addtopath(char *dir) +diff --git a/src/lib/edin.c b/src/lib/edin.c +index f85a632a..568bb77a 100644 +--- a/src/lib/edin.c ++++ b/src/lib/edin.c +@@ -792,6 +792,18 @@ forwardflag_cpy(int *buff1,int * buff2,int num) + buff1[count] = buff2[count]; + } + ++void ++strnmov(char *dest, const char *src, size_t n) ++{ ++ while (n-- && (*dest++ = *src++)); ++} ++ ++void ++strmov(char *dest, const char *src) ++{ ++ while ((*dest++ = *src++)); ++} ++ + void + flagcpy(int *s,int *t) + { +diff --git a/src/lib/prt.c b/src/lib/prt.c +index f111e2d9..ee5b3af0 100644 +--- a/src/lib/prt.c ++++ b/src/lib/prt.c +@@ -152,7 +152,7 @@ delete_current_char(void) + if (buff_flag[curr_pntr] == 1 || buff_flag[curr_pntr] == 0) { + myputchar(_BLANK); + myputchar(_BKSPC); +- strcpy(&buff[curr_pntr], ++ strmov(&buff[curr_pntr], + &buff[curr_pntr + 1]); + flagcpy(&buff_flag[curr_pntr], + &buff_flag[curr_pntr + 1]); +@@ -165,7 +165,7 @@ delete_current_char(void) + myputchar(_BLANK); + myputchar(_BKSPC); + myputchar(_BKSPC); +- strcpy(&buff[curr_pntr], ++ strmov(&buff[curr_pntr], + &buff[curr_pntr + 2]); + flagcpy(&buff_flag[curr_pntr], + &buff_flag[curr_pntr + 2]); +@@ -380,7 +380,7 @@ back_over_current_char(void) + myputchar(_BLANK); + myputchar(_BKSPC); + myputchar(_BKSPC); +- strcpy(&buff[curr_pntr - 2], ++ strmov(&buff[curr_pntr - 2], + &buff[curr_pntr]); + flagcpy(&buff_flag[curr_pntr - 2], + &buff_flag[curr_pntr]); +@@ -392,7 +392,7 @@ back_over_current_char(void) + myputchar(_BKSPC); + myputchar(_BLANK); + myputchar(_BKSPC); +- strcpy(&buff[curr_pntr - 1], ++ strmov(&buff[curr_pntr - 1], + &buff[curr_pntr]); + flagcpy(&buff_flag[curr_pntr - 1], + &buff_flag[curr_pntr]); +diff --git a/src/lib/sockio-c.cxx b/src/lib/sockio-c.cxx +index 24b8f475..dda95ec3 100644 +--- a/src/lib/sockio-c.cxx ++++ b/src/lib/sockio-c.cxx +@@ -1123,7 +1123,7 @@ init_purpose_table() + OPENAXIOM_C_EXPORT int + make_server_number() + { +- spad_server_number = oa_getpid(); ++ spad_server_number = oa_getpid() % 1024; + return spad_server_number; + } + +diff --git a/src/lib/wct.c b/src/lib/wct.c +index 35cc01e9..44510558 100644 +--- a/src/lib/wct.c ++++ b/src/lib/wct.c +@@ -572,7 +572,7 @@ rescan_wct(void) + else if (new_len < old_len) { + /* this time I simply copy backwards and do the substituting */ + diff = old_len - new_len; +- strncpy(&buff[curr_pntr - diff], ++ strnmov(&buff[curr_pntr - diff], + &buff[curr_pntr], + buff_pntr - curr_pntr); + flagncpy(&buff_flag[curr_pntr - diff], +diff --git a/src/rt/Lisp.cc b/src/rt/Lisp.cc +index fae3e02f..045d087c 100644 +--- a/src/rt/Lisp.cc ++++ b/src/rt/Lisp.cc +@@ -327,7 +327,7 @@ namespace OpenAxiom { + unimplemented(x); + if (auto op = special_operator(*s)) + return op(ctx, x); +- auto fun = symbol_function(ctx, *s); ++ return to_value( symbol_function(ctx, *s)); + } + + Value +diff --git a/src/sman/session.c b/src/sman/session.c +index e7edf001..20a29307 100644 +--- a/src/sman/session.c ++++ b/src/sman/session.c +@@ -105,6 +105,7 @@ term_handler(int sig) + exit(1); + } + ++#ifdef DEBUG + static void + pr() + { +@@ -116,6 +117,7 @@ pr() + } + fprintf(stderr,"\n"); + } ++#endif + + static void + close_client(int frame) +diff --git a/src/syntax/Parser.cxx b/src/syntax/Parser.cxx +index ada3963b..be73b088 100644 +--- a/src/syntax/Parser.cxx ++++ b/src/syntax/Parser.cxx +@@ -72,24 +72,6 @@ namespace { + TokenSequence::size_type position; + }; + +- const Token* next_token(ParsingContext& ctx) { +- while (auto t = ctx.current_token()) { +- switch (t->category) { +- case TokenCategory::Whitespace: +- break; +- +- case TokenCategory::Comment: +- if (t->value == TokenValue::Wisecrack) +- break; +- +- default: +- return t; +- } +- ctx.advance(); +- } +- return nullptr; +- } +- + // Simple wrapper around standard file streams, along with the pathname + // to the file. + template +diff --git a/src/utils/command.cc b/src/utils/command.cc +index f560f169..55716bc1 100644 +--- a/src/utils/command.cc ++++ b/src/utils/command.cc +@@ -302,7 +302,7 @@ static void print_usage(void) { + print_line(" --optimize= Set compiler optimization level to , a natural number."); + print_line(""); + print_line("If invoked without options and without an input file " +- "OpenAxiom will start as an interative program with Superman" ++ "OpenAxiom will start as an interactive program with Superman" + " as the master process, the majority of uses. If invoked " + "with a file as single argument, OpenAxiom assumes the file is a Spad " + "script and will attempt to execute it as such."); diff --git a/debian/patches/no-missing-messages.patch b/debian/patches/no-missing-messages.patch index 38c2f9f..7752389 100644 --- a/debian/patches/no-missing-messages.patch +++ b/debian/patches/no-missing-messages.patch @@ -2,11 +2,11 @@ Description: suppress "program not found" messages. This programs are in separated packages, and open-axiom recommends them. Forwarded: not-needed Origin: vendor -Index: open-axiom/src/sman/sman.c +Index: open-axiom-debian/src/sman/sman.c =================================================================== ---- open-axiom.orig/src/sman/sman.c 2013-09-01 11:22:27.000000000 +0400 -+++ open-axiom/src/sman/sman.c 2013-09-01 11:22:27.000000000 +0400 -@@ -449,7 +449,6 @@ +--- open-axiom-debian.orig/src/sman/sman.c ++++ open-axiom-debian/src/sman/sman.c +@@ -448,7 +448,6 @@ start_the_hypertex(Command* cmd) const char* command = oa_concatenate_string(root_dir,HypertexProgram); if (readablep(command) != 1) { @@ -14,7 +14,7 @@ Index: open-axiom/src/sman/sman.c return; } if (PasteFile){ -@@ -479,8 +478,6 @@ +@@ -478,8 +477,6 @@ start_the_graphics(Command* cmd) if (readablep(command) == 1) spawn_of_hell(command, DoItAgain); diff --git a/debian/patches/series b/debian/patches/series index 9f66152..c80d3e0 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,3 +1,4 @@ no-missing-messages.patch non-static-open-axiom-binary.patch gui-c++20.patch +2022.10.28.patch -- cgit v1.2.3