darvid/python-hyperscan

Strange "hyperscan.InvalidError: error code -1"

jerzyorlowskimim opened this issue · 6 comments

I got strange hyperscan.InvalidError: error code -1 while using scan() function.
There nothing else in the stack trace and I cannot find any clue in google

It looks like some stupid simple error. Any Idea what it might be?
Is it possible to make the error message more elaborate?

I am using hyperscan version 0.4.0

Steps:

f = open("local/keyword_features_hyperscan_databases/TestKeyword1", 'rb')
hdb = hyperscan.loadb(f.read())
hdb.scan("aaa")

gives:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a bytes-like object is required

TestKeyword1 is a simple test database with a few words that is being compiled a moment before during tests.

try hdb.scan(b"aaa")

hdb.scan(b"aaa") didn't help. But switching back to hyperscan version 0.3.3 solved the issue.

going to improve type annotations and tests to cover this, as well as docs, but basically the issue is the returned Database doesn't include a scratch. try this:

hdb.scratch = hyperscan.Scratch(db)
hdb.scan(b"aaa")

also you'll have to keep track of the mode of the database that the serialized representation was created with. i.e. if it was created with stream mode, you'll have to use the stream context manager. currently db.mode isn't set on the returned db object, which I'll try to fix.

@darvid Is there any reason that the scratch can't (or shouldn't) be initialized automatically if it's missing? At minimum, it would obviously help to have a more informative error :)

(Also, it looks like there's a small typo in your code example above where the parameter to the Scratch constructor should be hdb instead of db.)