@@ -147,7 +147,7 @@ NIAddSpell(IspellDict * Conf, const char *word, const char *flag)
147
147
int
148
148
NIImportDictionary (IspellDict * Conf , const char * filename )
149
149
{
150
- char str [BUFSIZ ];
150
+ char str [BUFSIZ ], * pstr ;
151
151
FILE * dict ;
152
152
153
153
if (!(dict = fopen (filename , "r" )))
@@ -190,9 +190,10 @@ NIImportDictionary(IspellDict * Conf, const char *filename)
190
190
}
191
191
s += pg_mblen (s );
192
192
}
193
- lowerstr (str );
193
+ pstr = lowerstr (str );
194
194
195
- NIAddSpell (Conf , str , flag );
195
+ NIAddSpell (Conf , pstr , flag );
196
+ pfree (pstr );
196
197
}
197
198
fclose (dict );
198
199
return (0 );
@@ -418,8 +419,7 @@ parse_affentry(char *str, char *mask, char *find, char *repl, int line)
418
419
int
419
420
NIImportAffixes (IspellDict * Conf , const char * filename )
420
421
{
421
- char str [BUFSIZ ];
422
- char tmpstr [BUFSIZ ];
422
+ char str [BUFSIZ ], * pstr = NULL ;
423
423
char mask [BUFSIZ ];
424
424
char find [BUFSIZ ];
425
425
char repl [BUFSIZ ];
@@ -439,11 +439,14 @@ NIImportAffixes(IspellDict * Conf, const char *filename)
439
439
while (fgets (str , sizeof (str ), affix ))
440
440
{
441
441
line ++ ;
442
+ if ( * str == '#' || * str == '\n' )
443
+ continue ;
444
+
442
445
pg_verifymbstr (str , strlen (str ), false);
443
- memcpy ( tmpstr , str , 32 ); /* compoundwords... */
444
- tmpstr [ 32 ] = '\0' ;
445
- lowerstr (tmpstr );
446
- if (STRNCMP (tmpstr , "compoundwords" ) == 0 )
446
+ if ( pstr )
447
+ pfree ( pstr ) ;
448
+ pstr = lowerstr (str );
449
+ if (STRNCMP (pstr , "compoundwords" ) == 0 )
447
450
{
448
451
s = findchar (str , 'l' );
449
452
if (s )
@@ -458,21 +461,21 @@ NIImportAffixes(IspellDict * Conf, const char *filename)
458
461
continue ;
459
462
}
460
463
}
461
- if (STRNCMP (tmpstr , "suffixes" ) == 0 )
464
+ if (STRNCMP (pstr , "suffixes" ) == 0 )
462
465
{
463
466
suffixes = 1 ;
464
467
prefixes = 0 ;
465
468
oldformat ++ ;
466
469
continue ;
467
470
}
468
- if (STRNCMP (tmpstr , "prefixes" ) == 0 )
471
+ if (STRNCMP (pstr , "prefixes" ) == 0 )
469
472
{
470
473
suffixes = 0 ;
471
474
prefixes = 1 ;
472
475
oldformat ++ ;
473
476
continue ;
474
477
}
475
- if (STRNCMP (tmpstr , "flag" ) == 0 )
478
+ if (STRNCMP (pstr , "flag" ) == 0 )
476
479
{
477
480
s = str + 4 ;
478
481
flagflags = 0 ;
@@ -523,26 +526,28 @@ NIImportAffixes(IspellDict * Conf, const char *filename)
523
526
if ((!suffixes ) && (!prefixes ))
524
527
continue ;
525
528
526
- lowerstr (str );
527
- if (!parse_affentry (str , mask , find , repl , line ))
529
+ if (!parse_affentry (pstr , mask , find , repl , line ))
528
530
continue ;
529
531
530
532
NIAddAffix (Conf , flag , flagflags , mask , find , repl , suffixes ? FF_SUFFIX : FF_PREFIX );
531
533
}
532
534
fclose (affix );
533
535
536
+ if ( pstr )
537
+ pfree ( pstr );
538
+
534
539
return (0 );
535
540
}
536
541
537
542
int
538
543
NIImportOOAffixes (IspellDict * Conf , const char * filename )
539
544
{
540
545
char str [BUFSIZ ];
541
- char type [BUFSIZ ];
546
+ char type [BUFSIZ ], * ptype = NULL ;
542
547
char sflag [BUFSIZ ];
543
- char mask [BUFSIZ ];
544
- char find [BUFSIZ ];
545
- char repl [BUFSIZ ];
548
+ char mask [BUFSIZ ], * pmask ;
549
+ char find [BUFSIZ ], * pfind ;
550
+ char repl [BUFSIZ ], * prepl ;
546
551
bool isSuffix = false;
547
552
int flag = 0 ;
548
553
char flagflags = 0 ;
@@ -577,38 +582,46 @@ NIImportOOAffixes(IspellDict * Conf, const char *filename)
577
582
578
583
scanread = sscanf (str , scanbuf , type , sflag , find , repl , mask );
579
584
580
- lowerstr (type );
581
- if (scanread < 4 || (STRNCMP (type , "sfx" ) && STRNCMP (type , "pfx" )))
585
+ if (ptype )
586
+ pfree (ptype );
587
+ ptype = lowerstr (type );
588
+ if (scanread < 4 || (STRNCMP (ptype , "sfx" ) && STRNCMP (ptype , "pfx" )))
582
589
continue ;
583
590
584
591
if (scanread == 4 )
585
592
{
586
593
if (strlen (sflag ) != 1 )
587
594
continue ;
588
595
flag = * sflag ;
589
- isSuffix = (STRNCMP (type , "sfx" ) == 0 ) ? true : false;
590
- lowerstr (find );
596
+ isSuffix = (STRNCMP (ptype , "sfx" ) == 0 ) ? true : false;
597
+ pfind = lowerstr (find );
591
598
if (t_iseq (find , 'y' ))
592
599
flagflags |= FF_CROSSPRODUCT ;
593
600
else
594
601
flagflags = 0 ;
602
+ pfree (pfind );
595
603
}
596
604
else
597
605
{
598
606
if (strlen (sflag ) != 1 || flag != * sflag || flag == 0 )
599
607
continue ;
600
- lowerstr (repl );
601
- lowerstr (find );
602
- lowerstr (mask );
608
+ prepl = lowerstr (repl );
609
+ pfind = lowerstr (find );
610
+ pmask = lowerstr (mask );
603
611
if (t_iseq (find , '0' ))
604
612
* find = '\0' ;
605
613
if (t_iseq (repl , '0' ))
606
614
* repl = '\0' ;
607
615
608
616
NIAddAffix (Conf , flag , flagflags , mask , find , repl , isSuffix ? FF_SUFFIX : FF_PREFIX );
617
+ pfree (prepl );
618
+ pfree (pfind );
619
+ pfree (pmask );
609
620
}
610
621
}
611
622
623
+ if (ptype )
624
+ pfree (ptype );
612
625
fclose (affix );
613
626
614
627
return 0 ;
@@ -1053,7 +1066,6 @@ NormalizeSubWord(IspellDict * Conf, char *word, char flag)
1053
1066
1054
1067
if (wrdlen > MAXNORMLEN )
1055
1068
return NULL ;
1056
- lowerstr (word );
1057
1069
cur = forms = (char * * ) palloc (MAX_NORM * sizeof (char * ));
1058
1070
* cur = NULL ;
1059
1071
@@ -1354,13 +1366,17 @@ SplitToVariants(IspellDict * Conf, SPNode * snode, SplitVar * orig, char *word,
1354
1366
}
1355
1367
1356
1368
TSLexeme *
1357
- NINormalizeWord (IspellDict * Conf , char * word )
1369
+ NINormalizeWord (IspellDict * Conf , char * uword )
1358
1370
{
1359
- char * * res = NormalizeSubWord (Conf , word , 0 );
1371
+ char * * res ;
1372
+ char * word ;
1360
1373
TSLexeme * lcur = NULL ,
1361
1374
* lres = NULL ;
1362
1375
uint16 NVariant = 1 ;
1363
1376
1377
+ word = lowerstr (uword );
1378
+ res = NormalizeSubWord (Conf , word , 0 );
1379
+
1364
1380
if (res )
1365
1381
{
1366
1382
char * * ptr = res ;
@@ -1431,6 +1447,9 @@ NINormalizeWord(IspellDict * Conf, char *word)
1431
1447
var = ptr ;
1432
1448
}
1433
1449
}
1450
+
1451
+ pfree (word );
1452
+
1434
1453
return lres ;
1435
1454
}
1436
1455
0 commit comments