diff options
author | Pacho Ramos <pacho@gentoo.org> | 2018-11-14 23:30:33 +0100 |
---|---|---|
committer | Pacho Ramos <pacho@gentoo.org> | 2018-11-14 23:32:15 +0100 |
commit | a8519bd2c58428d730f61140cd4a843ce68033b3 (patch) | |
tree | 3d7942912faccc47581f72a3639b63c526d392d5 /app-text/cuneiform | |
parent | app-portage/grs: version bump to 0.7 (diff) | |
download | gentoo-a8519bd2c58428d730f61140cd4a843ce68033b3.tar.gz gentoo-a8519bd2c58428d730f61140cd4a843ce68033b3.tar.bz2 gentoo-a8519bd2c58428d730f61140cd4a843ce68033b3.zip |
app-text/cuneiform: Bugfixes from Fedora
Closes: https://bugs.gentoo.org/421717
Closes: https://bugs.gentoo.org/595010
Closes: https://bugs.gentoo.org/670656
Signed-off-by: Pacho Ramos <pacho@gentoo.org>
Package-Manager: Portage-2.3.51, Repoman-2.3.11
Diffstat (limited to 'app-text/cuneiform')
6 files changed, 437 insertions, 0 deletions
diff --git a/app-text/cuneiform/cuneiform-1.1.0-r3.ebuild b/app-text/cuneiform/cuneiform-1.1.0-r3.ebuild new file mode 100644 index 000000000000..b3da9fad0540 --- /dev/null +++ b/app-text/cuneiform/cuneiform-1.1.0-r3.ebuild @@ -0,0 +1,59 @@ +# Copyright 1999-2018 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit cmake-utils versionator + +PV_MAJ=$(get_version_component_range 1-2) +MY_P=${PN}-linux-${PV} + +DESCRIPTION="An enterprise quality OCR engine by Cognitive Technologies" +HOMEPAGE="https://launchpad.net/cuneiform-linux" +SRC_URI="https://launchpad.net/${PN}-linux/${PV_MAJ}/${PV_MAJ}/+download/${MY_P}.tar.bz2" + +LICENSE="BSD" +SLOT="0" +KEYWORDS="~amd64 ~x86" + +IUSE="debug graphicsmagick" + +RDEPEND=" + !graphicsmagick? ( media-gfx/imagemagick:= ) + graphicsmagick? ( media-gfx/graphicsmagick:= )" +DEPEND="${RDEPEND}" + +S=${WORKDIR}/${MY_P} + +DOCS=( readme.txt ) +PATCHES=( + # From Fedora + "${FILESDIR}/c-assert.diff" + "${FILESDIR}/libm.diff" + "${FILESDIR}/${P}-fix_buffer_overflow.patch" + "${FILESDIR}/${P}-fix_buffer_overflow_2.patch" + "${FILESDIR}/${P}-gcc6.patch" + "${FILESDIR}/${P}-gcc7.patch" + "${FILESDIR}/${P}-typos.patch" +) + +src_prepare(){ + use graphicsmagick && PATCHES+=( "${FILESDIR}/graphicsmagick.diff" ) + cmake-utils_src_prepare + + # respect LDFLAGS + sed -i 's:\(set[(]CMAKE_SHARED_LINKER_FLAGS "[^"]*\):\1 $ENV{LDFLAGS}:' \ + cuneiform_src/CMakeLists.txt || die "failed to sed for LDFLAGS" + + # Fix automagic dependencies / linking + if use graphicsmagick; then + sed -i "s:find_package(ImageMagick COMPONENTS Magick++):#DONOTFIND:" \ + cuneiform_src/CMakeLists.txt \ + || die "Sed for ImageMagick automagic dependency failed." + fi +} + +src_install() { + cmake-utils_src_install + doman "${FILESDIR}/${PN}.1" +} diff --git a/app-text/cuneiform/files/cuneiform-1.1.0-fix_buffer_overflow.patch b/app-text/cuneiform/files/cuneiform-1.1.0-fix_buffer_overflow.patch new file mode 100644 index 000000000000..8e9811540cd6 --- /dev/null +++ b/app-text/cuneiform/files/cuneiform-1.1.0-fix_buffer_overflow.patch @@ -0,0 +1,27 @@ +Description: Fix buffer overflow during crash when using user supplied image. +Author: Sławomir Nizio +Forwarded: no +Last-Update: 2017-04-05 + +--- a/cuneiform_src/Kern/rstr/src/acc_tabs.c ++++ b/cuneiform_src/Kern/rstr/src/acc_tabs.c +@@ -1233,7 +1233,7 @@ if(is_cen_language(language)) + + strcpy(decode_ASCII_to_[(uchar)liga_i ], "_i_"); + strcpy(decode_ASCII_to_[(uchar)liga_exm ], "_!_"); +- strcpy(decode_ASCII_to_[(uchar)liga_inv_exm], "_!!_"); ++ strcpy(decode_ASCII_to_[(uchar)liga_inv_exm], "_!_"); + strcpy(decode_ASCII_to_[(uchar)right_quocket], "\xbb"); + strcpy(decode_ASCII_to_[(uchar)liga_CC ], "\xa9"); + strcpy(decode_ASCII_to_[(uchar)liga_CR ], "\xae"); +--- a/cuneiform_src/Kern/rstr/src/match_wd.c ++++ b/cuneiform_src/Kern/rstr/src/match_wd.c +@@ -484,7 +484,7 @@ + str_raster->w=(int32_t)(right-left); + str_raster->h=(int32_t)(bottom-top); + +- if (str_raster->w > LINE_WIDTH || str_raster->h > LINE_HEIGHT) ++ if ((str_raster->w+7) > LINE_WIDTH || str_raster->h > LINE_HEIGHT) + return FALSE; + + memset(&str_raster->pict,0,(str_raster->w+7)/8*str_raster->h); diff --git a/app-text/cuneiform/files/cuneiform-1.1.0-fix_buffer_overflow_2.patch b/app-text/cuneiform/files/cuneiform-1.1.0-fix_buffer_overflow_2.patch new file mode 100644 index 000000000000..c64b42fc8933 --- /dev/null +++ b/app-text/cuneiform/files/cuneiform-1.1.0-fix_buffer_overflow_2.patch @@ -0,0 +1,18 @@ +Description: Split original patch by Slawomir and update the same to apply +neatly. +Author: Bhavani Shankar <bhavi@ubuntu.com> + + +--- cuneiform-1.1.0+dfsg.orig/cuneiform_src/Kern/rstr/src/acc_tabs.c ++++ cuneiform-1.1.0+dfsg/cuneiform_src/Kern/rstr/src/acc_tabs.c +@@ -2821,8 +2821,8 @@ if( CodePages[language]==CSTR_EASTEUROPE + strcpy(decode_ASCII_to_[(uchar)liga_j ], "_j_"); + strcpy(decode_ASCII_to_[(uchar)liga_exm ], "_!_"); + strcpy(decode_ASCII_to_[(uchar)liga_qm ], "_?_"); +- strcpy(decode_ASCII_to_[(uchar)liga_inv_exm], "_!!_"); +- strcpy(decode_ASCII_to_[(uchar)liga_inv_qm ], "_??_"); ++ strcpy(decode_ASCII_to_[(uchar)liga_inv_exm], "_!_"); ++ strcpy(decode_ASCII_to_[(uchar)liga_inv_qm ], "_?_"); + strcpy(decode_ASCII_to_[(uchar)liga_bull ], "\xB0"); + strcpy(decode_ASCII_to_[(uchar)left_quocket], ""); + strcpy(decode_ASCII_to_[(uchar)right_quocket], ""); diff --git a/app-text/cuneiform/files/cuneiform-1.1.0-gcc6.patch b/app-text/cuneiform/files/cuneiform-1.1.0-gcc6.patch new file mode 100644 index 000000000000..e45768e90f29 --- /dev/null +++ b/app-text/cuneiform/files/cuneiform-1.1.0-gcc6.patch @@ -0,0 +1,177 @@ +Description: fix FTBFS with GCC 6 +Author: Andreas Beckmann <anbe@debian.org> + +--- a/cuneiform_src/Kern/rimage/sources/main/cricontrol.cpp ++++ b/cuneiform_src/Kern/rimage/sources/main/cricontrol.cpp +@@ -594,8 +594,8 @@ Bool32 CRIControl::CreateDestinatonDIB(u + return FALSE; + } + +- wNewHeight = (mbMarginsFlag ? abs(mrMargins.rmBottomMarg - mrMargins.rmTopMarg) : mpSourceDIB->GetLinesNumber()); +- wNewWidth = (mbMarginsFlag ? abs(mrMargins.rmLeftMarg - mrMargins.rmRightMarg) : mpSourceDIB->GetLineWidth()); ++ wNewHeight = (mbMarginsFlag ? std::abs(int32_t(mrMargins.rmBottomMarg) - int32_t(mrMargins.rmTopMarg)) : mpSourceDIB->GetLinesNumber()); ++ wNewWidth = (mbMarginsFlag ? std::abs(int32_t(mrMargins.rmLeftMarg) - int32_t(mrMargins.rmRightMarg)) : mpSourceDIB->GetLineWidth()); + mpSourceDIB->GetResolutionDPM( &wXResolution, &wYResolution); + + if ( !mpDestinationDIB->CreateDIBBegin( wNewWidth, wNewHeight, BitCount) ) +--- a/cuneiform_src/Kern/include/minmax.h ++++ b/cuneiform_src/Kern/include/minmax.h +@@ -67,6 +67,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE + #define MAX(a,b) (((a)>(b))?(a):(b)) + #endif + ++#ifndef __cplusplus ++ + #ifndef min + #define min(a,b) (((a)>(b))?(b):(a)) + #endif +@@ -75,3 +77,5 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE + #endif + + #endif ++ ++#endif +--- a/cuneiform_src/Kern/rcutp/sources/main/rcutp_func.cpp ++++ b/cuneiform_src/Kern/rcutp/sources/main/rcutp_func.cpp +@@ -902,8 +902,8 @@ int16_t i,ver_byte,interval,l1,r1,minl + if(l1<0 || r1<0) return -1; + if(i>0) + { +- minl=MIN(minl,l1); minr=min(minr,r1); +- maxl=MAX(maxl,l1); maxr=max(maxr,r1); ++ minl=MIN(minl,l1); minr=MIN(minr,r1); ++ maxl=MAX(maxl,l1); maxr=MAX(maxr,r1); + } + else + { +--- a/cuneiform_src/Kern/lns32/src/xydim.h ++++ b/cuneiform_src/Kern/lns32/src/xydim.h +@@ -86,8 +86,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE + ); + }; + void expandX( int l, int r ){ +- left = min( left, l ); +- right = max( right, r); ++ left = MIN( left, l ); ++ right = MAX( right, r); + }; + + }; +@@ -115,8 +115,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE + ); + }; + void expandY( int b, int t ){ +- bottom = min( bottom, b ); +- top = max( top, t ); ++ bottom = MIN( bottom, b ); ++ top = MAX( top, t ); + }; + + }; +@@ -145,10 +145,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE + ); + }; + void restrictXY( int x1, int x2, int y1, int y2 ){ +- left = max( left, x1 ); +- right = min( right, x2 ); +- bottom = max(bottom, y1); +- top = min(top, y2); ++ left = MAX( left, x1 ); ++ right = MIN( right, x2 ); ++ bottom = MAX(bottom, y1); ++ top = MIN(top, y2); + }; + void expandXY( TXYDim* brother ){ + expandX( brother->left, brother->right ); +--- a/cuneiform_src/Kern/rcorrkegl/src/cpp/cor_kegl.cpp ++++ b/cuneiform_src/Kern/rcorrkegl/src/cpp/cor_kegl.cpp +@@ -75,6 +75,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE + #include "cor_kegl.h" + #include "garbage.h" + #include "ligas.h" ++#include "minmax.h" + + #ifndef MAXINT32 + #define MAXINT32 0x7FFFFFFF +@@ -1563,7 +1564,7 @@ static int32_t rect_dist(Rect32 *main, R + int32_t y2=test->top-main->bottom; + if (x1>0 || x2>0 || y1>0 || y2>0) //не пересекаютс + { +- x=MAX(x1,x2); y=max(y1,y2); ++ x=MAX(x1,x2); y=MAX(y1,y2); + if (x<0) return y; + if (y<0) return x; + return MIN(x,y); +@@ -1574,7 +1575,7 @@ static int32_t rect_dist(Rect32 *main, R + x2=test->right-main->right; + y1=main->top-test->top; + y2=test->bottom-main->bottom; +- x=MAX(x1,x2); y=max(y1,y2); ++ x=MAX(x1,x2); y=MAX(y1,y2); + x=MAX(x,y); + return (x>0) ? x : 0; + } +--- a/cuneiform_src/Kern/rcutp/sources/main/rcutp_mainfunc.cpp ++++ b/cuneiform_src/Kern/rcutp/sources/main/rcutp_mainfunc.cpp +@@ -73,13 +73,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE + + extern int16_t minrow,bbs1,bbs2,bbs3,bbs4,Nb1,Nb2,Nb3; + extern uchar language; +-#ifndef max +-#define MAX(a,b) (((a) > (b)) ? (a) : (b)) +-#endif +- +-#ifndef min +-#define MIN(a,b) (((a) < (b)) ? (a) : (b)) +-#endif + + extern int16_t up_position,dw_position; + uchar MemForCutPoints[65536]; +--- a/cuneiform_src/Kern/hhh/lst3_win.h ++++ b/cuneiform_src/Kern/hhh/lst3_win.h +@@ -845,7 +845,7 @@ int WidthPRS,MaxShtrih; + dist+=par.kv*dv; \ + } + +-#define DIST_V(u1,d1,u2,d2) (min(d1,d2)-max(u1,u2)) ++#define DIST_V(u1,d1,u2,d2) (MIN(d1,d2)-MAX(u1,u2)) + + #define DV_FRM(a,b) DIST_V(a->up,a->down,b->up,b->down) + +--- a/cuneiform_src/Kern/lns32/src/lns.cpp ++++ b/cuneiform_src/Kern/lns32/src/lns.cpp +@@ -190,8 +190,8 @@ void __RejectNearBound(LinesTotalInfo* + break; // keep lines, if lack + if (li.Flags & LI_NOISE) + continue; +- Point32 Mn; Mn.x = MIN(li.A.x,li.B.x); Mn.y = min(li.A.y,li.B.y); +- Point32 Mx; Mx.x = MAX(li.A.x,li.B.x); Mx.y = max(li.A.y,li.B.y); ++ Point32 Mn; Mn.x = MIN(li.A.x,li.B.x); Mn.y = MIN(li.A.y,li.B.y); ++ Point32 Mx; Mx.x = MAX(li.A.x,li.B.x); Mx.y = MAX(li.A.y,li.B.y); + if ((Mn.y < imgrect.top + 50) || (Mx.y > imgrect.bottom - 50)) + { + if (!__HasCorners(li, plti, TRUE)) +@@ -213,8 +213,8 @@ void __RejectNearBound(LinesTotalInfo* + continue; + if (vcnt < 5) + break; // keep lines, if lack +- Point32 Mn; Mn.x = MIN(li.A.x,li.B.x); Mn.y = min(li.A.y,li.B.y); +- Point32 Mx; Mx.x = MAX(li.A.x,li.B.x); Mx.y = max(li.A.y,li.B.y); ++ Point32 Mn; Mn.x = MIN(li.A.x,li.B.x); Mn.y = MIN(li.A.y,li.B.y); ++ Point32 Mx; Mx.x = MAX(li.A.x,li.B.x); Mx.y = MAX(li.A.y,li.B.y); + if ((Mn.x < imgrect.left + 50) || (Mx.x > imgrect.right - 50)) + { + if (!__HasCorners(li, plti, FALSE)) +--- a/cuneiform_src/Kern/lns32/src/lnscheck.cpp ++++ b/cuneiform_src/Kern/lns32/src/lnscheck.cpp +@@ -66,8 +66,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE + #include "decl.h" + + typedef Point16 XPoint16; +-#define maxi max +-#define mini min ++#define maxi MAX ++#define mini MIN + #define PPSArray TArray + + #define CONSOLE /* This can also be printf. */ diff --git a/app-text/cuneiform/files/cuneiform-1.1.0-gcc7.patch b/app-text/cuneiform/files/cuneiform-1.1.0-gcc7.patch new file mode 100644 index 000000000000..01530ab4b1d3 --- /dev/null +++ b/app-text/cuneiform/files/cuneiform-1.1.0-gcc7.patch @@ -0,0 +1,102 @@ +diff -urp cuneiform-1.1.0/cuneiform_src/Kern/hhh/tigerh/h/strings.h cuneiform-1.1.0-char/cuneiform_src/Kern/hhh/tigerh/h/strings.h +--- cuneiform-1.1.0/cuneiform_src/Kern/hhh/tigerh/h/strings.h 2017-11-30 11:25:24.409125695 +0700 ++++ cuneiform-1.1.0-char/cuneiform_src/Kern/hhh/tigerh/h/strings.h 2017-11-30 12:09:26.033501963 +0700 +@@ -80,6 +80,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE + + # include "ltconfig.h" + # include "c_types.h" ++# include "cttypes.h" + + struct _String; + typedef struct _String STRING; +diff -urp cuneiform-1.1.0/cuneiform_src/Kern/include/utf8-tables.h cuneiform-1.1.0-char/cuneiform_src/Kern/include/utf8-tables.h +--- cuneiform-1.1.0/cuneiform_src/Kern/include/utf8-tables.h 2017-11-30 11:25:24.410125673 +0700 ++++ cuneiform-1.1.0-char/cuneiform_src/Kern/include/utf8-tables.h 2017-11-30 11:32:05.974413875 +0700 +@@ -68,7 +68,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE + #endif + + +-const char win1250_to_utf8[][4] = { ++const unsigned char win1250_to_utf8[][4] = { + {0, 0, 0, 0}, + {1, 0, 0, 0}, + {2, 0, 0, 0}, +@@ -328,7 +328,7 @@ const char win1250_to_utf8[][4] = { + }; + + +-const char win1251_to_utf8[][4] = { ++const unsigned char win1251_to_utf8[][4] = { + {0, 0, 0, 0}, + {1, 0, 0, 0}, + {2, 0, 0, 0}, +@@ -587,7 +587,7 @@ const char win1251_to_utf8[][4] = { + {209, 143, 0, 0}, + }; + +-const char win1252_to_utf8[][4] = { ++const unsigned char win1252_to_utf8[][4] = { + {0, 0, 0, 0}, + {1, 0, 0, 0}, + {2, 0, 0, 0}, +@@ -847,7 +847,7 @@ const char win1252_to_utf8[][4] = { + }; + + +-const char win1254_to_utf8[][4] = { ++const unsigned char win1254_to_utf8[][4] = { + {0, 0, 0, 0}, + {1, 0, 0, 0}, + {2, 0, 0, 0}, +@@ -1107,7 +1107,7 @@ const char win1254_to_utf8[][4] = { + }; + + +-const char win1257_to_utf8[][4] = { ++const unsigned char win1257_to_utf8[][4] = { + {0, 0, 0, 0}, + {1, 0, 0, 0}, + {2, 0, 0, 0}, +diff -urp cuneiform-1.1.0/cuneiform_src/Kern/rout/src/codetables.cpp cuneiform-1.1.0-char/cuneiform_src/Kern/rout/src/codetables.cpp +--- cuneiform-1.1.0/cuneiform_src/Kern/rout/src/codetables.cpp 2017-11-30 11:25:24.411125651 +0700 ++++ cuneiform-1.1.0-char/cuneiform_src/Kern/rout/src/codetables.cpp 2017-11-30 11:47:51.856189912 +0700 +@@ -937,13 +937,13 @@ CP_TO_CP tab[] = { + * codepage. + */ + +-const char * getUTF8Str(const unsigned char in, const int codepage) { ++const unsigned char * getUTF8Str(const unsigned char in, const int codepage) { + switch(codepage) { + case 1250 : return win1250_to_utf8[in]; + case 1251 : return win1251_to_utf8[in]; + case 1252 : return win1252_to_utf8[in]; + case 1254 : return win1254_to_utf8[in]; + case 1257 : return win1257_to_utf8[in]; +- default : return "?"; ++ default : return (const unsigned char *) "?"; + } + } +diff -urp cuneiform-1.1.0/cuneiform_src/Kern/rout/src/rout_own.h cuneiform-1.1.0-char/cuneiform_src/Kern/rout/src/rout_own.h +--- cuneiform-1.1.0/cuneiform_src/Kern/rout/src/rout_own.h 2017-11-30 11:25:24.411125651 +0700 ++++ cuneiform-1.1.0-char/cuneiform_src/Kern/rout/src/rout_own.h 2017-11-30 11:40:01.457220419 +0700 +@@ -458,7 +458,7 @@ Bool SetTableTextSeparators(char* s); + void ResetCodeTables(); + Bool UpdateActiveCodeTable(); + long GetCodePage(); +-const char * getUTF8Str(const unsigned char in, const int codepage); ++const unsigned char * getUTF8Str(const unsigned char in, const int codepage); + + //***************************************************************** + // Rout.cpp +diff -urp cuneiform-1.1.0/cuneiform_src/Kern/rout/src/text.cpp cuneiform-1.1.0-char/cuneiform_src/Kern/rout/src/text.cpp +--- cuneiform-1.1.0/cuneiform_src/Kern/rout/src/text.cpp 2017-11-30 11:25:24.411125651 +0700 ++++ cuneiform-1.1.0-char/cuneiform_src/Kern/rout/src/text.cpp 2017-11-30 11:40:43.571320319 +0700 +@@ -310,7 +310,7 @@ Bool OneChar(Handle charHandle) + *gMemCur++ = c2; + } + else { +- const char *utfchar; ++ const unsigned char *utfchar; + utfchar = getUTF8Str((char )c2, GetCodePage()); + int i; + for(i=0; utfchar[i] != '\0' ;i++){ diff --git a/app-text/cuneiform/files/cuneiform-1.1.0-typos.patch b/app-text/cuneiform/files/cuneiform-1.1.0-typos.patch new file mode 100644 index 000000000000..3439760d79d8 --- /dev/null +++ b/app-text/cuneiform/files/cuneiform-1.1.0-typos.patch @@ -0,0 +1,54 @@ +Description: fix typos +Author: Andreas Beckmann <anbe@debian.org> + +--- a/cuneiform_src/Kern/rblock/sources/c/ltmain.c ++++ b/cuneiform_src/Kern/rblock/sources/c/ltmain.c +@@ -344,7 +344,7 @@ i=0; i=i; + # ifdef LT_DEBUG + //if (LT_DebugGraphicsLevel >= 2) + if(!LDPUMA_Skip(hFirstDustAbsorbtion)) +- LT_GraphicsBlocksOutput ("After first dust absorbtion"); ++ LT_GraphicsBlocksOutput ("After first dust absorption"); + # endif + + PageMatrixExcludeSeparators (TRUE); +@@ -368,7 +368,7 @@ i=0; i=i; + # ifdef LT_DEBUG + //if (LT_DebugGraphicsLevel >= 2) + if(!LDPUMA_Skip(hSecondDustAbsorbtion)) +- LT_GraphicsBlocksOutput ("After second dust absorbtion"); ++ LT_GraphicsBlocksOutput ("After second dust absorption"); + # endif + + if (cut_page_left || cut_page_right) +--- a/cuneiform_src/Kern/rstr/src/pass3.c ++++ b/cuneiform_src/Kern/rstr/src/pass3.c +@@ -648,7 +648,7 @@ ready_BL:; + { + if (snap_activity('d')) + { +- snap_show_text("Skiped as dust"); ++ snap_show_text("Skipped as dust"); + snap_monitor(); + } + +@@ -3135,7 +3135,7 @@ Bool match_word_prepare(CSTR_line ln, uc + { + if (snap_activity('n')) + { +- snap_show_text("Skiped as dust"); ++ snap_show_text("Skipped as dust"); + snap_monitor(); + } + return FALSE; +--- a/cuneiform_src/Kern/rstr/src/snap.c ++++ b/cuneiform_src/Kern/rstr/src/snap.c +@@ -542,7 +542,7 @@ if( short_spell_re(wrd,lang) ) + else + strcat(buf," n"); + +-strcat(buf," new agressive : "); ++strcat(buf," new aggressive : "); + if( _spell_agressive(wrd,lang) ) + strcat(buf,"y "); + else |