Commit 2bb902f
committed
fix: resolve 10 correctness, safety, and performance issues
1. Prevent infinite recursion in leetify() on unmappable inputs
(e.g. single consonant "M") by capping recursion at max_depth.
2. Filter empty parts in split_name() so consecutive spaces no
longer produce empty strings that cause UB in initials(),
first_plus_initial(), and initial_plus_last().
3. Guard mix_two() against single-character name parts where
engine.get(2, 1) triggered UB (min > max in distribution).
4. Skip empty lines in parse_file() to prevent empty strings in
word lists that would cause UB in transforms calling .back().
5. Strip trailing \r in parse_file() for cross-platform
compatibility with \r\n line endings.
6. Always use name-based generation when a name is provided but
no word lists are loaded — previously threw 75% of the time.
7. Fix leetify() force-retry to compare against pre-transform
value instead of _original_string, which was almost never
equal for name-based nicknames.
8. Switch _engine from mt19937 to mt19937_64 and XOR-fold seeds
for per-call engines so upper 32 bits are no longer discarded.
9. Move word vector in parse_file() instead of copying it.
10. Replace character-based candidate list in oneleet() with
position-based selection to eliminate duplicate bias.1 parent a3ef2f9 commit 2bb902f
2 files changed
Lines changed: 188 additions & 51 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
139 | 139 | | |
140 | 140 | | |
141 | 141 | | |
142 | | - | |
143 | | - | |
| 142 | + | |
| 143 | + | |
144 | 144 | | |
145 | 145 | | |
146 | 146 | | |
| |||
160 | 160 | | |
161 | 161 | | |
162 | 162 | | |
163 | | - | |
164 | | - | |
| 163 | + | |
| 164 | + | |
165 | 165 | | |
166 | 166 | | |
167 | 167 | | |
| |||
179 | 179 | | |
180 | 180 | | |
181 | 181 | | |
182 | | - | |
| 182 | + | |
183 | 183 | | |
184 | 184 | | |
185 | 185 | | |
| |||
253 | 253 | | |
254 | 254 | | |
255 | 255 | | |
256 | | - | |
| 256 | + | |
257 | 257 | | |
258 | 258 | | |
259 | 259 | | |
| |||
420 | 420 | | |
421 | 421 | | |
422 | 422 | | |
423 | | - | |
424 | | - | |
| 423 | + | |
| 424 | + | |
425 | 425 | | |
426 | | - | |
427 | | - | |
| 426 | + | |
428 | 427 | | |
429 | | - | |
| 428 | + | |
430 | 429 | | |
431 | | - | |
| 430 | + | |
432 | 431 | | |
433 | 432 | | |
434 | 433 | | |
435 | | - | |
436 | | - | |
| 434 | + | |
| 435 | + | |
437 | 436 | | |
438 | | - | |
439 | | - | |
440 | | - | |
441 | | - | |
442 | | - | |
443 | | - | |
| 437 | + | |
| 438 | + | |
444 | 439 | | |
445 | 440 | | |
446 | 441 | | |
| |||
471 | 466 | | |
472 | 467 | | |
473 | 468 | | |
474 | | - | |
| 469 | + | |
475 | 470 | | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
476 | 475 | | |
477 | 476 | | |
478 | 477 | | |
| |||
488 | 487 | | |
489 | 488 | | |
490 | 489 | | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
491 | 493 | | |
492 | 494 | | |
493 | 495 | | |
494 | 496 | | |
495 | 497 | | |
496 | | - | |
497 | | - | |
498 | | - | |
499 | | - | |
500 | | - | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
501 | 506 | | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
502 | 518 | | |
503 | | - | |
504 | | - | |
505 | | - | |
506 | | - | |
507 | | - | |
508 | | - | |
509 | | - | |
510 | | - | |
511 | | - | |
512 | | - | |
513 | | - | |
514 | | - | |
515 | | - | |
516 | | - | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
517 | 524 | | |
518 | 525 | | |
519 | 526 | | |
| |||
761 | 768 | | |
762 | 769 | | |
763 | 770 | | |
| 771 | + | |
764 | 772 | | |
765 | 773 | | |
766 | 774 | | |
767 | 775 | | |
768 | 776 | | |
769 | 777 | | |
770 | 778 | | |
771 | | - | |
772 | | - | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
773 | 785 | | |
774 | 786 | | |
775 | 787 | | |
| |||
829 | 841 | | |
830 | 842 | | |
831 | 843 | | |
832 | | - | |
| 844 | + | |
833 | 845 | | |
834 | | - | |
| 846 | + | |
| 847 | + | |
835 | 848 | | |
836 | 849 | | |
837 | 850 | | |
838 | 851 | | |
839 | 852 | | |
840 | | - | |
841 | | - | |
842 | | - | |
| 853 | + | |
| 854 | + | |
| 855 | + | |
| 856 | + | |
| 857 | + | |
| 858 | + | |
| 859 | + | |
| 860 | + | |
| 861 | + | |
| 862 | + | |
843 | 863 | | |
844 | 864 | | |
845 | 865 | | |
| |||
914 | 934 | | |
915 | 935 | | |
916 | 936 | | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
917 | 945 | | |
918 | | - | |
919 | | - | |
| 946 | + | |
920 | 947 | | |
921 | 948 | | |
922 | 949 | | |
| |||
979 | 1006 | | |
980 | 1007 | | |
981 | 1008 | | |
982 | | - | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
983 | 1021 | | |
984 | 1022 | | |
985 | 1023 | | |
986 | | - | |
| 1024 | + | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
987 | 1028 | | |
988 | 1029 | | |
989 | 1030 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
150 | 150 | | |
151 | 151 | | |
152 | 152 | | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
153 | 157 | | |
154 | 158 | | |
155 | 159 | | |
| |||
929 | 933 | | |
930 | 934 | | |
931 | 935 | | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
| 950 | + | |
| 951 | + | |
| 952 | + | |
| 953 | + | |
| 954 | + | |
| 955 | + | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
| 963 | + | |
| 964 | + | |
| 965 | + | |
| 966 | + | |
| 967 | + | |
| 968 | + | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
| 1023 | + | |
| 1024 | + | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
0 commit comments