Skip to content

Commit

Permalink
fix tsw: add constraints: m < n - 3
Browse files Browse the repository at this point in the history
fallback to search_small then.
Fixes one crash in GH #13
  • Loading branch information
rurban committed Mar 24, 2024
1 parent 370b523 commit 46005a6
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 44 deletions.
2 changes: 1 addition & 1 deletion asan.lst
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ fjs
hash3
hash5
hash8
#tsw
tsw
#graspm
#ssef
aut
Expand Down
41 changes: 1 addition & 40 deletions sanitizer.log
Original file line number Diff line number Diff line change
Expand Up @@ -38,46 +38,7 @@ hash3
hash5
hash8
tsw
AddressSanitizer:DEADLYSIGNAL
=================================================================
==3586985==ERROR: AddressSanitizer: SEGV on unknown address 0x7f2c9a15efff (pc 0x000000403d73 bp 0x7ffe6e399280 sp 0x7ffe6e317dc0 T0)
==3586985==The signal is caused by a READ memory access.
#0 0x403d73 in search source/algos/tsw.c:72
#1 0x4017ba in main source/algos/include/main.h:125
#2 0x7f2c9d046149 in __libc_start_call_main (/lib64/libc.so.6+0x28149) (BuildId: 7ea8d85df0e89b90c63ac7ed2b3578b2e7728756)
#3 0x7f2c9d04620a in __libc_start_main_impl (/lib64/libc.so.6+0x2820a) (BuildId: 7ea8d85df0e89b90c63ac7ed2b3578b2e7728756)
#4 0x401e84 in _start (/home/rurban/Software/smart/bin/asan/tsw+0x401e84) (BuildId: 1ae7608d7493a33edb8c4e9881f69c7ba7bee3b0)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV source/algos/tsw.c:72 in search
==3586985==ABORTING
AddressSanitizer:DEADLYSIGNAL
=================================================================
==3587157==ERROR: AddressSanitizer: SEGV on unknown address 0x7f101455efff (pc 0x000000403dbf bp 0x7ffeaf8d81b0 sp 0x7ffeaf856cf0 T0)
==3587157==The signal is caused by a READ memory access.
#0 0x403dbf in search source/algos/tsw.c:72
#1 0x4017ba in main source/algos/include/main.h:125
#2 0x7f1017446149 in __libc_start_call_main (/lib64/libc.so.6+0x28149) (BuildId: 7ea8d85df0e89b90c63ac7ed2b3578b2e7728756)
#3 0x7f101744620a in __libc_start_main_impl (/lib64/libc.so.6+0x2820a) (BuildId: 7ea8d85df0e89b90c63ac7ed2b3578b2e7728756)
#4 0x401e84 in _start (/home/rurban/Software/smart/bin/asan/tsw+0x401e84) (BuildId: 1ae7608d7493a33edb8c4e9881f69c7ba7bee3b0)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV source/algos/tsw.c:72 in search
==3587157==ABORTING
AddressSanitizer:DEADLYSIGNAL
=================================================================
==3587228==ERROR: AddressSanitizer: SEGV on unknown address 0x7f0d11d5efff (pc 0x000000403dbf bp 0x7ffee9699e10 sp 0x7ffee9618950 T0)
==3587228==The signal is caused by a READ memory access.
#0 0x403dbf in search source/algos/tsw.c:72
#1 0x4017ba in main source/algos/include/main.h:125
#2 0x7f0d14c46149 in __libc_start_call_main (/lib64/libc.so.6+0x28149) (BuildId: 7ea8d85df0e89b90c63ac7ed2b3578b2e7728756)
#3 0x7f0d14c4620a in __libc_start_main_impl (/lib64/libc.so.6+0x2820a) (BuildId: 7ea8d85df0e89b90c63ac7ed2b3578b2e7728756)
#4 0x401e84 in _start (/home/rurban/Software/smart/bin/asan/tsw+0x401e84) (BuildId: 1ae7608d7493a33edb8c4e9881f69c7ba7bee3b0)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV source/algos/tsw.c:72 in search
==3587228==ABORTING
graspm
raspm
AddressSanitizer:DEADLYSIGNAL
=================================================================
==3587252==ERROR: AddressSanitizer: SEGV on unknown address 0x7f1bfacfefff (pc 0x000000403927 bp 0xffffffffffffffff sp 0x7ffd58dd27a0 T0)
Expand Down
2 changes: 1 addition & 1 deletion source/algorithms.h
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ const struct algo ALGOS[] = {
// L. Vespa and N. Weng, SWM: Simplified Wu-Manber for GPU-based Deep Packet
// Inspection, in Proceedings of the 2012 International Conference on
// Security and Management, 2012.
[_TSW] = {_TSW, OK, "tsw", "Two-Sliding-Window", 0, 0},
[_TSW] = {_TSW, OK, "tsw", "Two-Sliding-Window", 0, 0}, // m < n - 3
[_BMH2] = {_BMH2, 0, "bmh2", "Boyer-Moore-Horspool with q-grams (BMH2)", 2, MISSING},
[_BMH4] = {_BMH4, 0, "bmh4", "Boyer-Moore-Horspool with q-grams (BMH4)", 4, MISSING},
[_GRASPm] = {_GRASPm, OK, "graspm", "Genomic Rapid Algorithm for String Pattern-match", 0, 0},
Expand Down
15 changes: 13 additions & 2 deletions source/algos/tsw.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,14 @@
* in A. Hudaib and R. Al-Khalid and D. Suleiman and M. Itriq and A. Al-Anani.
* A Fast Pattern Matching Algorithm with Two Sliding Windows (TSW). J. Comput.
* Sci., vol.4, n.5, pp.393--401, (2008).
*
* Undocumented constraints: m < n - 3
*/

#include <assert.h>
#include "include/define.h"
#include "include/main.h"
#include "include/search_small.h"

void preBrBc(unsigned char *x, int m, int brBc[SIGMA][SIGMA]) {
int a, b, i;
Expand All @@ -43,11 +47,14 @@ int search(unsigned char *x, int m, unsigned char *y, int n) {
int i, a, b;
int count;
unsigned char x1[XSIZE];
for (i = m - 1, j = 0; i >= 0; i--, j++)
x1[j] = x[i];
if (m >= n - 3)
return search_small(x, m, y, n);
assert(m < n - 2);

/* Preprocessing */
BEGIN_PREPROCESSING
for (i = m - 1, j = 0; i >= 0; i--, j++)
x1[j] = x[i];
preBrBc(x, m, brBc_left);
preBrBc(x1, m, brBc_right);
count = 0;
Expand All @@ -68,6 +75,10 @@ int search(unsigned char *x, int m, unsigned char *y, int n) {
if (b >= m && j < a)
OUTPUT(a);

assert(j + m + 1 < n);
assert(a - 1 < n);
//if (a - 2 < 0) fprintf(stderr, "%s %d %x %d\n", x, m, y, n);
assert(a - 2 >= 0);
j += brBc_left[y[j + m]][y[j + m + 1]];
a -= brBc_right[y[a - 1]][y[a - 2]];
}
Expand Down

0 comments on commit 46005a6

Please sign in to comment.